In the last couple of days I have had a chance to do a little bit of pair programming. In the past I have found myself being a touch sceptical of it all, but predictably I hadn’t actually done much. So here are some thoughts from my recent experience.
Firstly, I must admit it was only half pair programming, in the sense that I was only an observer and not a driver.
I would say that my biggest concern with pair programming is I found it hard to believe that there would not be a drop in overall productivity with two people concentrating on the same task. However, I’m beginning to think that, counter intuitively, this may not be the case, but it also depends on the task.
For example, when two people have a completely different skill sets and both skill sets are required for the job. In my case, I knew literally nothing about the programming language we were developing in. However, I had a fair amount of knowledge with regards to the “API” we were coding to (fair amount meaning I wrote it!). As a result of this I knew what we were trying to achieve but just not how to achieve it. In this situation the pair programming seem to go very well and I would suspect that the functionality was added to the code twice as fast as it would have been if any one of us had to do it alone.
So what are the other benefits? You generally always learn something when pairing up – even if you have more experience than the other person. For me, I learned that you could place a hash (#) in front of the number to specify the ascii value for a character, for example, #9 is a tab character. This had passed me by for some reason, I mean I knew in HTML you could do stuff like ! to obtain an !, but I had just never thought about what it meant. Now I understand! You also get the benefits of seeing how someone else thinks, and you can learn a lot from that. You might also gain “tips” for navigating the environment or valuable tools being used.
There are some downsides too. When I was doing it the last couple of days I never noticed too many, but I can certainly imagine thinks like different personalities, strong opinions, and reluctance to participate, affecting things quite drastically. Here are a few that I think may annoy the driver, but as I wasn’t driving I don’t really know for sure.
First, as a navigator you sometimes notice tiny things like misspelt names, missed semi-colons, etc, and at the start I pointed these out pretty quickly. However, I then thought to myself, maybe the person has noticed these things and was going to go back and change them when they finished typing the line. So I just tried to stop myself interrupting too much – as I suspect someone who constantly points things out can get pretty annoying. I also had to stop myself preaching my coding habits that don’t make a difference to functionality, that was harder though, as I pretty much have an opinion on just about everything 🙂 . As for navigating, I’m sure someone that completely ignored your suggestions and coded away regardless would be extremely annoying.
I’m not sure that pair programming is THE definitive development strategy. I’m certain that someone sitting over you while you are writing some form of input parser in which you are just running through the motions is almost pointless. Also, when you have to think really hard about something, whether it be debugging a hard problem or some complex algorithm, someone interjecting all the time would be extremely off-putting.
So to sum up: pair programming definitely has advantages and with some careful planning it can be used to improve a projects quality, cost and time to launch.