Emparelhe Programação / Colaboração em uma pequena empresa

20

Eu trabalho em uma pequena empresa de desenvolvimento como desenvolvedor líder. Temos dois outros desenvolvedores, assim como meu chefe, que é desenvolvedor, mas na verdade não faz muito da codificação real.

O problema que estou tentando superar é multifacetado. Temos a tendência de trabalhar em nossos próprios projetos sem muita colaboração entre nós. De fato, eu (como desenvolvedor mais avançado) peço a opinião / ajuda dos outros mais do que a minha, porque valorizo ​​a opinião de um olho externo.

Quero aumentar nossa colaboração e expressei isso para eles. Em grande parte, porque gostaria de mostrar a eles algumas coisas sobre como se tornar melhores desenvolvedores e seguir as melhores práticas. Mas, considerando os tipos de personalidade de outros desenvolvedores, acho que eles se sentem mais à vontade trabalhando sozinhos.

Eu tenho lido sobre programação em pares e li (em alguns fóruns) que isso não funciona bem quando você tem um desenvolvedor mais avançado que os outros (o que eu sou). E, no entanto, considero imperativo começarmos a colaborar para que nosso trabalho não seja tão díspar.

Minha pergunta é se alguém já esteve em uma situação semelhante e o que funcionou para eles?

Sei que não é uma situação única, mas estou disposto a tentar várias abordagens.

Todos trabalhamos em uma área comum, os desenvolvedores não têm escritórios / cubículos individuais.

Ryan Williams
fonte
2
Você e os outros desenvolvedores têm escritórios, cubículos ou ficam em uma área comum?
@hatchet Todos trabalhamos em uma área comum.
Ryan Williams

Respostas:

12

Como já foi discutido em outras respostas por que a programação em pares não é uma solução para você , discutirei o que experimentamos atualmente e ficamos satisfeitos com os resultados.

Na minha opinião, o que você pode fazer para aumentar a colaboração é ter duas pessoas juntas em cada projeto. Cada um deles trabalha em uma parte diferente do projeto, mas como essas partes precisam ser integradas, os dois desenvolvedores precisam colaborar. Isso também requer que os dois programadores discutam a arquitetura (camadas e interfaces) do projeto e depois decidam assumir diferentes funções.

E, se essa abordagem, limitar o número de projetos que sua empresa pode gerenciar por vez, você poderá atribuir a esse par colaborador dois projetos simultaneamente.

Recentemente, experimentamos essa abordagem, com um deles desenvolvendo modelos + integração com apis e o outro programador manipulando visualizações e controladores . Encontramos as seguintes vantagens dessa configuração:

  1. A estrutura do código resulta de uma maneira muito melhor do que se apenas uma estivesse trabalhando em todos os aspectos do projeto.
  2. Não precisamos lembrá-los sobre a confirmação do código no repositório etc.
  3. Eles precisam se esforçar para testar o código um do outro, em vez de confiar apenas em nosso controle de qualidade dedicado.
Ozair Kafray
fonte
1
Eu vou pensar sobre isso também. Eu realmente gosto da separação do desenvolvimento das visualizações e controladores dos modelos, porque força os desenvolvedores a criar uma boa API para os modelos. Para trabalhar simultaneamente, também força a escrita de testes relevantes.
Ryan Williams
1
Decidi aceitar essa resposta porque, depois de analisar e conversar com alguns membros da equipe, estou convencido de que a melhor maneira de induzir a colaboração é dividir as funções no mesmo projeto. Pode não funcionar, mas parece ser o melhor ajuste que já ouvi.
Ryan Williams
7

Na minha opinião, a programação em pares não é a solução para o problema que você levanta.

Existem duas funções distintas em uma programação em pares. O observador está lá para revisar e comentar o código escrito pelo motorista . Se você está tentando transmitir idéias para melhorar as decisões que seus programadores juniores estão tomando, questiono a eficácia de sua capacidade de revisar criticamente o código que você está escrevendo quando desempenha o papel de motorista.

