131
Remote Pair Programming Agile India 2014 Johannes Brodwall Exilesoft Chief scientist @jhannes Guest starring: Niruka Ruhunage

Remote Pair Programming (Agile India)

Embed Size (px)

DESCRIPTION

My talk on Superfying your team with (remote) pair programming at #AgileIndia2014 with Niruka Ruhunage

Citation preview

Page 1: Remote Pair Programming (Agile India)

Remote Pair Programming

Agile India 2014Johannes Brodwall

Exilesoft Chief scientist

@jhannes

Guest starring: Niruka Ruhunage

Page 2: Remote Pair Programming (Agile India)

How can a distributed team

still collaborateclosely?

Page 3: Remote Pair Programming (Agile India)

How can a team collaborate well?

Page 4: Remote Pair Programming (Agile India)

But first

Page 5: Remote Pair Programming (Agile India)

But first – a competition:

Page 6: Remote Pair Programming (Agile India)

Competition:Find the blue sentence

Page 7: Remote Pair Programming (Agile India)

This talk is a talkfor you if you…

Page 8: Remote Pair Programming (Agile India)

You work in a team, but...

Page 9: Remote Pair Programming (Agile India)

Your team doesn’t feel like a team

Page 10: Remote Pair Programming (Agile India)

Your distributed team doesn’t feel like a team

Page 11: Remote Pair Programming (Agile India)

After this talk you will…

Page 12: Remote Pair Programming (Agile India)

Be motivated to start using pair programming, possibly remotely

Page 13: Remote Pair Programming (Agile India)

Have seen remote pair programming

Page 14: Remote Pair Programming (Agile India)

Know how to get started

Page 15: Remote Pair Programming (Agile India)

Who is using pair programming as their preferred approach?

Page 16: Remote Pair Programming (Agile India)

1. What is a super team2. Building a super team

with pairing3. Getting the benefits4. Summary

Page 17: Remote Pair Programming (Agile India)

Part I

Page 18: Remote Pair Programming (Agile India)

What is a super team?

Page 19: Remote Pair Programming (Agile India)

Sharing the burden

The fun remote team

Page 20: Remote Pair Programming (Agile India)
Page 21: Remote Pair Programming (Agile India)
Page 22: Remote Pair Programming (Agile India)
Page 23: Remote Pair Programming (Agile India)

Rabbit hole!

Page 24: Remote Pair Programming (Agile India)

Shared context

Page 25: Remote Pair Programming (Agile India)

Sharing experience

Page 26: Remote Pair Programming (Agile India)

Whops! No!

Page 27: Remote Pair Programming (Agile India)
Page 28: Remote Pair Programming (Agile India)

Working baseline

Page 29: Remote Pair Programming (Agile India)
Page 30: Remote Pair Programming (Agile India)

“That’s strange…”

Page 31: Remote Pair Programming (Agile India)

“Eureka!”

Page 32: Remote Pair Programming (Agile India)

20 minutes fix (where 10 was

waiting)

Page 33: Remote Pair Programming (Agile India)

Problem solved

Page 34: Remote Pair Programming (Agile India)

The sad team

Page 35: Remote Pair Programming (Agile India)

Planning

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

Johannes: You’ll create CRUD SOAP service for projects

with applications

Okay

Page 36: Remote Pair Programming (Agile India)

Planning

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

How long will it take?

Um…

Page 37: Remote Pair Programming (Agile India)

Planning

Backend dev 2

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

It’s pretty easy with Hibernate

Okay, 8 hours for each of Create…

then

!

Page 38: Remote Pair Programming (Agile India)

Stand-up

The sad team

Designer

Frontend devDatabase dev

Today, I will work on Create Project

JohannesJohannes

Backend dev

Scrum master

Page 39: Remote Pair Programming (Agile India)

Stand-up

The sad team

Designer

Frontend devDatabase dev

No impediments

JohannesJohannes

Backend dev

Scrum master

Page 40: Remote Pair Programming (Agile India)

Behold – the uber coder

The sad team

Page 41: Remote Pair Programming (Agile India)

Exception!

The sad team

org.hibernate.PropertyValueException: not-null property references a null or transient value: ....common.entities.Application._applicationsBackref org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313) org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

