Eu tentei programar em pares várias vezes, inclusive em uma organização que (brevemente) considerou lançá-la como um processo obrigatório para todos os engenheiros (você pode adivinhar o quão bem essa ideia se desenvolveu). Pessoalmente, eu odiava.
As razões listadas abaixo são apenas minhas experiências subjetivas e não posso "medir" o impacto delas em termos concretos. Mas aqui estão todos iguais:
1 - Ter um 'navegador' e um 'motorista' só ajuda se o primeiro for vocal e o último ouvir.
Todos nós conhecemos desenvolvedores que são teimosos, zelosos com alguma preocupação teórica ou patologicamente incapazes - psicologicamente - de "jogar fora" o trabalho antigo quando alguém sugere um problema com ele. E todos conhecemos indivíduos muito tímidos ou indiferentes para levantar preocupações ou sugerir casos extremos.
Quando esses tipos de desenvolvedores são emparelhados, o navegador assume rapidamente uma função passiva, e o que você acaba fazendo é a programação exclusiva com uma revisão automática de código. Este é um monumental desperdício de recursos.
2 - O emparelhamento impede a criatividade.
Ao contrário do que se pensava anteriormente sobre o valor do 'brainstorming de grupo', o consenso hoje em dia é que o trabalho criativo do conhecimento requer independência e autonomia . Quando você está trabalhando sozinho, pode criar rapidamente uma ideia maluca para ver se é realmente viável. Você pode montar um protótipo estranho sem palavras e, se falhar, não importa, porque ninguém sabe .
Compare isso ao emparelhamento: quando eu quiser experimentar um novo conceito, tenho que convencer meu parceiro, conversar com eles sobre a implementação, passo a passo, e esperar que eles não me julguem se falhar. Esse tipo de ambiente é tóxico para a criação de novas idéias.
3 - Menor designador de denominador comum.
Quando um par não pode criar novas idéias, como acima, ou quando os indivíduos não conseguem concordar com algum princípio fundamental de como um recurso deve ser projetado, o que sai é um design confuso que tenta comprometer e satisfazer ninguém.
Se você associar um desenvolvedor que cria abstrações de programação funcionais maravilhosas, eloqüentes e em direção ao céu com uma aberração de desempenho rápida e suja, o código que eles produzirão juntos normalmente não será terrivelmente elegante nem particularmente rápido.
4 - Falta de autonomia e transparência violenta.
Transparência violenta é uma frase que deduzi de uma polêmica moderadamente famosa (e bastante controversa) contra a metodologia Scrum. Ele descreve a maneira como algumas organizações infantilizam os desenvolvedores e os tratam com a suspeita normalmente reservada para trabalhadores não profissionais.
O que quer que você pense sobre os 'danos' de tornar o trabalho dos desenvolvedores totalmente transparente (e você pode não concordar que é realmente um mal), muitas pessoas valorizam sua autonomia e sua capacidade de trabalhar sozinhas, confiáveis para fazer a coisa certa. É uma necessidade psicológica importante, e forçar os desenvolvedores a parear (como já vi acontecer em pelo menos uma loja) deixará os funcionários consternados, chateados e alienados.
5 - Alguns desenvolvedores simplesmente não jogam bem em pares.
Algumas pessoas não podem ou não podem se comportar adequadamente em um ambiente pareado. Eles podem ter má higiene, maus hábitos de trabalho, uma personalidade abrasiva, uma maneira "barulhenta" e "intensa", ou uma série de outros atributos que os tornam bons trabalhadores individuais, mas pobres programadores.
Você pode resolver isso? Na verdade não. Mudar o comportamento pessoal é difícil. Uma loja de programação em pares precisa ter muito cuidado ao contratar e investir muito tempo para ver como alguém trabalha e se será capaz de trabalhar bem com seus colegas. Discriminar mais a personalidade, no entanto, significa que a contratação levará mais tempo, a menos que você afrouxe seus padrões em habilidades e conhecimentos.