Sem essa dinâmica, o benefício da programação em pares é perdido.

Como programador sênior, sugiro que você considere um programa mais forte de treinamento e desenvolvimento de funcionários com seu chefe. Seus programadores juniores devem receber uma estrutura para melhorar suas habilidades. Normalmente, você pode usar métodos como esclarecimentos, escrever um documento de padrões de codificação, separar tarefas independentes de seu próprio trabalho e garantir a existência de processos adequados de revisão de código.


fonte
Vou levar seus pensamentos em consideração. É um pouco para analisar e retificar mentalmente o que estamos fazendo atualmente. Um sentimento honesto que tenho é um pouco de insegurança em minha posição como desenvolvedor líder. Não porque eu não esteja confortável do ponto de vista das habilidades, mas porque nossos outros desenvolvedores são mais velhos que eu (um significativamente, um não) e um ainda tem mais alguns anos de experiência. Sendo esse o caso, as revisões de código tradicionais pareceriam estranhas, porque eu não quero parecer que estou respirando pelo pescoço deles. Então, novamente, talvez seja isso que eu tenho que fazer.
Ryan Williams
Mais uma coisa Você acha que há menos benefícios do que vale a pena emparelhar o programa com eles, onde quando eu sou o motorista? Ainda poderia ser usado como uma maneira de apontar as melhores práticas e ainda ter alguma contribuição e feedback sobre o que estou fazendo (mesmo que o relacionamento certamente esteja desequilibrado).
Ryan Williams
Se o relacionamento de programação de pares for uma maneira, sugiro que não seja envolvente e talvez até um pouco condescendente com seus colegas de trabalho. Dependendo de como você o modela, isso pode facilmente aparecer como "é assim que eu programo e é a melhor abordagem". Você realmente não chamaria esse par de programação, pois ele não possui os dois componentes.
Eu acho que é realmente disso que eu tenho medo. Obrigado pelos pensamentos. Vou aceitar sua resposta por ser a primeira. (Houve algumas outras boas, também.)
Ryan Williams
As críticas do @RyanWilliams Code não são sobre "respirar pelo pescoço". Não é sobre você controlá-los. Em nosso lugar, usamos o ReviewBoard como plataforma e comentamos o código um do outro . Não há "hierarquia". A aprendizagem neste caso é "implícita". Eles aprendem lendo seu e seu código, com as perguntas de você e de outros desenvolvedores e as respostas / comentários a essas perguntas. E eles conhecem outras partes da base de código, o que é bastante benéfico para o IMHO.
Johannes S.
5

TL; DR : Eu não acho que a programação em pares funcione para você. Em vez disso, você deve tentar deixar as pessoas preocupadas com a qualidade do código a longo prazo e fazê-las querer encontrar respostas. Isso tem que ser feito informalmente.


Sobre cultura e qualidade

Sinto que esta questão não é sobre metodologia de programação, mas sobre cultura . Na minha experiência, é possível direcionar a cultura, mas raramente falando às pessoas sobre isso. Ou seja, tentar forçar um certo fluxo de trabalho em pessoas que não evoluíram naturalmente ou está muito distante da prática existente provavelmente terá consequências negativas.

Em outras palavras, você não quer se parecer com o terno que aparece por aí, usando as últimas palavras da moda, mesmo quando você está. A maioria dos programadores que conheço o identificaria mentalmente como ruído de fundo. Não seja uma abelha corporativa.

Na minha opinião, a principal pergunta que você deve se fazer é "estou feliz com a qualidade e o valor comercial do código que minha organização coloca?" e se a resposta for negativa, você deve perguntar "como faço para mudar isso?".

Por fim, qualidade e valor são definições humanas em que apenas você ou alguém da sua organização pode (e deve) pensar.

Programação e microgerenciamento em pares

Portanto, com o risco de parecer um pouco avante e duro, parece-me que ler sobre programação em pares realmente fez você pensar em alguma forma de microgerenciamento , ou o contrário. MM é uma receita infalível para alienar a maioria das pessoas.

