Remote pair programming (BuildStuffLt)

1,006 views
868 views

Published on

Using pair programming can transform your team from a sad team to a fun team. It even works in a remote context.

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,006
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Remote pair programming (BuildStuffLt)

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

×