Extreme Collaborationx
Download
Report
Transcript Extreme Collaborationx
Extreme Collaboration
TODO: Good pairings:
Johannes Brodwall
Senior/senior: Ping-pong
Respectful senior/senior: Stategist/tactician
Exilesoft Chief scientist
Junior/junior: Timer
Junior/senior: Driver/trainer – optimize
@jhannes
learning
Junior/senior: Co-pilot/pilot – optimize
progress
team
collaborate well?
How can a
This talk is for you if
you…
You work in a team, but...
Your team doesn’t
feel like a team
XP:
Collective code ownership
Pair programming
Whole team
Sustainable pace
Defining pair
programming
Two people working on the
same files
Who has tried pair
programming?
Positive experiences
Negative experiences
Why no more?
After this talk
Commit to try
1. A sad team
2. A super team
3. Getting to great
Part I
The sad team
Planning
Johannes: You’ll
create CRUD SOAP
service for projects
with applications
Okay
Backend dev
“Scrum”
Johannes
“Master”
Planning
How long will it take?
Um…
Backend dev
“Scrum”
Johannes
“Master”
Planning
Backend dev
2
Backend dev
“Scrum”
Johannes
“Master”
It’s pretty
easy with
Hibernate
Okay, 8 hours for
each of Create…
then
!
Stand-up
Today, I will work on
Create Project
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Stand-up
No impediments
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Behold – the uber
coder
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)
Exception
Poke
Google
Deploy
Stack
overflow
Tweak
Exception
Poke
Google
Deploy
Stack
overflow
Tweak
Exception
Poke
Google
Deploy
Stack
overflow
Tweak
Exception
Poke
Google
Deploy
Stack
overflow
Tweak
Stand-up
Yesterday, I worked
on Create Project
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Stand-up
Today, I will
hopefully fix the
exception and also
do Delete Project
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Stand-up
No impediments
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Stand-up
How could
they help
anway
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Behold – the uber
coder
Stand-up
Yesterday, I finally
finished Delete after
3 days of «coding»
I didn’t need the
Delete service
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
Stand-up
Yesterday, I finally
finished Delete after
3 days of «coding»
I didn’t need the
Delete service
Backend dev
Database dev
Scrum
Johannes
master
Designer
Frontend dev
STOP
Imagine you should
carry 10 wooden beams
Each is 3 meters and 30
kg
Part II
The fun team
Stand-up
I’m ready for a new task.
What’s on the board..
Johannes
Johannes
Stand-up
«Basic submit leave
request»
Johannes
Johannes
Stand-up
Johannes
Hiran
We haven’t worked
together yet this week
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)
That link doesn’t really
seem relevant.
Are we getting anywhere?
Time to ask for help?
I think Manoj has worked
on this sort of thing before
Yeah, just look at the
Person mapping file
Manoj
That’s it!
High five!
The difference
Everyone works
everywhere
Everyone works
everywhere
You get help with tech you don’t
know
Everyone works
everywhere
You’re not blocked
Everyone works
everywhere
Integration becomes easier
Knowledge spreads
You don’t get stuck
You don’t get stuck
Wrong path is stopped by pair
You don’t get stuck
Silly mistakes spotted by pair
You don’t get stuck
Silly mistakes spotted by pair
Your job as a pair
“Are we focusing
on the goal”
“Did you notice
…?”
“Is there a better
way?”
“Are we working as
the team agreed?”
Part II
Superfying
with
Pair programming
Make sharing into a
goal
Johannes
Thomas
Chintaka
Arunas
Dileepa
Sergey
Johannes
Thomas
Chintaka
Arunas
Dileepa
Sergey
Johannes
Thomas
Chintaka
Arunas
Dileepa
Sergey
Arunas
Add new company
✓
Johannes
✓
Dileepa
✓
Chinthaka
✓
Display contacts on
map
✓
✓
Filter contacts in list
✓
✓
Authenticate user by
company
✓
Store password
securely
✓
Usernames with
Norwegian letters are
rejected
✓
Sergey
Thomas
✓
✓
✓
✓
✓
✓
Arunas
Add new company
✓
Johannes
✓
Dileepa
Chinthaka
✓
✓
Display contacts on
map
✓
✓
Filter contacts in list
✓
✓
Authenticate user by
company
✓
Store password
securely
✓
Usernames with
Norwegian letters are
rejected
✓
Sergey
Thomas
✓
✓
✓
✓
✓
✓
Arunas
Add new company
✓
Johannes
✓
Dileepa
✓
Chinthaka
✓
Display contacts on
map
✓
✓
Filter contacts in list
✓
✓
Authenticate user by
company
✓
Store password
securely
✓
Usernames with
Norwegian letters are
rejected
✓
Sergey
Thomas
✓
✓
✓
✓
✓
✓
Task assignment
TODO
Hiran
DOING
Johannes
Johannes
Johannes
Hiran
DONE
Hiran
Hiran
Johannes
Sankalpa
Sankalpa
Sankalpa
Waruni
Waruni
Waruni
Sankalpa
Waruni
Milina
Waruni
Sankalpa
Milina
Milina
Milina
Hiran
Hiran
TODO
DOING
WAITING
AWAY
DONE
TODO
DOING
WAITING
AWAY
DONE
TODO
DOING
WAITING
AWAY
DONE
TODO
DOING
WAITING
AWAY
DONE
TODO
DOING
WAITING
AWAY
DONE
TODO
DOING
WAITING
AWAY
DONE
You will get more done
(But not next sprint)
PS: It’s not only for
developers
Getting there
Practice with kata
Failing test
Write code
Refactor code
and tests
Failing test
Write code
Refactor code
and tests
Failing test
Ping-pong
Fun events
Try an experiment
Try an experiment
Pair 2 hours per day for a
week
Expect exhaustion
Expect exhaustion
For the first month
Conclusion
What
•
•
•
Two people at one codebase
No member owns a task
beyond the day
Team rotates pairing
Why
•
Working solo limits your
vision of the code base and
the problem
•
•
•
•
•
•
•
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)
How
•
•
•
Create a pair programming
circle
Practice pairing
Commit to pairing 2 hours
per day for a week
Do you accept the
challenge?
Pair for 2 hours per day for a week
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?”
Tools and tricks
• Pair programming circle
• Knowledge matrix
• Floating assignments
• Expect exhaustion
Thank you
[email protected]
http://JohannesBrodwall.com
http://exilesoft.com
http://twitter.com/jhannes
I want your feedback:
How likely are you to recommend this session to a coworker on a scale from 1 (lowest) to 10 (highest)?
Optional: What's the reason for your number?