Método iterativo e incremental

Imagen de Henrik Kniberg

Tu empresa ha externalizado la creación de una aplicación a una empresa en India y a los cuatro meses de la fecha límite entregan una primera versión.
En esa primera versión te das cuenta que tiene bastantes problemas. Como por ejemplo:

  • Los requisitos mínimos no han sido cumplidos.
  • La interfaz de usuario tenía que ser igual a otra aplicación, ya que los usuarios están acostumbrados a esta primera, y no se parece nada.
  • La aplicación no funciona con el número mínimo de usuarios concurrentes que va a tener.
  • Las funcionalidades desarrolladas hacen lo que tiene que hacer, a veces.
  • El código no tiene un mínimo de calidad

Como puedes imaginar, no vas a poder arreglar todos los problemas en solo cuatro meses y los costes en cuanto a tiempo y dinero aumentan con cada mes que no ha entregado el producto, y serán muchos meses.
Además, la gente de negocio tiene que hablar con los clientes sobre estos cambios, ya que no van a estar terminados en la fecha prometida. Lo que bajará la confianza de los clientes en la empresa.
Lo mismo pasa con la gente de marketing y la campaña que tenían pensada hacer para captar nuevos clientes, que tendrán que ser pospuestas. Con el coste adicional que supondrá este cambio.

La forma de desarrollar este producto es en cascada (waterfall) ya que todos los requisitos han sido dados al principios del desarrollo y el producto se entrega cerca de la fecha de entrega.

Imagen de https://www.adictosaltrabajo.com/tutoriales/metodos-agiles

La forma de desarrollar un producto en cascada es la más eficiente porque si los requisitos han quedado claros y no hay problemas durante el desarrollo del producto se han gastado cada céntimo en las cosas necesarias para obtener el producto.
El problema es que en los 10 años que llevo desarrollando software siempre hay “problemas”. Puede ser que sea casualidad o que los problemas no son tal, si no un es algo habitual en el desarrollo de software. Personalmente me decanto por el segundo motivo.

Hay varias alternativas a este tipo de desarrollos en cascada pero voy a hablar del que conozco. Del desarrollo iterativo e incremental.

El desarrollo iterativo e incremental consiste en ir entregando versiones de tu producto que vayan entregando cada vez más valor con cada versión del producto.

Imagen de https://www.adictosaltrabajo.com/tutoriales/metodos-agiles

La ventaja de esta forma de desarrollar un producto es que si hay algo mal, como la lista que he comentado al principio, tenemos tiempo suficiente para poder solucionarlo. O lo que es lo mismo, estamos reduciendo el riesgo que es el entregar un producto al final del desarrollo sin saber si está bien.

Claro que esta forma de desarrollo tiene sus inconvenientes. El más importante es el tiempo que hay que dedicarle a verificar que vamos por el buen camino. El tiempo que dedicamos a hablar con el cliente o con la gente de negocio para comprobar que lo que estamos desarrollando encaja con lo que tenían pensado.
Otro inconveniente importante es que la forma de desarrollar cambia de forma drástica. En cada nueva versión de nuestro producto tenemos que comprobar que las nuevas funcionalidades funcionan de la forma correcta y que las funcionalidades desarrolladas en las versiones anteriores siguen funcionan. Así, con cada nueva versión que se acerca más al producto tenemos que probar muchas cosas: las funcionalidades nuevas y las antiguas.
Como puedes imaginarte llega un momento que este proceso de comprobar que todo lo desarrollo funciona de forma correcta no se puede realizar de forma manual. De forma manual quiero decir de una persona que compruebe un todo funciona.
Por lo que necesitamos algún tipo de proceso automático que nos permita comprobar que lo que hemos desarrollo funciona. Aquí es donde entra en juego los test unitarios, los test de integración y los test de aceptación.
Los test unitarios y de integración comprueban que la aplicación funciona como debe funcionar y los test de aceptación comprueba que la aplicación funciona como el usuario final quiere.

