Download presentation
Presentation is loading. Please wait.
Published byFrederick Evans Modified over 8 years ago
1
Remote Pair Programming Agile India 2014 Johannes Brodwall Exilesoft Chief scientist @jhannes Guest starring: Niruka Ruhunage
2
How can a distributed team still collaborate closely?
3
How can a team collaborate well?
4
This talk is for you if you…
5
You work in a team, but...
6
Your team doesn ’ t feel like a team
7
Your distributed team doesn ’ t feel like a team
8
Who is using pair programming as their preferred approach?
9
After this talk
10
A receipe to have more fun with your team
11
But first
12
But first – a competition:
13
Competition: Find the blue sentence
14
1.What is a super team 2.Building a super team with pairing 3.Getting the benefits 4.Summary
15
Part I
16
What is a super team?
17
Sharing the burden
21
Rabbit hole!
22
Shared context
23
Sharing experience
24
Whops! No!
26
Working baseline
28
“That’s strange…”
29
“Eureka!”
30
20 minutes fix (where 10 was waiting)
31
Problem solved
32
The sad team
33
Planning Johannes Backend dev “Scrum” “Master” Johannes: You’ll create CRUD SOAP service for projects with applications Okay
34
Planning Johannes Backend dev “Scrum” “Master” How long will it take? Um…
35
Planning Backend dev 2 Johannes Backend dev “Scrum” “Master” It’s pretty easy with Hibernate Okay, 8 hours for each of Create… then !
36
Stand-up Designer Frontend dev Database dev Today, I will work on Create Project Johannes Backend dev Scrum master
37
Stand-up Designer Frontend dev Database dev No impediments Johannes Backend dev Scrum master
38
Behold – the uber coder
39
Exception! 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(DefaultSaveOrUpdateEvent Listener.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)
40
ExceptionGoogle Stack overflow TweakDeployPoke
41
ExceptionGoogle Stack overflow TweakDeployPoke
42
ExceptionGoogle Stack overflow TweakDeployPoke
43
ExceptionGoogle Stack overflow TweakDeployPoke
44
Stand-up Designer Frontend dev Database dev Yesterday, I worked on Create Project Johannes Backend dev Scrum master
45
Stand-up Today, I will hopefully fix the exception and also do Delete Project Johannes Scrum master Designer Frontend dev Database dev Backend dev
46
Stand-up No impediments Johannes Scrum master Designer Frontend dev Database dev Backend dev
47
Stand-up Johannes Scrum master Designer Frontend dev Database dev Backend dev How could they help anway
49
Behold – the uber coder
51
Stand-up Johannes Scrum master Yesterday, I finally finished Delete after 3 days of «coding» Designer Frontend dev Database dev Backend dev I didn’t need the Delete service
52
Stand-up Johannes Scrum master Designer Frontend dev Database dev Backend dev I didn’t need the Delete service Yesterday, I finally finished Delete after 3 days of «coding»
53
STOP
54
Imagine you should carry 10 wooden beams Each is 3 meters and 30 kg
55
The fun team
56
Stand-up I’m ready for a new task. What’s on the board.. Johannes Scrum master
57
Stand-up «Let’s users administrate their projects» Johannes Scrum master
58
Stand-up I haven’t done any Hibernate tasks before. Who can I pair with? Johannes Scrum master I can work together with you
60
Exception! 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(DefaultSaveOrUpdateEvent Listener.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)
61
That link doesn’t really seem relevant. Are we getting anywhere? Time to ask for help?
62
I think Dileepa has worked on this sort of thing before
63
Dileepa Yeah, just look at the Person HasMany Roles mapping
64
That’s it! High five!
65
The difference
66
Everyone works everywhere Knowledge is disseminated You’re never alone
67
Part II
68
Superfying with Pair programming
69
Pair programming styles
70
Debate club “No, this variable should be called fooNumber, not fooNum”, “But it’s a common abbreviation”
71
Dedicated driver “I’ll write the parser” “I’ll design the algorithm”
72
Driver-navigator “I don’t know how to solve this, so I’ll sit at the keyboard”
73
Ping-pong
74
Ingredient #1: Pair programming
77
Ingredient #2: Test driven development
78
Failing test Write code Failing test Write code Failing test
79
Ingredient #3: Refactoring
80
Failing test Write code Failing test Write code Failing test Refactor code and tests
81
Put together
82
Failing test Write code Failing test Write code Failing test
83
Write code Failing test Write code Failing test Refactor code and tests
84
Failing test Write code Failing test Write code Failing test Refactor code and tests
85
Demonstration (Guest starring Niruka Ruhunage)
86
Kata: Number to text
87
8192 => eight thousand one hundred and ninety two 125,017 => one hundred and twenty five thousand and seventeen
88
What does it feel like?
89
Part III
90
From here to there
91
Make sharing into a goal
92
Dileepa Johannes Chintaka Thomas Sergey Arunas
93
Dileepa Johannes Chintaka Thomas Sergey Arunas
94
ArunasJohannesDileepaChinthakaSergeyThomas Add new company ✓✓✓✓✓ Display contacts on map ✓✓✓ Filter contacts in list ✓✓ Authenticate user by company ✓✓✓✓ Store password securely ✓✓ Usernames with Norwegian letters are rejected ✓
95
ArunasJohannesDileepaChinthakaSergeyThomas Add new company ✓✓✓✓✓ Display contacts on map ✓✓✓ Filter contacts in list ✓✓ Authenticate user by company ✓✓✓✓ Store password securely ✓✓ Usernames with Norwegian letters are rejected ✓
96
ArunasJohannesDileepaChinthakaSergeyThomas Add new company ✓✓✓✓✓ Display contacts on map ✓✓✓ Filter contacts in list ✓✓ Authenticate user by company ✓✓✓✓ Store password securely ✓✓ Usernames with Norwegian letters are rejected ✓
97
Overcoming obstacles
98
JIRA
99
With a true team, no member owns more than their current task
100
TODODOINGDONE WAITING AWAY
101
You will get more done (But not in the first or second sprint)
102
Distance
103
Skype (or any voice sharing) GoToMeeting (or flexible screen sharing) Dropbox (or any file sharing)
104
Skill and tact
105
Experiment with switching patterns Try out ping-pong “Could we try it this way first?”
106
Building your skills
107
Practice with kata
108
Failing test Write code Failing test Write code Failing test Refactor code and tests
109
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
110
Fun events
112
Expect exhaustion
113
Try an experiment
114
Who is already pairing?
115
Just do it
116
Ask for help Don’t wait for Perfect tool Perfect oppunity
117
Conclusion
118
What
119
Two people at one codebase No member owns a task beyond the day Team rotates pairing
120
Why
121
“Rockstar programmer” model doesn’t scale
122
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)
123
How
124
Ask for help – don’t work alone Try ping pong programming for two hours Be open, share and listen
125
Competition: What was the blue sentence?
126
A team creates together what no member could do alone
127
You can start as soon as you get back to work
128
jbr@exilesoft.com nru@exilesoft.com http://JohannesBrodwall.com http://exilesoft.com http://twitter.com/jhannes Thank you
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.