Son las solicitudes de extracción el lugar para la formación de juniors

11

Tenemos el concepto de que todo el código de una solicitud de extracción en maestro debe estar listo para la producción. Esto tiene sentido y es una declaración justa en mi opinión.

La idea aquí es que una vez que haya creado el RP, está declarando que lo hubiera puesto en maestro, pero le gustaría que algunos revisores simplemente 'concurrieran' con usted y descubrieran cualquier cosa que se pierda.

Como solo somos humanos, cometemos errores y esperamos que otros revisores puedan encontrar elementos que las pruebas unitarias no pudieron encontrar: errores ortográficos, javadocs incorrectos, etc.

PERO, ¿es una solicitud de extracción el lugar donde deberíamos proporcionar algún nivel de asistencia / capacitación a los desarrolladores y, de ser así, a qué nivel?

Cada vez que presiona nuevos cambios, los revisores tienen que volver a revisar sus cambios, lo que toma de su tiempo de desarrollo y provoca la revisión de los cambios.

Entonces, ¿cuánto entrenamiento se espera, debe permitirse, en las solicitudes de extracción? Parte de mí siente que varía de juniors a seniors. Sin embargo, también siento que no debería ser el lugar para encontrar grandes cantidades de problemas, incluso para los juniors.

¿Alguien más está tratando de lograr que los desarrolladores alcancen el objetivo de "Mi solicitud de extracción debe estar lista para la producción"?

Riaan Schutte
fuente

Respuestas:

13

No. Las solicitudes de extracción no son el lugar para el entrenamiento. Tu equipo tiene la idea correcta. Un PR significa "Creo que es bueno ir. ¿Puedo ver esto en caso de que me haya perdido algo? Soy humano después de todo". Y sospecho que eso es exactamente lo que está haciendo tu aprendiz. Sinceramente, piensan que es bueno ir.

Aquí hay una idea extrema (juego de palabras). Programa en pareja con el aprendiz que te está dando la acidez estomacal. Como miembro más importante del equipo, es su trabajo elevarlos y hacerlos productivos.

RubberDuck
fuente
Gracias @RubberDuck. El programa de parejas es una gran idea y lo estamos haciendo, más o menos. Sospecho que deberíamos estar haciendo esto más. Sin embargo, algunas métricas o herramientas adecuadas para medir si una de sus "gotas" en el océano está cometiendo repetidamente los mismos errores ayudaría a saber quién necesita también esta programación de pares. ¿Estoy seguro de que este problema empeora con los equipos más grandes?
Riaan Schutte
2
Bueno, yo diría que todos necesitamos emparejarnos la mayor parte del tiempo. Uno de nuestros aprendices ha detectado más de unos pocos de mis errores y soy uno de los más altos del equipo. Probablemente podría consultar el número de comentarios sobre las solicitudes de extracción, pero no lo recomendaría. Algo sobre individuos e interacciones ... en serio. Es tu trabajo levantar a este desarrollador. Obtenga una copia de Clean Code o algo así.
RubberDuck
1
En un lugar de trabajo donde cada desarrollador está trabajando en un trabajo cotizado para un cliente (no hay proyectos internos que se financien), la programación de pares no es tan fácil, ¡pero sigue siendo importante! Parece algo que la compañía puede tener que desembolsar e invertir si queremos desarrolladores más productivos en el trabajo citado.
Riaan Schutte
1
Hmm ... ¿por qué no es tan fácil? ¿No obtiene el cliente la misma cantidad de horas hombre y, lo que es más importante, un mejor valor por su dólar? La mejor de las suertes amigo. Tómatelo con calma con el niño.
RubberDuck
3
Esa es una idea falsa común @Andy. Sin embargo, no es cierto. Sí, es contra intuitivo, lo sé.
RubberDuck
9

Si el código que viola los principios o estándares básicos de diseño del equipo llega a la etapa de solicitud de extracción, entonces definitivamente debe abordarse allí. Y las revisiones de código pueden ser un buen medio para comunicar los estándares y las prácticas de diseño del equipo.

