Presentation is loading. Please wait.

Presentation is loading. Please wait.

Remote Pair Programming Agile India 2014 Johannes Brodwall Exilesoft Chief Guest starring: Niruka Ruhunage.

Similar presentations


Presentation on theme: "Remote Pair Programming Agile India 2014 Johannes Brodwall Exilesoft Chief Guest starring: Niruka Ruhunage."— Presentation transcript:

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

18

19

20

21 Rabbit hole!

22 Shared context

23 Sharing experience

24 Whops! No!

25

26 Working baseline

27

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

48

49 Behold – the uber coder

50

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

59

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

75

76

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

111

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


Download ppt "Remote Pair Programming Agile India 2014 Johannes Brodwall Exilesoft Chief Guest starring: Niruka Ruhunage."

Similar presentations


Ads by Google