+ All Categories
Home > Technology > Remote pair programming (BuildStuffLt)

Remote pair programming (BuildStuffLt)

Date post: 11-May-2015
Category:
Upload: johannes-brodwall
View: 638 times
Download: 1 times
Share this document with a friend
Description:
Using pair programming can transform your team from a sad team to a fun team. It even works in a remote context.
Popular Tags:
122
Remote Pair Programming BuildStuff.lt Johannes Brodwall Exilesoft Chief scientist @jhannes Guest starring: Dileepa Jayasuriya
Transcript
Page 1: Remote pair programming (BuildStuffLt)

Remote Pair Programming

BuildStuff.ltJohannes Brodwall

Exilesoft Chief scientist

@jhannesGuest starring:

Dileepa Jayasuriya

Page 2: Remote pair programming (BuildStuffLt)

How can a distributed team

still collaborateclosely?

Page 3: Remote pair programming (BuildStuffLt)

How can a team collaborate well?

Page 4: Remote pair programming (BuildStuffLt)

This talk is for you if you…

Page 5: Remote pair programming (BuildStuffLt)

You work in a team, but...

Page 6: Remote pair programming (BuildStuffLt)

Your team doesn’t feel like a team

Page 7: Remote pair programming (BuildStuffLt)

Your distributed team doesn’t feel like a team

Page 8: Remote pair programming (BuildStuffLt)

After this talk

Page 9: Remote pair programming (BuildStuffLt)

Three things to become a super productive team

Page 10: Remote pair programming (BuildStuffLt)

But first

Page 11: Remote pair programming (BuildStuffLt)

But first – a competition:

Page 12: Remote pair programming (BuildStuffLt)

Competition:Find the blue sentence

Page 13: Remote pair programming (BuildStuffLt)

1. What is a super team2. Building a super team

with pairing3. Getting the benefits4. Summary

Page 14: Remote pair programming (BuildStuffLt)

Part I

Page 15: Remote pair programming (BuildStuffLt)

What is a super team?

Page 16: Remote pair programming (BuildStuffLt)

Sharing the burden

The fun remote team

Page 17: Remote pair programming (BuildStuffLt)
Page 18: Remote pair programming (BuildStuffLt)
Page 19: Remote pair programming (BuildStuffLt)
Page 20: Remote pair programming (BuildStuffLt)

Rabbit hole!

Page 21: Remote pair programming (BuildStuffLt)

Shared context

Page 22: Remote pair programming (BuildStuffLt)

Sharing experience

Page 23: Remote pair programming (BuildStuffLt)

Whops! No!

Page 24: Remote pair programming (BuildStuffLt)
Page 25: Remote pair programming (BuildStuffLt)

Working baseline

Page 26: Remote pair programming (BuildStuffLt)
Page 27: Remote pair programming (BuildStuffLt)

“That’s strange…”

Page 28: Remote pair programming (BuildStuffLt)

“Eureka!”

Page 29: Remote pair programming (BuildStuffLt)

20 minutes fix (where 10 was

waiting)

Page 30: Remote pair programming (BuildStuffLt)

Problem solved

Page 31: Remote pair programming (BuildStuffLt)

The sad team

Page 32: Remote pair programming (BuildStuffLt)

Planning

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

Johannes: You’ll create CRUD SOAP service for projects

with applications

Okay

Page 33: Remote pair programming (BuildStuffLt)

Planning

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

How long will it take?

Um…

Page 34: Remote pair programming (BuildStuffLt)

Planning

Backend dev 2

The sad team

JohannesJohannes

Backend dev

“Scrum” “Master”

It’s pretty easy with Hibernate

Okay, 8 hours for each of Create…

then

!

Page 35: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

Designer

Frontend devDatabase dev

Today, I will work on Create Project

JohannesJohannes

Backend dev

Scrum master

Page 36: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

Designer

Frontend devDatabase dev

No impediments

JohannesJohannes

Backend dev

Scrum master

Page 37: Remote pair programming (BuildStuffLt)

Behold – the uber coder

The sad team

Page 38: Remote pair programming (BuildStuffLt)

Exception!

The sad team

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(DefaultSaveOrUpdateEventListener.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)

Page 39: Remote pair programming (BuildStuffLt)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 40: Remote pair programming (BuildStuffLt)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 41: Remote pair programming (BuildStuffLt)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 42: Remote pair programming (BuildStuffLt)

