Bienvenido al futuro señor del pasado, si es que aun utilizas la metodología Waterfall (cascada) para el desarrollo de tus proyectos o iniciativas corporativas. En este artículo hablaremos de cómo los procesos o desarrollos iterativos e incrementales son una pieza fundamental de las metodologías Lean, la gestión ágil de proyectos y su incorporación en el marco de trabajo Scrum.
Cuando pensamos en desarrollo iterativo, inmediatamente nuestra mente nos lleva a pensar en metodologías ágiles y equipos de ingeniería de software, sin embargo, la mayoría de los equipos de trabajo usan procesos iterativos incrementales, para afrontar sus retos, reducir riesgos, ser más eficientes y adaptarse al mundo real para poder entregar valor.
Si estás interesado en conocer sobre los procesos iterativos, estás en el lugar correcto.
¿Qué es un desarrollo iterativo?
Es una práctica que permite a los equipos, entrar en un proceso de creación, refinamiento y mejora de un producto, proyecto o iniciativa de negocio.
Los equipos que ponen en práctica este proceso crean, prueban y hacen revisiones hasta que sienten que están en el punto donde le dan sentido a la propuesta de valor. El desarrollo iterativo es muy parecido a la invención, se descubre el qué y el cómo, sobre la marcha.
Se empieza diseñando, construyendo y probando la versión más pequeña de lo que se tiene en mente, esto es muy cercano al concepto de Mínimo Producto Viable (MVP) utilizado en metodologías como Lean Startup y Design Thinking. Cuando el equipo este satisfecho, lo mostrará y recogerá los comentarios de todos los interesados en el producto.

