El 8 de diciembre se celebraba el Global Day of Coderetreat, un evento a nivel mundial en el que en cada ciudad que se une se organiza un coderetreat. En Zaragoza se organizaba desde Agile Aragón, el principal responsable de ello fue Fernando Pérez. Y, de rebote, al final me tocó a mi ejercer como facilitador.
Para mi era un poco marronazo el hacerlo. Aparte de no haber facilitado nunca antes, tan sólo había asistido a uno hace ya un par de años y a 2 coding dojos. Tampoco soy muy dado a hacer katas sin hacerlo junto a otra persona.
Tuve una semana previa apretadilla, pero saqué tiempo para poder volver a practicar un poco la kata del juego de la vida y empaparme de los recursos para facilitadores para ir un poco más preparado. Yo terminé el día relativamente satisfecho (y agotado), quizás porque al final que los asistentes le saquen el máximo partido al día depende de ellos mismos, de sus iteraciones, sus parejas de baile en cada una de ellas y su actitud. Yo me limité a introducir algunas variaciones y restricciones para ir complicándolo y darles otros puntos de vista para tratar de hacerlo más ameno.
Por lo que sabía, en principio habían algo más de 30 personas apuntadas, de las cuales terminaron asistiendo un total de 25 personas (si no conté mal), lo que no está nada mal para un sábado en mitad de un puente ¿no?. Antes de empezar, acumulamos fuerzas con un desayuno patrocinado por la gente de keensoft mientras llegaban todos los asistentes al BSSC.
Tras ello mostré rápidamente un par de videos sobre el Global Day of Coderetreat, y posteriormente pedí que cada uno se presentara brevemente para explicar a qué se dedicaba y con qué lenguajes solía trabajar, así cada uno pudiera fichar con quien quería "aparearse" durante el día :).
Al final hicimos 6 iteraciones de 45 minutos:
- La primera libre para familiarizarse con el problema, para calentar un poco el cerebro :)
- En la segunda propuse que se tratara de empezar a practicar Test First, o al menos hacer Tests. En la anterior ya mucha gente empezó al menos haciendo tests, por lo que propuse que todas las parejas lo hicieran ya. Y también que se pensara en empezar a solucionar las reglas una a una y no de golpe.
- En la tercera insistí en tratar de hacer TDD, que buscaran el hacer antes el test siguiendo el flow de rojo, verde, refactoring. Y prohibí hacer el tablero/grid en los primeros 20-30 minutos de la iteración.
- Para la cuarta, con la modorra después de comer y viendo que la gente tenía la mecánica de hacer tests antes de la implementación, propuse que se practicara pair programming en ping pong. Eso es que: Foo escribe un test, Bar la implementación, una vez implementado (y refactorizado) Bar escribe el siguente test y Foo la implementación... y así hasta el infinito, o acabar :).
- Para la quinta puse la restricción de que los métodos no debían tener más de 4 líneas de código. Además, justo en mitad de la iteración, hice un pequeño experimento haciendo un cambio de parejas. Alguien de la pareja se quedaba con el código la otra persona tenía que incorporarse a lo que hubiera adelantado otra pareja. Fue curioso ver que durante varios minutos las parejas hablaban para saber qué se había hecho y nadie tiraba una línea de código :P.
- En la sexta y última iteración sólo tenía pensado poner una restricción, que no hubieran flags y así forzar a tener que usar polimorfismo. Al ser la última no quería proponer nada más, que la gente procurara aplicar lo aprendido durante el día pero forzando a darle un enfoque un poco diferente.
Entre medias de las sesiones surgieron temas como los magic numbers, la dificultad de encontrar buenos nombres a métodos o variables, la expresividad del código, las bondades del testing o el pair programming, encapsulación, orientación a objetos...
En cuanto a lenguajes, aunque había predominio de Java y C#, se utilizaron un buen puñado. Si no me dejo ninguno: Python, Groovy, Javascript, Objective-C, C++, PHP y algunos aventureros probaron TypeScript. No fue así, pero esperaba que en algún momento se hubiera animado alguien a alguna iteración con Ruby, o incluso con CoffeeScript :P.
Al final del día hicimos lo que llaman cerrar el círculo, cada persona tenía que hacerse (en alto) tres preguntas y compartirlo con el grupo: ¿qué has aprendido hoy?, ¿que te ha sorprendido hoy?, ¿que vas a hacer diferente a partir de hoy?. Personalmente, como otros también compartieron cerrando el círculo, me quedó la espinita clavada de quienes no veían posible aplicar en sus trabajos diarios las cosas de practicadas durante el día. No sé, no creo que sea fácil desde abajo imponer según que prácticas a una organización de golpe, pero hay pequeñas cosas que pienso que sí se pueden intentar para que las empresas empiecen a ser más receptivas para hacer las cosas de otra forma; pero esto es otro tema :P.
Como curiosidades, tuvimos una partida en el futbolín del BSSC lista desde primera de la mañana y ni nos acordamos de jugar al menos un par de bolas. Además en Zaragoza teníamos un bonus, Francho trajo un pequeño tirador de cerveza que fue la sensación del día, puro Beer Driven Development de la que final del día no quedó ni gota ;).
Para terminar el día, antes de recoger la sala e irnos de cañas, conectamos por hangout con el Coderetreat de Madrid; nos saludamos y estuvimos charlando un poco de como habíamos pasado el día. Fue el momento en el que se hizo patente que la estrella del día fue el tirador de cerveza :D.
En definitiva, creo que fue un buen día, yo terminé agotado del fin de semana y con mono de no poder haberme apareado para hacer la kata :P.