Desarrollo iterativo + Mínimo Producto Viable = Scrum

Desarrollo iterativo + Mínimo Producto Viable = Scrum

El desarrollo iterativo (o incremental) es el proceso de desarrollo de software que consiste en la división del trabajo en pequeñas etapas repetitivas. Estos bloques temporales, bajo la metodología Scrum, se denominan sprints. En el desarrollo iterativo es una buena práctica que estos bloques temporales sean regulares, en Scrum es obligatorio, los sprints siempre duran lo mismo. 

En el desarrollo iterativo al final de cada etapa se entrega una funcionalidad completa. Para plantear la evolución del producto es muy recomendable crear el Mínimo Producto Viable (Minimum Viable Product, MVP) y evolucionar con el feedback y necesidades del cliente. Bajo estos paradigmas el uso de Scrum como metodología de trabajo encajan a la perfección.

Definimos Mínimo Producto Viable como el producto con suficientes características para satisfacer a los clientes iniciales y proporcionar retroalimentación para el desarrollo futuro (Wikipedia).

El MVP debemos entenderlo como una herramienta para aprender mientras desarrollamos y entregamos el producto. Nos sirve para comprobar nuestras suposiciones o hipótesis. Gracias a la iteración continua evolucionamos el producto y reducimos el tiempo para la validación de las nuevas ideas.

A medida que avanzamos con el producto, ir creando las nuevas funcionalidades bajo el mismo patrón de trabajo nos permite validar donde merece la pena invertir. Una vez se conoce se pueden dedicar todos los esfuerzos en trabajar sobre las mejores soluciones para nuestro negocio. Si te interesa como aprender junto al Mínimo Producto Viable en este post

Cuanto antes se entregue al cliente, antes nos dirán si estamos trabajando en lo que necesitan. 

Ciclo de vida del desarrollo iterativo

La motivación del desarrollo iterativo se fundamenta, principalmente, bajo estas dos premisas:

  • Los usuarios nunca saben bien qué es lo que necesitan para satisfacer a sus necesidades.
  • En el desarrollo los procesos o requerimientos tienden a cambiar.

El desarrollo iterativo nos permite sacar una ventaja competitiva gracias a lo que se ha aprendido a lo largo de todo el desarrollo anterior. Este aprendizaje no debe quedarse sólo en el mundo de desarrollo, debe extenderse hacia toda la empresa.

En Scrum la figura del Product Owner es quien tiene la responsabilidad de definir las siguientes iteraciones. El Product Owner debe tener un conocimiento profundo del mercado, del producto y de las capacidades el equipo. Es el encargado de recoger el feedback del cliente o de los usuarios y aplicarlo en las próximas iteraciones.

En cada una de las iteraciones el equipo debe buscar la fórmula de aportar el máximo valor posible al cliente o a los usuarios. Es ya conocido que la palabra mínimo no se refiere a mal hecho o mal terminado, que no se trata de la ley del mínimo esfuerzo.

Mínimo se refiere a la mínima solución que permita satisfacer una necesidad. El MVP inicial se presenta a los early adopters del software en desarrollo. En esta línea Steve Blank, emprendedor en serie y profesor de Silicon Valley, comenta sobre la creación del MVP:

Estás vendiendo la visión y entregando el conjunto mínimo de características a visionarios, no a todo el mundo.

En la definición del MVP inicial y su futura evolución en las distintas iteraciones es necesario unir la usabilidad con el proceso de desarrollo, pero no es suficiente asignar técnicas de usabilidad durante las actividades de desarrollo.

Entre las técnicas de usabilidad que necesitaremos aplicar las hay que no se pueden aplicar en cualquier momento del desarrollo del producto. En alguno casos es necesario trabajarlas en el momento que se identifican las necesidades, cuando definimos cómo será el producto en el que trabajar. Para ello el desarrollo iterativo se divide en dos grandes fases: inicialización e iteración.

Etapa de Inicialización 

La etapa de inicialización es la inicial del proyecto y consiste en crear una primera versión del sistema, el MVP inicial. El objetivo principal de esta etapa es crear un producto con el que el usuario pueda interactuar y empezar así a retroalimentar el proceso de creación.

En este momento se define el primer MVP y se marcan las líneas generales de la solución. De este modo se puede ofrecer de una forma simple para que pueda ser comprendida, implementada y usada por el equipo y el cliente.

En esta definición el desarrollo iterativo incorpora una lista de control de proyecto. Esta lista consiste en generar un historial de todas las tareas que se deben realizar. En Scrum esta lista de tareas se llama Product Backlog y no contiene tareas sino historias de usuario.

En Scrum el Product Owner es quien define las historias de usuario y tiene la responsabilidad (y el poder) de ordenar el product backlog. Estos reordenamientos constantes permiten adaptar el desarrollo a las necesidades del cliente o usuario. Estos cambios se definen gracias al feedback directo y/o a las analíticas de uso del software.