Los cambios de un proceso en cascada a un proceso iterativo e incremental son grandes. Tanto a nivel de negocio como a nivel de desarrollo. La gente de negocio tiene que ayudar a comprobar que lo que que el usuario quiere es lo que se está desarrollando (test de aceptación) y la gente de desarrollo tiene que crear test de integración y unitarios para comprobar que lo que se está creando funciona de forma correcta.
Estos cambios son grandes pero van a permitir a vuestra empresa a reducir los riesgos. Lo que va a permitir a vuestra empresa crecer reduciendo los riesgos en este crecimiento.

Personalmente las ventajas ganan a los inconvenientes en un proceso iterativo e incremental. ¿Tú qué opinas?

My first project with Scrum

Image from http://www.3news.co.nz
Image from http://www.3news.co.nz

Introduction

I’ve been working on a new project for the last few months. I worked with two external developers on this project. One of them has experience as Scrum master so the team decided to use Scrum as the methodology in the project.
I’d read a lot about Scrum and I’d applied some practices in the past but I’d never used Scrum by the book.

In this blog I’ve written a summary about my experience using Scrum in a project that was built from scratch.

I’m not going to talk about the practices of Scrum, so if you want to know more, a good place is:

http://www.scrumguides.org/

you can find there the official guide of Scrum in many languages.

Pros

  • Retrospectives really work. Every retro helped us to discover the problems in the sprint and to solve them. For example, part of the team didn’t work at the office and that caused communication problems. The communication improved thanks to the retros and the actions that we took in each one.
  • Team building. We spoke a lot, and because of all the meetings we knew each other and came together as a team. I was new in the company and I didn’t know my colleagues nor the external developers. I believe we made a good team in few months due to the scrum practices.
  • The product’s design is understood for each member of the team. In this case, sprint meetings allowed us to understand the whole design of the application. That could also improved the design because many decisions were taken together.

 

Cons

  • Scrum can be used as a tool for micromanaging the team. That could happen when dailies and retros are done in the wrong way. Dailies would just be about the status of each story and retros would just be about checking estimations in detail. It didn’t happen but I realized how a person could transform scrum into something ineffective.
  • Feedback in the last part of the project. We did an acceptance test after the development had finished where most of the company participated and we received a lot of feedback. I see this like a negative thing because we couldn’t transform the feedback into new features. Our sprints were two weeks long and the last day of each sprint we did a demo where all the people involved in the product attended, including the people who gave us feedback in the acceptance test.

I’d like to add that we could apply the use of Scrum better because, for example, we had to write documents and other tasks after the development had finished and they should have been included in the project.
Furthermore, our main problem was that we didn’t have a product owner and a colleague had to play that role. I believe the highest benefit of Scrum and other Agile methodologies is that the value is maximize and due to the fact that we didn’t have a proper product owner that benefits were decreased.

The next blog explains the meaning of value very well:

http://ronjeffries.com/xprog/articles/value-is-what-you-like/

The same writer has just released a book with the title “the nature of software development” and is amazing. It has a little more than 100 pages that explains in the most clear way possible what software development is about. I’ve read it recently and it´s a really nice book.

Recap

I’m happy with the end result of the project although we could do it better . I love how Scrum practices allow us to improve the team performance and the development process.

Scrum doesn’t have development practices and I miss them because developing an incremental and iterative product without them is very hard. For example, TDD and continuous integration.
So, in regards to development practices XP is better than Scrum because it includes many practices for us, programmers.

* 22-06-2015 Solved grammar error

Mi primer proyecto con Scrum

Image from http://www.3news.co.nz
Imagen de http://www.3news.co.nz

En los últimos meses he estado trabajando en un nuevo proyecto. En este proyecto hemos tenido a dos personas externas. Uno de ellos tiene experiencia como Scrum master por lo que el equipo decidió el utilizar Scrum como metodología en el proyecto.
He leído bastante sobre Scrum y he utilizado partes en el pasado pero nunca había utilizado Scrum by the book.

