Fireside Chat #63: Optimizando la productividad en equipos de desarrollo

¿Qué es la productividad de los equipos de desarrollo? ¿Existe un equilibrio entre velocidad y calidad? ¿Qué estrategias pueden emplear las organizaciones para impulsar la productividad en sus equipos y mejorar los resultados de negocio a largo plazo?

Estas preguntas surgieron en la reciente conversación entre el cofundador de Codurance, Sandro Mancuso, y el fundador de CodeScene, Adam Tornhill, durante nuestro más reciente Codurance Fireside Chat #63 en inglés. Vamos a profundizar un poco en cada una de ellas.

¿Qué es la productividad de los equipos de desarrollo?

Comencemos por entender qué se entiende por la productividad en los equipos de desarrollo. Mancuso y Tornhill la describieron como:

"La productividad de un equipo de desarrollo es la capacidad de una organización para respaldar eficazmente sus objetivos comerciales. Más allá de la simple velocidad de lanzamiento de funciones, se trata de mantener un ritmo sostenible de entregas, mes tras mes, con mínimas sorpresas"

- Sandro Mancuso, cofundador de Codurance, y Adam Tornhill, fundador de CodeScene

Esta previsibilidad no solo genera confianza, sino que también garantiza el cumplimiento de los plazos de entrega, un factor crucial para el éxito empresarial.

Desafíos y estrategias para mejorar la productividad

Sin embargo, alcanzar esta productividad no es tarea fácil. Algunos factores que influyen en la productividad de tu equipo requieren de una alineación entre los equipos de desarrollo y los objetivos de negocio. Cuando hay una comprensión clara de las expectativas y los plazos, se reduce el desperdicio y se evitan problemas de productividad. Pero el mayor obstáculo es el trabajo no planificado. Tornhill lo describe como "todas aquellas tareas no deseadas ni planificadas, como defectos y fallos en producción". De la misma manera comparte que para superar este desafío, es esencial regresar, cambiar el enfoque y priorizar la resolución de problemas en producción.

Impacto de la calidad del código en el negocio

La calidad del código no es solo un aspecto técnico, sino que tiene un impacto directo en los resultados de un negocio. Según la investigación de Tornhill, titulada "Code red: the business impact of code quality", las empresas con un código de alta calidad logran lanzar productos el doble de rápido y experimentan quince veces menos  defectos en comparación con aquellas con un código de baja calidad. Este hallazgo destaca la importancia de conectar la calidad del código con los objetivos de la empresa, permitiendo a los responsables tomar decisiones fundamentadas basadas en datos empíricos.

Muy a menudo se asume en la industria que si queremos avanzar rápidamente, debemos aceptar una disminución en la calidad del código; es un mal necesario e inevitable para llevar funciones a producción y productos a manos de los clientes lo más rápido posible. Sin embargo, a través del trabajo de Sandro, Adam y muchos otros enfocados en la calidad y la Software Craftsmanship, esta suposición no tiene fundamento. La investigación de Adam respalda esta afirmación. Una vez que se evalúan las correcciones y errores junto con las entregas en unidades de trabajo, y se miden los resultados en lugar de los procesos, los datos demuestran que lo contrario al compromiso en calidad es cierto: para avanzar rápidamente, es necesario hacerlo bien desde el principio. Los equipos de desarrollo serán más ágiles si cuentan con un código de alta calidad; al fin y al cabo, no es necesario hacer ningún tipo de compromiso.

Impulsando la productividad en un equipo de desarrollo

Una forma de obtener el respaldo de la empresa y mejorar la productividad del equipo de desarrollo, es crucial implementar la automatización de pruebas. Al hacerlo, se aceleran los procesos de entrega y eliminan desperdicios al correlacionar los cambios en el código y la arquitectura con mejoras en la eficiencia.

Desafíos en la productividad de un equipo de desarrollo

Un factor que afecta significativamente la productividad de un equipo es la deuda técnica, ese costo acumulado de mantener un código de baja calidad o una arquitectura deficiente. Esta acumulación de deuda no solo afecta la calidad del software, sino que también impacta la Developer Experience (DevEx). Cuando los equipos de desarrollo pasan la mayor parte de su tiempo lidiando con código desordenado y problemas técnicos, se reduce su productividad y aumenta su frustración. En promedio, los equipos de desarrollo pasan la mayor parte de su tiempo lidiando solo con el 2 y el 4% del código, lo que aumenta el riesgo de errores y ralentiza el progreso. Para evitar que esta deuda se convierta en un obstáculo, es crucial dedicar tiempo y recursos a mejorar continuamente el código y la arquitectura del software.

¿Cómo calcular la productividad de un equipo de desarrollo?

Una manera en que las organizaciones pueden calcular la productividad de un equipo de desarrollo es utilizando las cuatro métricas clave de DORA: el tiempo de espera de un cambio, la frecuencia de despliegue, el tiempo medio de restauración (MTTR) y tasa de fallo de cambio. Las organizaciones maduras con una arquitectura distribuida, por ejemplo, permitirían a los equipos de desarrollo realizar despliegues varias veces al día, lo cual suele ser un indicativo de equipos de desarrollo altamente productivos. Sin embargo, para lograr esto con éxito, es fundamental que exista una buena alineación de requisitos en toda la empresa y que múltiples equipos cuenten con automatización de procesos integrada para avanzar de manera rápida y eficiente.

Esto nos lleva a considerar los comportamientos del equipo ya que para optimizar la productividad en un equipo de desarrollo es necesario que exista una fuerte alineación entre los equipos y el negocio. Los límites entre las responsabilidades del equipo deben ser claros pero también flexibles, permitiendo una colaboración estrecha con equipos cercanos para aprovechar sinergias y evitar perder información importante.

Conclusión

Si bien el enfoque en la calidad del código es deseado por cualquier organización que busque entregar resultados sobresalientes, generalmente hay un equilibrio entre la excelencia y el pragmatismo (cómo lo expresa el manifiesto del Software Craftsmanship). La excelencia no puede ser ilimitada; es importante considerar las limitaciones existentes y hacer el mejor trabajo posible. Entregar funciones a producción es una necesidad, por lo que en lugar de detenerse, los equipos de desarrollo productivos "limpian" la deuda técnica a medida que avanzan.

A medida que la conversación entre Sandro y Adam llegaba a su fin, resumieron sus principales conclusiones para lograr la productividad de un equipo de desarrollo de software. Entre ellas valoraron:

Profundiza aún más en cada conclusión mirando la grabación completa Fireside Chat #63 de Sandro y Adam en YouTube o escuchando el Podcast (ambas en inglés).

Evalúa la calidad de tu software con nuestro Software Quality Assessment