Bajo esta visión los calendarios concretos a mucho tiempo vista (dos o tres meses) no permiten adaptar el desarrollo al feedback y podría generar malestar al cliente o decepción a los usuarios al no trabajar en línea con sus necesidades.

Para saber más acerca del backlog vista como una poderosa herramienta de priorización y generación de valor en Scrum pudes leer este post

Etapa de Iteración

La etapa de iteración consiste en el rediseño e implementación de cada una de las tareas de la lista de control, o historias de usuario del product backlog en Scrum.

El principio de Pareto aplicado al software consiste en que el 80% del valor del producto reside en el 20% de las funcionalidades. Plantear el desarrollo como un proceso de iteración constante nos permite centrar todos los esfuerzos en las necesidades que realmente importan a nuestros usuarios. 

No debemos preocuparnos porqué el product backlog se vaya llenando. Debemos tener asumido que habrá muchas historias de usuario que nunca deberemos construir, que nunca serán una prioridad o que cambiarán su planteamiento. Debemos trabajar siempre sobre el 20% de funcionalidades que aportan valor al software e ir adaptando la evolución del producto.

Es importante destacar las historias de usuario. Si lo reducimos mucho: a los humanos no nos gustan las tareas, estamos hechos para las historias. Scrum apuesta por el uso de historias de usuario que sirvan para identificar quien necesita una cosa y para qué.

Si quieres conocer más acerca de cómo las historias de usuario pueden servirte para mejorar la productividad, motivación y calidad en el trabajo del equipo puedes leer este post. 

Concepto: Incremental VS Iterativo

Nadie de nosotros ha nacido ágil ni nunca seremos suficientemente ágiles. Los recursos siempre serán limitados y siempre podremos mejorar el flujo, la comunicación, un proceso, eliminar un despilfarro...

En el camino hacia la agilidad nos encontraremos problemas y situaciones a resolver o mejorar. En el desarrollo iterativo (y dicen o incremental) el problema principal es olvidar la palabra iterativo.

Si estamos trabajando en un producto y nos centramos sólo en incremental y nos olvidamos de iterativo tenemos un problema. Si quieres leer más acerca de las diferencias entre iterativo e incremental te recomiendo este post de Javier Garzás en el que puedes leer qué pasa cuando olvidamos el iterativo.

A modo resumen: 

  • Ciclo de vida incremental: Desarrollar por parte el producto de software e ir integrándolas a medida que se van completando. Para resumir: añadir más funcionalidades nuevas al software.
  • Ciclo de vida iterativo: Desarrollar en distintas etapas temporales (en Scrum sprints iguales) donde en cada una de ellas se revisa y mejora el producto. Un ciclo no implica obligatoriamente la implementación de una nueva funcionalidad pero sí revisión y mejora del producto actual.

Conclusiones

El desarrollo iterativo consiste en planificar el proyecto en un formato de bloques temporales. En Scrum estos bloques son siempre iguales y se denominan sprints. En cada una de las iteraciones es necesario entregar una funcionalidad completa sobre el producto final.

Un buen planteamiento en la fase de iteración es pensar en el MVP de una nueva funcionalidad o de una mejora sobre una existente. Para ello es una buena práctica plantearlo como mini proyectos sobre el producto actual. De este modo podemos iterar sobre él y aumentar el valor percibido.

Cada iteración y entrega nos sirve para aprender.

El cliente y los usuarios nos aportan un conocimiento gracias a su feedback directo o datos estadísticos sobre el uso del software. El feedback recogido nos permite reordenar y priorizar el product backlog y así poder destinar siempre los esfuerzos en aquellos puntos que realmente son importantes para nuestro producto.

 Puedes leer este post de proyectosagiles.org acerca del desarrollo iterativo, en el que se pone principal foco en los beneficios, restricciones y recomendaciones en su aplicación.

Ante mentalidades poco próximas al manifiesto ágil es difícil aplicar el desarrollo iterativo. Constantemente se necesitará un calendario completo de todo lo que se realizará, poniendo émfasis a la palabra incremental y no a la iterativa. Si tenemos un calendario completo con todas las nuevas funcionalidades a desarrollar no dejamos espacio a la mejora de las existentes ni a la aportación de nuevas ideas o necesidades al cliente o usuario.

Te ha gustado el post? No olvides suscribirte en nuestra newsletter! Ayúdanos a dar a conocer Scrumízate y comparte este post en la redes sociales para que llegue a más personas o envíalo a alguien a quien también le pueda interesar. Gracias!

También te puede interesar...
Pitu Sabadí
Pitu Sabadí
TDD and Agile enthusiast

CEO en Please Networks. Profesor de Agile en el Máster de UIUX en ESDi. Fullstack developer y believer en la vida real. El trabajo en equipo, la mejora continua y las dinámicas de grupo constituyen las motivaciones de este blog.