¿Cómo decirle a un colega que ha introducido un error masivo de programación?

Somos un pequeño equipo de desarrolladores que trabaja en un proyecto de TI dentro de un departamento dedicado. No hay jerarquía entre nosotros en ese departamento, sino un objetivo común: poner en funcionamiento nuestra aplicación principal. Todos trabajamos en el mismo código.

Estoy bastante orientado a los detalles y tengo mucho cuidado cuando se trata de estándares, código limpio y preocupaciones arquitectónicas en general.

Ahora, uno de los desarrolladores más veteranos parcha el código de una manera que produce errores obvios. Además, sus cambios de código no respetan un cierto estándar de calidad. Básicamente, introduce muchos errores debido a una actitud despreocupada, o al menos por una razón que no puedo comprender en este momento.

El Gerente del Departamento no se preocupa por la limpieza y los detalles operativos. Quiere que se ejecute la aplicación principal y que podamos agregarle nuevas funciones. Implícitamente quiere que nos ocupemos de esos detalles. Sí creo que los estándares de calidad y la mantenibilidad del código son importantes, él lo ha aceptado, pero no hay nada formalizado en ese sentido. Más o menos "haz lo que debes, tiene que funcionar, no me importa cómo" territorio.

No tengo la autoridad en términos de jerarquía para 'corregir' al colega. Sin embargo, dado que produce errores, quiero que, por mera influencia amistosa, evite esos errores. Oculto esos errores al gerente y trato de resolverlos primero con dicho colega. Parece estar bien dispuesto, pero no parece que aprenda. También he tenido altercados verbales con él en el pasado porque pensó que me estaba entrometiendo demasiado en "sus asuntos". Pero sobre todo, nos llevamos muy bien y nos respetamos mutuamente. Podría ser percibido como un tipo más santo que tú, lo que no ayuda. Sin embargo, estoy tomando ese manto, sintiendo la necesidad de él.

¿Cómo procede para ayudar de manera cortés pero eficiente a uno de esos colegas a mejorar la calidad de nuestro código? Esto es principalmente una cuestión de comunicación.

“No tengo la autoridad en términos de jerarquía para 'corregir' al colega”. No entiendo. ¿Por qué necesita autoridad en una jerarquía para corregir a un colega?
Consejo: no le diga que introdujo un error masivo: dígale que introdujo un error, muéstrele lo que hace y déjelo que le aplique su propio adjetivo. Lo primero importante es que se solucione. Después de eso, pregunte si el equipo en su conjunto debería probar mejor antes de realizar cambios...
Gracias a los dos; se trata realmente de mostrar respeto por mí, mientras pasa el mensaje. La jerarquía o autoridad ayuda a hacer cumplir el mensaje. Pero también se puede prescindir de él, creo. Estaba buscando pistas de comunicación para eso. Me gusta la sugerencia de mostrar, es más sutil.
esta pregunta se ve espeluznante como si la escribiera...
¿Cómo espera que el gerente vea que la calidad del código es importante si le oculta los errores?
Al menos personalmente, preferiría escucharlo de inmediato si tuviera un gran problema en una confirmación, antes de que cause problemas mayores. Dado que "yo" hice el código, lo más probable es que también sepa cómo solucionarlo rápidamente. ¿No tiene revisiones de código donde esto podría anotarse, antes de que se fusione con la puesta en escena/producción?
"Podría ser percibido como un tipo más santo que tú, lo que no ayuda". - Ciertamente te percibo de esa manera. Esta pregunta resulta muy agresiva y pretenciosa. Si no fue la intención de esa manera, es posible que desee trabajar en sus habilidades de comunicación. Si obtiene una reputación como esta, es probable que sus compañeros de trabajo comiencen a ignorarlo cada vez que sugiera una corrección.
@amphibient lo mismo aquí, normalmente no miro quién es OP, tenía que hacerlo esta vez...

Respuestas (7)

Ocultar los errores no te hará ningún favor a largo plazo y en parte te ha llevado a esta situación.

