Quando a programação de pares funciona? Quando evitá-lo?

51

Em vez de emparelhar programaticamente de maneira servil o tempo todo, usamos a programação de pares seletivamente em nossa equipe. Eu acho que funciona melhor nas seguintes circunstâncias:

  • Aprimorar novos membros da equipe em um projeto (em vez de deixá-los passar por documentação ou código por conta própria).
  • Ter pessoas juniores e seniores trabalhando juntas (ajuda a mostrar algumas das habilidades e truques dos desenvolvedores mais experientes, além de permitir que os cães velhos aprendam novos truques às vezes).
  • Quando alguém está tentando localizar um defeito, geralmente ajuda a emparelhar com um novo conjunto de olhos.

Quando usar o programa de par e por quê?

Quando evitar a programação em pares? Por quê?

Paddyslacker
fonte
11
Tentando entender o valor e a lógica de encerrar esta questão três anos depois de ter sido claramente respondida objetivamente com referências à pesquisa empírica. De todas as práticas comuns ao Agile, essa é uma das mais pesquisadas e documentadas. A redação da pergunta precisa ser alterada de alguma forma? As expectativas / padrões mudaram nos três anos desde que foram publicados?
Michael

Respostas:

44

A pesquisa compilada por Laurie Williams indica que a programação em pares funciona melhor em equipes industriais quando

  • Os pares trabalham nas tarefas de especificação, design e programação complexa - os experimentos indicam que nenhuma melhoria de qualidade é mostrada ao trabalhar em tarefas simples em um par, mas pode haver melhorias na velocidade. Observe também que a "programação" em pares geralmente inclui atividades diferentes da escrita de código.
  • Cada indivíduo em um emparelhamento tem aproximadamente o mesmo nível de especialização - embora a programação de pares seja ótima para treinamento, os pares são mais envolvidos quando estão no mesmo nível.
  • As funções giram regularmente - a rotação regular ajuda a manter o copiloto atual envolvido, pois os indivíduos tendem a contribuir mais quando dirigem ou sentem que estão prestes a dirigir.
  • Os pares giram regularmente - as equipes demonstraram conforto em conhecer as diferentes partes do sistema que estão construindo. A rotação de pares ajuda na transferência de conhecimento, o que reduz certos riscos no projeto. Em um ambiente acadêmico, os pares são frequentemente designados, no entanto, eles geralmente são auto-designados durante os levantamentos. Nos dois casos, o par é mais eficaz quando os dois indivíduos estão dispostos a participar e vêem valor na atividade de emparelhamento.

Na minha experiência pessoal, descobri que minha equipe do XP gasta cerca de 60% da nossa programação de pares de tempo de desenvolvimento, em média. O restante do tempo é gasto no desenvolvimento individual. Não é incomum emparelhar para criar um design inicial, trabalhar sozinho no design por algumas horas e depois voltar a reunir-se para concluir partes difíceis ou difíceis do código.

Também descobri que a programação em pares é mais eficaz em blocos de aproximadamente 1,5 a 2,5 horas. Qualquer coisa muito menos tende a exigir muita sobrecarga para configurar, enquanto muito mais e os pares tendem a ficar irritadiços e cansados. Irritadiço e cansado significa que você não está se comunicando bem e pode estar deixando defeitos entrar no sistema.

Michael
fonte
Ótima resposta Michael. Aceitar isso de muitas boas respostas, pois tinha a combinação certa de experiência pessoal e um ótimo link para a pesquisa.
Paddyslacker 18/03/11
Embora, ironicamente, enquanto o link funcionava quando você publicou sua resposta, agora é 404, doh!
Paddyslacker 18/03/11
Corrigi o hiperlink na sua resposta Michael, então está tudo bem novamente.
Paddyslacker 18/03/11
a parte "complexa" é muito importante. Se você fizer um trabalho trivial de digitação, seu parceiro ficará entediado muito rapidamente.
Dave O.
3
@DaveO .: Só posso fazer coisas simples usando programação em pares. Para tarefas complexas, preciso pensar, e a programação em pares é apenas uma fonte de distração (consulte a resposta de Will Sargent). Ainda acho muito útil discutir problemas complexos com colegas, mas isso é diferente de escrever todo o código.
Giorgio
29

