Um representante interno, votação e crachás poderiam incentivar boas práticas de programação?


17

Pensando em voz alta - nós programadores adoramos todo esse material de votação / distintivos / representante, para que um esquema como esse seja introduzido no processo de revisão de código das empresas para incentivar uma melhor codificação.

Algo como

  • Você (ou outras pessoas em seu nome) pode postar uma revisão (pode ser um trecho, confirmação única ou uma série de) para uma revisão de código

  • Outros podem comentar sobre isso (seria semelhante às respostas no SE)

  • Emblemas podem ser dados / sugeridos (alguns seriam bons, outros, como "Comment Desert" ou outros)

  • Você pode votar de cima para baixo no próprio código e nos comentários e emblemas (por exemplo, se alguém sugeriu um emblema e você concordou / não)

O objetivo de um esquema como esse seria

  • Apresente um pouco de diversão para incentivar o uso de revisões de código

  • Melhorar a qualidade (neste esquema, é provável que os revisores de código e os revisores aprendam)

  • Reduza a chance de revisões de código provocando 'guerras do ego'

  • Forneça algumas métricas para ajudar a avaliar o desempenho individual

Isso poderia funcionar? Pensamentos?


2
Só encontrei este site - Stackexchange para revisões de código - boa idéia para projetos de código aberto / pessoais, mas seu público para muitas empresas é um non-starter codereview.stackexchange.com
Ryan

5
Parece que seria uma boa idéia por um tempo, mas a única coisa que eu faria de diferente seria me livrar dos distintivos de punição. Eles carregam consigo um estigma e humildade que desencorajam aqueles que estão ficando para trás de tentar alcançá-los.
Maple_shaft

1
É difícil isso. Penso que a verdade brutal é que muitas vezes podemos aprender mais com os erros (nossos e dos outros) do que com os sucessos. E, apesar de toda a conversa hippie florida, punições justas funcionam. Pergunte a seus pais;)
Ryan

9
O único problema é que Jon Skeet sempre estará sentado no topo com 100k repetições. Jon Skeet não funciona para a sua empresa? Não importa. Ele ainda estará lá.
Tom Anderson

1
Bom ponto - talvez o distintivo de vergonha "Eu chequei uma turma sem uma única linha de comentário" deva expirar em algum momento ou ser revogado depois de fazer algo positivo - caso contrário, não há incentivo para melhorar como você já tem 'a marca' e não importa mais
Ryan

Respostas:


20

Recompensas extrínsecas , como dinheiro, crachás ou representante, funcionarão a curto prazo , como dietas e qualquer outro sistema baseado em recompensa / punição.

Recompensa intrínseca , como objetivo e autonomia, deve ser usada e fornecer mais resultados a longo prazo. É muito mais difícil colocá-lo em prática do que sistemas simples de recompensa extrínseca, mas vale a pena.

Muitos especialistas fizeram pesquisas sobre o assunto. Aqui estão meus dois favoritos:

Daniel Pink fez uma ótima apresentação no TED sobre o assunto, fácil de assistir e entender.

Alfie Kohn , autor de Punished by Rewards , escreveu sobre o assunto:

Certamente, subornos e ameaças podem produzir conformidade temporária. Ofereça uma recompensa aos adultos por irem à academia ou às crianças por pegar um livro, e isso pode funcionar - por um tempo. Mas eles passam a pensar em si mesmos como motivados extrinsecamente; portanto, quando a recompensa não está mais disponível, não há razão para continuar. De fato, eles podem acabar menos interessados ​​em exercitar ou ler do que estavam antes.

Outro problema com recompensas (e punições) é que ele modificará o comportamento das pessoas. Por exemplo, se você der bônus ao seu funcionário, ele estará focado na obtenção desses bônus, independentemente dos outros objetivos (em toda a empresa). Isso criará individualismo e competição entre departamentos e funcionários. O ressentimento ocorrerá e todos assistirão a todos. Especialmente quando um dos seus objetivos é "ajudar a medir o desempenho individual".