Hay un par de vías para bajar potencialmente:

  1. Simplemente dígale que hay un error : es posible que el enfoque amistoso no funcione, ya que ha notado que usted "se entromete en sus asuntos". Entonces, si dice que encontré un error debido a X, él puede resolverlo.
  2. Intente introducir revisiones de código : si tiene libertad para implementar prácticas de trabajo, sugiera a su equipo que realice revisiones de código de cada registro. De esa manera, puede revisar ese registro y señalar el error en la revisión.

No arregle los errores usted mismo. Si hay una forma de registrar errores (tiene un rastreador de errores), regístrelos. Realmente necesita intentar conseguir un administrador a bordo para tener algún interés en la calidad del código. Como tener que detectar/arreglar el código de sus colegas, le impide realizar sus tareas.

No puedo creer que la #1 sea una sugerencia seria. El resto es sensato. Hazme un ping cuando hayas arreglado la respuesta y eliminaré mi voto negativo :)
@LightnessRacesinOrbit Tiene un elemento de seriedad. Si el colega no reacciona bien cuando le dicen que hay errores (por los comentarios entrometidos) y que a la gerencia no le importa, a veces es necesario que sucedan cosas que obliguen a la gerencia a preocuparse. Por supuesto, en un mundo ideal, podría hacer el punto 2, tratar de introducir el punto 3 y eso sería todo, pero ¿es el trabajo del OP señalar (o encubrir) los errores cometidos por un colega senior? Parece que esto sucede a menudo y simplemente decir que no haga x o y aún no ha funcionado.
Sabotear deliberadamente un producto porque no puede trabajar con su gerente es una mala conducta profesional grave. Plantear la cuestión. Si se ignora, no es tu problema. Pero si no plantea el problema porque quiere que el problema se filtre a los clientes, por razones políticas, ese es en gran medida su problema y, como su jefe, ¡no tendría ningún problema en dejarlo en claro si alguna vez lo descubriera!
Ese es un buen punto. Editaré en consecuencia
Todo se reduce a los matices de cómo informar sobre el error. Me gusta la revisión del código, lo he llevado a la administración en el pasado sin éxito.
Si puede introducir algún tipo de configuración formal (es decir, revisión de código), entonces elimina la necesidad de matices ya que las revisiones de código establecen esto
Las revisiones de código son una forma de hacerlo formal, pero creo que pueden transferir el problema un paso más allá, demasiado tarde. Lo mejor es tratar con el problema en cuestión.

Todos cometen errores, señalar errores en el código de alguien es como señalar que tuviste tos. Es natural, por muy bien que lo preparemos no puedes evitarlo al 100%, por lo que no debería ser un tabú.

Del mismo modo, dado que todos crean errores, no tiene sentido ocultarlos o no hablar de ellos con las personas involucradas y si la gerencia tiene que saber de los errores existentes, simplemente dígaselo, simplemente no juegue un juego de culpa.

Cuéntale a tu colega sobre el error. Si le importa el proyecto y su integridad como empleado, entonces señale que cree que el error podría haberse evitado siguiendo las prácticas X, Y, puede preguntarle si está de acuerdo con usted o no para asegurarse de conocer sus opiniones. sobre el asunto

Encontramos un error en A después del último parche, necesitamos corregir C, D. Para evitar futuros errores de tipo similar, creo que sería una buena práctica hacer X, Y, ¿estás de acuerdo? Si no, ¿qué crees que podemos hacer diferente para evitar esto?

Si no hay pautas oficiales, entonces no hay mucho que puedas hacer además de tratar de sugerir mejores prácticas, pero si él se niega rotundamente a escuchar y realmente crees que no es adecuado para el proyecto porque en general no le importa un comino cómo él hace su trabajo, entonces usted necesita comentarlo con su gerente más cercano y luego simplemente aceptar el resultado de lo que su gerente quiere hacer o no quiere hacer.

Sin embargo, si desea que la gerencia se preocupe más por la calidad del código, simplemente bríndeles ejemplos sobre cómo el no seguir ciertas prácticas podría y ha llevado a ciertos errores en el pasado, no solo en su proyecto sino en el de otros, y explique el impacto. A las personas no les importan las cosas que no entienden, si entienden por qué se deben seguir ciertas prácticas, es más probable que las apliquen.