Em defesa da programação em pares: a programação em pares não é sobre um cara olhando por cima do ombro de outro cara. Isso é tão micro quanto o gerenciamento consegue. PP é sobre o uso de duas mentes para pensar em dois níveis ao mesmo tempo - uma pessoa lida com alto nível , retrato grandes problemas enquanto o outro cuida do parafusos e porcas necessários para produzir código de trabalho. E, na minha humilde opinião, raramente funciona bem se os dois participantes não estão em posição de trocar de lugar. Eles devem ter experiência semelhante o suficiente para ter um arsenal profissional semelhante de conceitos e um vocabulário profissional compartilhado (não estamos ligados à mente - ainda , muhahaha).

Para a sua situação, eu diria que, como você é uma equipe pequena e é o único com experiência real (é o que parece sua postagem para mim), programar em pares ou revisar a maior parte do código na maioria das vezes não funcione. Você só tem 24 horas por dia. Em vez disso, algumas soluções que você pode considerar:

  • Incentive-os a participar do SO com a tag de idioma apropriada ou a publicar alguns trechos de código para revisão no Code Review SE. Inicie um pequeno concurso informal sobre quem pode ganhar mais pontos de representante de SO por semana.

    O SO pode fazer maravilhas para os desenvolvedores iniciantes, pois fornece feedback constante e segue os batimentos cardíacos da comunidade.

  • Dê uma olhada em alguns códigos que eles fazem check-in e desafie-os informalmente com algumas perguntas sobre sua evolução a longo prazo. A maioria dos programadores iniciantes simplesmente não está acostumada a pensar em tornar seu código legível e sustentável. Depois de colocar esses problemas em mente, eles buscarão mais informações por conta própria, de você ou de outras fontes.

idobia
fonte
Como todos, agradeço sua opinião. A única coisa que percebi ao postar isso é que tenho algum desconforto em ser quem está olhando por cima dos ombros. Na verdade, ambos são mais velhos que eu e um deles tem significativamente mais experiência. Portanto, eu não os imagino como pessoas que vão ao CE e pedem revisões de código. Eles não são novatos. Mas eles vêm de diferentes idiomas e práticas não-ortodoxas.
Ryan Williams
Entendo. Eu acho que é bom você não se sentir confortável olhando por cima dos ombros, porque eu não acho que você deveria. Ninguém quer ter alguém adivinhando cada pressionamento de tecla que eles fazem (exagerando).
Idolomeiro 28/08
4

Não acho que a programação em pares seja algo que o ajude em seu ambiente. Não é que isso não ajude a desenvolver os desenvolvedores menos experientes - há até uma pergunta de programadores sobre programação em pares com engenheiros de diferentes níveis de habilidade . Embora existam benefícios como compartilhamento de conhecimento e menos erros, a programação em pares requer um investimento de tempo maior. Com uma equipe de três desenvolvedores e apenas quatro pessoas com experiência / experiência em desenvolvimento, parece ser difícil manter uma rotina de programação em pares.

Penso que uma alternativa melhor na sua situação são as revisões de código, especialmente se você as adequar adequadamente. Uma revisão de código pode consistir em qualquer coisa, desde uma pessoa examinando um pouco de código e fornecendo feedback para várias pessoas (até toda a equipe) em uma sala por uma hora ou duas para examinar o design e a implementação de um componente inteiro. Elas podem variar conforme apropriado para o trabalho que está sendo realizado, especialmente com base no conhecimento, experiências e necessidades da equipe. Você ainda pode obter o aspecto de compartilhamento de conhecimento fazendo com que várias pessoas participem da revisão com o objetivo de encontrar problemas, fornecendo sugestões e adquirindo conhecimento lendo os resultados da revisão para incorporar os comentários em seu próprio trabalho, antes que eles sejam revisados. .