O restante do funcionário pode refutar as regras do jogo e sair. O aumento da rotatividade se tornará um novo problema.

Observe que muitas sugestões sobre como melhorar a motivação foram feitas nesta comunidade .


2
Pierre, enquanto eu concordo com algumas das coisas que você diz e com as descobertas de Daniel Pink, eu realmente não acho que elas se apliquem à solução como ele as descreveu. Seria diferente se o representante, os crachás etc. estivessem associados a uma recompensa monetária, mas aqui eles são usados ​​apenas para aprimorar comportamentos que tenham um significado intrínseco. De certa forma, não é diferente dos aspectos de troca de pilha dos jogos, que é preciso dizer que foi benéfico em geral. Embora seja uma questão complexa, deve ser implementada com cuidado #
Homde

2
@ko: O dinheiro é um tipo de recompensa. Distintivos ou reputação é outra. Eu acredito que eles têm exatamente o mesmo efeito.

2
Pierre, devo discordar. Essas recompensas não são apenas puramente idealistas, mas também são dadas a você não pelo seu chefe, mas por seus colegas. O reconhecimento deles é um dos pontos de referência mais importantes para medirmos nossa maestria e o propósito de nossas ações. Um sistema de votos, distintivos e pontuação de reputação quantifica apenas o feedback e condensa o loop. Quero dizer, é por isso que o SE funciona.
back2dos

1
Pierre, eu realmente recomendo que você leia o livro de Daniel Pinks "Drive", que detalha incentivos e motivação. Existem muitos exemplos em que uma recompensa monetária foi realmente prejudicial, enquanto uma recompensa intrínseca não era ''
Homde

1
sim, mas, se houver distintivos, a classificação é uma boa medida para servir para destacar e direcionar o comportamento em direção a recompensas intrínsecas. Ou seja, eu poderia me importo que muito sobre a minha reputação real, mas eu faço quer ser um bom desenvolvedor. Portanto, o representante pode ser uma boa medida para não medir minha habilidade absoluta, medir pelo progresso relativo e me motivar a melhorá-la e a mim mesma. As coisas que não podemos medir, não podemos mudar. A parte difícil é, obviamente, projetar a medição para realmente ter algum significado e incentivar o comportamento correto.
Homde

5

Sim, poderia

Mas somente se você o projetar com muito cuidado, caso contrário, poderá sair pela culatra. Fiz alguns comentários, mas pensei em resumir minha posição

Para reputação, o objetivo principal deve ser fornecer uma medida que os funcionários possam usar para rastrear a melhoria de suas habilidades ao longo do tempo. Projete-o com muito cuidado com isso em mente, o difícil é encontrar boas maneiras de medir a habilidade, eu não posso fazer isso de cabeça.

Distintivos é principalmente uma coisa "divertida", eu os manteria longe e longe de questões mais orientadas para as habilidades. Ou seja, crachás como "esta semana coruja da noite" ou um grupo "Enviado! Crachá" ficariam bem. Se você tiver alguns emblemas baseados em habilidades, como "Corrigido a maioria dos bugs" ou "Reported most bugs", pense muito bem em como isso pode ser percebido e jogado. Os crachás devem ser mais sobre destacar o comportamento do que promovê-lo na IMO. Certifique-se de ter emblemas de equipe e individuais.

Eu recomendo fortemente contra crachás negativos, essas coisas devem ser divertidas e deixar as pessoas com medo de cometer erros é perigoso. Gere um e-mail útil e amigável para esses casos.

Eu recomendo fortemente que eles não decidam e votem nos crachás. As pessoas podem enviar suas sugestões de crachás, mas, como seu efeito sobre as pessoas pode ser bastante severo, os crachás usados ​​devem ser tomados por decisão cuidadosa de uma pessoa que sabe o que está fazendo e não obtém o voto da maioria.

