¿Podría un representante interno, votación e insignias fomentar buenas prácticas de programación?

17

Solo pensando en voz alta: a los programadores nos encantan todas estas cosas de votación / insignias / representantes, por lo que podría introducirse un esquema como este en el proceso de revisión de código de las empresas para fomentar una mejor codificación.

Algo como

  • Usted (u otras personas en su nombre) puede publicar una revisión (podría ser un fragmento, un solo compromiso o una serie de) para una revisión del código

  • Otros pueden comentarlo (sería similar a las respuestas en SE)

  • Se pueden dar / sugerir insignias (algunas serían buenas, otras serían malas como "Comentario Desierto" o algo así)

  • Puede votar hacia arriba / abajo sobre el código en sí y los comentarios e insignias (por ejemplo, si alguien sugirió una insignia y usted estuvo / no estuvo de acuerdo)

El objetivo de un esquema como este sería

  • Presente un poco de diversión para alentar el uso de revisiones de código

  • Mejore la calidad (en este esquema, es probable que tanto el revisor del código como los revisores aprendan)

  • Reduzca la posibilidad de que las revisiones de código provoquen 'guerras de ego'

  • Proporcione algunas métricas para ayudar a medir el rendimiento individual.

¿Esto podría funcionar? Pensamientos?

Ryan
fuente
2
Acabo de encontrar este sitio - StackExchange para revisiones de código - buena idea para código abierto / proyectos personales, pero es público para muchas empresas, es un codereview.stackexchange.com
Ryan
55
Parece que sería una buena idea por un tiempo, pero lo único que haría de manera diferente sería deshacerme de las insignias de castigo. Llevan consigo un estigma y humildad que desalientan a los que se están quedando atrás para intentar ponerse al día.
maple_shaft
1
Es difícil eso. Creo que la verdad brutal es que a menudo podemos aprender más de los errores (nuestros y de otros) que lo que podemos aprender de los éxitos. Y a pesar de toda la charla hippy florida, los castigos justos funcionan. Pregunta a tus padres;)
Ryan
9
El único problema es que Jon Skeet siempre estará allí en la parte superior con 100k rep. Jon Skeet no trabaja para su empresa? No importa Él todavía estará allí.
Tom Anderson
1
Buen punto: tal vez la insignia de vergüenza "Verifiqué una clase sin una sola línea de comentarios" debería expirar en un momento o ser revocada una vez que haya hecho algo positivo, ya que de lo contrario no hay incentivo para mejorar ya que ya consiguió 'la marca' y ya no importa
Ryan

Respuestas:

20

La recompensa extrínseca como dinero, insignias o representante funcionará, a corto plazo , como las dietas y cualquier otro sistema basado en recompensas / castigos.

La recompensa intrínseca , como el propósito y la autonomía, debe usarse en su lugar y proporcionar resultados a más largo plazo. Es mucho más difícil ponerlo en práctica que los simples sistemas de recompensa extrínseca, pero vale la pena.

Muchos expertos investigaron sobre el tema. Aquí están mis dos favoritos:

Daniel Pink hizo una gran presentación en TED sobre el tema que es fácil de ver y entender.

Alfie Kohn , autor de Castigo por recompensas , escribió sobre el tema:

Claro, los sobornos y las amenazas pueden producir un cumplimiento temporal. Ofrezca una recompensa a los adultos por ir al gimnasio, oa los niños por recoger un libro, y puede funcionar por un tiempo. Pero llegan a pensar en sí mismos como motivados extrínsecamente, por lo que cuando la recompensa ya no está disponible, no hay razón para continuar. De hecho, pueden terminar menos interesados ​​en hacer ejercicio o leer que antes.

Otro problema con las recompensas (y los castigos) es que modificará el comportamiento de las personas. Por ejemplo, si le da un bono a su empleado, se centrará en obtener esos bonos, independientemente de los otros objetivos (de toda la empresa). Creará individualismo y competencia entre departamentos y empleados. El resentimiento tendrá lugar y todos mirarán a todos. Especialmente cuando uno de sus objetivos es "ayudar a medir el rendimiento individual".

