Todas 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:
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:
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.