pair programming two coworkers pair programmingpair programming is an agile software development technique in which two programmers work together at one workstation one the driver writes code while the other the observer or navigator reviews each line of code as it is typed in the two programmers switch roles frequently while reviewing the observer also considers the strategic direction of the work coming up with ideas for improvements and likely future problems to address this is intended to free the driver to focus all of their attention on the tactical aspects of completing the current task using the observer as a safety net and guide economics pair programming increases the manhours required to deliver code compared to programmers working individually experiments yielded diverse results suggesting increases of between 15 and 100 design quality a system with two programmers possesses greater potential for the generation of more diverse solutions to problems for three reasons the programmers bring different prior experiences to the task they may access information relevant to the task in different ways they stand in different relationships to the problem by virtue of their functional roles in an attempt to share goals and plans the programmers must overtly negotiate a shared course of action when a conflict arises between them in doing so they consider a larger number of ways of solving the problem than a single programmer alone might do this significantly improves the design quality of the program as it reduces the chances of selecting a poor method satisfaction in an online survey of pair programmers from 2000 96 of them stated that they enjoyed their work more than when they programmed alone and 95 said that they were more confident in their solutions when they pair programmed learning knowledge is constantly shared between pair programmers whether in the industry or in a classroom many sources suggest that students show higher confidence when programming in pairs teambuilding and communication pair programming allows team members to share problems and solutions quickly making them less likely to have hidden agendas from each other this helps pair programmers to learn to communicate more easily this raises the communication bandwidth and frequency within the project increasing overall information flow within the team studies there are both empirical studies and metaanalyses of pair programming the empirical studies tend to examine the level of productivity and the quality of the code while metaanalyses may focus on biases introduced by the process of testing and publishing a metaanalysis found pairs typically consider more design alternatives than programmers working alone arrive at simpler more maintainable designs and catch design defects earlier however it raised concerns its findings may have been influenced by signs of publication bias among published studies on pair programming it concluded that pair programming is not uniformly beneficial or effective although pair programmers may complete a task faster than a solo programmer the total number of manhours increases a manager would have to balance faster completion of the work and reduced testing and debugging time against the higher cost of coding the relative weight of these factors can vary by project and task the benefit of pairing is greatest on tasks that the programmers do not fully understand before they begin that is challenging tasks that call for creativity and sophistication and for novices as compared to experts on simple tasks which the pair already fully understands pairing results in a net drop in productivity indicators of nonperformance there are indicators that a pair is not performing well disengagement may present as one of the members physically withdraws away from the keyboard accesses email or even falls asleep the watch the master phenomenon can arise if one member is more experienced than the other in this situation the junior member may take the observer role deferring to the senior member of the pair for the majority of coding activity this can easily lead to disengagement pairing variations expertexpert expertexpert pairing may seem to be the obvious choice for the highest productivity and can produce great results but it often yields little insight into new ways to solve problems as both parties are unlikely to question established practices expertnovice expertnovice pairing creates many opportunities for the expert to mentor the novice this pairing can also introduce new ideas as the novice is more likely to question established practices the expert now required to explain established practices is also more likely to question them however in this pairing an intimidated novice may passively watch the master and hesitate to participate meaningfully also some experts may not have the patience needed to allow constructive novice participation novicenovice novicenovice pairing can produce results significantly better than two novices working independently although this practice is generally discouraged remote pair programming remote pair programming also known as virtual pair programming or distributed pair programming is pair programming in which the two programmers are in different locations tool support could be provided by wholescreen sharing software terminal multiplexers specialized distributed editing tools audio chat programs or voip software could be helpful when the screen sharing software does not provide twoway audio capability use of headsets keep the programmers hands free cloud development environments collaborative pair programming services mob programming extreme programming chavrusa joint attention wikihow how to pair program howto guide contains common wisdom on how to make pair programming work c2pairprogramming c2pairprogrammingpattern c2pairrotationfrequency 