Durante el verano cambié de trabajo de una gran empresa como ingeniero senior a una empresa mucho más pequeña como ingeniero principal. Ahora superviso a unos 20 ingenieros jr a nivel medio que trabajan en 3 sistemas de reservas de reservas diferentes. Todos los sistemas de reserva se ejecutan en el mismo marco de back-end patentado, administrado por otro equipo que no superviso.
El mes pasado, la noche anterior al lanzamiento de un gran lanzamiento para uno de los sistemas de reserva, un ingeniero sénior ("Clint") del equipo de soporte de back-end dejó un montón de comentarios en una solicitud de incorporación de cambios que habíamos abierto para fusionar nuestro candidato de lanzamiento enMaster
Los comentarios variaron de algo útiles a algo inútiles. Nos fusionamos de Master
todos modos y al día siguiente le pregunté si podría haber revisado ese código antes en lugar de esperar hasta después de las pruebas de integración. Cuando dejó los comentarios, era el final del día y estábamos preparando un ticket para que nuestro ingeniero de lanzamiento lo implementara a las 4:30 a. m. de la mañana siguiente.
Me dijo que no es su trabajo enseñar a mis ingenieros (tiene razón, no lo es). Pero es difícil para mí entrenar a 20 ingenieros a la vez, incluso con ellos haciendo revisiones por pares y controlando el código de los demás. También me preocupa que mi equipo estuviera un poco desmotivado porque no pudieron hacer nada para abordar los comentarios.
Tenemos otro lanzamiento programado justo después de regresar del Día de Acción de Gracias, y según cómo Clint rechazó todas nuestras invitaciones a reuniones de revisión de código este mes, creo que voy a ver una repetición de lo mismo en un par de días.
No puedo decir si Clint realmente quiere ayudar o simplemente mostrar su ego. Me encantaría que ayudara a entrenar a nuestros desarrolladores junior, pero la forma en que lo está haciendo no ayuda. No creo que mis ingenieros puedan captar todo lo que Clint puede.
¿Cómo puedo decirle a Clint si quiere dar su opinión, tiene que ser en nuestros términos?
EDITAR : Me avergüenza haber omitido este detalle, pero nuestros ingenieros abren solicitudes de incorporación de cambios desde sus ramas de funciones, development
adonde deben ir estos comentarios (sobre esas solicitudes de incorporación de cambios)... cuando todos esos cambios estén listos para ir a nuestro entorno de producción ( después de que nuestros ingenieros de control de calidad realicen pruebas de integración y verifiquen que los cambios sean seguros de acuerdo con ellos), abrimos un PR para fusionar Master
después de que los ingenieros aprueben los cambios y acuerden que no introdujimos nada horrible y luego implementamos a la mañana siguiente
A menos que Clint encuentre errores importantes de "no implementar", simplemente le agradecería sus comentarios y le explicaría cómo pretende abordar los puntos que plantea (si son válidos) en versiones futuras.
Si él tiene un problema con esto, entonces tienes la oportunidad de explicar por qué sería mejor para él dar su opinión antes.
En última instancia, es su problema que esté dando su opinión tan tarde. No lo haga suyo tomando la retroalimentación como una falla personal o del equipo.
Se requiere una revisión de código para la versión o no se requiere. Si se requiere, entonces el revisor debe ser responsable de revisar esto a tiempo. Debe tener el poder de ir a su escritorio y decir "deje todo lo demás y haga esta revisión, o no podremos llegar a la fecha de lanzamiento". Y debe tener el poder de decir "lo siento, no pudimos publicar a tiempo porque la revisión no se hizo a tiempo".
Si no es necesario, entonces liberas.
PD. Si a Clint se le da un día para revisar semanas o meses de trabajo, eso parece indicar que la revisión no era necesaria. Pero si Clint encuentra problemas en este corto tiempo, eso parece indicar que las revisiones anteriores no fueron tan buenas como deberían haber sido.
Parece que hay una serie de problemas aquí, pero todos ellos son abordables.
Problemas de proceso:
Asuntos personales:
Dejar el PR abierto para una "revisión real" hasta la noche anterior a la publicación significa que debe tomar todas las revisiones en serio y no fusionarlas y no enviarlas si hay comentarios sin abordar, o debe cambiar la programación de publicación para que haya tiempo suficiente para completar la revisión y programar o cancelar la inserción (p. ej., los RP que no se fusionaron al menos 24 horas antes de la inserción programada no salen).
Podría ser una buena idea invitarlo a tomar un café y conversar sobre el tema, haciéndole saber que sí, usted valora su aporte, pero que el proceso tal como está ahora significa que no recibió su revisión lo suficientemente pronto como para actuar en él esta vez, enfatizando "esta vez". Hágale saber que está pensando en cambiar el proceso y pregúntele si tiene alguna sugerencia.
Pregúntale qué le facilitaría contribuir y asegúrate de que entienda que aprecias que se haya molestado. Si realmente está tratando de ayudar, entonces ninguna acción sobre sus comentarios también lo desmotiva . Parece que no hubo impedimentos, ya que siguió adelante con la fusión, pero también parece que el trabajo, desde su punto de vista, fue un esfuerzo en vano.
Agradézcale por encontrar los problemas que señaló y hágale saber que tiene la intención de abordar las cosas importantes que mencionó. Deberías considerar hacerlo uno a uno con él y públicamente en relaciones públicas cerradas para dejarle claro a él y al equipo que te alegra que esté ayudando. Mostrar gratitud, en privado y en público, por su interés y por ofrecerse como voluntario para ayudar, incluso si ninguno de los comentarios de la revisión fueron procesables desde el punto de vista de su equipo, es lo más cortés que puede hacer y ayuda a generar solidaridad entre los equipos.
¿Cómo puedo decirle a Clint si quiere dar su opinión, tiene que ser en nuestros términos?
A menos que Clint trabaje para usted, o exista algún tipo de proceso formal que dicte cuándo no se permiten los comentarios, no puede obligar a Clint a adherirse a "sus términos".
Puedes ignorar sus comentarios. Puede darle las gracias por los comentarios "algo útiles" para animar a más de esos. Puede agregar elementos a su trabajo pendiente técnico para abordar esos comentarios útiles. Puede continuar invitándolo a las reuniones de revisión de código. Puede alentar a su equipo a no desmotivarse por algunos comentarios tardíos.
1) ¿No hay nadie entre usted y 20 ingenieros que pueda ayudarlo a ser su mentor? Esta es la razón por la que 20 personas son demasiadas personas en un equipo, porque no hay forma de que una sola persona pueda administrar y asesorar a 20 personas. Necesita reducir el tamaño de su equipo, o al menos el tamaño de su responsabilidad, porque está demasiado disperso.
2) Con respecto a la liberación del código, ¿está Clint en su equipo? Si Clint está en su equipo, entonces Clint debería participar en la revisión del código, especialmente si es un ingeniero senior. Debe alentar a sus aprendices a enviar revisiones de código a Clint cuando sea posible (no lo sobrecargue, pero anímelos a involucrar a Clint en el proceso). Si Clint no está en su equipo, a menos que los problemas que Clint encuentre sean errores críticos que interrumpen las operaciones, pídale que los registre como informes de errores; no está en su equipo, no es responsable de su producto.
4) En cuanto a las "reuniones de revisión de código" de Clint: en primer lugar, no estoy seguro de qué es una "reunión de revisión de código". Las revisiones de código son operaciones asincrónicas: el desarrollador envía el código, el revisor de código revisa mientras el desarrollador hace otra cosa, finaliza la revisión, el desarrollador aborda los comentarios, enjuaga, repite. No sé qué es una "reunión de revisión de código", suena tonto. Pero además de eso, si Clint está en su equipo, Clint debería asistir a las reuniones del equipo. Si Clint no está en su equipo, Clint no necesita asistir a las reuniones del equipo. Es tan fácil como eso.
Alguien tiene que definir el "proceso", por ejemplo, la secuencia en la que suceden las cosas.
Como desarrollador, si no soy yo quien define el proceso, haré una revisión del código (si ese es mi trabajo, como espera mi gerente) cuando el proceso me lo indique y/o cuando alguien me lo pida.
No entiendo la parte de la pregunta que dice "rechacé todas nuestras invitaciones a reuniones de revisión de código este mes".
Por cierto, no estoy seguro de qué es una "reunión de revisión de código". Mi idea de una revisión de código es:
Si soy "senior", quizás no esté escuchando las reuniones de revisión de otras personas.
Para ahorrar tiempo (reducir mi esfuerzo) me gusta revisar el código después de haberlo probado. Todavía podría encontrar errores (por ejemplo, si la prueba no está perfectamente completa), pero es más fácil revisar el código que funciona que el código que no lo hace. La revisión del código que no funciona se denomina "desarrollo y depuración" y lleva más tiempo.
¿Puede hacer que las "pruebas de integración" sean más fáciles, quizás más automatizadas? Para que puedas hacer:
Alternativamente, fusiona antes de la revisión del código (si confía en que la prueba de integración fue suficiente sin revisión), realiza la revisión del código en la rama principal y usa los comentarios de la revisión del código como entrada para lo que podría querer mejorar en una iteración posterior (una iteración posterior). "pique").
Estoy bastante seguro de que este tipo solo te está diciendo que estás haciendo un mal trabajo. Eso es lo que significa "no es mi trabajo enseñar a sus ingenieros". No está interesado en hacer el trabajo por ti, quiere que lo hagas mejor. Es por eso que revisó el código destinado a la producción (código que firmaste), no el código en proceso. En cuanto a qué hacer al respecto, bueno, ese es un tema para otra pregunta.
Tener cuidado.
✓ Desarrollador sénior
✓ Encuentra problemas en el código que nadie más encontró
✓ El equipo está desanimado debido a los informes tardíos
✓ Informa algo sobre "no es su trabajo" pero lo revisó de todos modos
✗ se está preparando para repetir el mismo escenario
No parece tan bueno para el equipo, ni tampoco para el desarrollador sénior.
Pero te digo que tengas cuidado. Asegúrese de comprender todos los comentarios en esa revisión de extracción. Y me refiero a entender realmente. "Ese simplemente está mal". no cuenta a menos que realmente se haya esforzado en comprobarlo.
Probablemente no hay nada importante esperando para ser destructivo para ti. Pero podría haber un error de pérdida de datos extremadamente sutil que descubrió que no se puede revelar en las pruebas. No notarás la diferencia hasta que entiendas todos los comentarios.
Anexo: para restaurar la moral del equipo, asegúrese de tener suficiente tiempo para solucionar todos los problemas que el desarrollador sénior encontró en esa solicitud de incorporación de cambios que el resto del equipo está de acuerdo en que deben solucionarse.
El problema aquí es que su proceso de flujo de trabajo es defectuoso. Las revisiones por pares deben realizarse antes de las pruebas de integración por el simple hecho de que esperar hasta después de que se realicen las pruebas puede sembrar el proceso. Si la revisión por pares encuentra problemas que requieren cambios y las pruebas de integración ya se realizaron, se necesitará más tiempo para regresar y rehacer todas las pruebas una vez que se hayan completado los cambios.
Idealmente, el desarrollador debería escribir y realizar pruebas a medida que desarrolla el código y cualquier prueba final debe realizarse después de que el código sea revisado por pares para asegurarse de que funciona como se espera. Una cosa para recordar es que una revisión por pares puede detectar errores en el código antes de que puedan desactivar un sistema durante las pruebas de integración.
Tiene dos tipos diferentes de revisiones (tres si cuenta su reunión en persona). Eso no es intrínsecamente malo, pero sí significa que debe dejar muy claras sus expectativas para cada circunstancia. Crearía una plantilla de solicitud de incorporación de cambios para su revisión final similar a la siguiente. Esto deja muy claro no solo lo que se espera de esta revisión, sino también cómo abordar sus comentarios con más éxito en el futuro.
<Resumen de cambios>
Esta es una revisión previa a la producción. Su propósito es encontrar problemas mayores como:
Salvo que surja alguno de esos tipos de problemas, esta solicitud de incorporación de cambios se fusionará en <fecha y hora>.
Las revisiones de diseño individuales, donde analizamos la legibilidad, la mantenibilidad y la arquitectura general, ya se han completado. Si encuentra ese tipo de problemas aquí, abra un problema o realice los cambios en su propia solicitud de extracción para desarrollo en lugar de saturar esta solicitud de extracción. Las revisiones de diseño se realizaron en las siguientes solicitudes de extracción:
delgado
usuario34687
Bernardo Barker
David Conrado
henrik rosseau
henrik rosseau
henrik rosseau
henrik rosseau
Werner CD
jpmc26