¿Pero es el mejor lugar? Aquí hay algunas razones por las que diría que no:

  1. Si se requieren varias iteraciones de revisión de código para abordar una falla de diseño fundamental o un problema a gran escala, habrá una fuerte tentación de pasar por alto los problemas más pequeños mencionados anteriormente, debido a los plazos o al agotamiento general de la revisión. Idealmente, el equipo sería lo suficientemente resistente como para resistir esta tentación, pero probablemente sea mejor no crear una situación que lo lleve a ello.
  2. Recibir una revisión de código con una gran cantidad de comentarios no es una gran experiencia para un desarrollador junior / nuevo empleado. Sí, responder a los comentarios es una habilidad que necesitarán desarrollar, pero también es cierto que los desarrolladores no siempre son hábiles para responder con tacto al código que no les gusta.

La programación de pares y las revisiones de diseño son lugares preferibles para comentarios a mayor escala.

Dicho esto, sería aún peor dejar pasar el código por temor a que abordarlo durante las revisiones de código sea "incorrecto", y puede haber algunas circunstancias (por ejemplo, equipos remotos) en las que esto es lo mejor que puede hacer. En ese caso, aborde los problemas en la revisión del código y también aborde los problemas en su proceso de desarrollo que llegó hasta aquí.

Si bien encontrar el problema durante una solicitud de extracción puede no ser ideal, sin duda es mejor que en las pruebas o en un problema de producción.

JohnMcG
fuente
5

Lo diría más, ya que las solicitudes de extracción no deberían ser el único lugar donde capacitas a las personas. Además, los desarrolladores junior no son los únicos que pueden necesitar capacitación en una solicitud de extracción. Los contratistas, colaboradores de código abierto, desarrolladores de otros departamentos que no están familiarizados con el código o las normas locales, e incluso los programadores veteranos necesitan recordatorios ocasionales cuando se vuelven complacientes.

Hay un costo muy bajo para mantener abierta una solicitud de extracción por un tiempo. Dale tanta o tan poca retroalimentación como quieras, por tantas personas como quieras, luego déjala en paz hasta que los autores te notifiquen nuevamente que piensan que está lista para fusionarse. Una solicitud de extracción es una gran herramienta central para comunicarse sobre los cambios de código propuestos, ya sea que estén completamente listos o que necesiten mucho trabajo.

Algunas revisiones de solicitudes de extracción resultan ser poco más que un sello de goma, y ​​algunas que son presentaciones externas a un equipo pueden tomar un mes de ida y vuelta. El primer tipo es bueno cuando puedes conseguirlo, pero eso no significa que el segundo tipo no sea valioso. Intentar que las personas envíen solicitudes de extracción perfectas todo el tiempo será frustrante para todos.

Karl Bielefeldt
fuente
Gracias por su respuesta @ Karl-Bielefeldt. Convino en que se puede esperar cierta capacitación, pero la pregunta es cuánto es apropiado, a qué nivel. Su afirmación "... si están completamente listos o si necesitan mucho trabajo". Yo diría que un PR para dominar nunca debería necesitar mucho trabajo. Mucho trabajo implica fallas de diseño, fallas de implementación en lugar de ayudarme a detectar lo que me perdí. Sin embargo, estoy de acuerdo y he experimentado "Tratar de hacer que la gente presente solicitudes de extracción perfecta todo el tiempo será frustrante para todos".
Riaan Schutte
2

Siempre he sentido que uno de los sellos distintivos de un buen líder es alguien que proporciona la capacitación adicional según sea necesario durante cada ciclo de desarrollo. Para mí, eso significa que no solo estoy codificando o revisando el código, sino que sentado con más desarrolladores junior, emparejando la programación con ellos para ayudarlos a evitar el tipo de minas terrestres que he pisado.

Principalmente, no me hago ilusiones de que nuestro objetivo principal es educativo, no lo es. Ya sea que sea un senior, un lead o un desarrollador junior, el objetivo no es su edificación. El objetivo siempre es entregar un código de calidad al cliente. Preferiblemente a tiempo, dentro del presupuesto, haciendo lo que quieran. Sin embargo, reconozco que es imposible para mí hacer todo el trabajo por mí mismo, por lo que me incumbe liderar para ayudar a todos a ayudar al equipo a tener éxito. Y eso significa reconocer las oportunidades de capacitación cuando aparecen en la naturaleza.