Thomas Owens
fonte
Parece ser uma opinião popular. Eu gosto da ideia de revisões de código. Mas, na minha opinião, eu acho que, com suas personalidades e níveis de habilidade, serei eu quem fará a revisão e eles apenas ouvirão (principalmente não envolvidos). Mas talvez haja uma maneira de envolvê-los mais. Acho que tenho que refletir sobre isso.
Ryan Williams
Além disso, para deixar claro, eu não estava falando sobre programação de pares como algo que fazemos o tempo todo. Em vez disso, dedique uma parte significativa, mas não grande, da semana de trabalho a ele para recursos maiores ou mais complexos. (Isso é parcialmente por necessidade prática Eu tenho minhas próprias demandas que precisam ser atendidas..)
Ryan Williams
2

Minha pergunta é se alguém já passou por uma situação semelhante e o que funcionou para eles.

Desde que você está convidando a experiência, aqui está o que eu fiz. Escolhi a abordagem de baixo risco e pedi a alguém décadas mais jovem que eu que passasse algum tempo trabalhando juntos. Não rotulamos a atividade. Ninguém, exceto eu, sabia que estávamos tentando uma nova técnica.

Não sei exatamente quais detalhes relacionar, mas o processo funcionou muito bem. Ele queria ser orientado, o que era algo que eu não tinha idéia de antecedência. Por isso, abriu a comunicação nas duas direções de uma maneira muito positiva.

De fato, eu (como desenvolvedor mais avançado) peço a opinião / ajuda dos outros mais do que a minha, porque valorizo ​​a opinião de um olho externo.

Parece que você pode enquadrar isso como progressão lógica do que está fazendo no momento.

dcaswell
fonte
Minha preocupação é que não tenho tanta certeza de que eles querem ser "orientados". Ambos são mais velhos que eu e um (significativamente mais velho) na verdade tem alguns anos mais experiência do que eu. Mas eu gosto da segunda parte do seu conselho.
Ryan Williams
E é natural se preocupar antes de fazer algo - porque você não tem informações. Minha experiência foi que, se você fizer isso, as pessoas sentirão que você não está preocupado, que você está relaxado e eles vão junto. E então, se funcionar - continue, e se não funcionar - tente outra coisa.
dcaswell
Talvez envolvê-los em um projeto maior que eu normalmente faria poderia facilitar um pouco isso. Por exemplo, estamos refazendo nosso CMS em breve. Demoraria um pouco para eu me acostumar com a ideia.
Ryan Williams
0

Alguns meses depois de levantar essa questão, devo dizer que estou feliz com nossos resultados. Mas não é exatamente o que eu aceitei no começo. Lembre-se de que é uma equipe pequena, portanto, esta solução não será adequada para todos.

Descobri que é melhor deixar todos fazerem seu próprio trabalho. E, com o tempo, desenvolvemos uma confiança mútua, onde, se encontrarmos um problema, chamaremos os outros em nosso auxílio. Não acho que alguém queira trabalhar com alguém vigiando por cima do ombro. Ocasionalmente, sento-me atrás de alguém e às vezes ajudo-o a resolver um problema sem ser solicitado. Às vezes, não tenho nada a acrescentar e talvez as incomode um pouco. Mas eles entendem que eu não estou lá para falar com eles. Estou lá para dar um tempo no que estou fazendo e apresentar um pouco de colaboração.

O que eu descobri é que as pessoas certas, ao longo do tempo (em uma pequena equipe), se sintonizam com o que outras pessoas estão fazendo. Não há necessidade de gerenciar micro ou contar a alguém o que eles estão fazendo de errado o tempo todo.

De tempos em tempos, sente-se com alguém e resolva um problema, no qual você é especialista ou alguém aprendendo, ou ambos. Explique por que você faria ou não algo de uma maneira e não de outra. As boas ideias costumam pegar, enquanto outras são deixadas para trás. E no final do dia, você tem um grupo produtivo e coeso de pessoas que podem estar trabalhando em coisas diferentes, mas compartilham um objetivo comum.

Ryan Williams
fonte