monalisaTodas las metodologías ágiles hablan del "desarrollo iterativo" de software. Sin embargo, muchas veces se lo confunde con un desarrollo por incrementos, que es algo bien distinto.

En su charla Embrace Uncertainty (video en inglés), Jeff Patton nos explica con un ejemplo claro la diferencia entre estos dos enfoques.

Veamos a continuación la diferencia fundamental entre el desarrollo de software incremental y el iterativo.

Incremento vs. iteración

Una de las prácticas de ágil que suele malinterpretarse es la de encarar el proyecto por iteraciones. Una iteración no es un incremento.

En los incrementos se tiene una idea completa del producto final. Al comenzar hay certeza absoluta sobre el resultado final deseado, como en la siguiente imagen:

incremento

En las iteraciones se va construyendo un borrador, se valida, y luego se sigue agregando calidad al producto. Al comenzar no hay certeza absoluta sobre el resultado deseado, sino que se va construyendo a medida que se avanza y se va viendo el producto. La siguiente imagen ilustra un comportamiento interativo:

iteracion

En un desarrollo iterativo se debería poder contar con un producto potencialmente productivo al finalizar cada iteración, aunque no sea la versión final y definitiva del mismo.

Recordemos que, como ya dijo Fred Brooks, "lo más dificil de construir software es determinar con precisión qué construir". El desarrollo iterativo ayuda a todos los participantes (al Dueño del Producto y al Equipo de desarrollo) a avanzar juntos con el producto y poder determinar la mejor forma final del mismo.

Basado en Embrace uncertainty by Jeff Patton

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw