¿Debo informar a un desarrollador de software que necesita mejorar su productividad de prueba?

Hemos contratado a un desarrollador de software junior que se ha destacado en todas las métricas imaginables, excepto en el tiempo que les lleva probar manualmente el código que escriben. Recientemente dejamos ir a nuestro equipo de control de calidad y comenzamos a esperar que los desarrolladores realicen sus propias pruebas en profundidad.

Aquí viene el problema: para una determinada tarea de desarrollo de características que le tomaría a otro desarrollador intermedio/senior escribir 2 meses más reuniones y ayuda mía y de algunos de los otros ingenieros senior que escribieron el código base y 3 días para probar. Le toma 1 mes escribir un código absolutamente hermoso y eficaz de forma independientecon casi 0 defectos y 1-2 semanas para probar. ¡Y lleva con nosotros solo unos meses! La gerencia ha comenzado a rastrear sus tiempos de inactividad (debido al tiempo que le lleva realizar la prueba) y hemos notado que está inactivo el 50 % del tiempo durante los ciclos de prueba, lo cual la gerencia tiene un gran problema porque cree que debería trabajar más y probando sus características más rápido... a pesar de que es nuestro miembro de equipo con mejor rendimiento... en el nivel junior... que también pagamos considerablemente menos teniendo en cuenta el valor que aporta a nuestro equipo.

Realmente no quiero perder a este individuo porque entonces seré el responsable de reemplazarlo... y actualmente lo considero el mejor empleado de mi equipo. Tampoco quiero mencionarle nada porque no le pagamos tanto y siento que probablemente renunciará en el acto (lo encuentro un poco impulsivo) y encontrará un nuevo trabajo si yo traer esto a él. Reemplazarlo con alguien de igual habilidad nos costaría 2-3 veces más de lo que le pagamos actualmente. Y si contratamos a alguien más, estamos asumiendo un gran riesgo de que no podrá hacer el trabajo y terminará teniendo que despedirlo.

Discutí esto con la gerencia y traté de argumentar que deberíamos traer algo de control de calidad para reducir los tiempos de prueba, pero quieren tener una reunión con él y escalar cosas que absolutamente no quiero hacer.

¿Qué debo hacer aquí?

Además de que la administración es un idiota, ¿puede explicarme por qué es un problema de alguna manera que un desarrollador complete una tarea que calculó que tomaría 2 meses en 6 semanas?
@PhilipKendall, el problema que tiene la administración es que, en lugar de tomar 2 o 3 días para probar (o mejor), tardan 2 semanas y, durante el tiempo de prueba, su computadora está inactiva el 50 % del día.
Sospecho que es porque está inactivo parte del tiempo durante el largo ciclo de prueba, y creen que debería estar completando esas mismas tareas en 1 mes; podría ser el doble de rápido si su prueba fuera más rápida.
@thursdaysgeek Correcto
We recently let our QA team go and have started to expect developers to do their own in-depth testing- ¡Ay! Esa es una bandera roja en sí misma. Los desarrolladores no son probadores, es una disciplina diferente. Tampoco deberían ser responsables de realizar el control de calidad del código que escribieron ellos mismos. Extrañarán los mismos errores que perdieron cuando lo escribieron.
@SethR absolutamente. En mi lugar de trabajo, confiamos absolutamente en nuestro personal de control de calidad, incluso con pruebas automatizadas de cobertura completa. Hay un método mental completamente diferente de "Necesito que haga esto" a "bien, ¿cómo puedo romper esto?"
“Nos hemos dado cuenta de que está inactivo el 50% del tiempo durante los ciclos de prueba” Felicitaciones, ha encontrado una métrica corporativa más loca para la productividad que las líneas de código escritas. Los desarrolladores no son trabajadores de la línea de producción, pensar también es trabajo... No recopile esta métrica, no clasifique a los empleados en esta métrica y definitivamente no discipule a los empleados en esta métrica. En mi humilde opinión.
"Es mi mejor empleado. Supera a todos los demás en el equipo. No le pagamos casi lo que vale. Dicho todo esto, usamos una métrica de rendimiento ridícula basada en el tiempo de inactividad y se está quedando corto. Espero no hay que despedirlo". - No tengo palabras.
¿Tiene alguna teoría de por qué está inactivo el 50% del tiempo durante las pruebas? El tiempo para pensar, el cansancio o la aversión por un tipo particular de tarea, incluso tal vez solo la sobrecarga de la inexperiencia y la organización de sus pensamientos, podrían ser explicaciones legítimas. Parece completamente kafkiano confrontarlo cuando ya aceptas que la calidad de su código es muy alta y, en general, es un trabajador rápido. Me parece mejor estrategia abrir una conversación sobre lo que hace que lo hace tan productivo, ¡para que tal vez se generalicen sus buenas prácticas!
¿Existe alguna posibilidad, dado lo bueno y productivo que es, de que simplemente esté haciendo un trabajo mucho mejor que otros desarrolladores en las pruebas? Si observa los errores encontrados después de que se haya probado el código, ¿su código sale adelante?
Dejar ir a nuestro equipo de control de calidad: aquí está el mayor problema: los desarrolladores inconscientemente no quieren encontrar problemas en su código. Cada error que encuentran crea trabajo para ellos mismos. Nuestros chicos de control de calidad no tienen ningún problema con eso. Si me causan trabajo extra, han hecho un buen trabajo.
Let go of our QA team, tracking his idle times, we considerably underpay him, hope I don't have to fire him [the highest performer]. Esto tiene que ser una pregunta troll. Está más allá de mi comprensión que cualquier persona o empresa pueda ser tan mala en la gestión y tan completamente inconsciente.
¿Qué significa "inactivo" aquí?
Si cree que una función que tarda de 1 a 2 meses en desarrollarse puede probarse en 2 a 3 días, está muy equivocado y probablemente tenga defectos graves y otros problemas de calidad en su producto en este momento. ¿Pensaste que tu equipo de control de calidad anterior no estaba haciendo nada? Creo que las 1 o 2 semanas que tarda el desarrollador en realizar la prueba son probablemente bajas.
Por favor, comparta el nombre de la empresa para que nadie tenga la desgracia de trabajar para ese taller durante los próximos 2 años que tarda la empresa en cerrar.
"¿Qué debo hacer aquí?" -- déle una buena carta de recomendación, sugiérale a GTFO lo más rápido que pueda (por su propio bien), y luego haga lo mismo usted mismo.
"Reemplazarlo con alguien de igual habilidad nos costaría 2 o 3 veces más de lo que le pagamos actualmente". -- ¿Ha planteado este tema monetario específico, en esos términos, en las discusiones con la gerencia? Yo pensaría que si eso no les hace cambiar de rumbo, entonces nada lo hará.

