Cómo ayudar a un desarrollador sénior que está más allá de ayudar

Recientemente me ascendieron como gerente en una pequeña empresa (menos de 20 personas), solo he estado en la fuerza laboral ~2.5 años, y soy un desarrollador líder en nuestro proyecto. El desarrollador sénior ha estado trabajando más tiempo del que yo he estado vivo y ha sido parte del proyecto durante más de un año. El desarrollador senior tiene experiencia en C/C++/C#, no en python.

Los problemas con el desarrollador senior son:

  • Se olvida la mitad de los requisitos, o si no los entiende los ignora por completo
  • No prueba su código y, a menudo, comete código roto.
  • No cree que la validación de valores importe y ni siquiera le importa si algunas excepciones no se detectan.
  • No sigue las pautas de estilo comunes (PEP8)
  • Olvida cómo codificar en Python e implementa soluciones locas incluso para los problemas más simples
  • Agrega archivos aleatorios al proyecto y, a veces, elimina archivos reales. A veces revierte otros cambios. (git svn rebase ftw)
  • A menudo lo encuentro refactorizando el código de trabajo a un código que no funciona tanto. (Su actividad favorita)
  • Evita comunicarse conmigo

Cosas que he probado con él:

  • Comenzamos a hacer documentos de diseño y revisarlos -> No los sigue, o no los hace porque "hay preguntas abiertas", por lo que comenzar la implementación es solo una solución razonable para él.
  • Traté de hablar con él de que su desempeño/calidad de código no es aceptable
  • Siempre le he enseñado trucos de Python y cómo usarlos correctamente, cuando lo veo usando algunas cosas de Python incorrectamente
  • Tengo que revisar todo lo que comete y arreglar sus errores, ahora creo que espera que yo le arregle todo. Y más que otros tengo que implementar el resto de los requisitos.

El problema es que no tengo poder para despedirlo, el cliente paga a la empresa sin importar lo poco que hagamos, así que no hay presión por parte de ellos. Dado que el cliente paga en función de las horas utilizadas, el gran jefe tampoco quiere despedirlo.

Actualmente me resulta más fácil y rápido no darle ninguna tarea, cada vez se acercan más los plazos y es más rápido hacerlo yo mismo. De hecho, estoy considerando cambiar de trabajo por su culpa. Es un buen chico por lo demás. Actualmente el proyecto tiene otros 1 desarrolladores, y él está bien.

De vez en cuando, el gran jefe me dice que tenga un desempeño decente, él sabe lo mal que están las cosas, tuvimos que cancelar un proyecto porque el desarrollador principal era el desarrollador principal en ese proyecto, así que ahora él es mi problema.

¿Todavía hay pasos para ayudarlo a convertirse en un mejor desarrollador, o se perdió toda esperanza?

