La primera vez que se mencionó el desarrollo ágil (o del término ágil) fue en 2001, cuando un equipo de desarrolladores que se había cansado de utilizar métodos de desarrollo considerados «pesados y tediosos», es decir, el modelo en cascada o tradicional, decidió establecer un manifiesto: Lo que hoy conoceos como El Manifiesto Ágil. Este documento tuvo tanta repercusión que ha funcionado como una biblia para el desarrollo ágil hasta el día de hoy, estableciendo todos los principios y buenas prácticas que se necesitaban conocer sobre cómo trabajar en un entorno ágil.
Las metodologías ágiles dicen que, por encima de todo, hay que buscar la satisfacción del cliente a través de una entrega continua de características de software con valor añadido, manteniéndose constantemente en comunicación con el cliente, y también centrándose en la comunicación entre los miembros del equipo o interesados. A diferencia de las prácticas tradicionales, la metodología ágil no se caracteriza por la definición completa de un producto o la planificación completa del mismo, sino que «paso a paso»: va haciendo un análisis completo o la definición de todas los requisitos, mediante una interacción dinámica que permita una entrega constante. Se centra en la visibilidad, pero sin perder nunca el objetivo del producto a largo plazo.
De acuerdo al Manifiesto Ágil y algunos de sus 12 principios:
- La satisfacción del cliente es la máxima prioridad, demostrada a través de la entrega continua y el valor añadido.
- Los cambios en los requisitos deben ser aceptados -en lugar de perseguir requisitos «rígidos», aunque sea en una fase tardía del desarrollo: «Los procesos ágiles aprovechan el cambio para la ventaja competitiva del cliente», como se afirma en el Manifiesto.
- El cliente y el equipo de desarrollo deben trabajar juntos a diario, facilitando la sincronización del equipo y del producto.
- Es vital proporcionar un entorno agradable y un buen apoyo a los equipos de desarrollo. Solo así es posible mantenerlos motivados.
- Los procesos ágiles promueven el desarrollo sostenible debido a su ritmo constante y a la excelencia técnica, que a su vez mejora la productividad.
- Los momentos de retrospectiva dentro de un equipo son esenciales, lo que le permite hacer los ajustes necesarios y promover la eficiencia.
En resumen, el desarrollo ágil sigue un modelo incremental, que promueve la colaboración dentro del equipo y la planificación continua, así como la evolución y el aprendizaje constante. Las metodologías ágiles deben respetar el ciclo de desarrollo del software -planificación, ejecución, pruebas y entrega final-, por lo que permiten desarrollar el software por etapas; esto facilita la identificación y resolución de errores o nuevas necesidades.
La principal ventaja de utilizar metodologías ágiles no es sólo la rapidez en la entrega del software, sino también la entrega constante de «valor» al cliente, ya que las entregas son incrementales.
Existen muchas metodologías que siguen esta mentalidad ágil. En este artículo solo me enfocare en las cinco más usadas y sus ventajas e inconvenientes en el universo del desarrollo de software. Pero no podemos sumergirnos en las diferentes metodologías sin antes referirnos a la creciente popularidad de las metodologías ágiles (o de algunas de ellas al menos) entre la dirección de las empresas. Esto demuestra que no es sólo el desarrollo de software el que puede enriquecerse con estas prácticas, sino también aquellos proyectos que tienen una alta incertidumbre al ser abordados.
El desarrollo empresarial se está convirtiendo en un campo de juego cada vez más imprevisible, al igual que el desarrollo de software. Así que el reto es ahora ¿por qué no implementar las metodologías ágiles en la gestión de los procesos de negocio? Los métodos ágiles son adaptables, lo que permite una rápida toma de decisiones y una influencia instantánea en el desarrollo empresarial.
1. SCRUM
Scrum es, sin duda, el más utilizado de los muchos framework que sustentan la metodología ágil. Scrum se caracteriza por ciclos o etapas de desarrollo, conocidos como sprints o iteraciones, y por la maximización del tiempo de desarrollo de un producto de software hacia un objetivo, el Product Goal. Esta Meta del Producto es un objetivo de mayor valor, en el que los sprints acercan el producto del equipo scrum un paso más.
Suele utilizarse en la gestión del desarrollo de productos de software, pero puede utilizarse con éxito en un contexto empresarial.
Cada día comienza con una pequeña reunión de 15 minutos llamadas dailys, que tiene la función de sincronizar las actividades y encontrar la mejor manera de planificar la jornada de trabajo, permitiendo comprobar la «salud» del sprint y el progreso del producto.
Ventajas
- La motivación del equipo es buena porque los programadores quieren cumplir el plazo de cada sprint;
- La transparencia permite que el proyecto sea seguido por todos los miembros de un equipo o incluso por toda la organización;
- Se utiliza una sencilla «definición de hecho» para validar los requisitos
- – La atención a la calidad es una constante en el método scrum, lo que se traduce en menos errores;
- – La dinámica de este método permite a los desarrolladores reorganizar las prioridades, asegurando que los sprints que aún no han sido completados reciban más atención;
- – Una buena planificación de los sprints tiene prioridad, de modo que todo el equipo de scrum entiende el «por qué, el qué y el cómo» de las tareas asignadas.
Desventajas
- La segmentación del proyecto y la búsqueda de la agilidad del desarrollo pueden llevar a veces al equipo a perder de vista el proyecto en su conjunto, centrándose en una sola parte;
- Cada función del desarrollador puede no estar bien definida, lo que provoca cierta confusión entre los miembros del equipo.
2. KANBAN
La palabra Kanban es de origen japonés y su significado está ligado al concepto de «justo a tiempo». En la práctica, el método Kanban se organiza en un tablero o tabla (tablero Kanban), dividido en columnas, que muestra cada flujo dentro del proyecto de producción de software. A medida que el desarrollo evoluciona, la información contenida en la tabla cambia, y cada vez que entra en juego una nueva tarea, se crea una nueva «tarjeta».
Esta metodología también es útil en departamentos individuales de la empresa, como RRHH, marketing, etc., aportando la visibilidad deseada sobre todas las tareas del equipo.
El método Kanban requiere comunicación y transparencia para que todos los miembros de cualquier equipo sepan exactamente en qué fase del desarrollo se encuentra y puedan ver el estado de un proyecto en cualquier momento. Se centra principalmente en la capacidad del equipo y es mejor para los procesos que sufren pequeños cambios.
Ventajas
- Posibilidad de ver todas las tareas de un mismo proyecto (por Completadas, En curso o En pruebas, por ejemplo) mediante el sencillo concepto de «Tarjetas»;
- Puede limitar el número de tareas en ejecución (es decir, la cantidad de trabajo, teniendo en cuenta su resolución o entregabilidad);
- Se centra en la duración de un ciclo, es decir, en el tiempo que tarda una tarea en pasar del backlog a la fase final;
- Permite las entregas continuas;
- Probablemente sea una de las metodologías más sencillas de aplicar fuera del «mundo informático».
Desventajas
- Es posible que los miembros del equipo malinterpreten la información que se muestra en el tablero Kanban, especialmente cuando se muestra desactualizada;
- Dado que no hay plazos en Kanban, puede enfrentarse a problemas relacionados con el tiempo, como retrasos, en todas y cada una de las etapas.
3. EXTREME PROGRAMMING (XP)
Se trata de un marco de desarrollo ágil típico, desarrollado por Kent Beck, que puede adaptarse a empresas de desarrollo de diversas dimensiones.
La metodología de Programación Extrema («XP») se basa en la idea de descubrir «lo más sencillo que funcione» sin dar demasiada importancia a la visión del producto a largo plazo.
Es una metodología que hace hincapié en valores como la Comunicación, la Simplicidad, la Retroalimentación, el Valor y el Respeto, y prioriza la satisfacción del cliente por encima de todo. Esta metodología fomenta la confianza motivando a los desarrolladores a aceptar cambios en los requisitos del cliente, incluso si llegan durante las últimas fases del ciclo de desarrollo.
El trabajo en equipo es extremadamente importante en XP, ya que, cuando hay un problema, lo resuelve todo el equipo de gestores, desarrolladores o clientes, reuniéndolos para promover la conversación y el compromiso y romper las barreras de la comunicación. Todos se convierten en piezas esenciales de un mismo puzzle, creando un entorno fértil para una alta productividad y eficiencia en los equipos. En la Programación Extrema, el software se prueba desde el primer día, recopilando información para mejorar el desarrollo. XP promueve actividades como la programación por parejas, y con un fuerte componente de pruebas, es una excelente metodología de ingeniería.
Ventajas
- La simplicidad del código escrito es una ventaja, ya que permite mejorar en cualquier momento;
- Todo el proceso y el ciclo de desarrollo de XP es visible, lo que crea objetivos para los desarrolladores junto con resultados relativamente rápidos;
- El desarrollo de software es más ágil que cuando se utilizan otras metodologías, debido a las pruebas constantes;
- Promueve una forma de trabajar muy enérgica;
- XP también contribuye a elevar y mantener el talento del equipo.
Desventajas
- El enfoque extremo en el código puede llevar a dar menos importancia al diseño, lo que significa que tiene que recibir una atención extra más tarde;
- Este marco puede no funcionar de forma óptima si todos los miembros del equipo no están situados en la misma zona geográfica;
- En los proyectos XP, no siempre se mantiene un registro de posibles errores, y esta falta de seguimiento puede dar lugar a fallos similares en el futuro.
4. DESARROLLO LEAM
El desarrollo Lean es una metodología que proviene directamente del Lean Manufacturing, creado por Toyota, y que se aplica al desarrollo de software. Este método ofrece un marco conceptual y sigue valores, principios y buenas prácticas de desarrollo que pueden aplicarse a un enfoque de desarrollo ágil.
El desarrollo Lean obliga al equipo a eliminar sin miramientos cualquier actividad que no aporte valor final al producto.
Hay siete principios esenciales eliminar las cosas que no importan (todo lo que no aporte valor efectivo al proyecto del cliente); desarrollo de calidad (crear calidad en el desarrollo requiere disciplina y control del número de residuos creados); crear conocimiento (se motiva al equipo para que documente toda la infraestructura para luego conservar ese valor); diferir los compromisos (este punto anima al equipo a no centrarse demasiado en la planificación y la anticipación de ideas sin tener un conocimiento previo completo de los requisitos del negocio); entrega rápida (hacer llegar el valor al cliente lo antes posible); respetar al equipo (la comunicación y la gestión de los conflictos son dos puntos esenciales); optimizar el conjunto (la secuencia de desarrollo tiene que estar lo suficientemente perfeccionada como para poder eliminar los errores en el código, con el fin de crear un flujo de verdadero valor).
Trabaja en la construcción de soluciones sencillas y las presenta a los clientes utilizando sus comentarios sobre el «producto» para mejorarlo gradualmente. El concepto de «producto mínimo viable» también suele asociarse a «Lean».
Ventajas
- Permite al equipo eliminar las actividades superfluas, con lo que se ahorra tiempo y dinero;
- Disminuye el tiempo de entrega de funcionalidades, ya que prepara al equipo de desarrollo durante el proceso de toma de decisiones, aumentando así la motivación general;
- Metodología fácilmente escalable y adaptable a proyectos de cualquier dimensión;
- No sobredimensiona las soluciones ni los requisitos del negocio.
Desventajas
- Depende de la capacidad del equipo de desarrollo y de que se sigan los «principios Lean», lo que requiere desarrolladores extremadamente dedicados y con talento;
- Es más fácil perder la concentración, ya que las distintas tareas se dividen en varios elementos;
- Requiere cierta documentación, en particular sobre las características de la empresa objeto del trabajo. De lo contrario, se corre el riesgo de que el desarrollo se realice de forma incorrecta y presente errores.
5. CRYSTAL
Se trata de una familia de las metodologías ágiles, y Crystal es uno de los marcos más flexibles, que da una enorme libertad al equipo para desarrollar sus propios procesos. Se centra mucho más en los individuos y en cómo interactúan que en el proceso o las herramientas, por lo que la comunicación es un aspecto clave esencial.
Crystal tiene variantes como Crystal Clear (hasta un equipo de 8 personas), Crystal Yellow (hasta un equipo de 10 a 20 personas), Crystal Orange (hasta un equipo de 20 a 50 personas) y Crystal Red (para grandes equipos de 50 a 1000 personas). Crystal se centra en principios como las personas, las interacciones, la comunidad, las habilidades, el talento y la comunicación, con el objetivo de ofrecer el mejor proceso de desarrollo de software posible. El núcleo de este proceso de desarrollo es la interacción y la simbiosis, que deben existir entre las personas asignadas a los proyectos y los procesos para aportar eficacia al proyecto.
Cada proyecto es único y sufre frecuentes cambios, por lo que el equipo debe encontrar sus propios medios para llevarlo a término tomando las mejores decisiones.
Según su fundador, Alistair Cockburn, «Crystal es una familia de metodologías de desarrollo de software, que funciona con la fuerza invertida por las personas, y es extremadamente ligera y extensible». Básicamente, Cockburn cree que el talento y la forma de interactuar de los miembros del equipo aportan beneficios a todo el proyecto.
Es una metodología ligera en cuanto a documentación, en la que los equipos pueden encontrar sus propias formas sobre las modalidades de trabajo preferidas, eliminando los gastos generales de gestión y creando un proceso «libre».
Ventajas
- Crystal requiere entregas frecuentes, con el fin de identificar eventuales problemas en cada etapa;
- Siempre hay espacio para mejorar las características, lo que resta tiempo al desarrollo del software y permite debatir cómo perfeccionar los procesos;
- Facilita una comunicación más estrecha dentro de los equipos y promueve la interacción y el intercambio de conocimientos entre los miembros del equipo;
- Requiere un entorno técnico con pruebas automatizadas, gestión de la configuración e integración frecuente.
Desventajas
- El hecho de que haya variantes en la familia de la metodología significa que los principios pueden variar según el tamaño del equipo y la dimensión del proyecto, lo que da lugar a proyectos que pueden no ser tan sencillos;
- Puede que no funcione mejor en equipos dispersos geográficamente, debido a la necesidad constante de comunicación y reflexión;
- La planificación y el desarrollo no dependen de los requisitos;
- Es ideal para equipos experimentados y autónomos.
Consideraciones finales
En resumen, las metodologías ágiles se enfocan en sentido general a maximizar el valor del producto o característica, no importa la que elijas, el cliente debe ser la principal prioridad y el flujo constante de entrega de valor.