Since joining ThoughtWorks in 2004 I have enjoyed Pair Programming and my programming skills have improved significantly. Working on a problem with someone else full time is one of those practices that is difficult to convince people off until they have actually tried it. Laurie Williams at NCSU has done some pretty interesting research into the effectiveness of of pair programming, which is well worth a read.

There are various different styles of pair programming WikiPedia talks about remote and ping-pong paring where people sit side by side using the same screen, keyboard and mouse. Work is typically split along test/application boundaries where one pair writes a test and the other then implements the code to support the test. Control switches back and forth between each of the pairs. The are many variations on this including the use of two keyboards and mice. Pairing in this way with a laptop is often quite difficult unless a separate keyboard and mouse are used.

Yesterday

Yesterday and colleague and I needed to work on a document. Nothing particularly unusual about that but we were also bot h in the same office, which for me is unusual at the moment. We both had laptops but the office did not really lend itself to side by side pairing. Laptops don’t really lend themselves to effective pairing. The screen and keyboard layout encourage the user to sit directly in front of the screen to work. For the pair not actively typing that means looking at the screen from the side – and almost over their colleagues shoulder – which is far from ideal.

Face to Face

Thinking about this problem I remembered reading an article about face to face or screen pairing. Screen sharing software is available for most operating systems these days and for OS X users the facility is natively available in the Sharing System preferences. </p>

Setup was a snip we positioned ourselves on a section of the desk that stuck out into the room with the laptops placed back to back. Each of us had an unencumbered view of the shared screen and working on a local network meant that there was imperceptible latency between one person typing a character and the other seeing the result. </p>

What went well

Communication was easy and unencumbered. I found talking face to face to be a lot easier easier than turning to talk to someone next to me and eye contact was easy to establish.

Switching control back and forth did not require moving keyboard our mouse making the transition more immediate and helped improve the flow of work. Each of us worked with the hardware we were familiar with and although we were both using MacBook Pros there are nuances in keyboard feel and trackpad set up that might take someone a few moments to get used when they are driving.

Often when I am pairing I find the need to draw diagrams or make notes to follow up on later. Sitting side by side it is easier to doodle a quick diagram to elaborate and idea with person sitting next to you. Working face to face one or both would need to move to a more convenient location.

Face to face pairing might be a very similar experience if applied to remote pairing. I could imagine setting up a couple of monitors one on top of the other at each location. The upper monitor showing the remote pair. In this configuration it is then easy to quickly context switch to talk about the problem at hand. I suspect that looking up is a lot less work than looking to one side or switching applications.