Entonces, a su pregunta sobre si las solicitudes de extracción son el lugar para entrenar a los juniors, debo decir que no es raro que surjan momentos de enseñanza durante estos. Oye, tendrás que lidiar con tu primer conflicto de fusión, repasemos eso después de la revisión. Oh, mira, no incluiste ninguna prueba unitaria para tu DAO, pospondremos tu revisión hasta que hayamos tenido la oportunidad de cubrir esos nuevos métodos. ¿Por qué pensaste que sería mejor usar primitivas dobles en este cálculo financiero que BigDecimals? Sí, eso no es realmente raro.

Entonces, aunque diría que ciertamente puede suceder, pero claramente no es el objetivo principal de una solicitud de extracción. Tampoco creo que haya una expectativa de que el código en una solicitud de extracción esté listo para producción. A menudo no lo es.

Si está utilizando ramas de funciones y versiones en una estrategia de ramificación de estilo gitflow, entonces sus solicitudes de extracción se convertirán en algo más parecido a los candidatos de versión. No está listo para la producción, sino algo más aproximado. Usted sabe que su código se compila (a la derecha) y tiene suficiente seguridad de prueba para hacer una afirmación decente de que cumple con los objetivos de la historia del usuario. Y dado que ya ha realizado varias pruebas de integración en su entorno de desarrollo, tiene una gran demostración lista para usar en caso de que se le solicite que demuestre sus cambios, lo que hará, durante la revisión de su RP.

En última instancia, creo que deberíamos brindar asistencia durante las revisiones del RP, pero esa asistencia no se trata de la codificación general. En cambio, está asociado con la preparación de ese código propuesto para su inclusión con una base de trabajo de código de calidad de producción. El RP es una oportunidad para que los desarrolladores demuestren que tienen una justificación y un sólido conocimiento de cada cambio que han incluido en el RP. E incluso entonces, incluso después de haberlos pesado con pruebas unitarias, demostraciones y un montón de preguntas, todavía no se espera que los cambios propuestos estén listos para la producción.

El código está cerrado después de todo eso. Pero luego dejamos que QA lo torture.

Michael Peacock
fuente
Gracias por su respuesta @ Michael-Peacock. Lo que usted dice suena cierto para las empresas que tienen un departamento de control de calidad independiente o probadores que lo llevan a través de su próxima fase. Pero cuando los desarrolladores también son los probadores, el RP acompaña todo, desde el desarrollo hasta las pruebas y la fusión en master. En este flujo de trabajo, el código debe estar listo para la producción una vez que se aprueba el RP. Supongo que la pregunta también se carga con una suposición sobre qué flujo de trabajo está utilizando.
Riaan Schutte
Diría que incluso si no tiene un equipo de control de calidad dedicado, entonces es aún más importante asegurarse de agregar pruebas de integración y / o aceptación a su flujo de trabajo, y dar tiempo para un posible reproceso en caso de que el código combinado falle sus pruebas. Podrías automatizar algunas de las pruebas de aceptación usando Selenium y Cucumber para quitar parte de la carga a los desarrolladores, pero creo que es importante no asumir que el código está listo para la producción hasta que lo hayas demostrado a través de las pruebas.
Michael Peacock
Estoy completamente de acuerdo, de ahí que todos los códigos requieran las pruebas asociadas con él. Si luego cambia la base de master antes de fusionar, puede estar seguro de que las pruebas pasan y el código debería funcionar como se espera.
Riaan Schutte
2

Quiero agradecer a todos por su contribución y ayudarme a entender lo que la gente tiene que decir sobre este tema.

Esta es mi respuesta después de la retroalimentación dada y mi comprensión ahora basada en las respuestas y comentarios recibidos. Gracias a todos.

