Download presentation
Presentation is loading. Please wait.
Published byDion Dexter Modified over 10 years ago
1
Extreme Collaboration Johannes Brodwall Exilesoft Chief scientist @jhannes TODO: Good pairings: Senior/senior: Ping-pong Respectful senior/senior: Stategist/tactician Junior/junior: Timer Junior/senior: Driver/trainer – optimize learning Junior/senior: Co-pilot/pilot – optimize progress
2
How can a team collaborate well?
3
This talk is for you if you…
4
You work in a team, but...
5
Your team doesn ’ t feel like a team
6
XP: Collective code ownership Pair programming Whole team Sustainable pace
7
Defining pair programming
8
Two people working on the same files
9
Who has tried pair programming?
10
Positive experiences
11
Negative experiences
12
Why no more?
13
After this talk
14
Commit to try
15
1.A sad team 2.A super team 3.Getting to great
16
Part I
17
The sad team
18
Planning Johannes Backend dev “Scrum” “Master” Johannes: You’ll create CRUD SOAP service for projects with applications Okay
19
Planning Johannes Backend dev “Scrum” “Master” How long will it take? Um…
20
Planning Backend dev 2 Johannes Backend dev “Scrum” “Master” It’s pretty easy with Hibernate Okay, 8 hours for each of Create… then !
21
Stand-up Designer Frontend dev Database dev Today, I will work on Create Project Johannes Backend dev Scrum master
22
Stand-up Designer Frontend dev Database dev No impediments Johannes Backend dev Scrum master
23
Behold – the uber coder
24
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)
25
ExceptionGoogle Stack overflow TweakDeployPoke
26
ExceptionGoogle Stack overflow TweakDeployPoke
27
ExceptionGoogle Stack overflow TweakDeployPoke
28
ExceptionGoogle Stack overflow TweakDeployPoke
29
Stand-up Designer Frontend dev Database dev Yesterday, I worked on Create Project Johannes Backend dev Scrum master
30
Stand-up Today, I will hopefully fix the exception and also do Delete Project Johannes Scrum master Designer Frontend dev Database dev Backend dev
31
Stand-up No impediments Johannes Scrum master Designer Frontend dev Database dev Backend dev
32
Stand-up Johannes Scrum master Designer Frontend dev Database dev Backend dev How could they help anway
34
Behold – the uber coder
36
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
37
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»
38
STOP
39
Imagine you should carry 10 wooden beams Each is 3 meters and 30 kg
40
Part II
41
The fun team
42
Stand-up I’m ready for a new task. What’s on the board.. Johannes
43
Stand-up «Basic submit leave request» Johannes
44
Stand-up Hiran Johannes We haven’t worked together yet this week
46
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)
47
That link doesn’t really seem relevant. Are we getting anywhere? Time to ask for help?
48
I think Manoj has worked on this sort of thing before
49
Manoj Yeah, just look at the Person mapping file
50
That’s it! High five!
51
The difference
52
Everyone works everywhere
53
You get help with tech you don’t know
54
Everyone works everywhere You’re not blocked
55
Everyone works everywhere Integration becomes easier
56
Knowledge spreads
57
You don’t get stuck
58
Wrong path is stopped by pair
59
You don’t get stuck Silly mistakes spotted by pair
60
You don’t get stuck Silly mistakes spotted by pair
61
Your job as a pair
62
“Are we focusing on the goal”
63
“Did you notice …?”
64
“Is there a better way?”
65
“Are we working as the team agreed?”
66
Part II
67
Superfying with Pair programming
68
Make sharing into a goal
69
Dileepa Johannes Chintaka Thomas Sergey Arunas Who is acting worst?
70
Dileepa Johannes Chintaka Sergey Arunas Thomas Who is acting best?
71
Dileepa Johannes Chintaka Thomas Sergey Arunas
72
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 ✓ Which task is suspicious?
73
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 ✓ Which team member is helping most?
74
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 ✓
75
Task assignment
76
TODODOINGDONE Hiran Johannes Sankalpa Waruni Milina Johannes Hiran Waruni Johannes Waruni Milina Sankalpa Johannes Waruni Milina Sankalpa Hiran Milina Sankalpa
77
TODODOINGDONE WAITING AWAY
78
TODODOINGDONE WAITING AWAY
79
TODODOINGDONE WAITING AWAY
80
TODODOINGDONE WAITING AWAY
81
TODODOINGDONE WAITING AWAY
82
TODODOINGDONE WAITING AWAY One avatar per brain One assigned task per brain Never mind JIRA
83
You will get more done (But not next sprint)
84
PS: It’s not only for developers
85
Getting there
86
Practice with kata
87
Failing test Write code Failing test Write code Failing test Refactor code and tests
88
Ping-pong
89
Fun events
91
Try an experiment
92
Pair 2 hours per day for a week
93
Expect exhaustion
94
For the first month
95
Conclusion
96
What
97
Two people at one codebase No member owns a task beyond the day Team rotates pairing
98
Why
99
Working solo limits your vision of the code base and the problem
100
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)
101
How
102
Create a pair programming circle Practice pairing Commit to pairing 2 hours per day for a week
103
Do you accept the challenge? Pair for 2 hours per day for a week
104
Your job as a pair “Are we focusing on the goal?” “Did you notice …?” “Is there a better way?” “Are we working in the way the team agreed?”
105
Tools and tricks Pair programming circle Knowledge matrix Floating assignments Expect exhaustion
106
jbr@exilesoft.com http://JohannesBrodwall.com http://exilesoft.com http://twitter.com/jhannes Thank you
107
I want your feedback: How likely are you to recommend this session to a co- worker on a scale from 1 (lowest) to 10 (highest)? Optional: What's the reason for your number?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.