Muchas cosas han cambiado desde la publicación del libro de Extreme Programming Explained de Ken Beck que estableció las bases de XP. Sucesivas publicaciones han ido actualizando las prácticas de XP. En ese sentido me ha resultado muy interesante el libro de James Shore y Shane Warden, The Art of Agile Development el cual más allá de su nombre es básicamente un libro de XP. Pero así y todo este libro es de 2007, casi 10 años han pasado y la forma en que trabajan los equipos de XP se ha visto modificada principalmente a partir de la incorporación de nuevas prácticas dando origen a lo que llamo Modern Extreme Programming (si, son consciente, el nombre no es bueno).
Más concretamente cuando hablo de Modern XP me refiero a la forma en que trabajan actualmente (hoy, 2016) muchos equipos que utilizan XP. Aquí me parece importante destacar que en general no he visto equipos explícitamente preocupados por aplicar XP (como si los he visto por aplicar Scrum) sino que en general la preocupación pasa por entregar valor y calidad y en ese sentido simplemente utilizan la mayoría de las prácticas de XP por el simple hecho de que les funcionan. Más aún, he visto equipos haciendo XP sin saber que lo están haciendo. En este sentido veo un conjunto de «nuevas» prácticas claramente establecidas y otro conjunto de prácticas «experimentales» menos establecidas, o no probadas o incluso descartadas por algunos equipos.
Prácticas establecidas
Visual Story Mapping (VSM) es un técnica para creación de backlog popularizada por Jeff Patton. VSM es una actividad realizada típicamente al comienzo del proyecto, en etapa de definición/pre-venta y cuyo output es un artefacto concreto: «un mapa». Este mapa permite visualizar fácilmente actores, flujos de negocio y funcionalidades/user stories. Creo que el gran valor de esta actividad radica no solo el mapa resultante sino en las discusión que se disparan durante su realización.
Specification by Example (SBE) también conocida como Behaviour-Driven Development (BDD) es un enfoque colaborativo para la definición de requerimientos usando ejemplos concretos de uso en lugar de especificaciones abstractas/genéricas. Algunas de las herramientas que han ayudado a popularizar esta técnica son Cucumber, JBehave y SpecFlow.
Infrastructure as Code (IAC) describir la infraestructura con código nos permite generar nuevos ambientes on-demand y así acelerar diversas tareas del proceso de desarrollo. Al mismo tiempo es posible aplicar ciertas prácticas comunes del desarrollo como versionado y prueba automatizada. En los últimos años han aparecido herramientas como Puppet, Chef y Ansible que han posibilitado esta práctica y han potenciado su difusión.
Continuous Delivery (CD) es la capacidad de entregar software funcionando en manos del usuario de una forma segura, rápida y sostenible. La entrega frecuente ha estado entre las prácticas fundacionales de agile desde un comienzo pero CD va más allá, llevando al extremo la frecuencia a partir de un foco importante en la automatización. Es común encontrar equipos haciendo CD y realizando varias entregas en un mismo día.
Prácticas experimentales
#NoEstimates es un enfoque de trabajo que propone no realizar estimaciones de user stories lo cual impacta directamente en el Planning game. Si bien hay una iniciativa con popularidad creciente alrededor de #NoEstimates, creo que su uso no está lo suficientemente extendido como para considerarla una práctica del nuevo XP.
Test-Driven Infrastructure surge a partir de la práctica de Infraestructura as Code y pretende llevar la práctica de TDD al mundo de la infraestructura. Personalmente he intentando utilizarla y no me convenció, creo que me trajo más inconvenientes que soluciones. Tampoco conozco en forma directa equipos que la estén utilizando, pero la menciono pues he leído y escuchado al respecto en algunos encuentros de la comunidad.
Continuous Deployment es una práctica es un paso más allá de Continuous Delivery y tiene que ver con ir a producción en forma automática. Típicamente en Continuous Deployment el paso final para ir a producción se dispara en forma manual a partir de una decisión de negocio. Cuando hablamos de continuous deployment la decisión de negocio ya está tomada: cuando algo se termina va directo a producción con lo cual se elimina el trigger manual.
Mob Programming es en cierto modo la idea de Pair-Programming llevada al extremo: todo el código, se escribe todo el tiempo en una única máquina con todo el equipo trabajando junto. El hecho de trabajar todo el equipo en una máquina en ciertos momentos del proyecto es algo que he visto en muchos equipos y yo muchas veces lo hago, sobre todo al comienzo de los proyectos. Pero hacerlo con todo el equipo todo el tiempo es algo que no he visto, aunque los impulsores de este movimiento han reportado interesantes resultados.