For the past 3 years, I have almost exclusively pair programmed at my job. I have paired with many people in many situations and learned a lot about this practice. I have found pairing can be effective, but it can also be ineffective and costly. Pair programming seems to be gaining traction, which concerns me a little bit. Some of us really don't like to pair, and I feel it's important to recognize that and maintain a balance here. Pairing is just a tool like anything else; it definitely should not be your company's default mode of work.
If You're Going to Start Pairing...
Before I really begin, I want to point out it's important to create a proper pairing environment. Sticking two people at one desk with a laptop won't cut it. Start with two desks, arranged at 90 degrees. One computer feeds two mirrored monitors (or four), two keyboards and two mice.
This gives each participant their own space, a comfortable neutral zone, and sets them up as equals as far as the environment is concerned. You don't want the environment itself to cause any inhibitions.
When Pairing Is Great
Knowledge transfer is pairing's killer feature.
When one person knows the subject matter well and the other doesn't, then pairing can be highly effective. A slight variation includes when both people bring their own set of knowledge to the table, such as a front end developer and a back end developer joining to solve a problem that lies somewhere in the middle. Transferring knowledge through pairing is almost always effective, regardless of personalities involved or what knowledge is being transfered.
The knowledge transfer doesn't necessarily have to be the main focus of the pairing session. Small things like new key commands also get shared nicely. I find I can enjoy pairing with someone new just to get added exposure to tools, tricks, etc.
Impromptu Knowledge Transfers are Great Too
When you need help from someone, often the two of you end up crowded around one machine. If you can swap that machine with a pairing station, the help arrives faster and smoother. Instead of verbally relaying commands to enter, both people can just type and explore as needed, greatly improving communication.
And ... When the Pair Gels
This is the other circumstance I have found where pairing is highly effective. When the two members gel well. Their personalities slide together just right, and the end result is a super being that is more than the sum of its parts. Sometimes way more. When this happens, it almost doesn't matter what they are working on, they tend to do it very well.
That Super Being is Mythical Most of the Time
Throwing two random people together and expecting magic is optimistic at best. We see this all the time in the real world. A star studded cast yet the movie is a dud. Baseball's all-star game rarely leads to two unstoppable teams. More is not necessarily better, and relationships are tricky.
Exploring the Unknown and Solving Hard Problems
Tough problems are also where companies might gravitate towards pairing. Surely if one smart person can solve a difficult problem, two can solve it faster and better?
I can't think of a single time I've made a great breakthrough while pairing. Yet I can point to numerous times when the breakthroughs happen once the pair disperses. One person has to go to the dentist, or the other had to work from home that day. These are the moments when the hard problems suddenly make leaps toward being solved. This is a key area where i find pairing to be highly ineffective.
I don't want to have to constantly explain everything I'm thinking about when digging into hard problems. It slows me down and prevents me from getting into the zone, where deep thought really comes from and where breakthroughs happen. I want to feel free to try something silly or even stupid if I think it might increase my knowledge about the problem, without first having to justify why I'm doing it. Vice versa too with the person I'm working with, I want them to get into the zone as well. Susan Cain wrote a great article all about this. There's pretty compelling evidence that solitude is where innovation comes from.
If you have talented and motivated people, they should be encouraged to work alone when creativity or efficiency is the highest priority.
— Adrian Furnham taken from the article linked just above
Regardless of your personality or comfort level with other people, it's hard to deny that keeping both people in the loop slows down and can even prevent deep thought. Being in the zone and really digging deep into a problem requires quiet and focus. Something pairing actively takes away from you. The recent backlash against open offices (such as here, here and here) largely applies to pairing too.
I am an introvert
I'm totally an introvert. For sure, my disposition makes me more critical of pairing.
Roughly a third of the population is introverted, and there is no correlation between introversion/extroversion and intelligence. These facts are concerning when it comes to pairing regardless of where you personally lie on the spectrum.
Pairing lets the loud idea win. Which might be the correct idea, or ... it might not be. Why leave it to chance? In a pairing situation a quieter, more introverted or anxious person is far less likely to push their idea forward. Pairing usually ensures that the more extroverted -- or more engaged -- person's idea to be the one that gets implemented.
Many of us just don't shine in this situation. Heck for many of us this situation is down right uncomfortable. Programming has stereotypically attracted the quieter, more introverted types. It's clearly not a loud or very social activity. Pairing may be shutting this type of person down, which is not what you want.
Other Pairing Problems
Leaving behind the whole introversion/extroversion arguments, there are problems with pairing that affect everyone.
Different levels of engagement within the pair
Much like group work back in high school, pairing can lead to a situation where the two people are engaged at different levels. One person may contribute more simply because they are more interested, are having a particularly good day, are more disciplined, whatever it may be. The other person may contribute less due to being uncomfortable, bored, less disciplined or internally not agreeing with the chosen approach. If nothing else, this is costly. A perfectly good employee is really not doing much.
How long things take
In my experience pairing almost always takes more chronological time to complete a task. Take that value and multiply it by two and that's a pretty large cost to the company. Sometimes that cost is worth it. Knowledge transfer is very important in a company, and pairing can be an effective way to pull that off. Sometimes the extra cost of pairing is worth the benefits that come from it. But sometimes it isn't.
Physical Space
Proper pairing stations take more space and hardware. That can be hard to justify sometimes. I've even seen more pairing stations meaning the removal of personal desks and personal space, leaving fewer places people can escape to for some solitude.
Pairing is Not Necessarily Collaboration
Pairing leads to collaboration much like blind dates lead to romance. The act of pairing itself has little influence on the actual collaboration that may or may not happen. There are more natural and more efficient ways to collaborate, such as code reviews and ad hoc conversations. Rather than confine yourself to one person, workers should feel free to seek out the input they are after.
More recently, a focus on office spaces that balance open spaces with private coves are becoming more common. This gives people the power to decide when to be collaborative, and when to work in quiet focus. Letting people naturally make this decision seems much more effective.
Pairing is a Tool
In the end that's all it is and all I am really arguing. Sometimes pairing is great, other times it's costly and ineffective. The key is to recognize this and utilize pairing intelligently. If your company is new to pairing, you need to get familiar with it and find out for yourself when it's effective. This is no different from any other tool. But please don't propose it as the new default for all work going forward, it probably won't work.