Revisões de código é uma ideia interessante e acho que uma das maneiras de gerar um valor de habilidade. Destacar o código e discuti-lo pode ser realmente útil. No entanto, isso pode sair pela culatra, se todos souberem que estão sendo julgados em potencialmente tudo o que escrevem sobre o desenvolvimento, podendo ficar lento. Especialmente com o desenvolvimento iterativo, em que às vezes você escreve algo rapidamente e depois refatora, não quer esse comportamento.

Talvez isso possa ser compensado pela pessoa que envia o código por si própria ou por outra pessoa apenas sendo capaz de enviar o código de uma certa idade. No entanto, pode ser complicado saber que efeitos haverá

No final, acho que você terá que experimentá-lo e ver o que funciona e o que não funciona. Há um bom livro chamado Realidade quebrado, que pode ser interessante. Também o livro de Daniel Pinks "Drive" é uma leitura obrigatória.


2

Na minha opinião, NÃO , pois mede não a boa prática em si, mas um sintoma (se os outros acham que é uma boa prática).

Parafraseando um livro do tio Bob (esqueci o título): Bom código parece quase sem esforço, faz com que o problema pareça trivial, como se o idioma fosse criado para escrevê-lo.

Na minha experiência, esse código passa despercebido, e somente depois de muito tempo chama a atenção, que esse código nunca causou problemas, e talvez então se lembre, que o problema era, antes da introdução do código, uma enorme confusão de incertezas e imprecisão. O código que recebe elogios nas revisões geralmente é aquele que os revisores consideram em um bom dia, quando não estão com vontade de escolher, e que tem o menor número de alterações.


1
Erm - re: seu primeiro ponto - sim, mas é o melhor que temos, não é? As métricas de código não fornecem uma imagem suficientemente boa por si mesmas.
21711 Ryan

1
Isso não é verdade para qualquer tipo de método de revisão de código?
Nikie

O problema não é que você tente medi-lo, mas que defina um ciclo de feedback entre a sua medição e, com efeito, a motivação das equipes. Na minha experiência, isso leva rapidamente a motivar a equipe a 'vencer os testes', não a codificar melhor.
keppla

1
"Vencer os testes" é muito mais aplicável a métricas do que a revisão manual de código. Para levar o seu primeiro argumento ao extremo, você está dizendo que nunca há como decidir se algo é 'bom'. Bem, isso é verdade, mas, em algum nível, temos que aceitar que, se pessoas suficientes acham que algo é bom, provavelmente é bom.
21711 Ryan

1
+1 para o segundo argumento tho - grande código pode passar despercebido.
Ryan

1

A idéia traria uma nova dinâmica para a equipe. Se você sente que a equipe está em uma rotina, essa é uma boa maneira de agitar as coisas.

Lembre-se de que não serão todos os unicórnios e arco-íris. Alguns não vão gostar da iniciativa, portanto a produtividade / qualidade geral podem sofrer. No entanto, esse risco pode valer a pena. Depende da sua situação.


1

Sugiro usar motivação extrínseca (o que você propõe é uma forma de motivação extrínseca) para motivar as pessoas a fazerem coisas que são "mecânicas", repetitivas e chatas, como:

  • Chegando na hora das reuniões
  • Obtendo quadros de horários enviados no prazo
  • Atualizando a documentação
  • Compartilhando informações com a equipe

Eu não usaria isso como motivação em nenhum tipo de trabalho que exija criatividade ou onde a qualidade não possa ser mensurada objetivamente. Por exemplo, se você tem uma pessoa fazendo widgets e pode validar mecanicamente se uma peça é boa ou ruim, e você tem um processo que não permitirá que uma peça seja feita, a menos que siga o processo aprovado, é produtivo motivar o trabalhador com recompensas extrínsecas pela produtividade, porque o processo não permitirá que eles tomem atalhos para criar mais unidades em detrimento da qualidade.

