Principios generales de desarrollo Agile

Concepto y definiciones

El desarrollo de software ágil es una filosofía, y ágil un término paraguas para una colección de métodos o aproximaciones que comparten características comunes. Existen diversas metodologías ágiles, de entre las cuales las principales son scrum y extreme programming (XP).

Generalmente, son un conjunto de metodologías utilizadas en el ámbito del desarrollo y el mantenimiento de software, basadas en procesos iterativos y de duración corta (típicamente duran de dos a cuatro semanas), que dan como resultado la entrega inicial de un producto parcial, pero operativo, y de versiones consecutivas que incrementan cada las características del producto. A través de estas iteraciones continuadas, estas metodologías buscan aportar valor desde el inicio del proyecto, así como llevar a cabo una evolución continua del producto. Su objetivo es introducir mejoras y una evolución constante de los productos hasta alcanzar un resultado final excelente que dé respuesta a todos los requerimientos del usuario.

Esta estrategia iterativa permite minimizar el riesgo, ya que cada iteración es como un proyecto en miniatura e incluye todas las fases necesarias: planificación, análisis de requisitos, diseño, codificación, pruebas de usuario y documentación. Así, los problemas en la ejecución, la adaptación a los requerimientos y los riesgos del proyecto afloran con anterioridad y las acciones correctoras son menos costosas y más inmediatas que en un proyecto tradicional de desarrollo (en el que acostumbran a aflorar en su fase final, tras meses de evolución).

Asimismo, las metodologías ágiles se centran en la satisfacción del usuario, ya que requieren que éste participe activamente en el proyecto tanto durante su conceptualización como en su desarrollo (mediante la validación de las entregas parciales). De esta manera, se garantiza que el producto final responda a las necesidades del usuario y esté en línea con sus expectativas.

Todo esto se basa en el denominado “Manifiesto por el Desarrollo Ágil de Software”, de 2001:

Manifiesto ÁGIL
Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar:
Individuos e interacciones sobre procesos y herramientas.
Software funcionando sobre documentación extensiva.
Colaboración con el cliente sobre negociación contractual.
Respuesta al cambio sobre seguir un plan.
Esto es, aunque valoramos los elementos de la derecha, valoramos más los de la izquierda.
http://agilemanifesto.org/iso/ca/manifesto.html

El Manifiesto Agile plantea doce principios que deberían perseguir las metodologías ágiles:

  1. Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor.

  2. Aceptamos que los requisitos cambien, incluso en etapas tardías del desarrollo. Los procesos Ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente.

  3. Entregamos software funcional frecuentemente, entre dos semanas y dos meses, con preferencia al periodo de tiempo más corto posible.

  4. Los responsables de negocio y los desarrolladores trabajamos juntos de forma cotidiana durante todo el proyecto.

  5. Los proyectos se desarrollan en torno a individuos motivados. Hay que darles el entorno y el apoyo que necesitan, y confiarles la ejecución del trabajo.

  6. El método más eficiente y efectivo de comunicar información al equipo de desarrollo y entre sus miembros es la conversación cara a cara

  7. El software funcionando es la medida principal de progreso.

  8. Los procesos Ágiles promueven el desarrollo sostenible. Los promotores, desarrolladores y usuarios debemos ser capaces de mantener un ritmo constante de forma indefinida.

  9. La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad.

  10. La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, es esencial.

  11. Las mejores arquitecturas, requisitos y diseños emergen de equipos autoorganizados.

  12. A intervalos regulares el equipo reflexiona sobre cómo ser más efectivo para a continuación ajustar y perfeccionar su comportamiento en consecuencia.

La clave del modelo Agile es que el proyecto global se divide en una serie de ciclos de desarrollo cortos (conocidos generalmente como “iteraciones” o, en la terminología scrum, como “sprints”) de dos a cuatro semanas aproximadamente cada una. Para cada una de las iteraciones, el equipo de desarrollo lleva a cabo esencialmente las mismas actividades del modelo de cascada (es decir, planificación, diseño, codificación, pruebas y despliegue), pero bajo prácticas de trabajo ágiles.

El gráfico que se muestra a continuación representa un ejemplo del ciclo de vida de un proyecto, a partir del modelo ágil scrum, junto con los actores involucrados en cada una de las fases. A lo largo del documento se irán explicando con detalle los diversos conceptos introducidos en el gráfico.

Scrum info-graphic

Las actividades habituales del método ágil scrum son las siguientes:

  1. Descubrimiento

  2. Backlog

  3. Iteraciones / sprints

La actividad de descubrimiento define el producto mínimo viable (PMV) que hay que producir. Se basa en talleres de trabajo y entrevistas que producen una “visión de producto”, que es la definición básica del sistema que se quiere desarrollar.

El product backlog (“pila de producto”) es una lista priorizada de todos de los elementos individuales estimados para llevar a cabo el proyecto global, es decir, los elementos distinguibles (programables) que componen la visión del producto.

Para cada sprint (un ciclo de desarrollo de 2-4 semanas), el equipo de desarrollo prepara un sprint backlog. Este documento establece qué elementos de desarrollo del product backlog se llevarán a cabo durante el sprint en curso (empezando con los elementos de prioridad más altos). En otras palabras, es una lista “to-do” (de cosas que hay que hacer) para el sprint en curso.

El equipo de desarrollo diseñará, programará y probará cada uno de los elementos de desarrollo listados en el backlog del sprint, durante las 2-4 semanas que este dure. Cabe mencionar también que, típicamente, el equipo se reúne una vez al día para asegurarse de que todas las actividades del sprint progresan adecuadamente según se han planificado.