Respuestas (5)

Tienes un problema de gestión. Y, sea cierto o no, debe explicarles que el tiempo que pasa probando es la razón por la que el código es tan bueno y, dado que sigue siendo más rápido que otras personas, tienen dos opciones:

  1. Déjalo en paz y espera mantenerlo durante algunos años antes de que descubra su valor y vaya a donde obtendrá una paga decente.
  2. Moléstelo por el tiempo que pasa probando, lo que resultará en que no proporcione un código tan bueno o, más probablemente, en que se vaya por completo.

o incluso 3: Date cuenta de que tienen algo muy bueno y asegúrate de tener los recursos para mantenerlo feliz todo el tiempo que puedas, con buenas condiciones de trabajo, mejor paga, lo que sea necesario. Que está brindando suficientes beneficios a la empresa como para que les importe más eso que el tiempo que deja descansar la mente mientras realiza las pruebas. (Y, podría señalar, para algunas personas, que el tiempo de inactividad es absolutamente esencial para tener un tiempo de actividad de alta calidad).

Permítanme reiterar esto : el hecho de que los dedos de alguien no se muevan no significa que estén inactivos. Su gerencia parece pensar que están midiendo algo útil, pero están descontando por completo el tiempo dedicado a pensar, planificar y recargar, todo lo cual es válido y necesario. Pero, como parecen ser algo cortos de vista, la mejor manera es explicar que, mientras está probando, también está pensando y mejorando el producto . Eso puede ser cierto o no, tal vez se esté recargando (lo que hace que el producto sea mejor), pero estoy bastante seguro de que su gerencia no entendería ese concepto. Tal vez se está perdiendo el tiempo, lo que lo hace más feliz y, por lo tanto, mejora el producto. Tal vez podría trabajar aún más eficientemente y, a medida que mejora en las pruebas, se acelerará.

¿Por qué la gerencia no mira a los otros desarrolladores, que son más lentos y menos productivos que su nuevo desarrollador junior? Intente desviarlos hacia sus otros desarrolladores. O, ¿por qué no hacer que ellos hagan las pruebas de su trabajo, ya que son tan rápidos en eso?

