In Chapter 5 of the book Software Development Rhythms, Kim Man Lui describes a situationwhere a paper product manufacturing company that employed around-average workersperformed at a level which was more productive and industrious than a companythat was staffed “optimally.” Lui attributes this to the fact that the employeesworked harder and smarter by working together to solve problems and completetasks.
In the software development andcomputer programming world, this concept is called pair programming. Lui definespair programming as “two programmers sitting side by side to collaborate on aunitary job that includes the design, coding, and testing of a piece ofsoftware.” (Lui, 132). The task seemslike a challenge, as it takes uninterrupted focus, attentive listening, andexcellent communication skills to pull this type of collaboration off. To make matters more challenging, programmersin today’s agile world are typically co-located, either in different offices,different states, or even different time zones, the hallmark of distributedsoftware development.The article “Can Distributed SoftwareDevelopment Be Agile?” lays out a solid framework for how pair programming canbe performed in a distributed software environment.
They begin by outlining the main issues thatstem from a distributed development environment and an agile process: difficultywith face-to-face interactions, the ability for requirements to change rapidly,informal agile processes and procedures, and a lack of cohesion from teammembers. They suggest combating theseissues and achieving distribution and agility by continuously adjusting theprocess, facilitating knowledge sharing, improving communication, and buildingtrust between the team members. (Ramesh, 42-44). These methods can be used to improveinteractions from large co-located agile teams all the way down to co-locatedpair programmers.There are many tools which facilitate pairprogramming in a distributed software development environment and enable twoprogrammers to work together on the same code. A tool that I use frequently and successfully in my current position asan application developer is Cisco Webex.
Webex is a desktop application that enables video and web conferencingand is loaded with features that would enable pair programming to functionsuccessfully. Personally, I have usedWebex in a pair programming environment and its features to screen-share, speakdirectly to my co-worker, and interact directly with his developmentenvironment to write, edit, and commit code. There are a few challenges with this application (and others of thesort) and cooperatively working. Becausethe conversations are not face to face, they sometimes result in speechoverlapping and a disturbance in the flow of ideas.
Brainstorming and non-coding related collaborationare more difficult when using a virtual meeting rather than an in-personsetting. Also, determining who drivesthe call is often difficult at first, since the two employees may haveconflicting styles or ideas of how code should be written. Often the programmer with the control of thecoding may win out.According to Lui, these issues, while posing aproblem, can be ironed out by implementing several principles: asking open-endedquestions instead of yes-no types, resolving conflicts by postponing decisionsor asking for help from others, ensuring requirements are fully understood, prioritizingtime-critical tasks and breaking them into chunks, and working on problemstogether, instead of individually working out solutions to them. (Lui,161).
Pair programming takes a lot of effortand experimentation but has proven to increase quality, release time, and efficiencyof software.