Noviembre
11 de 2014, por Mike Cohn
Este artículo se publicó originalmente en el boletín
mensual de Mike Cohn. Si te gusta lo que estás leyendo, suscríbete para que
este contenido te llegue directamente a tu buzón semanas antes de que sea
publicado en el blog, aquí.
Scrum, como todos
los procesos ágiles, es tanto iterativo como incremental. Puesto que estas
palabras se usan frecuentemente sin definición, permítanme definirlas.
Un proceso
iterativo es uno que permite progresar a través de refinamiento sucesivo. Un
equipo de desarrollo hace un primer corte del sistema sabiendo que está
incompleto o frágil en algunas áreas (quizás en muchas). El equipo luego refina
iterativamente esas áreas hasta que el producto es satisfactorio. Con cada
iteración, el software se mejora mediante la adición de mayor detalle.
Por ejemplo, en una
primera iteración, una pantalla de búsqueda podría codificarse para soportar
solamente el tipo más simple de búsqueda. La segunda iteración podría agregar
criterios adicionales de búsqueda. Finalmente, una tercera iteración puede
agregar manejo de errores.
Una buena analogía
es la escultura. Primero, el escultor selecciona una piedra de un tamaño
apropiado. A continuación, el escultor talla la forma general de la piedra. En
este punto, uno quizás pueda distinguir la cabeza y el torso y hasta pueda
descifrar que el trabajo finalizado será un cuerpo humano en vez de un pájaro.
Luego, el escultor refina su trabajo adicionando detalles. Sin embargo, es poco
probable que el escultor dé por completada un área hasta que el trabajo entero
esté terminado.
Por su parte, un
proceso incremental es uno en el que el software se construye y entrega por
piezas. Cada pieza, o incremento, representa un subconjunto completo de
funcionalidad. El incremento puede ser pequeño o grande, quizás algo que vaya
desde una pantalla de ingreso al sistema hasta un conjunto altamente flexible
de pantallas de administración de datos.
Cada incremento se
codifica y se prueba completamente y la expectativa común es que el trabajo de
una iteración no necesitará volver a revisarse. Un escultor incremental elegirá
una parte de su trabajo y se enfocará completamente en esta hasta que esté
finalizada. Él/ella puede seleccionar pequeños incrementos (primero la nariz,
luego los ojos, después la boca y así sucesivamente) o incrementos grandes
(cabeza, torso, piernas y luego los brazos). Sin embargo, independientemente
del tamaño del incremento, el escultor incremental intentará finalizar el
trabajo de ese incremento tan completamente como le sea posible.
Scrum y ágil usan
un enfoque tanto incremental como iterativo. Iterativo en el sentido de que
planean que el trabajo de una iteración sea mejorado en las iteraciones
subsiguientes. Incremental porque el trabajo terminado se entrega durante todo
el proyecto.
Para ilustrar mejor
las diferencias entre iterativo e incremental, consideremos la construcción de
un sitio Web pero no de manera incremental. Para hacer esto, el equipo
construiría un poco de cada parte del sitio –manejo de perfiles, búsqueda,
anuncios, etc. Luego el equipo revisaría todas las partes, mejorando cada una
de ellas.
Más adelante el
equipo revisaría todas las partes nuevamente, haciendo otras mejoras. En este
enfoque puramente iterativo, se consigue mejorar un poco el sitio completo.
Ahora, consideremos
desarrollar el mismo sitio con un proceso puramente incremental pero no
iterativo. Si un sitio de citas fuera construido incrementalmente, el equipo
construiría y perfeccionaría la administración de perfiles antes de empezar
cualquier otra parte del sitio. El equipo luego construiría y perfeccionaría
otra área, digamos las búsquedas, antes de moverse a una tercera área. Cada
área funcional se perfeccionaría antes de iniciar el área siguiente.
Ni iterativo ni
incremental son grandiosos por sí solos. Pero juntos –como están en Scrum– son
fantásticos.
Nota
del traductor (¡ese soy yo!):
Traducido del
artículo original de Mike Cohn: ‘Agile
Needs to Be Both Iterative and Incremental’, que pueden encontrar en este
enlace:
Publicado con
permiso del autor.