Creo que el mayor problema que tienen es que él está inactivo el 50% del tiempo en lugar de hacer pruebas. Personalmente, no me importa debido a su desempeño, pero la gerencia / los altos mandos son del tipo que esperan que un trabajador esté inactivo quizás menos del 5% del día, si eso es así. El individuo también está mucho tiempo inactivo durante el desarrollo, pero eso es fácil de justificar (hay que pensar), mientras que las pruebas no lo son. Especialmente porque gran parte de esto implica pruebas de regresión / revisión de listas de verificación.
@Jeff: no soy el unicornio que es este tipo, pero si tuviera que trabajar sin tiempo de inactividad, o incluso con solo un 5% de tiempo de inactividad, preferiría romper rápidamente. Es por eso que estoy aquí ahora: para refrescar mi mente antes de pasar al siguiente número.
@Jeff: también le indicaría a la gerencia que el hecho de que sus dedos no se muevan durante la prueba no significa que esté inactivo. Pensar (y descansar) no es un trabajo visible, pero sigue siendo un trabajo activo y productivo.
@Jeff, ¿podría justificarse en términos de que está siendo más minucioso que otros, que de hecho está aplicando más trabajo cognitivo a la tarea? ¿O incluso que el proceso de prueba es rutinario y mundano, o por el contrario, que involucra mucha variedad, y de cualquier manera lo encuentra mentalmente más agotador que la norma y tiene que trabajar a un ritmo más lento?
@Jeff Aquí hay una diferencia entre un tipo de control de calidad y un desarrollador: el tipo de control de calidad encuentra un error y, si es bueno, escribe los pasos precisos para reproducirlo. El desarrollador que prueba su propio código hace lo mismo, pero luego comenzará a pensar cuál es el problema real en el código y posiblemente lo solucionará. En realidad, es más eficiente, pero parece que dejaron de probar. De hecho, dejaron de probar y solucionaron el problema. Este tipo está 20 horas probando, 20 horas arreglando, y los idiotas piensan que es un vago.

Están sucediendo muchas cosas aquí, y no muchas buenas.

Contrató a un desarrollador de software junior que parece estar, en general, muy bien. Ese es un buen comienzo. Sin embargo, los jóvenes necesitan tutoría para aprender y desarrollar sus habilidades. Así que ha elegido a un desarrollador junior, que puede no tener mucho conocimiento y experiencia en buenas técnicas de prueba manual, y espera que sea un probador manual altamente competente sin ningún tipo de tutoría o supervisión de un probador experimentado.

Incluso sin acceso a evaluadores experimentados y evaluadores de control de calidad, su desarrollador junior está escribiendo código con pocos defectos. Además de eso, están completando el paquete de trabajo general de diseño, desarrollo y prueba de la solución en 5 a 6 semanas cuando se estima que un desarrollador intermedio o senior diferente tardaría 8 semanas en hacer el trabajo. Están entregando 2-3 semanas más rápido y aparentemente de mayor calidad de lo que esperaría de una persona de mayor rango.

Cuando se trata de estimar, ¿le preguntó a su ingeniero junior cuánto tiempo tomaría hacer el trabajo? Una de las reglas fundamentales de la estimación es que las personas más cercanas a la obra son mejores en la estimación. Aunque, como junior, es posible que necesiten tutoría en buenas técnicas para comprender y estimar el trabajo. También me preguntaría si tiene sentido estimar el desarrollo y las pruebas de forma independiente o si tiene sentido estimar la finalización de todo el elemento de trabajo.

Esto conduce a "tiempo de inactividad". Medir el "tiempo de inactividad" no significa mucho en el trabajo del conocimiento. ¿Qué significa que están inactivos el 50% del tiempo? ¿Cómo se determina este número? Es posible que desee reconsiderar si esto significa algo, especialmente porque el trabajo se está haciendo más rápido de lo previsto.

Tampoco entiendo la vacilación de tener una conversación con el ingeniero junior para entender lo que está pasando. No tiene que ser una confrontación, pero tales conversaciones deben ser algo habitual entre cualquier gerente o líder de equipo y sus subordinados directos o miembros del equipo. Así es como encuentra y soluciona los problemas.

También recomendaría traer de vuelta a los especialistas en pruebas, de alguna forma. Incluso si su función es ayudar a supervisar y enseñar a los desarrolladores buenas técnicas de prueba, en lugar de ser las personas que diseñan y ejecutan todas las pruebas. Las pruebas son una especialidad y un conjunto de habilidades que no todos tienen. No tener personas que puedan mejorar el estado del arte local y subir de nivel a los ingenieros a su alrededor puede ser un detrimento para el equipo y la organización.