A programação em pares funcionou para mim em muito, muito poucas situações.

Onde a programação em pares falha para mim

A história curta é que a programação em pares não funciona para mim como a principal maneira de desenvolver software. Posso emparelhar o programa por um dia ou talvez uma semana, especialmente se estivermos focados em um problema específico. Mas depois disso? Terminei. Torrada. Não quero ver ninguém, conversar com ninguém, e preciso de pelo menos alguns dias em uma caverna até estar apto para companhia humana novamente.

É uma história triste, mas o engraçado é que agora estou muito mais feliz com o final. Estou felizmente empregado em um contrato em que trabalho em casa ou em uma cafeteria, fiz novos amigos e explorei mais San Francisco do que jamais pensei ser possível. Eu tenho uma bicicleta e um laptop e, desde que eu cumpra meus prazos e verifique o código regularmente, meu tempo é meu.

Vou listar os grandes problemas que tenho com a programação de pares na frente e dar detalhes e anedotas mais tarde.

  1. Dividir o foco.
  2. Sem experimentação.
  3. Sem notas altas.
  4. Sem orgulho na propriedade.
  5. Nenhuma escapatória...

... Perguntei aos meus colegas de trabalho se eles viram o que eu vi, se estava faltando alguma coisa, qualquer coisa - não vi como isso poderia funcionar, como as pessoas poderiam continuar fazendo isso. Eles disseram que eu estava indo bem, que só levou tempo para me instalar e me ajustar. Que foi difícil para todos no começo.

Eventualmente, eu me afastei. Entre as dores de cabeça ofuscantes, a insônia e a necessidade não atendida de escrever código, parei de responder à entrada. Eu podia olhar para uma tela e não ver nada. Alguém poderia falar comigo inesperadamente e eu não os ouviria. Eu estava cumprindo os requisitos rotineiros do meu trabalho, mas não estava lá. Eu tinha usado tudo o que tinha acabado de aparecer para o dia. Comecei a verificar meu iPhone quando meu outro parceiro estava digitando.

Finalmente - apenas três meses depois, e pela primeira vez na história -, fui demitido por não fazer parte de uma equipe quando programava pares.

Não sozinho

Escrevi isso não apenas para entendê-lo, mas também para poder falar sobre isso. Presume-se que a programação em pares funcione para a maioria das pessoas e é muito mais fácil e rápida do que a programação em solo seria. Pode ou não ser esse o caso, mas como prática a longo prazo, a programação em pares não funciona para mim. Há muitas outras pessoas que a programação de pares também não funciona. Nós também importamos ...

Will Sargent
fonte
2
Eu também. Praticamente apenas no rastreamento de defeitos e, mesmo assim, é mais brainstorming e filosofia do que a programação real.
Hplbsh
4
+1 resposta perspicaz. Às vezes, parece que os defensores da Programação em Pares esquecem-se de nós, solitários e introvertidos. E por coincidência, muitas pessoas interessadas na programação também são introvertidos ...
Andres F.
6
@AndresF .: Além de solitários e introvertidos, também existem pessoas independentes e que apenas precisam de seu espaço para organizar seus pensamentos. Para disseminar o conhecimento entre os membros da equipe, as revisões de código são pelo menos tão eficazes quanto a programação em pares.
Giorgio
2
@Giorgio Concordou. Na verdade, eu apoio a programação parcial de pares: resolvendo alguns problemas difíceis em pares. Mas alguns defensores acham que ele deve ser usado na maioria das vezes para a maioria das tarefas de programação, das quais não concordo.
Andres F.
4
@AndresF .: Eu concordo com você. "Programação de pares parciais" ou, usando palavras menos modernas, "discutindo juntos um problema difícil quando necessário" é uma abordagem bastante razoável, usada não apenas para programação, mas também para aprender na escola etc. No entanto, não considero essa prática uma bala de prata que deve ser usada o tempo todo.
Giorgio
10

