Distributed software development continues to gain momentum as organizations become increasingly international and technologically connected. The conventional large office environment simply doesn’t work for a large swath of the work force. By using small satellite offices or allowing teams to work from home, employers enable employees to tune their work environment to their individual needs, while minimizing the distractions and needless overhead activities associated with office work. Additionally, geographically dispersed organizations also have access to a larger talent pool for hiring and contracting.
Pair programming is an Agile software development process in which two developers work together on a single programming task. These two developers use a single workstation. Having a second pair of eyes on the code as it is developed can lead to substantial quality improvements. Pair programming often involves assigning “driver” and “observer” roles to the two developers. The “driver” writes and edits the code on the workstation, while the “observer” continually reviews the work. Pair programming is often understood through the lens of software development productivity and software development quality. More recently, this practice has also been understood for its knowledge sharing potential. Through knowledge transfer and collective learning, pair programming improves the skills of the developers involved. These benefits of pair programming are particularly obvious in the case of pairing a senior developer with a junior developer. Some research in the area of pair programming suggests that it “is not either productive or a knowledge transfer technique, but both at once” (Zieris and Prechelt).
Pair programming is possible for distributed teams, provided some additional considerations are addressed.
Depending on the geographical distribution of the team, the overlap in conventional “9 to 5” working hours may be minimal or zero. Setting minimal restrictions on the team’s working hours may promote more opportunities for real-time interactions between members. If developers have the flexibility to work at any time, they may be more willing to occasionally work later or earlier hours for pair programming activities. If regular working hours or flextime scheduling is implemented, establishing fixed pair programming hours during the overlapping time may prove useful.
For distributed teams, screen sharing systems will be required in order to facilitate remote pair programming. While basic screen sharing capabilities may suffice, the benefits of pair programming may be enhanced with the addition of:
- Real-time chat systems
- Webcam video feeds
- Remote control
- Online development environments
Chat systems may provide a less-intrusive mechanism for the observer to give feedback to the driver. For example, it may be valuable for the driver to finish a thought, or a code block, before fixing a typo identified by the observer. In this case, the minimally intrusive approach of a chat message may be ideal. Additionally, chat systems may be more efficient in conveying certain information relevant to the programming activity. For instance, code blocks can be copied into a chat field, whereas a spoken English description of a code block would be cumbersome.
A video connection between the developers can provide additional value for pair programming. Body language provides important insights when communicating, which are lost with an audio-only approach. It’s also easier to avoid distractions when you feel like you are “in view” of a coworker. In addition to all this, a video connection may improve camaraderie and help coworkers develop a better working relationship.
Remote control enables the observer to occasionally interact with the driver’s computer to emphasize points or directly implement feedback. This capability is particularly useful in graphical applications. For example, verbally explaining which button to press in a complex user interface is much more time consuming than briefly taking control of the machine and clicking the button.
Online Integrated Development Environment
Online development environments enable shared use of the development environment, rather than shared view of that environment. With these tools, multiple developers can even simultaneously write code. While this may improve productivity, it might be tempting for the developers to deviate from the “two developers, one workstation” philosophy of pair programming and gradually shift to simply developing individually within a single online development environment. Codeshare is a simple but effective tool which integrates a text editor with video conferencing capabilities (Codeshare).
There may be a tendency, particularly for introverts on the team, to take an overly passive role when acting as the observer in pair programming. For example, such a developer may only point out typos or relatively trivial issues with the code. The practice of pair programming encourages the observer to provide deeper feedback - such as managing the big-picture strategy and identifying code that may pose maintainability problems. In addition to clearly communicating the value of these additional activities to the developer, managers should do their best to create an environment that facilitates additional interaction. While a timed “no recent comments” warning might be overkill, establishing a practice of the observer confirming all code blocks (good or bad) may be an appropriate way to encourage interaction. Additionally, having the two developers change roles regularly may promote deeper engagement.
Lack of Infrastructure
As with any operational process, the success of pair programming relies on the allocation of sufficient resources and creation of a robust infrastructure. Developers should have access to a solid internet connection which supports high-quality transmission of video, audio, and screen captures. Once developers feel as though the technology is a hindrance rather than a help, it will be an uphill battle to retain engagement. When possible, infrastructure should be established to support a quick and seamless setup of remote conferencing “rooms” for pair programming sessions. Having pre-established accounts and documented best practices for video conferencing connections may also improve the operations.
F. Zieris and L. Prechelt, “Observations on Knowledge Transfer of Professional Software Developers during Pair Programming,” 2016 IEEE/ACM 38th International Conference on Software Engineering Companion (ICSE-C)