Estimar es timar
Las estimaciones de software son uno de los aspectos más frustrantes y controvertidos en el desarrollo de proyectos tecnológicos.
Tanto desarrolladores como product managers suelen encontrarse en una situación incómoda cuando se trata de predecir cuánto tiempo y recursos llevará completar una tarea o lanzar al mercado una funcionalidad. ¿Por qué es tan difícil hacer estimaciones precisas en este campo? Y lo que es más importante, ¿qué podemos hacer para mejorar esta situación?
El problema con las estimaciones de software
La realidad es que las estimaciones de software a menudo fallan, y fallan estrepitosamente. Funcionalidades que se suponía que tomarían semanas se extienden durante meses. Esto no solo causa frustración y tensión en los equipos, sino que también puede tener graves consecuencias financieras y estratégicas para las empresas.
Existen varias razones por las que las estimaciones de software son notoriamente imprecisas:
1. La naturaleza única de cada funcionalidad: Cada producto o funcionalidad es, en cierta medida, un viaje hacia lo desconocido. Incluso si hemos hecho algo similar antes, las particularidades de cada idea pueden presentar desafíos únicos e inesperados.
2. La complejidad inherente del software: Los sistemas de software modernos son increíblemente complejos, con múltiples capas de abstracción y numerosas interdependencias. Un pequeño cambio en una parte del sistema puede tener efectos en cascada impredecibles.
3. El factor humano: El desarrollo de software es una actividad intensamente creativa y cognitiva. El rendimiento y la productividad pueden variar significativamente dependiendo de factores como el estado de ánimo, la salud, la motivación y las distracciones externas.
4. La ilusión de control: A menudo subestimamos la cantidad de factores que están fuera de nuestro control, como cambios en los requisitos, problemas técnicos inesperados o la disponibilidad de recursos.
5. El síndrome del optimismo: Los desarrolladores tienden a ser optimistas por naturaleza. Después de todo, se necesita cierto grado de optimismo para creer que podemos resolver problemas complejos con código. Este optimismo puede llevarnos a subestimar sistemáticamente el tiempo necesario para completar tareas.
6. La presión externa: A menudo, las estimaciones se ven influenciadas por presiones externas, como plazos arbitrarios impuestos por la dirección o las expectativas poco realistas de los clientes internos.
7. La falacia de la planificación: Tendemos a basar nuestras estimaciones en el escenario ideal, sin tener en cuenta los inevitables contratiempos y obstáculos que surgirán durante el desarrollo.
Entonces, ¿qué podemos hacer?
A pesar de estos desafíos, no todo está perdido. Aunque es posible que nunca logremos la precisión perfecta en las estimaciones de software, hay varias estrategias que podemos emplear para mejorar significativamente nuestro enfoque:
1. Abrazar la incertidumbre: En lugar de pretender que podemos predecir el futuro con precisión, debemos reconocer y comunicar la incertidumbre inherente a las estimaciones de software. Una forma de hacer esto es utilizar rangos en lugar de números precisos. Por ejemplo, en lugar de decir que una tarea tomará 5 días, podríamos decir que tomará entre 3 y 8 días.
2. Utilizar la estimación por tres puntos: Esta técnica implica hacer tres estimaciones para cada tarea: la mejor estimación posible, la más probable y la peor. Esto nos ayuda a pensar en diferentes escenarios y nos da una imagen más realista del rango de posibilidades.
3. Descomponer las tareas: Cuanto más grande es una tarea, más difícil es estimarla con precisión. Descomponer las tareas grandes en componentes más pequeños y manejables puede ayudar a mejorar la precisión de nuestras estimaciones. El rol del product manager en la elaboración de User Stories pequeñas que puedan ser fileteadas correctamente por el equipo de ingeniería es crucial para conseguir este punto.
4. Aprender de la experiencia: Mantener un registro de nuestras estimaciones pasadas y compararlas con los resultados reales puede ayudarnos a identificar patrones y mejorar con el tiempo. Esta práctica, conocida como "velocidad" en metodologías ágiles, puede ser una herramienta valiosa para hacer estimaciones más precisas en el futuro. Conocer el Lead Time y Cycle Time de los equipos es fundamental para poder hacer ejercicios de estimación con cierta precisión.
5. Utilizar técnicas de estimación colaborativa: Métodos como el Planning Poker pueden ayudar a aprovechar la sabiduría colectiva del equipo y evitar sesgos individuales.
6. Adoptar metodologías ágiles: Las metodologías ágiles, con su enfoque en iteraciones cortas y entregas incrementales, pueden ayudar a mitigar los riesgos asociados con las estimaciones a largo plazo.
7. Comunicar eficazmente: Es crucial comunicar claramente a todas las partes interesadas que las estimaciones son precisamente eso: estimaciones, no promesas o compromisos firmes. Debemos educar a los clientes internos y a la dirección sobre la naturaleza incierta del desarrollo de software y la necesidad de flexibilidad.
8. Enfocarse en el valor, no en el tiempo: En lugar de obsesionarnos con estimaciones de tiempo precisas, podemos cambiar el enfoque hacia la entrega de valor. Priorizar las características más importantes y entregarlas primero puede ayudar a mitigar los riesgos asociados con las estimaciones imprecisas.
9. Utilizar datos históricos: Si tenemos acceso a datos de funcionalidades similares anteriores, podemos utilizarlos para informar nuestras estimaciones actuales. Esto puede proporcionar una base más sólida para nuestras predicciones. Normalmente los equipos de producto más maduros suelen ser mucho mejores estimando las tareas que tienen que realizar. Un equipo de producto necesita al menos un año de maduración trabajando sobre el mismo producto y la misma base de código para alcanzar un nivel de madurez suficiente como para empezar a estimar.
10. Actualizar constantemente: Las estimaciones no deben ser estáticas. A medida que avanzamos en un proyecto y obtenemos más información, debemos estar dispuestos a revisar y actualizar nuestras estimaciones.
Conclusión
Las estimaciones de software seguirán siendo un desafío en el futuro previsible. La naturaleza compleja e impredecible del desarrollo de software hace que sea inherentemente difícil hacer predicciones precisas. Sin embargo, al reconocer estas limitaciones y adoptar enfoques más sofisticados y realistas para la estimación, podemos mejorar significativamente nuestra capacidad para planificar y ejecutar desarrollos de software.
El objetivo no debe ser lograr una precisión perfecta en nuestras estimaciones, sino encontrar formas de gestionar eficazmente la incertidumbre inherente al desarrollo de software. Al hacer esto, podemos crear expectativas más realistas, mejorar la comunicación con las partes interesadas y, en última instancia, aumentar las posibilidades de éxito de nuestras iniciativas.
Recordemos que el desarrollo de software es tanto un arte como una ciencia. Si bien podemos y debemos utilizar datos y técnicas cuantitativas para informar nuestras estimaciones, también debemos confiar en nuestra experiencia, intuición y capacidad para adaptarnos a las circunstancias cambiantes. Con este enfoque equilibrado, podemos navegar por las aguas turbulentas de las estimaciones de software y llevar nuestros productos a buen puerto.