Page 42: Remote Pair Programming (Agile India)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 43: Remote Pair Programming (Agile India)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 44: Remote Pair Programming (Agile India)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 45: Remote Pair Programming (Agile India)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 46: Remote Pair Programming (Agile India)

Stand-up

The sad team

Designer

Frontend devDatabase dev

Yesterday, I worked on Create Project

JohannesJohannes

Backend dev

Scrum master

Page 47: Remote Pair Programming (Agile India)

Stand-up

The sad team

Today, I will hopefully fix the

exception and also do Delete Project

JohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

Page 48: Remote Pair Programming (Agile India)

Stand-up

The sad team

No impediments

JohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

Page 49: Remote Pair Programming (Agile India)

Stand-up

The sad teamJohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

How could they help anyway

Page 50: Remote Pair Programming (Agile India)

The sad team

Page 51: Remote Pair Programming (Agile India)

Behold – the uber coder

The sad team

Page 52: Remote Pair Programming (Agile India)

Exception!

The sad team

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [Person[id=22]] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:927) at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:844) at javax.servlet.http.HttpServlet.service(HttpServlet.java:653) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:152) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:119) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at filter.NoCacheFilter.doFilter(NoCacheFilter.java:102) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

Page 53: Remote Pair Programming (Agile India)

The sad team

Page 54: Remote Pair Programming (Agile India)

Stand-up

The sad teamJohannesJohannesScrum master

Yesterday, I finally finished Delete after 3 days of «coding»

Designer

Frontend devDatabase dev

Backend dev

I didn’t need the Delete service

Page 55: Remote Pair Programming (Agile India)

Stand-up

The sad teamJohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

I didn’t need the Delete service

Yesterday, I finally finished Delete after 3 days of «coding»

Page 56: Remote Pair Programming (Agile India)

The sad team

STOP

Page 57: Remote Pair Programming (Agile India)

Imagine you should carry 10 pieces of timber

Each is 3 meters and 30 kg

Page 58: Remote Pair Programming (Agile India)

The fun team

Page 59: Remote Pair Programming (Agile India)

Stand-up

The sad team

I’m ready for a new task.What’s on the board..

JohannesJohannes

Johannes

Scrum master

Page 60: Remote Pair Programming (Agile India)

Stand-up

The sad team

«Let’s users administrate their projects»

JohannesJohannes

Johannes

Scrum master

Page 61: Remote Pair Programming (Agile India)

Stand-up

The sad team

I haven’t done any Hibernate tasks before.

Who can I pair with?

JohannesJohannes

Johannes

Scrum master

I can work together with you

Page 62: Remote Pair Programming (Agile India)
Page 63: Remote Pair Programming (Agile India)

Exception!

The sad team

org.hibernate.PropertyValueException: not-null property references a null or transient value: ....common.entities.Application._applicationsBackref org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313) org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

Page 64: Remote Pair Programming (Agile India)

That link doesn’t really seem relevant.

Are we getting anywhere? Time to ask for help?

Page 65: Remote Pair Programming (Agile India)

I think Niluka has worked on this sort of thing before

Page 66: Remote Pair Programming (Agile India)

Niluka

Yeah, just look at the Person HasMany Roles

mapping

Page 67: Remote Pair Programming (Agile India)

That’s it!High five!

Page 68: Remote Pair Programming (Agile India)

The difference

Page 69: Remote Pair Programming (Agile India)

Everyone works everywhere

Knowledge is disseminated

You’re never alone

Page 70: Remote Pair Programming (Agile India)

Part II

Page 71: Remote Pair Programming (Agile India)

Superfyingwith

Pair programming

Page 72: Remote Pair Programming (Agile India)

Pair programming styles

Page 73: Remote Pair Programming (Agile India)

Debate club

“No, this variable should be called fooNumber, not fooNum”,

“But it’s a common abbreviation”

Page 74: Remote Pair Programming (Agile India)

Dedicated driver

“I’ll write the parser”

“I’ll design the algorithm”

Page 75: Remote Pair Programming (Agile India)

Driver-navigator

“I don’t know how to solve this, so I’ll sit at the keyboard”

Page 76: Remote Pair Programming (Agile India)

Ping-pong

Page 77: Remote Pair Programming (Agile India)

Ingredient #1:

Pair programming

Page 78: Remote Pair Programming (Agile India)
Page 79: Remote Pair Programming (Agile India)
Page 80: Remote Pair Programming (Agile India)

