Figura 1. Proceso Incremental según Jeff Patton
Figura 2. Proceso Iterativo según Jeff Patton
Figura 3. Proceso Iterativo e Incremental según Steven Thomas
Consecuentemente con lo anterior, en Scrum se establece que el resultado de un sprint (una iteración) es un incremento potencialmente entregable del producto ("potentially releasable product increment"), es decir, una versión que potencialmente podría pasarse a producción. El incremento es la suma de todos los ítems del Backlog completados durante un sprint y todos los sprints anteriores.
Por otra parte, Alistair Cockburn en el apartado de su web titulado Incremental versus Iterative Development proporciona otra perspectiva en cuanto a la definición de Iterativo y de Incremental. Incremental lo plantea como la estrategia que permite mejorar el proceso (desarrollar partes y luego integrarlas) e Iterativo lo plantea como el re-trabajo para mejorar el producto.
Según todo lo anterior, en mi opinión, queda claro que un Proceso Iterativo, apelando a lo básico, es un proceso donde se trabaja con ventanas temporales (llamadas usualmente iteraciones o sprints) en las cuales se lleva a cabo cierto trabajo sobre el producto. Un Proceso Incremental e Iterativo es un proceso en el cual el resultado de cada iteración es un incremento potencialmente entregable del producto. Pero quedaría por responder la pregunta del millón :-) ¿puede un proceso ser Incremental SIN ser Iterativo?. Mi respuesta es afirmativa, y mi argumento sería el siguiente (en la línea de Alistar Cockburn): si el producto se desarrolla en partes que se van integrando en cierto momento con la intención de hacer una entrega, pero sin utilizar iteraciones (o sprints), estaríamos en el caso de un proceso NO iterativo pero SÍ Incremental. Pondría como ejemplo la estrategia del método Kanban, el cual promueve la generación de un buen flujo de trabajo terminado, con entregas continuas pero sin trabajar con sprints (sin estimar ni planificar, y en su lugar centrarse en la priorización continua del trabajo pendiente). A propósito de este ejemplo, aprovecho para destacar que la decisión de un equipo respecto de usar o no sprints suele tomarse a través de una cuestión mal planteada, puesta en términos de la elección entre usar de forma excluyente Scrum o Kanban (lectura recomendada. ¿Kanban o Scrum? ... that is not the question).
Finalmente, en la metáfora de la Mona Lisa se diferencia entre pintarla teniendo una concepción previa del todo (Figura 1), o comenzar con una idea vaga, e ir definiéndola y ajustándola en cada paso (Figuras 2 y 3). En mi opinión este aspecto (el tener o no una idea preconcebida y detallada del resultado) no es extrapolable tan directamente a desarrollo de software. Es ampliamente reconocido que los requisitos suelen cambiar durante el desarrollo, tanto en términos de añadir o quitar requisitos, como en cuanto a modificar los requisitos originales. Con lo cual aunque se haga un esfuerzo importante por definir anticipadamente todos los requisitos, de todas formas se esperan cambios en ellos. Es por esto que, siguiendo la recomendación de uno de los 7 Mudas de Lean Development en cuanto a "no producir con demasiada antelación", los ítems en el Backlog no deberían ser definidos en mayor detalle hasta que no se acerque su implementación. Es decir, en el Backlog, podemos tener ítems con escasa definición o muy grandes (Épicas) que sabemos que necesitarán un trabajo previo antes de su implementación, pero, como asumimos que habrá cambios, no conviene anticipar su preparación hasta cuando sea inminente que se van a implementar. Una excepción a esto se daría cuando el contexto nos obliga a planificar con mayor antelación (por ejemplo, compromisos contractuales poco flexibles), y esto consecuentemente ejerce presión para anticipar una preparación y estimación más detallada.
Patricio Letelier
Cuando planteas que puede ocurrir un Incremento sin ser Iterativo me parece sin sentido. Al argumentar que "el producto se desarrolla en partes que se van integrando cierto momento", cuando hablas de ese 'cierto momento' implícitamente dejas una Iteración; si bien no es algo planificado o algo que se va a realizar en un tiempo especifico, sigue tomando la connotación de hacerlo cada cierto tiempo (Iterativo). El simple hecho que el Modelo de desarrollo no sean en cascada (Ciclo de vida clásico) representa de alguna forma una Iteración. Por eso creo que un Incremento tiene que existir Iterativamente.
ResponderEliminarBuena observación :-). Claro que puedes llamar Sprint (o iteración) a algo que no le has planificado previamente su alcance. Eso es uno de los tipos de Sprint que yo denomino flexibles, definidos a posteriori o que simplemente se terminan con lo que se haya hecho, sin haber previsto su alcance. Cada historia de usuario terminada puede/debería ser un incremento del producto. Si simplemente vamos terminando historias de usuario y generando nuevas versiones estamos haciendo un desarrollo incremental, si nos interesa agrupar las historias de usuario para entregarlas juntas en períodos de tiempo concretos, además de incremental nuestro proceso es iterativo. Pero como te indiqué antes tus Sprint podrían ser flexibles, es decir, hay más variantes :-) Échale un vistazo a http://agilismoatwork.blogspot.com/2017/06/sprints-welcome-to-real-world.html
ResponderEliminar