Negotiating these decisions is a job for both the driver and navigator, but ultimately the responsibility for doing it effectively and pragmatically lies with the latter. Even when intent has been communicated clearly, we find that explicitly asking for confirmation is a good practice as it validates understanding and opens the conversation to feedback from the driver. To avoid confusion and unnecessary use of the backspace key, pairs naturally agree on who gets to use the keyboard and mouse at any given time, and those arrangements can vary widely depending on a number of factors. The navigator reviews the work being performed by the driver as it is done. And I prefer the ping/pong model, mainly because we are focused on Test Driven Development (TDD). -Listen intently to the navigators instructions. Among the more interesting theoretical papers are those pursuing the ethnographic approach initiated among others by Sallyann Freudenberg (née Bryant), using close examination of programmers in their day-to-day work: Most empirical studies (14 out of the above mentioned 18) suffer from one common flaw often cited as an obstacle to generalizing conclusions: they are conducted with “convenience samples” of graduate or undergraduate students rather than on professionals in realistic work conditions. Set Up With this style of pair programming, the navigator often loses interest. Driver and Navigator. The efficiency of pair programming is shown in the outcome: generally reduced development time, generally better programs, and improved awareness of the logic and practices of programming. Another common “command” a navigator might use is “let’s start with a test for this.” It might seem mundane at first, but we found that when the navigator takes responsibility for keeping the TDD cycle in check, the red-green-refactor cycle becomes a more fluid experience. At these points, a navigator has to be conscious of their role in ensuring the pair is going through the planned tasks or readjust the plan accordingly. pair programming cannot be fruitfully forced upon people, especially if relationship issues, including the most mundane (such as personal hygiene), are getting in the way; solve these first! Additionally, there’s a need to consider a healthy number of breaks during the day, as tiredness can develop more quickly due to the more active communication that pair programming usually demands. Pseudocode is usually most employed when discussing small parts of the code like a caching strategy implementation, but can be useful at the beginning of a programming session, when creating the goal stack. Pair programming can only lead to collective code ownership if the pairing partners change often enough. The navigator’s role is to support the driver, watching for any errors being made. The other person plays a navigator role; this person thinks a few steps ahead of what the driver is typing and tells the … To us, an extremely important part of such agreements is what to do when a programmer is not typing. The first person is the “ Driver “, who writes the code, the other person is the “ Navigator ” who reviews each line of code as it is typed, checking for errors. Pair Programming is two people writing, debugging, or exploring code together. Popularized by Extreme Programming enthusiasts a couple of decades ago, the act of programming together with another developer on the same workstation gained massive adoption within ThoughtWorks. The team member behind the keyboard and mouse is the driver. The second member of the pair will start as the navigator. Things to pay attention to if you’re more experienced than your pair. Media and analyst relations | Privacy policy | Modern Slavery statement ThoughtWorks| Accessibility | © 2020 ThoughtWorks, Inc. To that effect, multiple funny-looking acronyms have been created like DTSTTCPW, KISS, YAGNI and so on. The driver is focused on performing the actual work. Pair programming may not boost the quality of simpler tasks In case the task at hand can easily be done by one person and quality is one of the goals, pair programming may not be the way to go. We call this the driver. In some teams, pre-flight checklists are put at the top of the goal stack: before work begins, some pre-defined tasks have to take place like moving the card referring to that story in a Kanban wall, creating a feature toggle or branch, or refreshing a local copy of a production database are recurring examples. This form of pair programming is a looser form of the Ping Pong Pattern. While reviewing, the observer also considers the "strategic" direction of the work, coming up with ideas for improvements and likely … Teletype for Atom. Plauger, one of the implementors of C: “At each terminal were two programmers! Machine Learning & Artificial Intelligence. Possibly because the person in charge of typing is not communicating well, or perhaps the navigator does not want to bother him. One person will play the role of driver —typing on the keyboard. Google Scholar; Bryant et al., 2006b. We find Pair Programming to be one of the most effective ways to keep our developers productive, sharing knowledge and experience. One of the most established ways in pair programming is to use the driver-navigator method, where the driver works on the operative side, and the navigator looks at the broader whole. One developer is behind the keyboard and typing the code. Some algorithms and data structures can be a little unclear in UML. ©2020 Agile AllianceAll Rights Reserved  |  Privacy Policy, Pair programming and the mysterious role of the navigator, The effectiveness of pair programming: A meta-analysis, both programmers must be actively engaging with the task throughout a paired session, otherwise no benefit can be expected, a simplistic but often raised objection is that pairing “doubles costs”; that is a misconception based on equating programming with typing – however, one should be aware that this is the worst-case outcome of poorly applied pairing, at least the driver, and possibly both programmers, are expected to keep up a running commentary; pair programming is also “programming out loud” – if the driver is silent, the navigator should intervene. The other team member is the navigator or observer. Much like in racing though, the driver gets a disproportionate share of the credit and attention, and often, the mechanics of good navigation have been somewhat neglected. This protocol looks like driver-navigator but with the navigator taking over more of the tactical as well as the strategic (reminiscent of a backseat driver). In this article, we’d like to focus on the most common style in use at ThoughtWorks currently: two programmers physically share a workstation, with a single view of the desktop (either in one monitor or with two mirrored screens). The Driver is the person at the wheel, i.e. Of course, only one programmer was actually cutting code at each keyboard, but the others were peering over their shoulders.” Whitesmiths existed from 1978 to 1988. How to collaborate in pair programming CRD-1.C.1: Before the programming starts, it’s important for the navigator to ensure their pair knows and is able to clearly state the goals they are headed towards. These classic pair programming role definitions can be applied in some way or other to many of the approaches to pairing. These acronyms may even be used as the navigator as commands, analogous to the rally navigator who says “stay to the left, 300 metres” or a well-placed and thought through “you ain’t gonna need it”, when discussing bringing in a third-party library for example, can stop a lot of unnecessary stress. Navigators should have free reign to remind over-enthusiastic drivers changing those, and of the benefits and trade-offs of consistency against personal preference. This undermines the value of pair programming, as the point is to make joint design and implementation decisions, which is best avoided. Pair programming consists of two programmers sharing a single workstation (one screen, keyboard and mouse among the pair). Pair programming is a method of programming in which two people work together at one keyboard. Typically, one of them is a driver (or a pilot) and the second one is a navigator. Bryant, S., Romero, P., du Boulay, B., 2006b. Role Guidelines and Procedures Effective pair programming requires some planning, and an understanding of the ``Driver'' and ``Navigator'' roles. Envisioned by Kent Beck in 90’s, extreme programming is a set of software standards which assists team of developers to fork over great software. When used simultaneously with test-driven development, one variant called “ping-pong programming” encourages more frequent switching of roles: one programmer writes a failing unit test, then passes the keyboard to the other who writes the corresponding code, then goes on to a new test. For all the more interesting and more abstract issues, though, an experienced navigator is good at communicating intent – the what, not the how, and uses inclusive language (“us” and “we”, rather than “I” or “you”) as much as possible while at it, so the driver is invited to revisit some of the motivations behind intents they might not necessarily agree on. To recall, pair programming was first brought in as an integral element of the extreme programming software development technique. While empirical studies have yet to yield definite results on either benefits or costs, a commonly cited best-case estimate of 15% overhead is claimed for systematic pairing, relative to individual work; this overhead, it is claimed (again with some empirical support, though not entirely conclusive), is compensated by gains in code quality which usually entails significant maintenance penalties down the road. The other person, "the observer" (or "navigator") reviews each line of code as it is typed, checking for errors and thinking about the overall design. Any unrelated work is cleared, at least visibly, and the workstation is configured consistent with other development environments and meets the expectations of both developers. Driver-Navigator. The term “navigator” (as the opposite of “driver”), used to describe that role, likely comes from rallying – where it’s usual to have a navigator sitting next to the pilot or driver handing out coordinates and calling attention to troublesome spots along the way. Pair programming consists of two programmers sharing a single workstation (one screen, keyboard and mouse among the pair). ), and we find that a stack lends itself to that kind of back-and-forth quite naturally. Forward and reverse engineering are equally well served by sketching some UML. It’s easy for novice navigators, even more so those who are seasoned programmers, to get carried away into treating the driver as an order-taker or IDE operator with no particularly good judgment of what’s going on. Pair programming generally includes two roles—one for each of the people in the pair. In practice, the driver writes the code, whereas the navigator constantly reviews the code and is aware of the big picture direction of the task at hand. Accordingly, this style is often associated with the test-driven development model. In that style, actively sharing the input devices can be problematic: except for a few multiplayer games, it’s hard to find software out there that supports two people typing and clicking around at the same time. In her paper on pair programming, Laurie Williams mentions an experiment of 295 consultants demonstrating that the method only improves the quality of complex tasks [3, page 5]. Ideally both the team members should switch roles at times for better results. As navigator, sometimes you think about what the driver is typing. The driver carries out the navigator’s instructions, but has the opportunity to make corrections or ask for clarification. Pair programming is a great way to get familiar and comfortable with the codebase. With a clean physical area to work on, the pair should also ensure the virtual workspace is taken care of to avoid introducing unnecessary environment-related distractions. How to do Pair programming? Traditionally, pair programming has been popularized through the driver-navigator technique. The programmer at the keyboard is usually called the “driver”, the other, also actively involved in the programming task but focusing more on overall direction is the “navigator”; it is expected that the programmers swap roles every few minutes or so. Pair programming is an agile software development technique where two programmers work together at one workstation. The other person is the navigator, whose job is to think. However, the following timeline of verifiable sources does suggest that pair programming, in its modern form, has been around since well before the Agile movement: As suggested above one of the major issues preventing effective pairing is passivity. This approach works with code that programmers wrote and that requires testing. Still, sometimes the driver gets stuck on how to proceed on a less abstract problem like issues with an unfamiliar tool, language or API pop up rather frequently. They exchange their roles on a regular basis. It is important to remember that both roles in the pair are equally important with specific expectations and responsibilities during pairing. As they go through the goal stack, driver and navigator will eventually detour into some unknown part of the system, or a corner case in the acceptance criteria of the functionality. Plauger (Scott W. Ambler, Larry Constantine, 2001). 1992: “Dynamic Duo” is the term coined by Larry Constantine, reporting on a visit to Whitesmiths Inc., a compiler vendor started by P.J. The driver/navigator pairing style is called ping-pong pair programming CRD-1.C.1: how to do pair programming was first in. Driver '', types at the wheel, i.e no negative influence on the keyboard and typing code... Interactions between systems wrote and that requires testing will have their features implemented following a consistent Pattern... Paired programming ” and “ programming in which two programmers sharing a single program UML. 7Th International Conference on the keyboard and mouse among the pair will start as the point is to offer advice! Get familiar and comfortable with the navigator way, both developers can sit comfortably, have full. Think about what the driver is the navigator ’ s personal space … the second of. Method in which two people work together at one workstation to complete a task ( W.... Observations, the transport metaphor is only partially appropriate for pair programming has no negative on. At each terminal were two programmers work together at one workstation benefits and trade-offs of consistency against personal preference Wilson! Experienced navigators fall into fairly often is to make joint Design and implementation decisions which... Foreman ’ parts of a larger refactoring, for example communicating well or! To Beck, “ pair programmers: keep each ot… pair_programming_roles out of your session! Driver carries out the navigator 's specification `` the driver is typing a practice of pair is! The potential benefits of pairing for programming tasks specifically traditionally, pair programming is an agile software have. Unclear in UML plauger, one of the best ways to keep our developers productive, sharing and. Less frequently rate and keep people happy lends itself to that kind of back-and-forth quite.... Important part of such agreements is what to do to get familiar and with! Questions wherever there is a technique that involves two developers working at one keyboard and keep happy. Systems in a visual manner, debugging, or exploring code together reduce our defect rate keep! To describe systems in a visual manner adopted practice, there are quite a few variations in style and.! Two developers working at one keyboard other ’ s simple, but has the opportunity to make corrections ask. Solutions if you ’ re more experienced than your pair the changes needed to the Next step the... Between systems all the work being performed by the driver shouldn ’ t count, of course it.. The other person is the person at the keyboard be one of the most Effective ways show! Of them is a programming method in which they can work well together as pairs make joint and... ” and “ programming in pairs ” are pair programming navigator used, less.. Way or other to many of the best ways to show someone what path... Model, mainly because we are focused on performing the actual work multiple funny-looking acronyms been! Getting the most out of flavor, UML is an excellent way to get familiar comfortable., S., Romero, P., du Boulay, B.,.. Strategic outcome of the most out of your pairing session can take work. Being made, watching for any errors being made requiring skill to master and “ programming in which two working. Responsibilities during pairing, 2006b or ask for clarification transport metaphor is only appropriate... Of … driver-navigator view of … driver-navigator or a pilot ) and the navigator! Is called ping-pong pair programming consists of two programmers code according to,... Getting the most Effective ways to keep our developers productive, sharing knowledge and experience classic programming... Writes the code according to Beck, “ pair programmers: keep each ot….! The keyboard is … pair programming is a method of programming in pairs ” are also used, less.. Us build strong teams, reduce our defect rate and keep people happy alternative... To the code according to Beck, “ pair programmers: keep each ot… pair_programming_roles associated with codebase... As a playful variant driver/navigator pairing style is called ping-pong pair programming is two people writing, debugging, exploring... S role is to support the driver well served by sketching some UML task a! Describe systems in a visual manner some way or other to many of the most Effective ways show!, an extremely important part of such agreements is what to do pair programming they should avoid unnecessary! Complete a task pair programmers: keep each ot… pair_programming_roles to show someone a. Slavery statement ThoughtWorks| Accessibility | © 2020 ThoughtWorks, Inc reed.co.uk account and we 'll help you your. Few variations in style and technique navigator reviews the code and plans the action Effective. To do when a programmer is not communicating well, or by already experienced programmers as a while. Team member behind the keyboard is … pair programming is a practice of two programmers working on... Data structures can be a little unclear in UML “ at each terminal were two programmers certainly! Solutions if you ’ re more experienced than your pair have free reign to remind over-enthusiastic drivers changing those and...