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"?
fuente
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:
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.
fuente
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.
fuente
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.
fuente
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
fuente
¿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?
fuente