El resto del empleado puede refutar las reglas del juego y renunciar. El aumento de la rotación se convertirá en un nuevo problema.

Tenga en cuenta que se han hecho muchas sugerencias sobre cómo mejorar la motivación en esta comunidad .

Comunidad
fuente
2
Pierre, aunque estoy de acuerdo con algunas de las cosas que dices y los hallazgos de Daniel Pink, realmente no creo que se apliquen a la solución tal como los describió. Sería diferente si el representante, las insignias, etc., estuvieran vinculados a una recompensa monetaria, pero aquí solo se usan para mejorar el comportamiento que tiene un significado intrínseco. De alguna manera, no es diferente a los aspectos de juego de stackexchange, que uno tiene que decir que ha sido beneficioso en general. Sin embargo, es un problema complejo, por lo que debe implementarse con cuidado
Homde
2
@mko: El dinero es un tipo de recompensa. Insignias o reputación es otra. Creo que tienen exactamente el mismo efecto.
2
Pierre, debo estar en desacuerdo. Estas recompensas no solo son puramente idealistas, sino que no te las da tu jefe, sino tus compañeros. Su reconocimiento es uno de los puntos de referencia más importantes para nosotros mismos para medir nuestro dominio y el propósito de nuestras acciones. Un sistema de votos, distintivos y puntaje de reputación solo cuantifica los comentarios y condensa el ciclo. Quiero decir, es por eso que SE funciona.
back2dos
1
Pierre, realmente te recomiendo que leas el libro de Daniel Pinks "Drive", que profundiza en incentivos y motivación. Hay muchos ejemplos en los que una recompensa monetaria era realmente perjudicial, mientras que una recompensa intrínseca no era ''
Homde
1
sí, pero si se trata de un distintivo, la calificación es una buena medida de eso que servirá para resaltar e impulsar el comportamiento hacia recompensas intrínsecas. Es decir, es posible que no me importe mucho mi reputación real, pero quiero ser un buen desarrollador. Por lo tanto, el representante podría ser bueno si no mide mi habilidad absoluta, mide por progreso relativo y me motiva a mejorarlo a mí mismo. Las cosas que no podemos medir no podemos cambiar. La parte difícil es, por supuesto, diseñar la medición para que tenga algún significado y fomente el comportamiento correcto.
Homde
5

Si, podria

Pero solo si lo diseñas con mucho cuidado, de lo contrario podría ser contraproducente. He hecho algunos comentarios, pero pensé en resumir mi posición.

Para la reputación, el objetivo principal debe ser proporcionar una medida que los empleados puedan usar para rastrear su mejora de habilidades con el tiempo. Diseñe con mucho cuidado con eso en mente, lo difícil es encontrar buenas formas de medir la habilidad, no puedo hacerlo desde la cabeza.

Las insignias son principalmente una cosa "divertida", las mantendría principalmente alejadas y lejos de los problemas más orientados a las habilidades. Es decir, insignias como "esta semana noctámbulo" o un grupo "insignia enviada" estaría bien. Si tiene algunas insignias basadas en habilidades como "Se corrigieron la mayoría de los errores" o "Se reportaron la mayoría de los errores", piense detenidamente cómo se puede percibir y jugar. Las insignias deberían ser más sobre destacar el comportamiento que promocionarlo en la OMI. Asegúrese de tener insignias individuales y de equipo.

Recomiendo encarecidamente contra las insignias negativas, estas cosas deberían ser divertidas y hacer que las personas tengan miedo de cometer errores es peligroso. En su lugar, genere un correo electrónico útil y amigable para esos casos.

Recomiendo encarecidamente que no se les permita decidir y votar sobre las insignias. Las personas pueden enviar sus sugerencias de credenciales, pero dado que su efecto en las personas puede ser bastante severo, las credenciales que se utilizan deben tomarse por decisión cuidadosa de una persona que sepa lo que están haciendo y no por el voto mayoritario.

