Confusions about productivity have lead the builders of computers, furniture, tools and office buildings to ignore paired work. Therefore: Arrange the furniture now. Adjust the fonts. Stretch the cables so that PairProgramming is at least possible.
See LordOfTheFlies.
Your software environment may need adjustment too. Software tools, from source code managers to bug tracking systems, almost universally assume CodeOwnership by individuals. If you cannot change these tools then make identities for all possible pairs, using names like WardAndKent. Then SwitchUser and ChangeOwner? to that identity at the beginning of a ProgrammingEpisode?. Doing so acknowledges the possibility of valuable contribution and acceptance of responsibility by either party.
I also have seen a cordless keyboard and mouse improve collaboration. We had a large meeting using a projector to view the screen. The keyboard and mouse could be passed to anyone at the conference table, and everyone could see the results. Not PairProgramming per se, but an interesting use of the technology. - SteveHayes
Has anybody experience with using MicroSoft's NetMeeting for PairProgramming? Not also with programming but also with joint revising of documents I encountered situations when I or my partner needed to break out for a minute, look something up, fix something on his own. In such a situation I wouldn't like to have my hands "bound". Instead I'd like to be able do a few little one-minute jobs, e.g. writing some UnitTests or rewriting a few sentences. My point is not to do just some work in parallel but to work on the same code/text and then join the pair again. What do you think about using NetMeeting on two adjacent machines, using one as the main PairProgramming workstation and the other for short breakouts? -- FrankGerhardt
We have tried using NetMeeting (for virtual pairing) however the devil is in the detail - while it looks promising getting it to work so you get both sound and screen is not easy. I think it doesn't like firewalls, and when you have the bandwidth you are normally behind a firewall. Just having the screen and mouse sharing isn't good enough - you want to talk however you end up with one person having it working and the other not being able to talk. Invariably you spend hours saying "can you hear me". OliBye and I gave up and just visited each other (it ended up being simpler). The idea of having a second screen to one side so that you can see what's going on is something that also occurred to us but we haven't tried it. You get quite good mileage having two mice (one Ps/2 and one USB works ok). Currently, in our new office, we have new desks that are curved inwards (custom built - like sitting on the edge of a circular surface) - the idea being that it should be easy to sit side by side and both see the screen. I will let you know how this works out (it looks interesting). -- TimMackinnon
For the wave of the future, check out VirtualPairProgramming.
Doing PairProgrammingAtHome allows you to customize the facilities as much as you want/need.
The canonical PairProgramming space (C3's big room) seems to be an extreme version of the CaveAndCommons BrickAndMortarDesignPattern?. -- JohnBrewer
Little Tikes and IBM have teamed up to produce a PairProgramming workstation for toddlers, the Young Explorer PC Pal. The bench comfortably seats two children. See http://www.kbgear.com/products/explorer/index.html for details. -- JoelShprentz
The literature that I have read about PairProgramming never mentions what seem to me to be some obvious obstacles in moving from a non-PairProgramming environment to a PairProgramming environment. In our team of four programmers working on one project, we are using the following editors (each person uses one almost exclusively): CodeWright, Visual SlickEdit, Visual Cafe IDE. Among the four of us, we use the following debuggers (each person switches among these depending on which debugger crashes least that day, sometimes using multiple different debuggers in a single sitting): Code Warrior, Visual Cafe, JSWat. We have one left-hander (with mouse on the left and buttons switched) and three right-handers (with mouse on the right and default button configuration). So, do you mandate a single editing environment and a single debugging environment? Do you make the lefty switch over? How does this work, in the RealWorld? -- SusanHoover
For the left-handed mouser: the lefty sits on the left of the pair, and has an "extra" USB mouse. Slide only the keyboard.
Refactoring is edit-intensive. The driver during refactoring picks the editor their MuscleMemory lets them cut-n-paste fastest in (see CommonUserAccess, EmacsVsVi). Authoring new code requires generally forward typing. If the navigator switches to driving they should leave the current editor open (unless it's one of those pathetic ancient ones where you enter the program's internal variables for it manually). -- PhlIp
I have pair programmed very successfully with a programmer that had quite the opposite editing environment from what I had. Myself using vim with qwerty keyboard layout, he used Emacs with a Dvorak layout. Instead of fighting a holy war (except for the obvious puns) we created a little button in the windowing system that called xmodmap to change the keyboard layout. We still switched editors, but eventually this gets annoying and you learn just enough vi or emacs to type the most basic things. So, pair programming helps to bring peace to holy wars (at least, when it concerns editors). -- TimHemel?
A contributor to the XP mailing list has this to say:
We sit across from one another but we share the same laptop. I work directly off my laptop, and plug in an external keyboard, mouse and monitor which my pair works off of.
When we get down to hammering out the code, we pass the buck. I write a test, he makes it pass; and vice-a-versa. This way we both are seated comfortably, have sufficient workspace, and can see exactly what the other is doing.
So far it has been very effective configuration.
See AllEngineersInOneRoom, DvorakKeyboard, WorkplacePets, PairProgrammingErgonomics