Mucho se dice sobre la estimación en el desarrollo de software; hay un montón de artículos y blogs que dan consejos sobre cómo hacerlo mejor. A pesar de qué es un poco contradictorio el hecho de que este artículo hable de eso, por qué no damos un poco vuelta las cosas y lo vemos desde otro ángulo. No quiero escribir otro post aburrido sobre estimación, en cambio, quiero sumergirme en algunas ideas poco convencionales y compartir mis propias experiencias con vos.
Estimaciones en proyectos de software
Reconociendo la incertidumbre
Hacer estimaciones de proyectos es difícil, y lo primero que hay que recordar es que no hay dos proyectos iguales. Cada proyecto tiene sus propios desafíos y cosas que pueden complicar el proceso de estimación. Entonces, es importante mantener una mente abierta y no asumir cosas basadas en experiencias pasadas. En cambio, necesitás analizar cuidadosamente todos los detalles y factores del proyecto actual para llegar a una estimación más precisa.
Otra cosa a tener en cuenta es que siempre va a haber incertidumbre. No importa cuánto planifiquemos o analicemos. Las cosas pueden cambiar, pueden surgir riesgos o pueden ocurrir problemas durante la implementación. Por lo tanto, es inteligente tener en cuenta esta incertidumbre agregando tiempo o recursos adicionales en caso de que las cosas no salgan como se planeó.
La comunicación también es súper importante. Todos los involucrados en el proyecto necesitan hablar abierta y claramente durante todo el proceso de estimación. Esto significa discutir expectativas, asegurarse de que todos entiendan qué se debe hacer, abordar cualquier preocupación o duda, y mantenerse actualizados sobre el progreso. Una buena comunicación ayuda a evitar malentendidos, detectar problemas temprano y ajustar las estimaciones si surge nueva información.
Además, ver hacer un análisis de proyectos en retrospectiva puede ayudar a hacer estimaciones más precisas. Al revisar lo que sucedió antes y aprender de los errores, podemos tomar mejores decisiones al estimar tareas para nuevos proyectos. También es útil pensar en cómo funcionan nuestros cerebros al hacer estimaciones: podríamos tener sesgos que nos hacen demasiado optimistas o confiados. Comprender estos sesgos puede ayudarnos a ser más realistas al estimar.
En resumen, estimar proyectos no es fácil, pero al tener en cuenta estos puntos: mantener una mente abierta, tener en cuenta la incertidumbre, comunicarse bien y aprender del pasado, podemos hacer estimaciones mejores que nos preparen para el éxito.
Formas incorrectas de hacer una estimación de software
Bueno, hablemos de estimaciones, amigo. Sabés, hay algunas formas bastante incorrectas de hacerlo. Como, imaginá simplemente adivinar a ciegas el tiempo y el esfuerzo que llevará completar una tarea. Eso es como tirar dardos en la oscuridad y esperar el mejor resultado. Creeme, no terminará bien.
Y luego está toda esa idea de "talla única" que algunas personas tienen. Piensan que pueden aplicar la misma técnica de estimación a cada proyecto bajo el sol. Pero, ¡ey, noticia de último momento! (o no tan último porque ya lo dijimos antes)... cada proyecto es diferente, con sus desafíos y requisitos únicos. Ignorar esos factores externos es una receta para el desastre.
Ahora, aquí hay otro gran error: tener una mentalidad fija. Ves, las estimaciones requieren flexibilidad y adaptabilidad. Si estás atrapado en tus formas y te niegas a considerar perspectivas alternativas o nueva información, estás preparándote para el fracaso, amigo. Abrazar la colaboración y los puntos de vista diversos es clave para hacer estimaciones precisas que tengan la posibilidad de ser realistas.
Así que recordá, cuando se trata de estimaciones, adivinar a ciegas y pensar en "talla única" simplemente no va a funcionar. ¡Y ni siquiera empieces a hablar de ignorar factores externos o tener una mentalidad fija! En cambio, abracemos prácticas colaborativas y aprovechemos la inteligencia colectiva de todos los interesados involucrados. Puede que tome algunas discusiones abiertas y sesiones de lluvia de ideas, pero creeme, llevará a mejores resultados en el final.
Formas correctas de hacer una estimación de software
Acá te dejo un secreto que los dioses de la ingeniería de software han estado guardando bajo llave: ¡no hay una única forma "correcta" de hacer estimaciones!
Pero, antes de que abandones este artículo, solo escuchame. Sé que viniste buscando la manera correcta de hacer estimaciones y dije que no existe, pero lo que sí puedo compartirte es lo que me funcionó a mí.
Supongamos que alguien me pidiera calcular el tiempo que me llevaría comer un elefante mediano. ¿Cómo lo haría?
Primero: cortar el elefante
El primer paso para mí siempre es desglosar el trabajo en pequeñas tareas.
Desglosar las cosas lo más posible ayuda a lograr una estimación más precisa, pero siendo realistas, no siempre es práctico. Entonces, mi sugerencia es descomponerlo hasta que estés lo suficientemente seguro como para apostar tu salario mensual en tu estimación para esa parte del trabajo.
(Igual, no pierdas el tiempo preguntándome sobre la mejor forma de estimar tareas... simplemente usá el método con el que te sientas cómodo, siempre y cuando no se convierta en el foco principal de tu proyecto).
Segundo: gráfico de incertidumbre
Las personas que me conocen saben que soy un gran fanático del gráfico de incertidumbre. ¿Por qué? Bueno, es algo que todos podemos entender y simpatizar con el pobre tipo que tiene las estimaciones en la mano.
Ahora ya tenés cada parte del elefante cortada y estimaste (una analogía un poco salvaje) cuánto tiempo te va a llevar comerte cada una. Pero, ¿qué tan seguro estás en cada estimación?
¿Por qué no poner cada "rebanada" en el cono de incertidumbre según cuánto dudas de esa estimación? Luego mostrá el gráfico a todos, para que entiendan tus preocupaciones e incertidumbres. Esto va a ayudar a asegurar que todos los involucrados en el proyecto asuman la responsabilidad de esas estimaciones.
Tercero: Sumá todas las rebanadas
Entonces, ¿el tiempo para comer el elefante es la suma del tiempo para comer todas las rebanadas, verdad? No exactamente.
Si hacés eso, no estarías utilizando la posición de la rebanada en el cono de incertidumbre, ignorando ese aspecto importante. Para incluir esta información, podés multiplicar tu estimación por un factor que se relacione con qué tan incierta es la situación. Este enfoque da una representación más completa y precisa, considerando el rango potencial de posibilidades dentro del cono de incertidumbre. Al tener en cuenta este valor relacionado con la incertidumbre, podés mejorar tu estimación al considerar todos los posibles resultados dentro del cono, lo que lleva a un análisis más sólido y confiable.
Pero, ¿qué pasa si no tengo suficiente (conocimiento, experiencia, información) para estimar una tarea? ¿Cómo puedo reducir la incertidumbre?
¡Llamá al pro!: este es el método más rápido y sencillo, especialmente si hay un experto disponible. Es suficiente confiar en la opinión del experto para estimar los detalles cuantitativos del proyecto, como los plazos y los recursos potenciales. También es la técnica más comúnmente utilizada.
Investigación: al observar proyectos anteriores o utilizar las mejores prácticas de la industria, los desarrolladores pueden obtener información valiosa que los ayudará a hacer estimaciones más precisas. La investigación también ayuda a identificar posibles riesgos o incertidumbres que podrían afectar el proceso de estimación. Este enfoque proactivo asegura que las estimaciones se basen en bases sólidas, reduciendo las posibilidades de problemas inesperados y haciendo que el desarrollo de software sea más eficiente y confiable.
Spikes: cuando estás tratando de encontrar una solución a un problema, a veces tenés que meterte de lleno y empezar a escribir algo de código. Es como un pequeño experimento para ver si tu idea funciona. Y bueno, a veces ese código termina siendo útil para tu proyecto, pero la mayoría de las veces es algo que tirás una vez que has demostrado tu punto. Asegurate de establecer una fecha límite para el spike, o si no podrías terminar dedicándole una eternidad.
Hacelo como lo hacen en la industria farmacéutica: ellos reservan dinero para sus proyectos de investigación, los llevan a cabo, y luego deciden si dar más dinero en función de los resultados. Podés hacer algo similar empezando una tarea con un presupuesto establecido. Cuando se agote el dinero, evaluá cómo han ido las cosas y decidí si conseguir más fondos para seguir adelante o detener la tarea.
¿Por qué son tan importantes las estimaciones?
¿Por qué la gente discute tanto sobre esto y nadie tiene una forma definitiva de estimar proyectos de software? ¿Es tan difícil o importante hacerlo? Apliquemos lo que aprendimos anteriormente y comamos este elefante de a poco.
Primero, las estimaciones no son importantes... ¡Son cruciales en el desarrollo de software! El desarrollo de software es un negocio, y a menos que estés en algún equipo de producto muy relajado o nadando en plata (o algunos otros casos especiales), el dinero va a estar en tu mente.
La mayoría de los artículos sobre este tema solo hablan de dinero, y al final, todo se reduce a eso. Pero quiero resaltar otros aspectos de la estimación para realmente comprender su importancia.
Planificación y asignación de recursos: las estimaciones ayudan a los propietarios de negocios a planificar y asignar recursos de manera efectiva para proyectos de desarrollo de software. Al estimar el tiempo y el esfuerzo requeridos para cada tarea, los propietarios de negocios pueden tomar decisiones informadas sobre el personal, los plazos y la gestión general del proyecto.
Establecer expectativas realistas: las estimaciones permiten a los propietarios de negocios establecer expectativas realistas para clientes y miembros del equipo. Al comprender los plazos estimados para la finalización, los propietarios de negocios pueden comunicar estas expectativas claramente, evitando malentendidos y asegurándose de que todos estén en la misma página.
Priorización de tareas: las estimaciones permiten a los propietarios de negocios priorizar tareas en función de su complejidad estimada o esfuerzo requerido. Esto ayuda a determinar qué características o funcionalidades deben desarrollarse primero, asegurando que los aspectos críticos se aborden desde el principio en el proyecto.
Identificación de riesgos potenciales: las estimaciones ayudan a identificar riesgos potenciales al resaltar áreas que pueden requerir atención o recursos adicionales. Al comprender los desafíos o complejidades estimadas de ciertas tareas, los propietarios de negocios pueden abordar proactivamente estos riesgos e implementar estrategias para mitigar cualquier impacto negativo en el proyecto.
Mejora en la toma de decisiones: las estimaciones proporcionan información valiosa que ayuda en la toma de decisiones a lo largo del proceso de desarrollo de software. Los propietarios de negocios pueden usar estimaciones para evaluar enfoques o soluciones alternativas, hacer compensaciones informadas entre diferentes características o funcionalidades, y asegurarse de que las decisiones estén alineadas con los objetivos generales del proyecto.
IA al rescate
Ok, lo entendí... ¿pero es tan difícil? ¿Por qué nadie puede encontrar la manera perfecta de estimar proyectos de desarrollo de software? ¡En serio, estamos viviendo en la era de la IA! ¿No puedo simplemente pedirle a Chat GPT que me dé una estimación?
Simplemente no. Estimar proyectos de desarrollo de software con precisión es realmente una tarea desafiante. Si bien la IA, como Chat GPT, puede ayudar en varias áreas, estimar los plazos y esfuerzos del proyecto todavía requiere experiencia humana e involucramiento. Aquí hay algunas razones por las que es difícil encontrar estimaciones perfectas:
Complejidad: los proyectos de software pueden ser altamente complejos, involucrando numerosas variables, dependencias y riesgos potenciales. Predecir todos estos factores con precisión es una tarea compleja.
Incertidumbre: a menudo hay incertidumbres en los requisitos, cambios en el alcance y dependencias externas que pueden afectar los plazos del proyecto. Es difícil prever y tener en cuenta todas estas incertidumbres.
Factores humanos: estimar el desarrollo de software implica habilidades y esfuerzos humanos que son influenciados por las capacidades y la experiencia individuales. Diferentes desarrolladores pueden tener velocidades, enfoques o desafíos imprevistos diferentes.
Tecnologías emergentes: la naturaleza siempre cambiante de la tecnología hace que sea difícil estimar proyectos utilizando herramientas o marcos de vanguardia que carecen de datos históricos para una estimación precisa.
Comunicación y colaboración: una estimación precisa requiere comunicación y colaboración efectivas entre las partes interesadas involucradas en el proyecto. Malentendidos o información incompleta pueden llevar a estimaciones inexactas.
Si bien la IA puede respaldar los procesos de estimación al analizar datos históricos o proporcionar ideas basadas en patrones, no puede reemplazar la necesidad de juicio humano y comprensión del contexto específico del proyecto. Es mejor combinar las capacidades de la IA con el conocimiento experto para mejorar la precisión de la estimación en lugar de depender únicamente de la automatización para estimar proyectos de desarrollo de software.
Conclusion
Como dijimos, la estimación es un aspecto crucial del desarrollo de software que va más allá del dinero. Ayuda con la planificación, el establecimiento de expectativas, la priorización de tareas, la identificación de riesgos y la mejora de la toma de decisiones.
La IA puede ayudar en diversas áreas de la estimación, pero no puede reemplazar la necesidad de experiencia y juicio humano. Estimar proyectos con precisión requiere reconocer la incertidumbre, evitar enfoques erróneos como el simple adivinar o las mentalidades fijas, y adoptar prácticas colaborativas.
Entonces, mejoremos nuestras habilidades de estimación aprendiendo de proyectos pasados, buscando opiniones de expertos cuando sea necesario, realizando investigaciones para mitigar incertidumbres y utilizando técnicas como los picos o la asignación de presupuesto para una mejor planificación.
Comentarios