Ejecutar experimentos para mejorar nuestros procesos forma parte de nuestro trabajo diario. Por eso, cuando oigo hablar de algo que podría ayudarnos a mejorar, quiero investigarlo. A principios de 2019, me uní a la convención Domain Driven Design Europe. Durante los descansos, charlé mucho con otros participantes, en su mayoría desarrolladores.
En muchas de estas conversaciones, salió a colación el taller Programación Mob de la convención de un año antes. Los desarrolladores estaban muy, muy entusiasmados con la programación en grupo: varios desarrolladores trabajando en la misma sala en un único PC. Explicaron lo mucho que habían aprendido y crecido como equipo gracias a esas sesiones. Esa fue una señal clara para que yo aprendiera más sobre el tema. Después de eso, decidí que experimentaríamos con ello.
Una parte vital de un experimento es la hipótesis. Sin ella, no se sabe si el experimento ha tenido éxito. Mi teoría era que el mob programming nos ayudaría a compartir conocimientos entre desarrolladores a la vez que construíamos código limpio.
Planifiqué y preparé nuestra primera sesión de programación de la mafia, que no fue tan difícil:
Consigue un ordenador conectado a una pantalla grande
Coloca una mesa delante de la pantalla.
Añade cinco asientos a la mesa.
Coloca algunos aperitivos y provisiones en la mesa.
Consigue un ordenador conectado a una pantalla grande.
Y allí estábamos, cinco desarrolladores en una habitación con un solo ordenador:

¿Qué ocurrió durante nuestra primera sesión de programación de la mafia?
Wesley se sienta cerca del teclado (estamos utilizando su PC) y se le asigna automáticamente el papel de conductor. El conductor es un dispositivo de entrada inteligente: puede escribir pero no puede tomar decisiones. Los demás desarrolladores tienen el papel de navegador. Son ellos los que discuten lo que debe ocurrir y le dicen al conductor lo que debe hacer.
El conductor es un dispositivo de entrada inteligente: puede teclear pero no puede tomar decisiones.
Empezamos a trabajar en una simple historia de calentamiento en la que tenemos que eliminar algunos contenidos obsoletos en el pie de página del sitio.
Los navegadores le dicen a Wesley que inicie Docker. Inmediatamente aparece un mensaje de error. Wesley explica que esto ocurre a veces, pero siempre se soluciona con un par de reintentos. No reintentamos, pero los navegantes nos explican qué ajustes cambiar. A partir de ahora, Docker siempre arranca sin error;
Wesley escribe en una nota adhesiva lo que ha aprendido sobre Docker. Pone esta nota adhesiva en la hoja grande de papel llamada Aprendizajes.
Escribo en una nota adhesiva que el hecho de que Docker no arrancara nos estaba retrasando. Se la paso a la Serpiente de Residuos, una gran hoja de papel con una serpiente dibujada. En esta hoja, se ponen notas adhesivas describiendo todo lo que frena a la mafia a la hora de programar de verdad:

Después de 12 minutos, suena un timbre. Todo el mundo tiene que cambiar a la derecha. El conductor se convierte en navegante, y uno de los navegantes se convierte en conductor. Es un poco complicado, y lleva algún tiempo volver a ponerse en marcha. Pero lo hacemos mucho mejor después de un par de cambios.
Terminamos la historia y empezamos a trabajar en la siguiente: La vista Yii2 provoca comentarios falsos en HTML, lo que provoca la invalidación de HTML. Una historia interesante. Ya fue recogida dos veces por diferentes desarrolladores, pero ambas se atascaron. Todo el mundo se apunta a la historia. Al final, arreglamos el problema de una manera con la que todo el mundo está muy satisfecho.
Después de dos horas, la sesión termina.
¿Qué hemos aprendido en nuestra primera sesión de programación?
Hacemos una reunión retrospectiva para hablar de lo que ha ido bien y de lo que podemos mejorar. Lo más importante es que en una iteración hemos solucionado la historia mejor y más a fondo que si hubiera trabajado en ella una sola persona.
Arreglamos la historia mejor / más a fondo en una iteración que cuando una sola persona hubiera trabajado en ella.
Todo el mundo se siente lleno de energía durante la retrospectiva. A todos nos gustó el experimento. Resulta evidente que la programación en grupo nos ayuda a compartir conocimientos al tiempo que creamos código limpio.
La mayoría de los aprendizajes fueron bastante obvios, como cuando un acceso directo era desconocido para el controlador, o la configuración de herramientas para ayudarte de forma más eficiente. Se hizo evidente lo fácil que es añadir residuos a su propio proceso de desarrollo mediante el uso de soluciones si un sistema se comporta de forma inesperada. Esto confirma la necesidad de adoptar la Kata de Mejora.
Otros aprendizajes fueron más sutiles. Por ejemplo, encontrar formas de dividir un problema difícil en problemas más pequeños. O las sugerencias sobre cómo trabajar realmente Test Driven creando primero una prueba que falla en lugar de simplemente añadir una prueba después.
El experimento ha tenido éxito. La próxima sesión está prevista de inmediato
Una de las cosas más difíciles de hacer bien fue el nivel de comunicación entre los navegantes y el conductor. No hay que explicárselo todo, sobre todo a los desarrolladores más experimentados. Pero tampoco hay que dejar que un desarrollador más joven se sienta arrojado a lo más hondo. Con el tiempo, la multitud aprende a dirigirse a los conductores individuales de la manera correcta.
Programación de turbas a distancia
En los Países Bajos, estamos actualmente en un cierre patronal. Nuestra oficina está cerrada y todo el mundo trabaja a distancia. Esto hace que la programación en grupo descrita anteriormente sea imposible porque no podemos estar en la misma sala.
Sin embargo, seguíamos queriendo hacer sesiones de programación en grupo. Por ensayo y error, se nos ocurrió lo siguiente para una excelente sesión de programación remota:
Todo el mundo tiene una cámara web, y todo el mundo la enciende durante una sesión.
Utilizamos Whereby para alojar nuestras reuniones porque puedes compartir tu pantalla y seguir viendo las imágenes de la cámara de los demás.
El conductor inicia sesión en un ordenador dedicado a través de una conexión de escritorio remoto (creamos una cuenta de usuario mob en la red interna para esto).
Creamos una cuenta de usuario mob separada para Git. Esto hace que sea muy fácil cambiar los roles.
La cuenta de usuario de Git.
¿Cómo puedo experimentar con esto en mi propio entorno de trabajo?
De todos los artículos, blogs y libros electrónicos que he leído sobre programación para mafias, recomiendo encarecidamente la lectura de estos dos:
Después, elige una fecha con tu equipo y pruébalo. ¡Que aproveche!