Minha equipe faz programação em pares desde o início, muito antes de eu trabalhar lá, como parte de uma loja no estilo de "programação extrema". A programação em pares é o estado padrão ; as pessoas só ficam solteiras se houver um número ímpar ou ocasionalmente para investigações, especialmente aquelas que envolvem mexer com equipamentos hostis e tentar fazê-lo funcionar.

"Junior / senior" não é o único caminho a percorrer. "Intermediário / Júnior" é útil; ajuda o sujeito de nível intermediário a sintetizar o conhecimento obtido, forçando-o a comunicá-lo a outra pessoa. Desafios "Intermediário / Intermediário": duas pessoas trabalham juntas para compartilhar seus conhecimentos, se comunicar e trabalhar como parte de uma equipe. E mesmo se você tiver dois caras realmente seniores, é provável que eles tenham áreas de especialização diferentes e possam apresentar abordagens diferentes. Os aspectos de compartilhamento de conhecimento não terminam quando alguém está vagamente "atualizado" em um projeto. Em vez disso, a programação em pares é o epítome de uma organização que aprende . Novas técnicas e melhores práticas se espalham rapidamente.

A programação em pares também ajuda a manter a qualidade do código (menos defeitos) e a sanidade do código (ele não apenas faz o que pretende, mas faz o que deveria ... idealmente sem diminuir o desempenho de várias semanas. buraco fazendo a coisa errada, ou duas coisas certas diferentes que entrarão em conflito descontroladamente). Ajuda os programadores a manter seu foco: aqui no coração do Vale do Silício, casa das 80 horas semanais de trabalho, podemos trabalhar apenas 40 horas por semana, porque estamos fazendo codificação intensa por oito horas por dia, mudando as coisas fora um com o outro. (Além disso, se você demorasse mais a programar em pares, provavelmente sairia. Ou pelo menos se esgotaria.) Isso é ótimo para o equilíbrio entre trabalho e vida pessoal e também ajuda a sua organização quando é importante ter uma resposta rápida (resposta de baixa latência, em particular).

Não é tudo, completamente, 100% de pêssegos e creme; Acho que a programação em pares é ocasionalmente um obstáculo para a minha aplicação de processos cerebrais intuitivos que são úteis em certos problemas. Mais recentemente, em uma tarefa de vazamento de memória, passei algum tempo com e sem pares; sem um, me senti mais livre para mexer e experimentar experimentos sem realmente saber exatamente como explicar o que estava fazendo a qualquer momento. Há também algumas vantagens em trabalhar com singleton, poder sair pela tangente e fazer certas refatorações selvagens (avaliadas na metodologia XP) por capricho.

Mas, ao todo, os benefícios superam os custos, e o emparelhamento funcionou espetacularmente para nós: desde o estágio de inicialização até a aquisição por uma empresa maior e nossa integração subseqüente. (Falando nisso, a programação em pares nos ajudou a manter uma continuidade da cultura através da expansão e apesar de um pouco de rotatividade).