La revisión de códigos es una idea interesante y creo que es una de las formas en que podría generar un valor de habilidad. Destacar el código y discutirlo podría ser realmente útil. Sin embargo, podría ser contraproducente, si todos saben que están siendo juzgados potencialmente por todo lo que escriben, el desarrollo puede retrasarse. Especialmente con el desarrollo iterativo donde a veces escribes algo rápidamente y luego refactorizas, no quieres ese comportamiento.

Quizás eso podría ser compensado ya sea por la persona que envía el código o por otra persona que solo puede enviar el código de una determinada edad. Sin embargo, puede ser complicado saber qué efectos habrá

Al final creo que tendrás que probarlo y ver qué funciona y qué no, hay un buen libro llamado Reality is broken que podría ser interesante. También el libro de Daniel Pinks "Drive" es una lectura obligada.

Homde
fuente
2

En mi opinión, NO , ya que no mide la buena práctica en sí, sino un síntoma (si otros piensan que es una buena práctica).

Parafraseando un libro del tío Bob (olvidó el título): un buen código parece casi sin esfuerzo, hace que el problema parezca trivial, como si el lenguaje estuviera hecho para escribirlo.

En mi experiencia, dicho código pasa desapercibido, y solo después de mucho tiempo se hace notar que este código nunca causó problemas, y tal vez luego se recuerda, que el problema era, antes de la introducción del código, un gran lío de incertidumbre y vaguedad. El código que recibe elogios en las revisiones suele ser el que los revisores consideran en un buen día cuando no están de humor para molestar, y que tiene la menor cantidad de cambios.

keppla
fuente
1
Erm: re: tu primer punto, sí, pero eso es lo mejor que tenemos, ¿no? Las métricas de código no dan una imagen suficientemente buena por sí mismas.
Ryan
1
¿No es cierto para cualquier tipo de método de revisión de código?
nikie
El problema no es que trates de medirlo, sino que establezcas un ciclo de retroalimentación entre tu medición y, en efecto, la motivación del equipo. En mi experiencia, esto lleva rápidamente a motivar al equipo a 'superar las pruebas', no a codificar mejor.
keppla
1
"Superar las pruebas" es mucho más aplicable a las métricas que la revisión manual de código. Para llevar tu primer argumento al extremo, estás diciendo que no hay forma de decidir que algo es "bueno". Bueno, eso es cierto, pero en algún nivel tenemos que aceptar que si suficientes personas piensan que algo es bueno, entonces probablemente sea bueno.
Ryan
1
+1 para el segundo argumento aunque: un gran código puede pasar desapercibido.
Ryan
1

La idea traería una nueva dinámica al equipo. Si siente que el equipo está en una rutina, esta es una buena manera de sacudir las cosas.

Solo recuerda que no serán todos unicornios y arcoiris. A algunos no les va a gustar la iniciativa, por lo que la productividad / calidad general puede verse afectada. Sin embargo, este riesgo puede valer la pena. Depende de tu situación.

Jeff
fuente
1

Sugiero usar la motivación extrínseca (lo que está proponiendo es una forma de motivación extrínseca) para motivar a las personas a hacer cosas "mecánicas", repetitivas y aburridas, como:

  • Llegar a tiempo a las reuniones
  • Obtener hojas de tiempo enviadas a tiempo
  • Actualización de documentación
  • Compartir información con el equipo.

No lo usaría para motivarme en ningún tipo de trabajo que requiera creatividad, o donde la calidad no pueda medirse objetivamente. Por ejemplo, si tiene una persona que hace widgets y puede validar mecánicamente si una parte es buena o mala, y tiene un proceso que no permitirá que se realice una parte a menos que siga el proceso aprobado, entonces es productivo motivar el trabajador con recompensas extrínsecas por productividad porque el proceso no les permitirá tomar atajos para hacer más unidades a expensas de la calidad.

