Pair Programming: How Important Is It?
Elizabeth Hendrickson hosted a web chat yesterday, attended by her imaginary brother Chet, Corey Haines, J.B.Rainsberger, and yours truly. After about a year of getting the microphones and webcams to work, we settled down to talk about pair programming. I won’t telegraph the results of that, so that if/when Elizabeth posts the thing you can enjoy every minute of it. However, I have had some additional thoughts on pairing that I’ll put down here.
Maybe UR Doin It Rong
All the pair programmers I know really like it, especially when it goes well. But this is a lot like saying that people who go out for sushi every week probably like sushi. What about all the people who go “Yucch, raw fish!” when you suggest sushi? Usually we’ll respond with “No, really. It’s not like raw fish. You should really try it.” Interestingly, when you can manage to convince someone to try a bit, they do often wind up liking it.
Pair programming must be the same way to some degree. because so many of us weren’t all that interested in it and wound up really liking it. Yet often we hear of people who say that they’ve tried pair programming and don’t like it – or that “it didn’t work” for them. What’s up with that?
Over the last decade, people have said that they tried XP, or tried pairing, or tried some damn thing that I proposed, and “it didn’t work”. I’ve taken lots of flames for then digging into the extent to which they actually did the thing well, the way it is “supposed” to be done. I wrote an arguably cynical article about that, called “We Tried Baseball and It Didn’t Work”. But my point is a good one, I think: surely you can’t assess whether you like something if you don’t do it well.
In pairing, I ask people to try pairing until they are sure that I’d say they were doing it well, and then decide whether they want to do it. That seems fair to me.
Could Introvert for America
There are people who can’t stand open spaces – preferring more organized conferences haha – and people who can’t stand to be in tight spaces, and people who get all weird if you hand them a snake or a tarantula or a cookie with peanuts in it. I have some of those concerns myself, and I can assure you that fiddling with spiders and snakes isn’t going to get me over it.
Could it be that someone sufficiently introverted would find pairing so difficult that either they couldn’t do it well at all, or so difficult that they have to go home and kick the cat? I can believe that. I’m introverted enough that after I teach a class or attend a conference all day, I just want to go back to my hotel room and read, or possibly hang out with one other person.
So I can certainly believe that somone could find pairing hard to sustain because of wear and tear on their psyche. Yet, and I confess that I did say this on the web conversation … there is a part of me that wonders “Couldn’t they work their way through that?” I should pay more attention to myself: I see no evidence that I’m more likely to want to go hang with 30 or 300 of my closest friends after a long day coaching or conferencing.
How Valuable is Pairing, Anyway?
I really enjoy pairing, and I am absolutely certain that I get more and better work done when I pair. I even sustain more concentration, and work longer before spinning off the road or dozing off …
What was I saying? Oh, yeah. We have lots of anecdotal evidence that teams go faster and better with pairing. However, what I recall of the literature isn’t so optimistic. The experiments that I prefer to quote indicate that a pair of programmers will produce a little less code working together than the two of them would produce alone, and that the code they produce is substantially more free of defects. This suggests to me that they’ll actually get more done, since the non-paired folks have more debugging to do, and debugging is often slow and tedious.
But even so, the impact of pairing hasn’t been shown to be very substantial, and I’m not really aware of anyone who argues that it is substantial even if not yet proven.
If that’s the case, how hard do we want to push on pairing? How firmly can we insist on it?
Conclusion?
If you wanted a conclusion, you should have gone somewhere else. But my present feeling is that pairing is very valuable if a team can get to doing it, and that to get there you probably need to practice and experiment. But much of the value is at a social level, a teamwork level, and not perhaps so much in direct productivity. It may be possible to get teamwork that high without pairing – certainly I’ve had some very productive teams without it – but pairing can make it easier.
However, I would not mandate pairing or even push hard for it, because I have no grounds for demanding it. If a team chose to pair and some members would not, I would probably support the team if they wanted to drop the non-pairing members.
But it’s not an easy question, in my estimation.