El resultado al final de cada sprint debería ser un potentially shippable product increment (un elemento de software que puede ser desplegado para el cliente o el usuario), en el que se puede observar un incremento de valor o funcionalidades con respecto a la iteración anterior.

El conjunto formado por estas tres actividades mencionadas anteriormente define el ciclo Agile, que se repite hasta que se obtiene el resultado deseado por el cliente (o al final del presupuesto/tiempo atribuido al proyecto).

Beneficios

Entre los beneficios que comporta trabajar con una metodología ágil, podemos destacar los siguientes:

  • Interés en el valor y la satisfacción de cliente, mediante la entrega rápida y continua de software útil. De esta manera, el cliente tiene una visión continua del producto y de su evolución hasta que obtiene el producto final.

  • Interés en las personas usuarias. Se pone más énfasis en las personas y las interacciones que en el proceso y las herramientas. Clientes, desarrolladores y testers interaccionan constantemente entre sí para aportar visiones, valoraciones y mejoras del producto.

  • Entregas con más antelación. El software creado se entrega frecuentemente (en semanas más que en meses) a través de los diversos sprints, lo que resulta en que haya un incremento evolutivo en cada uno de ellos con respecto al anterior.

  • Costes y planificación previsibles. El coste es previsible y limitado a la cantidad de trabajo que puede llevar a cabo el equipo, ya que durante las revisiones del backlog se calculan los costes de desarrollo de los paquetes de trabajo que lo forman.

  • Compromiso de los stakeholders (grupos de interés). El método ágil exige una cooperación próxima y diaria con las personas usuarias, tanto para obtener correctamente los requisitos del proyecto como para verificar el incremento de valor del producto en cada sprint.

  • Transparencia. El progreso en el proyecto es la consecuencia de todo el proceso en sí mismo, y eso hace que los diversos actores involucrados puedan verlo en todo momento. Además, la comunicación entre estos actores es más directa (“cara a cara”) y constante durante todo el proyecto.

  • Mejora de la calidad. El método ágil produce una atención continua a la excelencia técnica y al diseño de calidad. Utilizar herramientas específicas y técnicas, como la integración continua o el TDD (test driven development o desarrollo dirigido por pruebas), aporta una mejora continua de la calidad del producto.

  • Flexibilidad ante los cambios. El ciclo iterativo permite una adaptación regular a circunstancias cambiantes, como, por ejemplo, la identificación de posibles cambios o mejoras sobre el producto antes de finalizarlo. Este proceso también permite poder aceptar cambios en los requisitos tardíos.

“Se aumentó la productividad del desarrollo, se realzó la transparencia de las actividades de desarrollo y se redujo la porción relativa de trabajo administrativo (hasta el 25%). El incremento de la eficacia permite a la Administración desarrollar más servicios digitales con el presupuesto limitado”. Agencia finlandesa responsable de los permisos de conducir, citado en Nuottila et al. (2013), sobre un proyecto Agile en el Dpto. de Transporte.

Implicaciones y retos

Sin entrar en el detalle de los impactos sobre las organizaciones de las metodologías ágiles y sus diferencias con metodologías tradicionales como la cascada, la implementación de las primeras implica un cambio importante en la gestión de proyectos, la participación del personal del cliente (la Administración pública) y la manera de contratar y entregar los servicios del proveedor y los resultados del proyecto.

Con respecto a la organización de proyectos, se puede resaltar el hecho de que, con esta metodología, los resultados entregados no son necesariamente los finales o los predefinidos al inicio del proyecto, al contrario, el software resultante del desarrollo soporta variaciones mediante un proceso iterativo, de acuerdo con las necesidades de las personas usuarias y su respuesta ante las versiones iniciales del producto.

Para el cliente (persona usuaria), Agile pone énfasis en la colaboración. A lo largo del ciclo de vida de entrega o iteración, ambas partes (cliente y proveedor) trabajan juntas en cada etapa para alcanzar los objetivos. El esfuerzo de la colaboración será mayor durante la fase de diseño, en la que las partes trabajan conjuntamente para determinar los requisitos funcionales y no funcionales (como la experiencia de usuario, UX) de la iteración o el resultado entregable. La contratación ágil requiere, por tanto, una dedicación (de gente y de tiempo) mucho más intensiva por parte del cliente en comparación con la contratación tradicional de cascadas.

Con respecto a la contratación, más allá de los impactos mencionados, la entidad no contrata una solución definitiva y definida (desde el principio), sino que contrata el desarrollo de aspectos de una solución que evolucionan y se incorporan de manera incremental, para alcanzar las necesidades identificadas (historias de usuario) y los objetivos generales del cliente. Habitualmente, significa que la manera de contratar servicios tecnológicos implementando una metodología ágil se hace basándose en time and materials (contratación basada en el tiempo y los recursos que se utilizarán), y eso puede sufrir variaciones según las características del proyecto.

Además, los criterios de entrega y aceptación de resultados tienen que ser más flexibles, dadas las variaciones de planificación motivadas por cambios de especificaciones funcionales y técnicas que resultan de la retroalimentación de las personas usuarias sobre cada iteración o ciclo de desarrollo.

Por tanto, debemos trabajar en los retos de esta metodología de desarrollo si queremos disfrutar de sus beneficios. El desarrollo continuo de las competencias de los equipos de cliente y proveedor, su implicación en el proyecto y la gestión de este personal son elementos clave de esta metodología. La definición del alcance y el tamaño de los proyectos y los equipos de desarrollo son otros criterios que hay que tener en cuenta al aplicar esta metodología. En grandes organizaciones con sistemas de información complejos, en las que mayoritariamente se opera con metodologías tradicionales, uno de los retos más importantes es integrar y combinar las nuevas prácticas ágiles en los entornos y los procesos ya existentes.