Entonces, en resumen:

  • Reconsidere su estimación. Estimar el acabado del trabajo, sin tratar de estimar el ciclo iterativo de diseño/desarrollo/prueba.
  • Involucre a su ingeniero junior en la estimación del trabajo.
  • Reconsidere si el "tiempo de inactividad" es una medida valiosa para los trabajadores del conocimiento. Pista: no lo es.
  • Tenga una conversación con su ingeniero júnior sobre cómo asegurarse de que tenga lo que necesita para ser eficaz y eficiente. Eso incluye tutoría y entrenamiento para desarrollar y fortalecer habilidades débiles.

Esto es realmente simple. No hay nada malo con el desempeño real de este joven desarrollador. El problema es su rendimiento medido por alguna métrica de rendimiento bastante estúpida. Así que simplemente explíquele lo que debe hacer para sortear esas métricas de rendimiento.

Una vez tuve el problema de que alguien contaba con qué frecuencia registrabas cosas en Perforce. Por lo tanto, pasa dos semanas implementando una función y la verifica. Una verificación en dos semanas, eso es un rendimiento increíblemente malo. Una vez que se le informa, verifica el progreso más pequeño, al menos cuatro veces al día. Eso es un factor 40 en la mejora del rendimiento.

Discutí esto con la gerencia y traté de argumentar que deberíamos traer algo de control de calidad para reducir los tiempos de prueba, pero quieren tener una reunión con él y escalar cosas que absolutamente no quiero hacer.

Argumentaste mal.

Si la gerencia quiere que los desarrolladores realicen el control de calidad y usted no puede hacerlos cambiar de opinión, se acabó. Tienes que trabajar con lo que tienes.

En su lugar, debería haber enfatizado que los diferentes desarrolladores tienen diferentes puntos fuertes y que el desarrollador está haciendo un gran trabajo al ofrecer funciones en general.

Vale la pena señalar que hay dos factores en juego. Son un poco más lentos en las pruebas, claro, pero eso empeora por el hecho de que funcionan más rápido durante el desarrollo.

Pero puedes convertir esto en algo positivo:

  • Haz que trabajen en tareas que no impliquen muchas pruebas. Esto maximiza la tarea en la que son buenos.
  • Involúcrelos fuertemente en las reuniones de revisión de diseño durante su fase de desarrollo. Si es un buen desarrollador, otros pueden beneficiarse de sus puntos fuertes.
  • Haga que todos revisen las estrategias de prueba de los demás. Esto permite que todos compartan metodologías.
No es necesariamente cierto que este desarrollador sea "un poco más lento en las pruebas", tal vez sea mucho mejor que los otros desarrolladores y pruebe mucho más y en profundidad que los demás.

Dependiendo del tipo de prueba involucrada, podría ser bueno alentarlo a alternar entre escribir código y probar con más frecuencia (por ejemplo, escribir durante una semana o terminar una pequeña parte de la función y luego probarla). Mencionó que lo encontró un poco impulsivo; quizás en este caso sería mejor intentar convencer a la gerencia de que su desempeño actual ya es bueno. (Especialmente porque es un junior: tratar descaradamente de exprimir más trabajo de un desarrollador junior que ya se está desempeñando mejor que sus superiores sin promoverlo directamente es una forma segura de sacarlo de la empresa, y eso no es en absoluto lo que quieres. )

Gran parte del código no se puede probar de forma razonable y aún requiere muchas pruebas manuales y muchas pruebas de regresión. A veces, una característica cambia gran parte del sistema, por lo que todo debe volver a probarse, como una especie de lista de verificación.
Ah, eso es una vergüenza. En ese caso, ¿sería posible preguntarle directamente si hay algún bloqueador con el que se esté encontrando? Siento que formular la pregunta en torno a "hay algo que se interponga en su camino" en lugar de "por qué su máquina está inactiva tanto tiempo" podría limitar las posibilidades de que se ponga a la defensiva.
@Jeff Si no tiene formas de automatizar las pruebas, asignarlo como un problema a este probador sería lo mejor que podría hacer. Existen numerosas formas de probar y muchas herramientas disponibles. Si ninguna herramienta coincide con lo que necesita, entonces hacer que esta persona trabaje en la fabricación de dicha herramienta beneficiaría enormemente a la empresa. Hace muchos años, tenía un dispositivo que se ajustaba a un teclado y podía controlar las pulsaciones de teclas. Hay muchas maneras de automatizar las pruebas.