The sad team

Exception

Google

Stack overflow

Tweak

Deploy

Poke

Page 43: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

Designer

Frontend devDatabase dev

Yesterday, I worked on Create Project

JohannesJohannes

Backend dev

Scrum master

Page 44: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

Today, I will hopefully fix the

exception and also do Delete Project

JohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

Page 45: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

No impediments

JohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

Page 46: Remote pair programming (BuildStuffLt)

Stand-up

The sad teamJohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

How could they help anway

Page 47: Remote pair programming (BuildStuffLt)

The sad team

Page 48: Remote pair programming (BuildStuffLt)

Behold – the uber coder

The sad team

Page 49: Remote pair programming (BuildStuffLt)

The sad team

Page 50: Remote pair programming (BuildStuffLt)

Stand-up

The sad teamJohannesJohannesScrum master

Yesterday, I finally finished Delete after 3 days of «coding»

Designer

Frontend devDatabase dev

Backend dev

I didn’t need the Delete service

Page 51: Remote pair programming (BuildStuffLt)

Stand-up

The sad teamJohannesJohannesScrum master

Designer

Frontend devDatabase dev

Backend dev

I didn’t need the Delete service

Yesterday, I finally finished Delete after 3 days of «coding»

Page 52: Remote pair programming (BuildStuffLt)

The sad team

STOP

Page 53: Remote pair programming (BuildStuffLt)

Imagine you should carry 10 wooden beams

Each is 3 meters and 30 kg

Page 54: Remote pair programming (BuildStuffLt)

The fun team

Page 55: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

I’m ready for a new task.What’s on the board..

JohannesJohannes

Johannes

Scrum master

Page 56: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

«Let’s users administrate their projects»

JohannesJohannes

Johannes

Scrum master

Page 57: Remote pair programming (BuildStuffLt)

Stand-up

The sad team

I haven’t done any Hibernate tasks before.

Who can I pair with?

JohannesJohannes

Johannes

Scrum master

I can work together with you

Page 58: Remote pair programming (BuildStuffLt)
Page 59: Remote pair programming (BuildStuffLt)

Exception!

The sad team

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(DefaultSaveOrUpdateEventListener.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)

Page 60: Remote pair programming (BuildStuffLt)

That link doesn’t really seem relevant. Are we getting anywhere?

Time to ask for help?

Page 61: Remote pair programming (BuildStuffLt)

I think Dileepa has worked on this sort of

thing before

Page 62: Remote pair programming (BuildStuffLt)

Dileepa

Yeah, just look at the Person HasMany Roles

mapping

Page 63: Remote pair programming (BuildStuffLt)

That’s it!High five!

Page 64: Remote pair programming (BuildStuffLt)

The difference

Page 65: Remote pair programming (BuildStuffLt)

Everyone works everywhere

Knowledge is disseminated

You’re never alone

Page 66: Remote pair programming (BuildStuffLt)

Part II

Page 67: Remote pair programming (BuildStuffLt)

Superfyingwith

Pair programming

Page 68: Remote pair programming (BuildStuffLt)

Pair programming styles

Page 69: Remote pair programming (BuildStuffLt)

Debate club

“No, this variable should be called fooNumber, not fooNum”,

“But it’s a common abbreviation”

Page 70: Remote pair programming (BuildStuffLt)

Dedicated driver

“I’ll write the parser”

“I’ll design the algorithm”

Page 71: Remote pair programming (BuildStuffLt)

Driver-navigator

“I don’t know how to solve this, so I’ll sit at the keyboard”

Page 72: Remote pair programming (BuildStuffLt)

Ping-pong

Page 73: Remote pair programming (BuildStuffLt)

Ingredient #1:

Pair programming

Page 74: Remote pair programming (BuildStuffLt)
Page 75: Remote pair programming (BuildStuffLt)
Page 76: Remote pair programming (BuildStuffLt)

Ingredient #2:

Test driven development

Page 77: Remote pair programming (BuildStuffLt)

Failing test

Write code

Failing test

Write code

Failing test

Page 78: Remote pair programming (BuildStuffLt)

Ingredient #3:

Refactoring

Page 79: Remote pair programming (BuildStuffLt)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 80: Remote pair programming (BuildStuffLt)

