One of the students in our distributed teams course posted to the forum there asking
This course has been a fantastic introduction to distributed team management tools and techniques. I am curious, though, to read responses, defences or critiques, of pair programming. Are there effective ways to do distributed team management without it? I present this article as a starting point: not exactly a balanced and neutral viewpoint as its title makes clear, but one that may elicit response.
I was all ready to get out the big guns in defence of pair programming, but despite the provocative title I found the article reasonably balanced and a very interesting read. Pair programming (like many other techniques) is no panacea.
You can read a summary of some more research on pair programming here:
In my experience (and backed by various studies) pair programming works particularly well for learning developers, and for experienced developers when they are working on something new and complicated.
However I agree with the conclusion of the article author
The true answer is that there is no one answer; that what works best is a dynamic combination of solitary, pair, and group work, depending on the context, using your best judgement. Paired programming definitely has its place. (Betteridge’s Law strikes again!) In some cases that place may even be “much of most days.” But insisting on 100 percent pairing is mindless dogma, and like all mindless dogma, ultimately counterproductive.
You can do distributed team management without pairing, but without it you miss one important tool for helping your junior developers level up and distributing knowledge through the team.
Dogma is the danger. Saying "never ever pair program" or "never ever work alone" is dangerous. One needs to achieve a good balance. The danger that I see for a lot of companies and organisations is that they reject pair programming out of hand. They even have open plan offices, but everyone sits there with their headphones, working in their little silo, potentially working in a highly counter-productive fashion.
I would say follow the Agile process. Every week you tinker and try things. No pair programming this week? Let's see what happens if we do 100% pair programming this week? Everyone sick of pair programming - let's try all doing mob programming this week. etc. etc.
The critical thing is to keep reflecting on what is (and isn't) working for your team. Sometimes you need to be bloody minded to make a difference. Other times you need to have an open mind. Keep reflecting to work out when you need which :-)