El desarrollo ágil de software se refiere a métodos de ingeniería del software basados en el desarrollo iterativo e incremental, donde los requisitos y soluciones evolucionan con el tiempo según la necesidad del proyecto.
Así el trabajo es realizado mediante la colaboración de equipos auto-organizados y multifuncionales, inmersos en un proceso compartido de toma de decisiones a corto plazo.
El objetivo de cada iteración es incrementar el valor por medio de "software que funciona" (sin errores).
Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación.
Otro objetivo es recibir el feedback temprano para la toma de decisiones y la gestión de riesgos.
Más información en el artículo Qué son las metodologías ágiles
Marcos de trabajo Agile
Cada uno de los modelos que se encuentran inscritos en la organización Agile Alliance (www.agilealliance.org) para promocionar y difundir su conocimiento, expone formas concretas de aplicación de principios ágiles en el desarrollo de software:
- AD - Agile Database Techniques
- AM - Agile Modeling
- ASD - Adaptive Software Development
- AUP - Agile Unified Process
- Crystal
- FDD - Feature Driven Development
- DSDM - Dynamic Systems Development Method
- Lean Software Development
- Scrum (Scrum TIC académico)
- TDD - Test-Driven Design
- XBreed
- XP - eXtremme Programming
1- Kanban
Se trata de un método de cambio basado en la visualización que sirve como catalizador a la hora de introducir la filosofía Lean en una organización.
Se basa en la visualización de los procesos de TI, como mecanismo para exponer su flujo, sus problemas y estimular la colaboración en la mejora continua de los procesos.
1.1- Prácticas
- Visualización del flujo del trabajo. A través de tableros.
- Limitación del WIP (Work in Progress, Trabajo en curso).
- Gestiona el flujo. Realiza un seguimiento del tiempo que llevan las tareas.
- Definición de políticas explicitas que todo el mundo pueda ver y seguir. Simples y concretas, que permitan al equipo tomar decisiones rápidas e independientes.
- Crea mecanismos que permitan obtener feedback en todos los niveles. Dailys.
- Mejora colaborativamente usando modelos. Retrospectivas, análisis causa raíz.
2- Scrum
Se trata de un conjunto de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el mejor resultado posible de un proyecto.
Basado en el desarrollo incremental de los requisitos del proyecto en bloques temporales cortos y fijos.
Se da prioridad a lo que tiene más valor para el cliente.
Centrado en equipos pequeños (de 3 a 9 personas cada uno).
Implicaciones de adoptar una metodología Agile
Antes
- No se entrega el producto esperado.
- Conflictos entre equipos funcionales y desarrollo.
- Documentación difícil de mantener.
- Estimaciones no realistas en horas y fecha de entrega.
- Usuarios insatisfechos.
- Falta de visibilidad global.
- Un único equipo de desarrollo de 15 personas y un único equipo funcional.
Después
- Entrega del producto de forma incremental y se toman decisiones en función del feedback.
- Equipos más alineados e implicados.
- Documentación necesaria, más comunicación face to face.
- Estimaciones basadas en la predictibilidad y priorizando el valor.
- Usuarios más satisfechos.
- Mayor transparencia y visibilidad.
- Tres equipos: dos trabajando en Scrum y uno en Kanban. Desarrollo y equipo funcional, trabajando de forma conjunta.
Riesgos y lecciones aprendidas
Riesgos
- Caer en hacer entregas continúas pero no en entregar valor.
- Cada Sprint se gestiona como desarrollo en cascada.
- Cliente, usuarios, stakeholders no se implican en el proceso.
- Los equipos no son estables.
- No trabajar el mindset.
Lecciones aprendidas
- Simplicidad.
- Flexibilidad ante un entorno de negocio muy cambiante.
- Enfocar el esfuerzo en lo importante, ¿qué es lo que realmente aporta valor?.
- Eliminar todo aquello que no aporte valor a los procesos.
- Calidad y excelencia.
- Mejora continúa.
- Fuera silos.