Pair programming is one the core tenets of Extreme Programming, commonly referred to as XP.
Extreme Programming is an agile software development process that emphasizes teamwork and simplicity in an effort to streamline productivity and get the best software in the hands of users as quickly as possible.
Pair Programming, or pairing, is a component of XP that involves two programmers sharing a common workstation to increase software quality without sacrificing time it takes to deliver. One programmer, commonly referred to as the “driver” types on the keyboard, while the other—the “observer” or “navigator”—reviews the code as it’s being typed. This process makes it easier to catch errors, and it takes the overall design into consideration during the development process.
But how is pair programming actually done, physically? Pairing is best accomplished in person at a dedicated pairing station, but remote pairing is also possible if the right practices are implemented. If you want to maximize the value your agile software development team gets out of pair programming, consider implementing the following tips to aid your efforts.
So, what does the ideal pair programming station look like?
Just as code should have shared ownership and teams work best when there are coding standards, the paired programming environment should have shared ownership. The team should take pride on rallying around a setup that works for everyone. While there are countless options for a pair programming setup, the following have been shown to work well and foster a collaborative, productive environment for agile software development:
- Two people at one desk—they can share one large monitor, or use two monitors that are mirrored.
- Two keyboards and mice—for those dealing with tendinitis, a trackpad is also acceptable.
- A large table—a table around six feet wide is ideal, so that we respect personal space needs.
- Two comfortable chairs—to minimize distractions, do not compromise comfort.
- Dedicated pairing laptops or computers—it’s important that nobody “owns” these stations to ensure a equally collaborative environment.
Materials to include
- Laptop stand—This will enable programmers to switch out the laptop powering the pairing station. It’s much faster to get started when someone has the work already set up.
- Physical pomodoro timers—Using pomodoro timers makes it easier for pairs to sync up their breaks.
- Chess timers—These timers help encourage both programmers to spend an equal amount of time driving (or you could just swap drivers, on every pomodoro).
- Index cards and multicolored Sharpies—Having index cards handy makes it easy to keep track of tasks, and multiple colors allows you to distinguish task categories easily.
Tips to streamline pairing productivity
Having the above materials and practices in place is a great start, but further action is required for a pairing station to be fully optimized for this type of Extreme Programming. Ideally, this common agile software development environment should be documented in a README and checked into git. This can be done in a variety of ways. Luckily, there are many tools and practices available that can greatly aid to this process.
On the Stride team, we use the following to optimize the pair programming experience:
- vim—Programmers could also use Sublime Text or Atom; the point is to standardize.
- ShiftIt—This open-source tool is helpful for window management.
- A few bash functions—Manage our proxies and local passwords in a .bashrc.local.
- Shared .psqlrc and git config aliases
- A shared editor config—At Stride, we use Pivotal vim, but this could be vim-awesome or the equivalent for Sublime or Atom, so everyone always has the same plugins and keybindings.
- Recess timer for pomodoros
- git-pair—This script from Pivotal allows both people’s names to be on their commits, making it easy to switch pairs without reconfiguring things.
- Pair stairs or a pair-trix—useful because it tracks which people should pair more to cross-pollinate and encourages promiscuous pairing.
What benefits will this bring to agile software development?
Using these practices, you can be sure your agile software development team won’t fall into the common pitfalls associated with pair programming. By implementing these tips in your pair-programming efforts, your team will not only be able to produce better quality software in a shorter amount of time, but also experience the following benefits:
- Less friction will come with switching computers.
- Issues addressed and improvements made on one person’s machine can benefit the whole team.
- Eliminates bike-shedding.
- Breaks down as many barriers as possible to pairing.
In the end, remember that what you choose is less important than making a decision and standardizing, as with tabs vs. spaces. Developers like things their special way, but if you’re committed to XP, I can only recommend that you try these best practices and see how it works for your agile software development team.
- Pair programming is best done in a dedicated environment where each person has equal comfort and control.
- Consider using pomodoro timers, chess timers, or multicolored index cards to keep track of activities.
- Take advantage of different development tools in order to better organize and document activities.