En la actualidad, los procesos o desarrollos iterativos son pieza fundamental de las metodologías Lean, la gestión ágil de proyectos y marcos de trabajo como Scrum. Sin embargo, esto no fue siempre así, vamos a conocer un poco de la historia del desarrollo iterativo y cómo llegamos a dónde estamos.
Un poco de historia
Cuando hablamos de iteración y procesos ágiles, solemos pensar en el manifesto ágil, sin embargo, no se explica de forma explicita el desarrollo iterativo. La mejor reseña de este tema se encuentra en el artículo que hacen Craig Larman y Victor Basili «Iterative and Incremental Development: A Brief History» publicado en la revista Computer en Junio de 2003.
Según este artículo, una de las primeras referencias al desarrollo incremental aparece en la documentación de un proyecto de investigación y desarrollo de la NASA para el avión supersónico X-15, donde dice: «Una importante contribución al éxito del X-15 en el largo plazo fue su énfasis en el desarrollo incremental y su uso en la investigación científica y técnica altamente especializadas». Si bien no se trataba de desarrollar software, los aprendizajes se llevaron al desarrollo del software del programa espacial, en particular al proyecto Mercury (a finales de los 50).
Todos nosotros, en lo que yo puedo recordar, pensábamos que desarrollar en cascada un proyecto grande era bastante estúpido, o al menos ignorante de las realidades… Yo creo que la descripción de «waterfall» nos hizo darnos cuenta de que estábamos haciendo otra cosa, algo que no tenía nombre excepto por lo de «desarrollo de software».
Gerald M. Weinberg
Una de las personas claves para la divulgación del desarrollo iterativo e incremental fue el ya mencionado Jerry Weinberg, que escribió sobre la «programación adaptativa». Pero no es hasta febrero de 1988 que el Departamento de Defensa de los EEUU reconoce que el estándar al que obligaba a todos sus contratos era la causa de su altísima tasa de fracasos y publica la revisión DoD-Std-2167A en la que abre el camino para el desarrollo de proyectos de software con una planificación iterativa e incremental. Es hasta diciembre de 1994 que se publica el Mil-Std-498 en el que se retira el sesgo hacia el modelo en cascada:
If a system is developed in multiple builds, its requirements may not be fully defined until the final build…
If a system is designed in multiple builds, its design may not be fully defined until the final build.
Ya para ese entonces, comenzaban a proliferar los enfoques más ligeros, como XP, Scrum, Crystal, etc.
Estamos en pleno 2022 y existen equipos y organizaciones que aun desarrollan sus iniciativas de forma no iterativa, dedicando un tiempo excesivo a pensar en cómo se debe desarrollar todo de forma milimétrica, luego ejecutar el desarrollo con un equipo, probar todo y por último entregarlo al público objetivo para su validación.
Ahora entendemos claramente que es un proceso iterativo, sin embargo, no hemos aclarado aún, que es un proceso no iterativo.
Procesos no iterativos
En un proceso no iterativo, todo el equipo estaría inmerso en la concepción del producto final, sin tener contacto con el público objetivo o probar otras alternativas a las que se plantearon inicialmente.
El más común y conocido es el que llamamos Waterfall o cascada. Con este modelo el equipo define todas las fases del proyecto antes de iniciarlo. Cada fase es dependiente de la anterior y comienza solo cuando la otra haya finalizado.
Los requerimientos y requisitos se determinan antes del inicio del proyecto y uno de los objetivos que se busca es que el cronograma de trabajo no cambie o lo menos lo menos posible.
Entonces, visto todos estos temas, pareciera que iterativo e incremental, tienen algo de relación. Vamos a ver qué tan cierto es esto.
¿Iterativo diferente de Incremental o se complementan?
La mayoría de los equipos usan los procesos iterativos o incremental indistintamente. Y en la práctica, por lo general, van de la mano. Pero sí hay una diferencia entre ambos términos.
En un proceso iterativo, el equipo trabaja para refinar y mejorar el producto con base en feed back de los interesados o información nueva del mercado. El punto clave de los procesos iterativos es que se trabaja en ensayo y error y todo se mejora sobre la marcha.
Con el desarrollo incremental, agregas funciones nuevas y mejoras el producto a partir de la primera versión o entregable (MVP). Para llevar a cabo un proceso de diseño incremental, los equipos elaboran intencionalmente un borrador del entregable final del proyecto para poder lanzarlo lo antes posible (como el viejo mantra de Facebook, “avanza rápido y te harás camino”). Después, el equipo itera y mejora la versión inicial con incrementos que incluyen más funciones que las que había originalmente. Continúan así hasta que el entregable tiene todas las funciones necesarias.
«Iterative & incremental development, horizontal vs vertical» by Henrik Kniberg
Hasta este punto ya queda claro la importancia del desarrollo iterativo e incremental, ¿pero cómo se relaciona todo este tema con las metodologías ágiles?
Desarrollo Iterativo e Incremental en la Metodología Ágil
Vamos a centrarnos en el marco por excelencia Scrum, actualmente el más conocido, por su facilidad y simplicidad, que lleva a los equipos de trabajo a entregar valor de forma temprana, iterativa e incremental. Su medio natural son los entornos complejos, donde los resultados se deben obtener a corto plazo y los requisitos para alcanzar las metas son cambiantes.
Con Scrum podemos obtener la máxima expresión de desarrollo iterativo e incremental, ya que la esencia de este marco basa su gestión de forma iterativa y las tareas se realizan en entregas parciales y regulares. De ahí que el proyecto se efectúe en bloques temporales, cuyos plazos de ejecución pueden variar de dos semanas a un mes. A estos bloques se les conoce como iteraciones. El plazo de cada iteración puede definirse en función de lo solicitado por los clientes y la capacidad productiva de los equipos. El punto de partida es la definición de los objetivos del proyecto, los cuales tienen que ser priorizados de antemano por el cliente. La jerarquización de los objetivos definirá las acciones más importantes en cada proyecto y ayudará a trazar el itinerario de este, dando lugar, de paso, a las iteraciones y los incrementos de valor.
«SCRUM Framework by scrum.org
Beneficios del desarrollo iterativo e incremental
- Mayor eficiencia. Debido a que los procesos iterativos se basan en métodos de prueba y error, a menudo pueden ayudarte a lograr el resultado deseado de forma más rápida que los procesos no iterativos.
- Disminución de los riesgos. En el proceso iterativo, los riesgos se identifican y solucionan durante cada iteración. En lugar de lidiar con grandes riesgos al comienzo y al final del proyecto, trabajarás constantemente para solucionar riesgos menores.
- Adaptabilidad. A medida que adquieres conocimientos nuevos durante las fases de implementación y prueba, puedes ajustar tu iteración para alcanzar tus objetivos con mayor facilidad.
- Colaboración. En lugar de trabajar con planes y especificaciones predefinidos, tu equipo trabaja activamente en conjunto.
- Rentabilidad. Si necesitas cambiar el alcance del proyecto, el tiempo y esfuerzo invertido en el proceso habrá sido mínimo.
- Feed back de usuarios más fiables. Si tienes una iteración que los usuarios pueden ver o probar, podrán brindarte comentarios sobre lo que funciona y lo que se debería mejorar.
Hasta este punto queda claro como el desarrollo iterativo e incremental puedan aportar valor a nuestras iniciativas y aun más, si lo combinamos con un marco de trabajo como Scrum, sin embargo, no todo es color de rosas, vamos a abordar un tema que quizás es el más complejo en las organizaciones, se trata de las condiciones mínimas requeridas para que estos cambios se puedan dar y la esencia del desarrollo iterativo e incremental de sus frutos.
Condiciones para un desarrollo iterativo e incremental
- Cambio del mindset. Se deben romper los silos funcionales, que todas las áreas trabajen juntas con un objetivo de negocio transversal y no se vean como equipos separados, con objetivos independientes.
- Autonomía: Equipos autogestionados que no dependan de decisiones externas jerarquizadas, que podrían bloquear y/o fragmentar el flujo de trabajo.
- Cultura cimentada en acciones: Necesitamos que el cambio sea bienvenido, necesitamos mentalidades Kaizen orientadas al aprendizaje y la mejora continua.
Aprende, construye, mide y vuelve a intentarlo
Nuestra vida sería muy diferente sin el desarrollo iterativo e incremental, muchas de las cosas que usamos a diario como los teléfonos inteligentes, computadores, Smart Tv, etc, han pasado por un proceso iterativo e incremental de mejoras. A nivel de equipos y organizaciones todos pueden aprender algo positivo de este proceso, siempre que las condiciones estén dadas, sea positivo para la colaboración y flexibilidad.
Si este artículo te pareció interesante y deseas aprender más de los procesos iterativos e incrementales y los beneficios que puede ofrecer en tu organización, te invitamos a que nos conozcas, somos Scrum Colombia, primer proveedor de Entrenamiento y Consultoría en Scrum
Realizamos entrenamientos con el respaldo de Scrum Alliance®, entidad certificadora número 1 de Scrum en el mundo. Conoce más
Fuentes:
Craig Larman y Victor Basili (2003) Iterative and Incremental Development: A Brief History
D. Kay The X-15 Hypersonic Flight Research Program (1981)
Department of Defense Standard 2167ª DOD-STD-2167ª
Military Standard Software Development and Documentation MIL-STD-498
Kent, B., Beedle, M., van Bennekum, A., Cockburn, A., Cunningham, W., Fowler, M., Grenning, J., Highsmith, J., Hunt, A., Jeffries, R., Kern, J., Marick, B., Martin, R., Mellor, S., Schwaber, K., Sutherland, J., & Thomas, D. (2001). Manifiesto por el Desarrollo Ágil de Software.