Tuesday, 30 March 2010

El método Scrum

Scrum es un método Agile. Hay otros, los más conocidos son XP o Pogramación Extrema, y Lean.

Si sabes inglés, este video explica muy bien en 8 minutos en qué consiste: Scrum in under 10minutes (algún día lo subtitularé).

Si no sabes inglés, empezaré por este diagrama que condensa la esencia del método Scrum:

El principal objetivo de Scrum es crear valor al producto por capas. Esto es importante. Al contrario que el modelo de cascada donde se todo se especifica al principio en largos documentos, luego se diseña, se implementa, se prueba y se entrega, en Scrum el producto se crea por etapas o módulos que se van añaden van añadiendo al producto por capas.

El desarrollo del producto se organiza por iteraciones de corta duración (una, dos, cuatro semanas; el dibujo pone 30 días). El producto se desglosa en "historias de usuario" (user stories) que siempre han de añadir valor al producto. Una historia de usuario no es mas que una descripción corta (tres líneas) de una determinada funcionalidad que el cliente quiere añadir a su producto. El conjunto total de historias de usuario es lo que en el dibujo se llama "product backlog".

Al comienzo de cada iteración se seleccionan un conjunto de historias que han de ser desarrolladas, probadas y entregadas al final. Esto es lo que en el dibujo se llama Sprint backlog.

A lo largo de la duración de la iteración se piensa, se diseña, se desarrola, y se prueba el producto. Se sostienen reuniones diarias cortas de unos 15 minutos de duración en la que cada miembro del equipo comunica al resto qué es lo que ha hecho el día anterior, lo que va a hacer hoy y si tiene algún problema. Esta reunión es muy importante ya que permite transmitir al equipo el estado del desarrollo de los módulos de la iteración. Permite pedir ayuda, ayudar a otros e informar al gestor del proyecto de si vamos bien o nos estamos retrasando.

Al final de la iteración se hace una demostración al cliente de las nuevas funcionalidades desarrolladas.

Después de finalizar la iteración es importante también mantener una reunión más técnica (sin el cliente) en la que se hace una retrospectiva de cómo ha ido la iteración: por qué no ha dado tiempo a terminar esta historia? qué nos impide ser más rápidos? qué podemos hacer para serlo?

En mi empresa, las iteraciones son de dos semanas. Los viernes, clientes, gestores de proyecto, desarrolladores y testers mantenemos una reunión con el cliente. Pensamos cada una de las funcionalidades que vamos a desarrollar en la nueva iteración. Definimos lo mejor posible las historias de usuario y adjuntamos diferentes ejemplos de cómo se usaría. Estimamos el esfuerzo de cada una de ellas mediante "el juego del póker" y seleccionamos el número de historias que desarrollarán en esa iteración (sprint backlog) de una forma acorde a nuestra productividad. Luego nos ponemos manos a la mas: desarrollamos las historias de usuario durante esas dos semanas y al final se hace una demo al cliente de las historias terminadas y probadas el Jueves antes de que termine la iteración. Cuando el cliente se marcha, nos encerramos otra media hora para hacer la retrospectiva: pensar qué hemos hecho mal y cómo podemos mejorar o para pensar otras cuestiones técnicas.

Esto es básicamente cómo funciona Scrum. En próximas entregas explicaré más detalles de cada proceso.

Tuesday, 23 March 2010

Qué es Agile?

Agile es cualquier forma de desarrollar software que siga los siguientes objetivos:
  • Tratar a las personas como personas no como procesos.
  • Crear software que funcione, no preocuparse tanto la documentación exhaustiva.
  • Mantener una comunicación fluída con el cliente, no solo plasmar los requisitos en un contrato.
  • Asumir que los requisitos cambian constantemente y hay que ser capaces de realizar cambios, al contrario que tratar de impedirlos o posponerlos para más tarde.
Esta es mi traducción libre e informal del Agile Manifesto que lo podéis leer en inglés.

Para lograr estos objetivos existen una serie de métodos. Los más importantes hoy en día desde mi punto de vista son:
  • Scrum
  • Programación Extrema o Extreme Programming (XP)
  • Lean
Y otras más que no voy a nombrar. Estas son las más famosas. Si queréis ver más, tenéis una lista de métodos Agile en la wikipedia.

Cada una de ellas define unas prácticas para lograr cumplir los objetivos Agile que he descrito anteriormente. Scrum define una forma de gestionar un proyecto mediante historias e iteraciones. La programación extrema utiliza tests unitarios, refactorización, programación por parejas, etc. Y Lean es una método nacido en Toyota que trata de eliminar las cosas inútiles, de potenciar al equipo, reaccionar rápido, limitar el trabajo en progreso y aumentar el flujo de producción, etc.

Esto solo es una pequeña introducción. Intentaré explicar cada cosa en futuras entradas.

Wednesday, 17 March 2010

Presentación del blog

He decidido empezar este blog para contar mis experiencias desarrollando software con metodologías Agile.

Hace ya tres años que me vine a Londres a trabajar como desarrollador software, concretamente, aplicaciones web (Java, Spring y todo eso). En este tiempo he visto cómo mi empresa y muchas otras compañías inglesas, apostaba por implantar metodologías Agile para el desarrollo de software.

Hoy me doy cuenta que la brecha que separa a las empresas inglesas de las españolas (al menos aquellas en las que trabajan amigos mios) es enorme. Allí se sigue apostando por el viejo método tradicional en cascada y aquí cada día están más convencidos que Agile es el siguiente paso para crear software de calidad. Allí se sigue perdiendo el tiempo en documentaciones extensas que cuesta mantener sincronizadas, los proyectos siguen saliendose de tiempo, la calidad del software sigue siendo baja con bastantes errores.

El objetivo de este blog es aportar mi granito de arena y contar cómo hago (y se hacen) las cosas aquí para ver si somos capaces de cambiar y mejorar las cosas allí, en España.