Resumen

  • No esperar ni imponer solicitudes de extracción perfectas del bate, ya que esto solo será frustrante para todos los involucrados.
  • Pero continúe haciéndolo nuestro objetivo para Solicitudes de extracción perfectas.
  • Espere cierta cantidad de colaboración / asistencia en las solicitudes de extracción. Después de todo, eso es lo que esencialmente está solicitando al crear una solicitud de extracción.
  • Si se vuelve un poco demasiado debido a fallas de diseño o fallas de implementación, pase tiempo con ese desarrollador y realice una programación de pares para construirlos y acercar su código al objetivo . Este es el papel de todos los desarrolladores senior.
  • Los juniors necesitarán más sesiones de programación en pareja que los desarrolladores intermedios. Por lo tanto, espere que las solicitudes de extracción reflejen ese requisito.
  • Aliente a los desarrolladores a tener reuniones de diseño / implementación antes de tocar el código para reducir cualquier retrabajo identificado en las solicitudes de extracción.
Riaan Schutte
fuente
1
Maravilloso resumen y respuesta. No me ofendería en absoluto si te pusieras la marca de verificación.
RubberDuck
Gracias @RubberDuck, pero mi resumen no podría existir sin las respuestas y comentarios de todos a mi pregunta. Salud.
Riaan Schutte
0

¿Puede decir más sobre la cultura de su empresa en términos de equipos técnicos? Si está luchando con la idea de que el código esté listo para la producción cuando un desarrollador quiere fusionarse con la línea principal, ¿qué les está diciendo realmente a sus desarrolladores? ¿Les está diciendo que cuando su trabajo está "terminado", está bien si no funciona? ¿Está bien si rompe el sistema? Si están agregando deuda técnica, tal vez esté bien si pueden justificarla y están conscientes de lo que están haciendo, y mostrar que pueden regresar y refactorizar más tarde. Pero si no se dan cuenta de por qué están haciendo algo peligroso, ¿cuántas veces lo dejarás pasar?

Si tiene un desarrollador junior, sus primeras solicitudes de extracción obviamente tendrán problemas. Eventualmente deberían entenderlo. Si descubre que continúan teniendo problemas, ¿puede estar asignándoles trabajos para los que aún no están preparados?

¿O tal vez necesite contratar a un joven sustituto y despedir al que no haya podido resolverlo?

¿Sabes lo que he visto? Las personas que no son desarrolladores competentes continúan trabajando en una empresa durante años solo por nepotismo. Por supuesto, sus solicitudes de extracción requieren múltiples revisiones. En el lenguaje Lean, son "desperdicio": un lastre para el equipo y un lastre para la línea de fondo.

Por lo tanto, debe decidir por sí mismo: ¿cuántas solicitudes de extracción requerirán para que sus junior muestren competencia, y tiene el coraje de dejar ir a los que no lo hacen?

RibaldEddie
fuente
Gracias por responder a @RibaldEddie. Esperamos que los desarrolladores hayan escrito pruebas unitarias, hayan probado y revisado manualmente su propio trabajo hasta el punto de afirmar que este código es excelente y que si lo dejaran, lo fusionarían en maestro, pero recibirá 2 revisores para revisarlo y, con suerte, confirmar esa declaración. No aceptamos ninguna deuda técnica y nos estamos alejando completamente de las soluciones a favor de las soluciones. Entonces, la expectativa es que el código cumpla con esos requisitos.
Riaan Schutte
@Riaan, ¿quiénes son los revisores?
RibaldEddie
Cualquier persona de técnicos conduce a juniors. Normalmente es un revisor senior / intermedio junto con un revisor junior / intermedio. (2 revisores)
Riaan Schutte
@Riaan luego, con el tiempo, esperaría que los miembros más jóvenes del equipo se diferenciaran. Podrá saber quién es concienzudo y quién es descortés. Creo que el desarrollo de software bien hecho es una actividad adecuada para una mentalidad orientada al detalle. Es posible que algunas personas no puedan lograrlo. Tendrá que decidir qué hacer con ellos. Pero, fundamentalmente, debe esperar que los desarrolladores que envían el código para fusionarse estén seguros de que funciona según lo previsto y está listo para la producción. Incluso si tiene un equipo de control de calidad grande y sofisticado, sus desarrolladores aún deberían estar preparando el código listo para la producción.
RibaldEddie