Se você não possui essas salvaguardas, sua tentativa de motivação extrínseca certamente sairá pela culatra. A programação se enquadra diretamente nessa categoria - não podemos medir com segurança a qualidade do software. Isso ocorre porque, quando você cria um widget, ele sai da fábrica e não afeta o trabalho que você faz no próximo widget, mas quando você cria um software, precisa refazê-lo repetidamente. O que você faz agora tem efeitos a longo prazo. São esses efeitos a longo prazo que são muito importantes, mas não podem ser medidos. A motivação intrínseca é um motivador muito mais útil para esse tipo de coisa.

Que significa:

  • Permita que as pessoas assumam a responsabilidade pelo seu trabalho
  • Incentive as pessoas a conversar entre si sobre o que funciona bem e o que não funciona
  • Mostrar genuíno apreço pelo trabalho das pessoas

Algum tipo de SO interno não faria essas três coisas? Quero dizer, por que as pessoas dedicam tanto tempo ao SO? E o ponto sobre 'votação' é que acho muito mais provável que seja justo, preciso e valioso em um campo como esse porque concordo totalmente - não temos uma boa maneira não objetiva de medir a qualidade.
Ryan

0

Parte do que faz esse trabalho é o grande número de participantes que não se conhecem ou que precisam trabalhar diariamente. Eu pensaria que em um pequeno grupo, seria mais uma maneira de deixar o sistema com boa aparência ou fazer com que sua competição por promoção parecesse ruim. É por isso que as avaliações formais por pares geralmente são um sistema ruim. Em um pequeno grupo, as pessoas com o melhor representante serão aquelas que são politicamente mais astutos e não os melhores programadores.


0

A resposta curta é: sim, poderia funcionar.

A resposta um pouco mais longa é, sim, poderia funcionar, mas também poderia sair pela culatra.

Além de ser programador profissional, também sou analista de comportamento amador.

Uma das descobertas de assinatura da ciência comportamental moderna é que o comportamento é fortemente influenciado por suas conseqüências.

Se você controlar as consequências, poderá influenciar o comportamento até certo ponto. O grau depende de quão importantes são as consequências específicas para cada indivíduo cujo comportamento você está tentando mudar, e de como é fácil evitar essas conseqüências e encontrar outras pessoas nas quais elas estão dispostas a trabalhar.

Como programador profissional, uma consequência da escrita de código é que sou pago; pare de me pagar, e eu pararia de aparecer logo. O pagamento é uma consequência muito importante para mim (estou criando uma família), e não há outras consequências na minha empresa atual em que eu estaria disposto a trabalhar, em vez de ser pago.

Se você fosse meu chefe, decidiria quais as consequências (incentivos, reforçadores) a me oferecer. Mas você não decide como eu os percebo. Por exemplo, meu chefe pode decidir oferecer um espaço de estacionamento especial se eu for selecionado como "Codificador do mês". Se eu morasse em São Francisco ou em Nova York e dirigisse um carro, talvez estivesse disposto a trabalhar para isso. Mas onde eu moro agora, o estacionamento não é um problema e posso ir para o trabalho de qualquer maneira.

Na minha experiência, o maior risco que você corre ao implementar um programa como SO no local de trabalho é que você pode ser visto como oferecendo votos de colegas em vez de pagar às pessoas o que elas valem.


"Uma das descobertas de assinatura da ciência comportamental moderna é que o comportamento é fortemente influenciado por suas conseqüências". Isso é um achado? Realmente?? Não é algo que todos aprendemos muito cedo em nossa vida? Não toque em coisas quentes porque a consequência é que dói! Mente-lhe eu ainda beber demais às vezes ...
Ryan

@ Ryan: Você pensaria. Mas "não toque em coisas quentes porque dói" não faz ciência. Mostrar como fazer mudanças no comportamento mensuráveis, repetíveis, replicáveis ​​e previsíveis - é isso que faz da ciência do comportamento uma ciência.
Mike Sherrill 'Cat Recall'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.