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