Continuando con el post de Metodología de Proyectos TI, vamos a describir y diferenciar una metodología de desarrollo del software tradicional de una ágil.
Metodología Tradicional
El origen de la metodología tradicional del desarrollo del software es la metodología de construcción de productos físicos (barcos, edificios, coches, etc..). Esta metodología tradicional del desarrollo del software se caracteriza por:
- basarse en un ciclo de vida de desarrollo del software en cascada ya que organiza los proyectos en etapas que se ejecutan secuencialmente. Ejemplo:
- Especificación de Requisitos
- Análisis
- Diseño
- Desarrollo
- Pruebas
- Implantación
- Mantenimiento
- ejecutar las etapas una sola vez, lo que se define en cada etapa es inamovible y hasta que no finaliza con éxito una etapa no se pasa a la siguiente. Ejemplo: hasta que no se aprueba el diseño del software no se inicia el desarrollo y construcción del mismo.
- definir etapas claramente diferenciadas en las que participan distintos profesionales especializados.
Inconvenientes:
- Si durante una etapa del ciclo del software nos damos cuenta de que algo está mal, la vuelta a una etapa anterior no está bien definida en la metodología.
- El usuario no ve el producto hasta el final, no puede ir validando hitos intermedios e ir verificando que lo que se ha construido es lo que necesita.
- Si mi negocio es muy cambiante, pueden variar las necesidades desde el día que se toman los requisitos hasta el día de inicio la construcción.
Metodología Ágil
El desarrollo del software no tiene las mismas características que la construcción de productos físicos, estas diferencias y la agilidad que requiere el negocio actual del software hacen necesario el uso de una metodología ágil que:
- se basa en un ciclo de vida de desarrollo del software iterativo e incremental. Se repiten las etapas de cada ciclo, se va añadiendo funcionalidad al producto y se comprime al máximo el tiempo de las iteraciones, son iteraciones cortas de semanas. Se hacen entregas parciales del producto para ir validando con el usuario que el producto cumple los requisitos.
- se solapan las etapas. No siempre dentro de cada iteración tiene que haber etapas en cascada, por ejemplo, la etapa de test se fusiona con la etapa de desarrollo o la del diseño con la etapa de construcción.
- se cambia la documentación por la interacción cara a cara con el usuario, hay equipos multidisciplinares sin separación de roles (todos pueden diseñar y programar) y se tiende a una gestión de proyecto como equipo auto organizado y colaborativo.
Inconvenientes:
- Existe el riesgo de entrar en un ciclo de entrega de prototipos y nunca cerrar el proyecto.
- La gestión es más rigurosa y con menos holgura para cometer errores.
Si observamos a nuestro alrededor, algunos ámbitos del negocio del software se están orientando a sacar un prototipo cuanto antes. ¿Cuantas versiones de una app móvil puedes haber utilizado? El usuario prueba el producto antes de estar completamente finalizado, comenta su experiencia y se evoluciona para mejorarlo y acercarlo a la necesidad final.
Ambas metodologías son buenas, sólo hay que identificar cuál es la que mejor se ajusta a tu proyecto, unos ejemplos:
- ¿Quieres varias iteraciones y entregas parciales? Opta por metodología ágil.
- ¿Tienes muy claro lo que quieres y necesitas? Metodología tradicional.
- ¿Tienes un equipo pequeño multidisciplinar? Metodología ágil.
- ¿Tienes un equipo grande y especializado en roles? Metodología tradicional.
- ¿El proyecto es cerrado, con requisitos y plazos muy cerrados? Metodología tradicional
- ¿El proyecto es de innovación o de investigación, o desarrollo de un nuevo producto aún sin definir por completo y se prevén muchos cambios? Metodología ágil
¿Ves la ventaja de una metodología ágil? ¿Qué tipo de metodología empleas en tu desarrollo del software? ¿Conoces alguna metodología ágil?