Put together

Page 81: Remote pair programming (BuildStuffLt)

Failing test

Write code

Failing test

Write code

Failing test

Page 82: Remote pair programming (BuildStuffLt)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 83: Remote pair programming (BuildStuffLt)

Failing test

Write code

Failing test

Write code

Failing test

Refactor code and tests

Refactor code and tests

Page 84: Remote pair programming (BuildStuffLt)

Demonstration(Guest starring

Dileepa Jayasuriya)

Page 85: Remote pair programming (BuildStuffLt)

Kata: Number to text

Page 86: Remote pair programming (BuildStuffLt)

Kata: Number to text8192 => eight thousand one hundred and ninety two

125,017 =>

one hundred and twenty five thousand and seventeen

Page 87: Remote pair programming (BuildStuffLt)

What does it feel like?

Page 88: Remote pair programming (BuildStuffLt)

Part III

Page 89: Remote pair programming (BuildStuffLt)

From here to there

Page 90: Remote pair programming (BuildStuffLt)

Make sharing into a goal

Page 91: Remote pair programming (BuildStuffLt)

Dileepa

Johannes

Chintaka

Thomas

Sergey

Arunas

Page 92: Remote pair programming (BuildStuffLt)

Dileepa

Johannes

Chintaka

Thomas

Sergey

Arunas

Page 93: Remote pair programming (BuildStuffLt)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 94: Remote pair programming (BuildStuffLt)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 95: Remote pair programming (BuildStuffLt)

Arunas Johannes Dileepa Chinthaka Sergey Thomas

Add new company✓ ✓ ✓ ✓ ✓

Display contacts on map ✓ ✓ ✓

Filter contacts in list✓ ✓

Authenticate user by company ✓ ✓ ✓ ✓

Store password securely ✓ ✓

Usernames with Norwegian letters are rejected

Page 96: Remote pair programming (BuildStuffLt)

Overcoming obstacles

Page 97: Remote pair programming (BuildStuffLt)

JIRA

Page 98: Remote pair programming (BuildStuffLt)

With a true team, no member owns more

than their current task

Page 99: Remote pair programming (BuildStuffLt)

TODO DOING DONE

WAITING

AWAY

Page 100: Remote pair programming (BuildStuffLt)

You will get more done

(But not in the first or second sprint)

Page 101: Remote pair programming (BuildStuffLt)

Distance

Page 102: Remote pair programming (BuildStuffLt)

• Skype (or any voice sharing)• GoToMeeting (or flexible screen

sharing)• Dropbox (or any file sharing)

Page 103: Remote pair programming (BuildStuffLt)

Skill and tact

Page 104: Remote pair programming (BuildStuffLt)

• Experiment with switching patterns

• Try out ping-pong• “Could we try it this way

first?”

Page 105: Remote pair programming (BuildStuffLt)

Building your skills

Page 106: Remote pair programming (BuildStuffLt)

Fun events

Page 107: Remote pair programming (BuildStuffLt)
Page 108: Remote pair programming (BuildStuffLt)

Expect exhaustion

Page 109: Remote pair programming (BuildStuffLt)

Just do it

Page 110: Remote pair programming (BuildStuffLt)

• Ask for help• Don’t wait for

• Perfect tool• Perfect oppunity

Page 111: Remote pair programming (BuildStuffLt)

Conclusion

Page 112: Remote pair programming (BuildStuffLt)

What

Page 113: Remote pair programming (BuildStuffLt)

• Two people at one codebase• No member owns a task

beyond the day• Team rotates pairing

Page 114: Remote pair programming (BuildStuffLt)

Why

Page 115: Remote pair programming (BuildStuffLt)

• “Rockstar programmer” model doesn’t scale

Page 116: Remote pair programming (BuildStuffLt)

• 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)

Page 117: Remote pair programming (BuildStuffLt)

How

Page 118: Remote pair programming (BuildStuffLt)

• Ask for help – don’t work alone

• Try ping pong programming for two hours

• Be open, share and listen

Page 119: Remote pair programming (BuildStuffLt)

Competition:What was the blue sentence?

Page 120: Remote pair programming (BuildStuffLt)

A team creates together what no member could do

alone

Page 121: Remote pair programming (BuildStuffLt)

You can start as soon as you get

back to work


Recommended