A continuación, voy a comentar de forma resumida mi experiencia utilizando Scrum en este proyecto, que desarrollamos desde cero.
No voy a hablar sobre cuales son las prácticas de Scrum, por lo que si no lo conoces, un buen recurso es:

http://www.scrumguides.org/

donde hay guías oficiales en muchos idiomas, incluido en español.

Cosas buenas

  • Las retrospectivas realmente funcionan. En cada retro hemos ido viendo las dificultades que teníamos y hemos ido mejorando en esos aspectos. En nuestro caso, parte del equipo no trabajaba siempre en la oficina y eso causó problemas de comunicación. Este problema de comunicación disminuyó mucho gracias a las retros, y a los acciones que tomamos después de cada retro.
  • Formamos equipo. Todo el tiempo que pasábamos juntos hablando hizo que nos fuéramos conociendo y que poco a poco formáramos equipo. Soy nuevo en la compañía y no conocía a mis compañeros ni a la gente externa contratada pero gracias a las prácticas de Scrum a los pocos meses formamos un buen equipo.
  • El diseño de la aplicación es entendido por todo el equipo. Las reuniones de sprint permitieron que todos los miembros del equipo entendieran el diseño de la aplicación. El diseño mejoró debido a que las decisiones importantes las tomábamos en conjunto.

 

Cosas no tan buenas

  • Es muy fácil convertir Scrum en una herramienta de control. Podemos controlar hasta el mínimo detalle lo que hace cada miembro del equipo, si en las reuniones diarias solo se comenta el estado de cada uno, y en las retros se miran en detalle las estimaciones, . Es lo que se llama micromanagement. No es algo que halla pasado en el proyecto pero es algo que me di cuenta que podía haber pasado ya que pusimos al principio demasiado énfasis en que las estimaciones fueran las correctas.
  • Mucho feedback al final del proyecto. Al final del proyecto realizamos un test de aceptación en el que participó buena parte de la compañía y recibimos muchos comentarios interesantes. Lo veo como algo negativo porque no tuvimos tiempo para poder añadir los comentarios en la aplicación. Cada dos semanas hicimos demos para la compañía, en donde esas mismas personas que hicieron comentarios, asistieron pero no dijeron nada al respecto.

Además de las puntos comentados anteriormente, podíamos haber aplicado Scrum mejor, ya que, por ejemplo, al terminar el proyecto tuvimos que realizar documentación y otras tareas y deberían haber sido parte del proyecto.
Además, el principal problema que tuvimos con Scrum fue el product owner, debido a que no encontramos a nadie que encajara con el puesto, por lo que una persona sin la suficiente experiencia y poder (de tomar decisiones sobre el producto) tuvo que ejercer esta posición. Debido a ello, el mayor beneficio de Scrum y también de las demás metodologías Agile, que es el maximizar valor, se vio resentido.

Este artículo de Ron Jeffries explica muy bien qué es valor:

http://ronjeffries.com/xprog/articles/value-is-what-you-like/

Este mismo autor, ha sacado un libro con el título The Nature of Software Development que es una maravilla. Son ciento y pico hojas que explican de forma sencilla y sin palabras técnicas en que consiste el desarrollo de software. Perdón por el off topic pero acabo de terminarme el libro y me ha encantado.

Conclusión

Aunque podíamos haber utilizado Scrum mejor estoy contento con el resultado final del producto. Me encanta como ciertas prácticas de Scrum permiten el ir mejorando el funcionamiento interno del equipo y el proceso de desarrollo.

Scrum es una metodología genérica, que se puede utilizar en otros proyectos que no sean de software. Creo que por ello, echo en falta algunas prácticas específicas para programadores, que deberían estar incluidas. Por ejemplo, TDD e integración continua, porque estás prácticas son fundamentales cuando se realiza un desarrollo de un producto de forma iterativa e incremental, como en Scrum.
En este sentido, XP es mucho más completo porque incluye estas y otras prácticas específicas para nosotros, los programadores.