Seguiré sugiriendo cambios, a nivel gerencial no siento que pueda alcanzar los resultados que espero. He probado varios métodos, sin éxito. Dejar que el problema sea tampoco es cómo quiero hacer las cosas.
Comprensible. Haz tu mejor esfuerzo, si nada funciona, simplemente tienes que evaluar si deseas trabajar en esas circunstancias o no. Solo podemos intentar cambiar el mundo, pero al menos somos privilegiados hasta cierto punto para elegir dónde trabajar, o al menos dónde no trabajar.

Si no desea una discusión abierta con el colega, puede usar sus cosas de una manera que active el error. Lo que haces entonces es

  1. registrar el error
  2. Hacer un caso de prueba
  3. Soluciona el error. Mantenga el caso de prueba como prueba
  4. Solucionar problemas relacionados

No nos importa eso en este momento, debes concentrarte en X

Esta es una crítica justa que podría enfrentar por dedicar recursos a un problema que aún no es un problema, en cuyo caso es posible que desee eliminar los pasos 3 y 4 anteriores.

Hablar con el colega es, por supuesto, lo mejor que se puede hacer, mi respuesta ofrece una alternativa al ideal.

Creo que estás teniendo dificultades para saber cómo decir algo porque te sientes involucrado en el resultado. Y con razón, ya que ustedes dos son amigos y colegas.

Pero también siento que este es uno de esos momentos en los que tienes que dejarlo ir.

Si valoras tu amistad y el ambiente de trabajo, entonces solo tienes que aceptar este aspecto de tu amigo y seguir adelante.

Luego, armado con esta actitud, puede proceder a resolver realmente su problema.

Sólo díselo directamente.

Es en momentos como estos que recuerdo algo que había aprendido en la escuela secundaria: mensajes-yo.

"Me molesta cuando produce un trabajo con errores porque luego tengo que corregirlos. Realmente desearía que no hiciera más esto".

Siento... cuando tú... quiero.

Si esto no funciona, entonces cambiaría mi enfoque del problema, es decir, igualaría su actitud y dejaría el pasado en el pasado porque, después de todo, nunca se sabe realmente quién es el mejor ingeniero .

"I feel annoyed when you produce work with bugs because then I have to fix them. I really wish you wouldn't do this any more."Esta es una frase bastante hostil. Invoca una mentalidad de "yo contra ti". Compare esto con la sugerencia de Jonast92 de We found a bug in A after the latest patch, we need to fix C,D. To avoid future bugs of similar sort I think it would be good practice to do X,Y, do you agree? If not, what do you think we can do differently to avoid this?Esto es en gran medida una mentalidad de "nosotros contra el problema".

¿Tienen revisiones de código obligatorias ? Mi sensación es que la respuesta a esa pregunta es no. Si lo hizo, ahí es donde tales excepciones deben ser capturadas, documentadas y el cambio rechazado.

¿Tiene un sistema de seguimiento de problemas como Jira? Debe documentar sus hallazgos, incluir diferencias de archivo y describir cómo introducen un defecto. Además, describa una serie de pasos sobre cómo reproducir el defecto causado por el cambio de código mal implementado.

Debe hacer que su objeción sea lo más formal posible y utilizar hechos concretos y demostrables, no opiniones. Esto no es una cuestión de "habilidades blandas", personalidad u opiniones. Se trata de una incompetencia fácilmente demostrable y debe documentarla como tal, a la vista de sus superiores. Deben elegir un curso de acción. En mis 20 años de experiencia en programación, amonestar a un compañero de trabajo sobre el tipo de objeciones que tiene y que he tenido muchas veces, es casi inútil. Pero si no puede demostrar lúcidamente su caso de una manera que sea comprensible para alguien con poder de decisión, es probable que caiga en oídos sordos.

Si sus superiores reconocen sus quejas, es de esperar que pueda presentar un caso para implementar revisiones de código obligatorias como parte del SDLC, que sospecho que alguien de sus inclinaciones debería agradecer.