Si no tiene esas salvaguardas, entonces su intento de motivación extrínseca seguramente fracasará. La programación cae directamente en esta categoría: simplemente no podemos medir de manera confiable la calidad del software. Esto se debe a que cuando crea un widget, abandona la fábrica y no afecta el trabajo que realiza en el siguiente widget, pero cuando crea un software, debe seguir reelaborándolo una y otra vez. Las cosas que haces ahora tienen efectos a largo plazo. Son estos efectos a largo plazo los que son muy importantes pero no se pueden medir. La motivación intrínseca es un motivador mucho más útil para este tipo de cosas.

Eso significa:

  • Deje que las personas se hagan responsables de su trabajo.
  • Aliente a las personas a hablar entre sí sobre lo que funciona bien y lo que no.
  • Mostrar un aprecio genuino por el trabajo de las personas.
Scott Whitlock
fuente
¿No haría algún tipo de SO interno las tres cosas? Quiero decir, ¿por qué la gente dedica tanto tiempo al SO? Y el punto sobre 'votar' es que creo que es mucho más probable que sea justo, preciso y valioso en un campo como este porque estoy totalmente de acuerdo: no tenemos una buena forma no objetiva de medir la calidad.
Ryan
0

Parte de lo que hace que esto funcione es la gran cantidad de participantes que no se conocen o que tienen que trabajar juntos todos los días. Creo que en un grupo pequeño, se convertiría más en una forma de jugar al sistema para que se vea bien o para que su competencia para la promoción se vea mal. Esta es la razón por la cual las evaluaciones formales entre pares son a menudo un sistema pobre. En un grupo pequeño, las personas con el mejor representante serán las más astutas políticamente, no las mejores programadoras.

HLGEM
fuente
0

La respuesta corta es sí, podría funcionar.

La respuesta un poco más larga es, sí, podría funcionar, pero también podría ser contraproducente.

Además de ser un programador profesional, también soy un analista de comportamiento aficionado.

Uno de los hallazgos característicos de la ciencia moderna del comportamiento es que el comportamiento está fuertemente influenciado por sus consecuencias.

Si controla las consecuencias, puede influir en el comportamiento hasta cierto punto. El grado depende de cuán importantes son las consecuencias específicas para cada individuo cuyo comportamiento está tratando de cambiar, y de cuán fácil es para ellos evitar sus consecuencias y encontrar a otros para quienes están dispuestos a trabajar.

Como programador profesional, una consecuencia de escribir código es que me pagan; deja de pagarme y dejaría de aparecer en poco tiempo. Pagar es una consecuencia realmente importante para mí (estoy criando una familia), y no hay otras consecuencias en mi compañía actual por las que estaría dispuesto a trabajar en lugar de recibir un pago.

Si fueras mi jefe, decidirías qué consecuencias (incentivos, refuerzos) ofrecerme. Pero no puedes decidir cómo los percibo. Por ejemplo, mi jefe podría decidir ofrecer un espacio de estacionamiento especial si soy seleccionado como "Codificador del mes". Si viviera en San Francisco o en la ciudad de Nueva York y condujera un automóvil, podría estar dispuesto a trabajar para eso. Pero donde vivo ahora, el estacionamiento no es un problema, y ​​puedo caminar al trabajo de todos modos.

En mi experiencia, el mayor riesgo que corre con la implementación de un programa como SO en el lugar de trabajo es que se le puede percibir como ofreciendo votos entre pares en lugar de pagar a las personas lo que valen.

Mike Sherrill 'Retiro del gato'
fuente
"Uno de los hallazgos característicos de la ciencia moderna del comportamiento es que el comportamiento está fuertemente influenciado por sus consecuencias". Eso es un hallazgo? ¿¿De Verdad?? ¿No es algo que todos aprendemos muy temprano en nuestra vida? ¡No toques cosas calientes porque la consecuencia es que duele! Eso sí, todavía bebo demasiado a veces ...
Ryan
@ Ryan: Pensarías. Pero "no toques cosas calientes porque duele" no es una ciencia. Mostrar cómo hacer cambios en el comportamiento medibles, repetibles, replicables y predecibles: eso es lo que hace que la ciencia del comportamiento sea una ciencia.
Mike Sherrill 'Cat Recall'