Tuesday, October 17, 2006

Paired Programming


Pair programming requires two software engineers to participate in a combined development effort at one workstation. Each member performs the action the other is not currently doing: While one types in unit tests the other thinks about the class that will satisfy the test, for example. The person who is doing the typing is known as the driver while the person who is guiding is known as the navigator. It is often suggested for the two partners to switch roles at least every half-hour or after a unit test is made.


Pair programming is touted to yield the following benefits:

  • Increased discipline. Pairing partners are more likely to "do the right thing" and are less likely to take long breaks.
  • Better code. Pairing partners are less likely to go down rat holes and tend to come up with higher quality designs.
  • Resilient flow. Pairing leads to a different kind of flow than programming alone, but it does lead to flow. Pairing flow happens more quickly: one programmer asks the other, "What were we working on?" Pairing flow is also more resilient to interruptions: one programmer deals with the interruption while the other keeps working.
  • Improved morale. Pair programming can be more enjoyable for some engineers than programming alone.
  • Collective code ownership. When everyone on a project is pair programming, and pairs rotate frequently, everybody gains a working knowledge of the entire code base.
  • Mentoring. Everyone, even junior programmers, possess knowledge that others don't. Pair programming is a painless way of spreading that knowledge.
  • Team cohesion. People get to know each other more quickly when pair programming. Pair programming may encourage team gelling.
  • Fewer interruptions. People are more reluctant to interrupt a pair than they are to interrupt someone working alone.
  • One fewer workstation required. Since two people use one workstation, one fewer workstation is required, and therefore the extra workstation can be used for other purposes.


  • Experienced developers may find it tedious to tutor a less experienced developer in a paired environment.
  • Many engineers prefer to work alone, and may find the paired environment cumbersome.
  • Productivity gains or losses are hard to compare between paired and non-paired environments, as metrics of programmer productivity are controversial at best.
  • Differences in coding style may result in conflict.
  • In the case where the team has slightly different work schedules, which is common in an environment that values work-life balance, the pair is only available during the overlap of their schedules. Therefore, not only does it require more man-hours to complete a task, a typical day has less pair-hours available, which further increases the overall task completion time.


Post a Comment

<< Home