Driver:
- Write the code according to the navigator's specification
- Listen intently to the navigators instructions
- Ask questions wherever there is a lack of clarity
- Offer alternative solutions if you disagree with the navigator
- Where there is disagreement, defer to the navigator. If their idea fails, get to failure quickly and move on
- Make sure code is clean
- Own the computer / keyboard
- Ignore larger issues and focus on the task at hand
- Trust the navigator - ultimately the navigator has the final say in what is written
- You are writing the code
Navigator:
- Dictates the code that is to be written - the 'what'
- Clearly communicates what code to write
- Explains 'why' they have chosen the particular solution to this problem
- Check for syntax / type errors as the Driver drives
- Be the safety net for the driver
- Make sure that the driver sticks to the small task at hand
- Outline and note down high level tasks / issues
- Ongoing code review
- Pay attention
- Wait until the task is complete to bring up design / refactoring issues
Both:
- Actively take part in programming
- Aim for optimal flow - avoid trying to be 'right'
- Embrace your role
- Intervene if your pair is quiet
- Know when to give up / steal keyboard
- Communicate, communicate, COMMUNICATE!
- Sync up frequently to make sure you are on the same page
- Don't hog the keyboard
- High-five every time a test passes
- Follow best practices for TDD
- Swap roles frequently
Manually forked from jordanpoulton/pair_programming_roles