A thought on pair programming
Jan. 18, 2011
When discussing pair programming, I have never heard the following point of view. So I'll just shoot and cover. Let me introduce it with an example.
Imagine for a second that you have an appointment at a location you've never been before. You sit down and do some research; how to get there, are there any potential land marks that will help you orientate yourself in the wild, etc. Once you are on your way, your senses are on edge, you look everywhere, waiting for the landmarks to show up, and you double check every decision you make. If you succeed, you will not have any trouble to get there again, actually you've probably learnt some things, like that japanese restaurant at the 17th with the 6th that looked really good, or maybe that a great food market was on your right hand side very close to the end of the trip.
Now picture this: that you go to a new place, but with a friend that has already been there before. The trip is very pleasant, this guy knows how to get there in a short time, but he doesn't know that you are now into japanese food so he doesn't mention that cool japanese restaurant that you've both just walked past. The guest doesn't notice it because he is not paying attention to the surroundings as he's following his friend's lead, and won't get lost. He's just chatting to his buddy, listening to what he has to say. So they get to their destination quickly. The guest has learnt a few things, including what his friend likes and how he does things. But chances are that if the trip is complex enough and the guest needs to repeat it on his own he will not make it if he doesn't do some research. But come on you've been there with Dug the other day! - yeah, you're right I must be be an idiot. He might, but the matter and the fact is that his attention was driven and redirected by his host.
These two scenarios are somehow a good example of what happens when you don't pair program and when you do. Sometimes after I had to pair program on a new project and had to come back alone to that app sometime later, I found that having paired hadn't helped me a lot to know more about the app unless we were talking about the exact same thing you did with your pair. And this is because the guy that has worked there before is telling you what you could do next.
Pair programming is an excellent learning tool in general and I don't see any problem in teams doing it 100% of the time. But I also see a benefit in spending time alone even if it will take you longer to get to the zone.