(Desenvolvemos um dispositivo de software em Perl, preço de tabela entre US $ 4.000 e US $ 40.000.


fonte
4

Nunca trabalhei em uma configuração de "Programação em pares" e, no entanto, posso afirmar que fiz parte das três circunstâncias listadas. O cenário que você menciona parece mais "programação regular", com fases de ajuda / treinamento lançadas. Não fizemos tudo isso antes da criação da "programação em pares"? Programação em pares, presumo que exigiria uma abordagem mais comprometida, onde o processo de compartilhamento dentro de uma equipe não pare no minuto em que você enfrentar a tarefa ou o problema imediato em questão. Mas então é isso que eu "penso" e não o que "sei".

Pessoalmente para programação em pares Eu gostaria de trabalhar em uma equipe onde tenho a chance de aprender e compartilhar meus conhecimentos. Uma equipe desequilibrada em que todos com quem trabalha estão quilômetros à sua frente ou muito abaixo do par podem ficar desinteressantes rapidamente. Além disso, eu teria medo de trabalhar com pessoas que são definidas em suas crenças e difíceis de convencer.

Preets
fonte
Você está certo, poderíamos resolver as circunstâncias que mencionei sem programação em pares, mas usamos as técnicas de programação em pares de uma pessoa dirigindo a outra observando e desligando-as em intervalos regulares. Isso é um pouco mais formal do que apenas ajudar / treinar. Muitas lojas XP fazem muito mais programação em pares do que isso - estou me perguntando qual foi a quantidade "certa" de emparelhamento para as pessoas.
Paddyslacker 02/09/10
Sim, eu também gostaria de ouvir pessoas que trabalham com PP por longos períodos de tempo. Entendo como os consultores que trabalham com várias empresas ou equipes podem se beneficiar do PP, mas essas tarefas geralmente duram alguns meses. Seria interessante saber como o PP funciona em uma empresa de software típica, onde os projetos geralmente duram mais de um ano.
Preets
2

Temos experimentado a programação de pares em nossa equipe nos últimos meses. Eu sinto que é bastante útil quando você está trabalhando em algo novo (nova tecnologia, novo recurso etc.), pois você pode rapidamente trocar idéias com outra pessoa da equipe e validá-las / invalidar. Além disso, uma revisão por pares ajuda a manter os bugs afastados.

Outro colega de equipe tentou usar a programação em pares com um teste para executar o ATDD e eles ficaram bastante satisfeitos com os resultados (de acordo com seus cálculos, um aumento no custo de desenvolvimento de 20% levou a uma redução de cerca de 50% no tempo de teste)

Amit Wadhwa
fonte
1

Boa noite

muitas vezes debatemos sobre práticas de programação extrema e a programação em pares . No tempo, somos capazes de entender que a programação é uma atividade individual porque os programadores precisavam de concentração e isolamento. Os programadores da época estavam na zona , um estado mental em que podiam se concentrar com eficiência no código e tomar decisões agradáveis ​​e criativas.

A programação em pares também parece ser arriscada se você presumir que um programador interrompe o outro. Por outro lado, é mais difícil interromper dois programadores trabalhando juntos. Na programação Solo, por exemplo, será mais fácil ser interrompido, por isso é quase impossível para um programador solo permanecer na "zona".

A qualidade do código é outra quando o prazo final está chegando. As pessoas estarão sempre com pressa, sejam programadores em pares ou programadores individuais: eles não aplicarão certas práticas recomendadas e apenas esquecerão os testes de unidade.

Eu ficaria com a programação em pares. Porque quando se trata de riscos, quando um programador se foi, você sempre terá outro cara para documentar o processo e ensinar a todos os outros como ele funciona.

Junior M
fonte
1

Trabalhar em qualquer coisa de complexidade não trivial tende a ser um bom candidato para a programação em pares, para que várias pessoas entendam o código, em vez de apenas um desenvolvedor conhecer uma parte da base de código. Outro caso é quando alguém quer transferir algumas habilidades. Um exemplo aqui pode ser ter alguém realmente bom em testes de unidade emparelhado com alguém que não é tão familiarizado com o conceito e, portanto, ajuda a adquirir um hábito inicial em algo.

Quanto a onde evitar a programação em pares, resmunge as tarefas de trabalho simples, onde seria melhor dividir o trabalho em dois grupos e deixar que cada desenvolvedor faça parte do trabalho separadamente para concluir o trabalho. Algumas tarefas podem exigir bastante digitação, mas não são tão grandes que vale a pena gastar algumas horas tentando encontrar uma maneira melhor de fazê-lo, como seria possível se cada desenvolvedor adotasse uma abordagem de força bruta por alguns minutos. horas.

JB King
fonte