¿Por qué está haciendo Python si no tiene experiencia en Python? ¿Está interesado en aprenderlo, o se lo impusieron? ¿Cómo era él como desarrollador antes de la transición a Python?
Terminó en mi proyecto porque su proyecto fue cancelado. c ++ debería ser más difícil que python, por lo que el jefe pensó que tal vez estaba bien con eso. Cometió los mismos errores con C++, así que no sé. Dice que quiere conocer mejor a Python.
@Jonas Pream Bueno, el cliente actual no conoce la situación, no tiene ni idea, por lo que cree que estamos a salvo.
Darle el "asiento de la ventana", parece ganar-ganar para todos.
Realice copias de seguridad locales diarias de su repositorio git. Es perfectamente posible destruir la historia para un usuario experimentado.
lo primero que debe hacer es eliminar sus derechos sobre el repositorio de git y solo permitirle trabajar en otras ramas y solicitudes de extracción. Si está haciendo un lío con el código de otros, debe evitarse que lo haga.
¿Sabes por qué te pidieron a ti (un pipsqueak con 2.5 años de experiencia) que te hicieras cargo del equipo en lugar de él?
Usa solicitudes de combinación y haz que él limpie su propio desorden. No los fusiones hasta que estés satisfecho.
Paso 1, nunca y realmente significa nunca, arreglar el código de otra persona. Crítica y envíelo de vuelta para que lo arreglen.
@rath Me llevo muy bien con el jefe y llevo más tiempo en la empresa. Y yo era el líder del proyecto porque solo era un experto en python y hago las cosas.
Cualquier desarrollador decente con más de diez años de experiencia no debería tener problemas para elegir Python. Las complejidades del idioma toman más tiempo, pero no tanto si estás interesado en aprenderlo. Estoy de acuerdo con la respuesta que sugiere que haga que escriba un marco de prueba automatizado para su aplicación principal: evita que cause daños reales y también es valioso. (¡Incluso podría escribir todo en C#!)
Por su actitud y comportamiento, no está actuando como un Desarrollador Senior. Está actuando como un intermediario deshonesto (Desarrollador II) que "sabe mejor" que el líder del proyecto. Algunas personas nunca deben ser promovidas a un puesto superior, incluso si tienen antigüedad. Independientemente del idioma, no parece que debería haber sido un desarrollador senior de C/C++/C#.
@HLGEM: En general, estaría de acuerdo, pero "nunca" es un poco fuerte. A veces, la otra persona es el jefe, que acaba de decirte que arregles su código y no aceptará las críticas o que se le "devuelva" el código.
Lo que dijo HGLM. Todos deberían tener su código revisado por un compañero, no solo por su colega incómodo, utilizando un sistema rastreable. Tanto como un medio para aprender unos de otros, y como un medio para hacer cumplir la rendición de cuentas. En este momento estás permitiendo su ignorancia arreglando sus cosas para él.
¿Hay alguna manera de que puedas darle un proyecto para hacer en Cxx, por su cuenta? Te lo quita de los pelos, y dependiendo de lo que encuentres, puede terminar siendo útil
Eres un desarrollador "senior" si eres bueno en eso. No porque lo hayas hecho durante muchos años o porque estés cerca de la tercera edad. No probar su código (me refiero a no probar que funciona, la prueba es control de calidad) y cometer código roto es definitivamente algo que haría un "desarrollador senior". "A veces revierte los cambios de otros". He visto UN caso en el que sucedió dos veces y la víctima involucró a su gerente. Con razón.

Respuestas (12)

Mi primera idea fue agregar pruebas, verificadas por un sistema de integración continua, para que limitara la cantidad de daño que puede causar a su proyecto, que también es el punto de la respuesta li x.

Luego, está el problema de que este tipo en realidad está ganando dinero para la empresa, de una manera perversa. Al hacer que el cliente pague por las horas empleadas, se convierte en una ventaja monetaria tener a alguien que está deshaciendo el trabajo de otras personas. Sería como ser contratado para construir un muro y tener un albañil haciendo un muro y otro empleado derribándolo.

Sin embargo, a largo plazo, el cliente puede cambiar de opinión (tal vez nunca más usar los servicios de su empresa) si se entera de que usted está haciendo eso (ya sea sin darse cuenta o a propósito), y también podría considerarse negligencia de su parte. .

Sin embargo, es probable que su jefe no tenga esas razones maquiavélicas para no despedirlo. En este punto, tienes a una persona cuyo trabajo no es útil para nada a la empresa. Yo sugeriría cambiarlo a una posición diferente . Usted afirma que es una causa perdida hacer que codifique correctamente Python. Pero tal vez pueda hacer un buen manual de usuario. O pruebe el programa en sus diferentes iteraciones para verificar que las funciones funcionan como se esperaba. Técnicamente, ya no trabajaría como desarrollador . Sin embargo, es algo que a menudo recae en el propio equipo de desarrolladores y, al ser una empresa pequeña, supongo que no tienes un equipo dedicado a eso.

En cualquier caso, un mal probador que solo ocasionalmente encuentra un error será más útil que el anti-desarrollador que parece haber sido cuando trabajaba hasta ahora. Por lo tanto, cualquier tarea que lo mantenga ocupado probablemente sea beneficiosa, incluso con un rendimiento bajo. Y las habilidades del desarrollador, que le permiten leer y comprender el código, son útiles para dirigir los casos de prueba, incluso si no puede escribir el código adecuado (aunque no es tan malo si no puede).

Un problema potencial con este enfoque sería que logró probar el programa demasiado rápido (¿tal vez porque se está saltando la mitad de los requisitos?). El siguiente paso sería codificar pruebas automatizadas para verificar los requisitos del proyecto, de modo que no necesite dedicar tiempo continuamente a realizar las mismas tareas aburridas, y se realicen de manera consistente cada vez. (Obviamente, se necesitarán muchas iteraciones hasta poder tener una cobertura completa de los requisitos)

Obtienes un voto a favor solo por el uso de 'maquiavélico', buen trabajo en la respuesta.
Un motor de CI es excelente para detectar confirmaciones de ruptura de compilación muy rápido. Haz esto primero.
El problema con el concepto de agregar pruebas para ejecutarlas a través del sistema CI es que el desarrollador en cuestión no escribe suficientes pruebas para empezar. Además, como alguien que "olvida la mitad de los requisitos", no solo perderá la implementación, sino que también perderá los casos de prueba, enmascarando el problema. A menos que su sugerencia sea que una persona adicional escriba todas las pruebas primero, no veo cómo esto ayuda.

Tienes una larga lista de cosas en las que es malo.

¿En qué es bueno él?

Descúbrelo y ponlo a trabajar en ese lugar.

Como su gerente, es su trabajo responsabilizarlo por no seguir el procedimiento. Yo iniciaría un proceso documental en este caso ya que este empleado parece no estar dispuesto a modificar sus malos hábitos.

Si el registro en papel no funciona, entonces póngalos en un plan de mejora del desempeño [PIP] formal , trabajando con RRHH, con objetivos claramente definidos , medidas y un marco de tiempo para lograr los objetivos.

Si el desarrollador no cumple con los objetivos, debe estar libre y claro para dejarlos ir, y su mente debe estar libre de culpa. Él también puede irse solo, lo que también resolverá su problema. Esperemos que esto sirva como una llamada de atención y actúen juntos.

Las acciones deben tener consecuencias. Un PIP es una gran idea.
Me parece que esta es la respuesta correcta. Si el OP no está en condiciones de establecer un PIP, debe hablar con su gerente para aclarar exactamente cómo se espera que sea responsable del trabajo de alguien sin ninguna de las herramientas para mejorar el trabajo. ¿Quizás la respuesta podría mejorarse al incluir algo en ese sentido?
Estoy de acuerdo con esta respuesta también. Además, cuanto más espere para corregir, peor se pondrá. La gente siempre piensa que los problemas personales como este mejorarán... no lo hacen... solo mejorarás ignorándolos. Y como su manager, tú serás el culpable cuando la basura llegue al ventilador. No puede despedirlo, pero puede redactarlo y documentar problemas que pueden usarse para despedirlo si no trabaja para mejorar.
+1 para el PIP. OP puede no tener el poder para despedirlo, pero como gerente de línea de este empleado, es responsable de evaluar el desempeño. Lo principal es seguir el manual al pie de la letra . Asegúrese de que todas las declaraciones sobre el desempeño estén respaldadas por evidencia. Ofrézcale la opción de volver a capacitarse o cambiar de puesto, y asegúrese de que el PIP incluya hitos para él que muestren mejoras o no mejoren. Y, por supuesto, su próximo incremento salarial debe ser cero, o ser un recorte salarial si la resolución del PIP es que lo degradan.

"Recientemente me ascendieron como gerente", luego comience a aprender a ser gerente. Te guste o no, por lo que has descrito, ellos están haciendo el trabajo por el que se les paga, pero tú no.

Tiene un empleado al que parece haberse dado por vencido, eso no es una buena gestión. Estás haciendo su trabajo por ellos, eso no es una buena gestión. Estás permitiendo que interrumpan el proyecto, eso no es una buena gestión.

Este empleado está claramente (y posiblemente justificadamente) descontento, pero en lugar de abordar las causas de su queja, las está agravando. No importa si eres un mejor programador o si conoces las sutilezas de Python mejor que él, porque tu rol actual es el de gerente, no el de programador, y el trabajo de un gerente es hacer que otras personas, incluido él, participen. quiere hacer lo que usted quiere que ellos hagan. Quiere que produzca un código que cumpla con las normas de su empresa. Averigüe por qué no quiere y cambie algo para que sí quiera. En el caso extremo, puede obligarlo a elegir entre hacerlo a la manera de la empresa o trabajar para una empresa diferente, pero debe considerar que es un fracaso de su parte sin importar cómo resulte.

Sugerencia

Por mucho que me duela sugerir, ¿ha considerado implementar algo como pruebas TDD o BDD en su tubería? Desde mi experiencia, un conjunto de pruebas bien desarrollado, incluso si no se implementa de manera estricta, puede hacer maravillas para los de bajo rendimiento. Esto no acelerará su desarrollo, pero lo que hará es que los postes de la portería sean más transparentes cuando se trata de lo que necesita hacer para poner sus parches al día. Mejor aún, cosas como la cobertura de código pueden ser una gran herramienta para impulsar la motivación, ya que tendrá una métrica visible asociada a su trabajo junto con los beneficios obvios.

También significa que si no pasa las pruebas, no puede pasar a más destrucción.

Mi opinión

A veces en los equipos hay alguien que simplemente no encaja en el molde y realmente no debería estar sobre tus hombros, pero es así que tendrás que lidiar con eso internamente. En última instancia, como líder, debe tomar las decisiones correctas para el equipo y, si eso significa limitar lo que puede trabajar y hacer, entonces tiene que ser así. Personalmente, aprovecharía todas las oportunidades para dejar en evidencia que si no mejora, no se puede tomar mucho de la mano . Trabaje con la alta gerencia y si todavía no está funcionando, hay un punto en el que debe dejarlo e informar a la gerencia sin rodeos que no está funcionando y que su posición es que necesita irse o pasar a una parte diferente del negocio. Algunas de las cosas que tú

Mi opinión impopular

Eres un gerente y tienes contacto directo con la alta gerencia, podría ser el momento de buscar un reemplazo si su comportamiento continúa.

Me gusta la idea de TDD, ya que la compañía ahora también se está volviendo loca con ISO27001 e ISO9001, por lo que podría encajar bien en nuestros procesos.
Ahh, los hemos tenido durante bastante tiempo, las pruebas, cuando se implementan correctamente, pueden hacer maravillas para la productividad y la seguridad, lo cual es excelente para los productos comerciales. Aunque debo decir que este enfoque con algunas personas solo muestra los verdaderos colores cuando comienzan a intentar hacer trampa en las pruebas en lugar de completarlas.
Probar si su código realmente funciona sería un buen comienzo.

Se supone que un desarrollador senior no debe ser senior solo por envejecer y estar allí durante mucho tiempo, sino por ser un buen desarrollador. Esta persona no parece un desarrollador senior.

Sugiero una conversación individual en la que expliques la situación, y que su trabajo no es satisfactorio, que en realidad no vale su salario (¿o sí?), y lo que cree que tú y él pueden hacer para cambiar esto. .

Alguien puede ser desarrollador senior en un idioma y ser junior o incluso antidesarrollador en otro idioma.
No sé, @jo1storm. Sí, una gran parte de ser un desarrollador senior depende del idioma, y ​​definitivamente me veré mucho más tonto en algunos que en otros. Sin embargo, aún cometería código de trabajo, haría relaciones públicas y mejoraría con el tiempo, como estoy seguro de que la mayoría de los otros desarrolladores senior que he conocido lo harían.

Honestamente, creo que la respuesta se encuentra en su título "cómo ayudar a alguien que está más allá de ayudar". Crees que está más allá de ayudar. Creo que parece que está más allá de ayudar. En realidad, podría estar más allá de ayudar.

Si se tratara de un desarrollador junior, aceptaría, como máximo, este tipo de rendimiento durante los primeros meses; después de eso, deben cumplir. Eso es lo máximo, creo que contratar a cualquiera que no pueda producir código el primer día es una contratación arriesgada.

Este tipo lleva el título senior, se supone que debe ser el mentor de los desarrolladores junior o al menos tener un buen desempeño.

Has tratado de persuadirlo para que cambie, y eso no funcionó. El cambio debe ser obligado, lo que requiere una acción disciplinaria o terminación, por lo tanto, la intervención de la gerencia.

Actualmente me resulta más fácil y rápido no darle ninguna tarea, cada vez se acercan más los plazos y es más rápido hacerlo yo mismo. De hecho, estoy considerando cambiar de trabajo por su culpa.

Esto es lo que tu jefe necesita saber. Dependiendo de su relación, tendrá que decidir si concentrarse en los plazos que se avecinan o en su deseo de cambiar de trabajo.

Dado que a su jefe le preocupa perder horas facturables, puede señalar que reemplazar $SeniorDev con un desarrollador efectivo dará como resultado la misma cantidad de horas facturables y mejorará la moral y la capacidad de cumplir con los plazos. Esto funciona mejor para los dos.

Despedir a la gente puede ser un pequeño problema legal aquí en la UE, factible, pero toma tiempo, y encontrar gente nueva es difícil ahora que todos están trabajando. Definitivamente un buen argumento para presentarle.
La reasignación a un proyecto compatible con sus preferencias de codificación es ideal, pero es posible que el tamaño de su empresa no lo permita. Aún así, su gerente puede tener otro trabajo que podría hacer.

Mi experiencia en software es que si un desarrollador no comprende la importancia de probar y verificar el código antes de registrarlo, entonces no tiene sentido tratar de trabajar con él o ella. Lo mejor es seguir adelante y centrar sus esfuerzos en convencer a los demás de la necesidad de hacerlo.

Parece que su trabajo es producir horas facturables, no software, y es bueno en su trabajo. Tu cliente es estúpido, tu jefe no tiene escrúpulos. El empleado está más allá de la ayuda.

Tienes dos opciones: dejar de preocuparte o buscar otro trabajo.

En primer lugar, no ha explicado cuáles son los requisitos y habilidades del puesto de alto nivel en su empresa. Un rol de alto nivel significa que las habilidades, las capacidades y las expectativas difieren drásticamente según la empresa. Él es un senior allí, por lo que primero debe verificar si cumple con los criterios definidos por su empresa.
Con respecto a la situación y los problemas que señala. Creo que estás tratando de abordar demasiadas cosas a la vez.
Comience con lo más importante, que es el hecho de que el código no es funcionalmente lo que necesita el cliente, ya que faltan los requisitos.
Después de abordar eso, puede continuar con la forma en que el código podría ser mejor y, eventualmente, con la forma de codificar correctamente en Python.
Si comienza con tales discusiones, es fácil desviarse porque los desarrolladores suelen tener opiniones variadas y bastante sólidas sobre estos puntos.
Tal vez el chico está abrumado o no le gusta Python y eso afecta su desempeño.

Por la forma en que describiste esto, probablemente colocaría a este desarrollador en el departamento de "no muy bueno" y me preguntaría si los quiero como parte de mi pequeño equipo, donde cada desarrollador tiene un gran impacto en todo lo demás. Los desarrolladores deficientes pueden esconderse en tiendas grandes y trabajar en áreas de código divididas que tienen poco o ningún impacto en el resto, pero las tiendas pequeñas generalmente tienen a todos capaces de tocar y, por lo tanto, romper otras partes del código. Sacar un revelador de este tipo del sistema suele ser un caso de suma por resta . Debes explicarle esto al gran jefe, que preferirías que no codifique en absoluto para que el otro desarrollador y tú hagamos más.

Si el problema tiene que ver con las horas facturables, entonces también puede hablar con el gran jefe sobre cómo reemplazar a esta persona con una persona más joven y más barata puede ser una doble victoria. Obtiene márgenes más altos en las horas facturables y el reemplazo, aunque quizás no pueda abordar los problemas más difíciles, al menos puede ser productivo para avanzar en las partes más fáciles de la solución sin dañar el trabajo de otros.

Así que conviertes esto en un caso de negocios y lo presentas al gran jefe como una forma de mejorar el negocio reemplazando el área problemática. Como gerente, aprenderá que su función se expande desde solo centrarse en la tecnología hasta pensar también como propietario de un negocio y comprender cuáles son los impactos generales.

En cuanto a cómo entrenar realmente a esta persona, lo que generalmente establezco desde el principio en un taller que dirijo es una Definición sólida, bien definida y socializada de Listo . Esta es la línea en la arena que dice que ningún trabajo se puede considerar completado (dependiendo de su configuración que se puede fusionar para dominar, empujar para producir, etc.) hasta que se cumplan todas las cosas en su Departamento de Defensa. Luego lo hace cumplir con TODO el trabajo realizado por el equipo de manera uniforme. Entonces, si dicho desarrollador no completa sus pruebas, el trabajo se detiene en seco con una declaración explícita de "falta de pruebas adecuadas" y el desarrollador tiene que terminar eso antes de poder pasar a la siguiente tarea.

Sí, esto significa que ahora debe usar parte de su tiempo para auditar el trabajo de su taller, pero eso es parte de la administración. También puede usar este u otros tipos de revisión por pares para recorrer los controles propuestos y detectar algunos de esos refactores dañinos que mencionó antes de que afecten el resto del código base. A través de su Departamento de Defensa, establece puertas alrededor de la calidad (es decir, pasa un PR) que evitan comportamientos dañinos.

Si aplica estas puertas y realmente evita que cualquier desarrollador impulse soluciones parciales o mal hechas, entonces será bastante obvio quién hace cuánto y con qué rapidez. Luego puede usar este tipo de seguimiento para cuantificar el valor de cada desarrollador, ayudándolo a presentar el caso al gran jefe del que hablé anteriormente sobre la productividad real y aprovechar el dinero de cada desarrollador en el equipo.