# Desarrollo ágil de software

En el desarrollo de software, las prácticas ágiles (a veces denominadas "Agile") consisten en la mejora de requisitos, investigación y soluciones mediante el esfuerzo colaborativo de equipos autoorganizados y multifuncionales junto con sus clientes/usuarios finales. Popularizados en el Manifiesto por el Desarrollo Ágil de Software de 2001, estos valores y principios se derivaron de, y sustentan, una amplia gama de modelos de desarrollo de software, incluidos Scrum y Kanban.
Aunque hay muchas evidencias anecdóticas de que la adopción de prácticas y valores ágiles mejora la eficacia de los profesionales del software, así como de los equipos y las organizaciones, las pruebas empíricas son dispares y difíciles de encontrar.

## Historia

Los métodos de desarrollo iterativo e incremental de software se remontan a 1957, mientras que la gestión evolutiva de proyectos y el desarrollo adaptativo de software surgieron a principios de los setenta.
Durante la década de 1990, surgieron una serie de métodos ligeros de desarrollo de software como reacción a los métodos pesados predominantes (a menudo denominados en conjunto cascada) que los críticos describían como excesivamente regulados, planificados y microgestionados. Entre estos métodos ligeros se encuentran: el desarrollo rápido de aplicaciones (RAD), de 1991; el proceso unificado (UP) y el método de desarrollo de sistemas dinámicos (DSDM), ambos de 1994; Scrum, de 1995; Crystal Clear y la programación extrema (XP), ambos de 1996; y el desarrollo basado en funcionalidades (FDD), de 1997. Aunque todos ellos se originaron antes de la publicación del Manifiesto Agile, ahora se denominan colectivamente métodos ágiles de desarrollo de software.
Ya desde 1991 se habían producido cambios similares en el planteamiento de la fabricación y la gestión derivados de la lean manufacturing.
En 2001, diecisiete desarrolladores de software se reunieron en un complejo turístico de Snowbird (Utah) para debatir métodos de desarrollo ligero. Eran: Kent Beck (Extreme Programming), Ward Cunningham (Extreme Programming), Dave Thomas (PragProg, Ruby), Jeff Sutherland (Scrum), Ken Schwaber (Scrum), Jim Highsmith (Adaptive Software Development), Alistair Cockburn (Crystal), Robert C. Martin (SOLID), Mike Beedle (Scrum), Arie van Bennekum, Martin Fowler (OOAD y UML), James Grenning, Andrew Hunt (PragProg, Ruby), Ron Jeffries (Extreme Programming), Jon Kern, Brian Marick (Ruby, TDD) y Steve Mellor (OOA). Juntos publicaron el Manifiesto por el Desarrollo Ágil de Software.
En 2005, un grupo encabezado por Cockburn y Highsmith redactó un apéndice de principios de gestión de proyectos, la Declaración de Interdependencia del PM, para orientar la gestión de proyectos de software según los métodos ágiles de desarrollo de software.
En 2009, un grupo que trabajaba con Martin redactó una ampliación de los principios de desarrollo de software, el Manifiesto de la Artesanía del Software, para guiar el desarrollo ágil de software de acuerdo con la conducta y el dominio profesionales.
En 2011, la Agile Alliance creó la Guía de Prácticas Ágiles (rebautizada como Glosario Agile en 2016), un compendio de código abierto en evolución de las definiciones funcionales de las prácticas, términos y elementos ágiles, junto con interpretaciones y directrices sobre experiencias de la comunidad mundial de profesionales de Agile.

## El Manifiesto por el Desarrollo Ágil de Software
### Valores del desarrollo ágil de software

Basándose en su experiencia común desarrollando software y ayudando a otros a hacerlo, los autores del manifiesto declararon que valoraban:
* Personas e interacciones por encima de procesos y herramientas
* Software operativo por encima de una documentación exhaustiva
* Colaboración del cliente por encima de la negociación del contrato
* Responder a los cambios en lugar de seguir un plan
Es decir, aunque ambos lados tienen valor y los elementos de la derecha deberían tenerse en cuenta, los autores consideraron que los de la izquierda deberían tener más influencia en la forma en que las personas enfocan su trabajo.
Como explicó Scott Ambler:
* Las herramientas y los procesos son importantes, pero lo es más contar con personas competentes que trabajen juntas con eficacia.
* Una buena documentación es útil para ayudar a la gente a entender cómo se ha construido el software y cómo utilizarlo, pero el objetivo principal del desarrollo es crear software, no la documentación.
* Un contrato es importante, pero no sustituye a una estrecha colaboración con los clientes para descubrir lo que necesitan.
* Un plan de proyecto es importante, pero no debe ser demasiado rígido para poder adaptarse a los cambios tecnológicos o del entorno, a las prioridades de las partes interesadas y a la forma en que la gente entiende el problema y su solución.
Algunos de los autores formaron la Agile Alliance, una organización sin ánimo de lucro que promueve el desarrollo de software según los valores y principios del manifiesto. Presentando el manifiesto en nombre de la Agile Alliance, Jim Highsmith dijo,

## Desarrollo ágil de software

El Manifiesto por el Desarrollo Ágil de Software se basa en doce principios:
* Satisfacer al cliente mediante la entrega temprana y continua de software valioso.
* Aceptar los cambios en los requisitos, incluso en las fases finales del desarrollo.
* Entregar software operativo con frecuencia (en semanas mejor que en meses).
* Una estrecha colaboración diaria entre empresarios y desarrolladores.
* Los proyectos se construyen en torno a personas motivadas, en las que hay que confiar.
* La conversación cara a cara es la mejor forma de comunicación (compartir el mismo lugar).
* El software funcional es la principal medida de progreso.
* Un desarrollo sostenible, capaz de mantener un ritmo constante.
* Una atención continua a la excelencia técnica y el buen diseño.
* La simplicidad, el arte de maximizar la cantidad de trabajo no realizado, es esencial.
* Las mejores arquitecturas, requisitos y diseños surgen de equipos autoorganizados.
* Periódicamente, el equipo reflexiona sobre cómo ser más eficaz y se ajusta en consecuencia.