Ingredient #2:

Test driven development

Page 81: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Page 82: Remote Pair Programming (Agile India)

Ingredient #3:

Refactoring

Page 83: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 84: Remote Pair Programming (Agile India)

Put together

Page 85: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Page 86: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 87: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 88: Remote Pair Programming (Agile India)

Demonstration(Guest starring

Niruka Ruhunage)

Page 89: Remote Pair Programming (Agile India)

Kata: Number to text

Page 90: Remote Pair Programming (Agile India)

Kata: Number to text8192 => eight thousand one hundred and ninety two

125,017 =>

one hundred and twenty five thousand and seventeen

Page 91: Remote Pair Programming (Agile India)

What does it feel like?

Page 92: Remote Pair Programming (Agile India)

Part III

Page 93: Remote Pair Programming (Agile India)

From here to there

Page 94: Remote Pair Programming (Agile India)

Make sharing into a goal

Page 95: Remote Pair Programming (Agile India)

Dileepa

Johannes

Chintaka

Thomas

Sergey

Arunas

Page 96: Remote Pair Programming (Agile India)

Dileepa

Johannes

Chintaka

Thomas

Sergey

Arunas

Page 97: Remote Pair Programming (Agile India)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 98: Remote Pair Programming (Agile India)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 99: Remote Pair Programming (Agile India)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 100: Remote Pair Programming (Agile India)

Overcoming obstacles

Page 101: Remote Pair Programming (Agile India)

JIRA

Page 102: Remote Pair Programming (Agile India)

With a true team, no member owns more

than their current task

Page 103: Remote Pair Programming (Agile India)

TODO DOING DONE

WAITING

AWAY

Page 104: Remote Pair Programming (Agile India)

You will get more done

(But not in the first or second sprint)

Page 105: Remote Pair Programming (Agile India)

Distance

Page 106: Remote Pair Programming (Agile India)

• See each other• Share what we see• Share our work

Page 107: Remote Pair Programming (Agile India)

• Skype (or any voice sharing)• GoToMeeting (or flexible screen

sharing)• Dropbox (or any file sharing)

Page 108: Remote Pair Programming (Agile India)

Skill and tact

Page 109: Remote Pair Programming (Agile India)

• Experiment with switching patterns

• Try out ping-pong• “Could we try it this way

first?”

Page 110: Remote Pair Programming (Agile India)

Expect exhaustion

Page 111: Remote Pair Programming (Agile India)

When

Page 112: Remote Pair Programming (Agile India)

Bug fix

Page 113: Remote Pair Programming (Agile India)

Training event

Page 114: Remote Pair Programming (Agile India)
Page 115: Remote Pair Programming (Agile India)

Practice with kata

Page 116: Remote Pair Programming (Agile India)

1. Create a dropbox account

2. Share a folder with a friend

3. Put a coding project there

4. Create a screen share session

5. Call up your friend

Page 117: Remote Pair Programming (Agile India)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 118: Remote Pair Programming (Agile India)

Set a time per week

Page 119: Remote Pair Programming (Agile India)

Don’t wait to find the perfect tool

Page 120: Remote Pair Programming (Agile India)

Just do it

Page 121: Remote Pair Programming (Agile India)

Conclusion

Page 122: Remote Pair Programming (Agile India)

What

Page 123: Remote Pair Programming (Agile India)

• Two people at one codebase• No member owns a task

beyond the day• Team rotates pairing

Page 124: Remote Pair Programming (Agile India)

Why

Page 125: Remote Pair Programming (Agile India)

• Less Overproduction (unused functions in API)• Less Waiting (for the only person who knows X)• Less Motion (as everyone gets more skilled)• Fewer Defects (as two pair of eyes see better)• Less Over-processing (from double responsibility)• Less Inventory (as team works more focused)• Less Transportation (handoffs inside a story)

Page 126: Remote Pair Programming (Agile India)

How

Page 127: Remote Pair Programming (Agile India)

• Ask for help – don’t work alone

• Play with ping pong programming for two hours

• Be open, share and listen

Page 128: Remote Pair Programming (Agile India)

Competition:What was the blue sentence?

Page 129: Remote Pair Programming (Agile India)

A team creates together what no member could do

alone

Page 130: Remote Pair Programming (Agile India)

Next week: Commit to two hours of

working together