Dibujo de Jeff Patton
¿Qué es el desarrollo iterativo y qué el incremental? Incluso los expertos se confunden al describirlo. Quizá nuestro lenguaje sea un reflejo inadecuado de la realidad.
Jeff Patton cree que el software debe construirse como trabaja un artista. El artista "itera" en el conjunto y el potencial del cuadro completo es visible en cada iteración, desde el boceto inicial hasta el cuadro final. La obra completa se va perfilando poco a poco. Patton lo denomina "iterativo" desarrollo.
Sin embargo, esto es exactamente lo que Mills y Brooks llaman "incremental" desarrollo. Abogan por cultivar el software como una planta. Es una metáfora similar a la forma en que "crece" el boceto de un artista.
Harlan Mills, de IBM, publicó por primera vez este concepto en "Debugging Techniques in Large Systems" Prentice Hall, 1971. (Cualquier sistema de software debe crecer mediante un desarrollo incremental.)
Fred Brooks popularizó el concepto en "No Silver Bullet: Esencia y accidentes de la ingeniería de software"publicado por primera vez en IEEE Computer, abril de 1987 con la versión final publicada en la edición de aniversario de "Mes del Hombre Mítico."
Así que Patton tiene la idea correcta, pero su uso del término desarrollo iterativo es erróneo. El desarrollo incremental consiste en iterar sobre el conjunto (cada iteración es un conjunto mínimo de características utilizables que son potencialmente comercializables).
Patton critica la práctica común de crear una funcionalidad completa en una iteración, y luego una segunda funcionalidad en una iteración posterior. Lo llama desarrollo incremental (¡erróneo!). No está a la altura de la terminología utilizada por los informáticos durante décadas.
La clave del concepto Mills/Brooks de desarrollo incremental es la idea de que cada iteración es utilizable de alguna manera (software potencialmente despachable). El primer Scrum enviaba todos los incrementos al final de cada iteración y eran utilizados por consultores internos "enfadados" para ejecutar proyectos de clientes que generaban ingresos. Sólo era "potencialmente comercializable" porque el Product Owner (Don Roedner) no estaba preparado para lanzarlo al mercado general.
Patton no tiene claro lo que entendemos por software potencialmente despachable, es decir, que cada iteración sea utilizable. Ken Schwaber describió por primera vez el término "potencialmente distribuible" en su ponencia sobre Scrum en OOPSLA 1995, tras observar al primer equipo de Scrum. Esta primera ponencia sobre Scrum se vuelve a publicar en "Los papeles Scrum." Quizá Ken y yo podríamos haber sido más claros sobre lo que significa "software potencialmente despachable".
Así pues, el Scrum es un desarrollo tanto interativo como incremental cuando se hace correctamente. Cada iteración ofrece un incremento totalmente funcional, igual que una planta funciona en cada fase de crecimiento. Si se hace así, cada iteración es "potencialmente enviable" y, en el caso ideal, se envía a un conjunto de usuarios finales que la utilizan para realizar un trabajo real y aportar sus comentarios.