Gracias. No tenemos ninguno de esos; Los considero, como usted dice, esenciales para la calidad de la producción. Estoy tratando de hacer cumplir el seguimiento (que generalmente se resuelve más o menos enviando correos), pero la revisión del código es lo que más me interesa. ¿Cómo implementaría esto y administraría los egos? Mi miedo es herir a los programadores en su orgullo.
la revisión del código tiene que ser un paso obligatorio del SDLC que se encuentra entre un cambio registrado en una rama de características en su VCS y la rama principal desde la que se implementa. Ningún cambio debería poder infiltrarse en una rama implementable antes de que se revise. Funciona de manera diferente con diferentes VCS, por lo que depende de lo que esté usando
Ya veo, pero aquí me interesa más el lado psicológico. Hay renuencia a aceptar que tales procesos pueden y deben ser necesarios. Para la gerencia, les puedo decir, huele a "demasiado complicado para lo que hacemos". Aunque veo la necesidad de ello. Mi problema no es técnico; es uno de transmitir una idea.
Lo siento, no puedo ofrecer consejos en el campo de lo "psicológico"...

Por lo general, sucede en productos que su empresa no tiene que mantener, o proyectos en los que el gerente del proyecto no tiene suficientes habilidades de programación. Lo único que puede hacer es informar a su jefe de proyecto y a sus compañeros de equipo los problemas que está enfrentando para mantener este proyecto sin cumplir con los estándares de calidad y mostrar números. Si el cliente acepta esta pérdida de dinero, lo más probable es que a nadie le importe, solo a la persona que se enfrenta al infierno. Si se trata de un proyecto de presupuesto cerrado o un proyecto que mantienes habitualmente, tu empresa te escuchará. Lo más fácil es detectar el error y ayudarlo hasta que aprenda lo suficiente como para resolver los problemas por sí mismo.

Probé revisiones de código en un par de equipos, pero son una carga que requiere soporte de administración continuo. Difícil de aceptar. Y no infalible.

Lo que funcionó para nosotros fue que cada desarrollador tenía que producir pruebas unitarias documentadas. De esta manera, generalmente detectaron sus errores antes de la implementación de las pruebas de aceptación del usuario.

Para proyectos complejos más grandes, equipos de 2 o más analistas crearon las pruebas unitarias para los equipos de codificación a partir del diseño/requisitos. Ejecutarían estas pruebas para el equipo en su conjunto. Eso no eliminó el requisito de prueba unitaria, pero agregó la capa necesaria para garantizar que todas las actividades del equipo de desarrollo se mantuvieran juntas como un todo.

Hacer que las pruebas unitarias documentadas formen parte del proceso de confirmación del código para cada persona del equipo garantizó que los desarrolladores del asiento de los pantalones usaran la disciplina adecuada sin señalar a nadie.

Los defectos del equipo se redujeron en un 80 % o más con esta disciplina. El esfuerzo de soporte de guardia se redujo hasta el punto de que casi nunca nos llamaban después de una nueva implementación.

La complejidad/formalidad del plan de prueba se ajustó en función del nivel de impacto... a menudo solo un párrafo para pequeños cambios... pero los resultados esperados y los resultados reales tenían que documentarse (capturas de pantalla, etc.).

Después del éxito de hacer cumplir esto dentro de nuestro equipo durante varios años, el equipo de control de calidad introdujo este requisito en todo el departamento de TI (lo hicieron de forma independiente a medida que maduraba el control de calidad en nuestra empresa).

De vez en cuando hacíamos revisiones de código en nuevos compañeros de equipo o cuando trabajábamos con nuevas tecnologías. Pero eso no suena como su problema.

Con una nueva aplicación que estábamos construyendo, comenzamos a documentar y guardar los planes de prueba de unidad para que pudieran reutilizarse. Estábamos usando Team Track para hacer esto. No era la mejor herramienta, pero era mejor que una biblioteca de documentos de Word. Nos permitió seleccionar qué funciones necesitaban pruebas y pudimos editar los planes para documentar nuestros cambios. Luego, podríamos ejecutar todos los escenarios de prueba relacionados y documentar el éxito o el fracaso.