Muy buenas a tod@s, después de haber dormido bastantes horas aquí estoy para relatar la gran experiencia vivida ayer, 2 de Octubre, en Madrid, con la gente de @agilismo y Autentia de anfitriones y el gran @ecomba como "guía" de todo el #coderetreat.

Para muestra decir que me iba a poner a escribir el post haciendo TDD xD Y en mi cabeza rondan todavía cosas como "células", "vecindario", que lo contrario de vivo no tiene porque ser muerto,... :D desde luego, más allá de bromas, merece repetir cada momento que pasamos ayer. Para mantener un orden voy a seguir la cronología del día según el horario (realmente no sé si los cumplimos, yo me olvidé totalmente del tiempo) que se puso:

  • 9:00-9:30 Desayuno
Llegué un poco antes de la hora de comienzo y ya rondaban por allí @jmbeas, @ecomba y @alejandropgarci retocando los últimos detalles de la sala. Esa media hora fue para presentaciones, desvirtualizaciones, reencuentros, etc. Como ya dije en una entrevista que me hizo @ecomba (que a saber donde la cuelga xD) somos una familia, siempre nos juntamos los mismos y el ambiente es genial. Prometía ser un gran día. Cafelito, dulce y "al turrón" :D
  • 9:30-10:30 Sesión de trabajo #1 (45 min + 15 min de retrospectiva)
Ya estábamos todos: @dvilchez, @alfredocasado, @albertovilches, @GermanDZ, @Laura_Morillo, @cavalle, @plagelao, @ialcazar, @rlaina, @amaliahern, @jacegu, @edufernandez, @jjballano, @semurat, @jmbeas, @XaV1uzz, @alejandropgarci y @ecomba :) (me faltan algunos en la lista pero no sé si tengo su twitter...)
Enrique se presentó e inició el día explicando cuál iba a ser la manera de trabajar y explicó la kata que íbamos a (intentar) resolver durante el #coderetreat, "El Juego de la Vida" Algo había leído sobre ella pero ni la había practicado nunca ni nada, por tanto, me gustaba mucho más ese reto! :D Empecé la primera sesión con @ialcazar, un gran compañero de pair y tdd, e inventamos algo nuevo, el #tddhablado :D Eso sí, aprendí un montón con solo la primera iteración. Andábamos perdidos entre células, mundo, coordenadas, etc. Menos mal que @ecomba decidió no decir mucho cuando nos veía, seguro que le daban ganas de borrar todo el código... pero eso ya lo haría más tarde xD
Tras cada iteración se hacía retrospectiva, esa iba a ser la tónica del día. Enrique establecía pomodoros de 45 minutos y, cuando su puñetera alarma sonaba, todos a borrar el código y a levantarse. Era un momento difícil para todos, dejar de teclear y borrar el código escrito que, creíamos, valía para algo, ... realmente difícil y creo que ninguno lo llego a superar en todo el día :)
En la primera retrospectiva se expuso como nos sentíamos con esta primera aproximación y nos preparamos para la siguiente. Cambio de parejas y volver a empezar. Para el baile elegí (o me eligió) @semurat ;)
  • 10:30-11:30 Sesión de trabajo #2
Ahora ya conocíamos algo más la kata y nos enfocamos más, compartimos algunas experiencias de la primera iteración y nos pusimos al lío. Yo impuse mi criterio de usar un enumerado definido fuera de la clase y conseguí convencer a Jorge :D ¿Sirvió para algo? Supongo que no, pero que más da, nos lo pasamos genial! Además con ese "peazo de portable" que tiene, daba gusto ver el STS :) Intentamos ambos otra aproximación diferente que en la primera iteración y estuvo bastante bien. Creo que eso fue lo que más me gusto, que cada iteración, entre la pareja, se ocurría una forma nueva de abordar el problema y enfrentarse a él. Imaginad la cantidad de ideas entre 12 o 13 parejas que estábamos a 6 iteraciones... brutal!
Y, de nuevo, acabó el pomodoro, retrospectiva, todos con ganas de codificar a tope y con sonrisas permanentes en la cara :D Para la próxima iteración, @ecomba, muy simpático él, nos "obligó" a desarrollar siguiendo TDD de una forma especial. Debíamos crear el test sabiendo lo que íbamos a probar, luego poner el assert que probaba justamente eso y escribir la lógica, dentro del propio método, que hacía pasarlo. Si, según se escribían métodos, se encontraba lógica común la teníamos que sacar/refactorizar a métodos dentro de la clase de test y, de forma muy justificada, a clases externas. Buff... lo que faltaba!
  • 11:30-12:30 Sesión de trabajo #3
Esta vez me junté con @albertovilches, ese gran técnico de Groovy :D que, muy amablemente, me sugirió que no hiciéramos la kata en Groovy, que llevaba dos seguidas así xD Y yo, sin ningún problema, le dije que en Java sin problemas, tenía cada de pena y todo! Ahora teníamos que empezar a trabajar con el nuevo enfoque comentado por Enrique... pero ¿cómo? Alberto quería dejar de hacer cosas similares a las anteriores iteraciones y yo tenía una aproximación que me había surgido de la última retrospectiva... vaya desastre! :D estábamos totalmente atascados, yo no conseguía desarrollar mi idea ni explicarla para Alberto y, en ese momento, llegó @ecomba y nos dijo: "os voy a ayudar", seleccionó todo el código de test escrito hasta el momento y lo borró! ¿Estamos locos? :) Y nos guió en el primer test, luego nos dejó allí, solos y desvalidos, sin saber como seguir... Intentamos hacer cumplir las reglas de la kata y si, vale, todo muy verde y bonito, pero la lógica de negocio no estaba relacionada, nada podía fallar, etc... todo era un poco raro!
En la retrospectiva nos dimos cuenta que nos pasó a todos lo mismo, el estado general era "confuso"! Pero eso buscaba Enrique y, sobre todo, que nos diéramos cuenta de la importancia de saber lo que íbamos a probar y de los nombres (el "naming").
  • 12:30-14:00 Descanso (comida fría y cafelito)
Ahora tocaba descanso pero antes tuvimos uno de los mejores momentos, una videoconferencia con Corey Haine, el iniciador de esto de los coderetreat, que va de un país a otro, guiando eventos de este tipo, compartiendo conocimiento y adquiriendo nuevos de la gente con la cuál coincide. De aplaudir que estuviera levantado a las 7 de la mañana para dedicarnos unas palabras y alegrarse de que en España hagamos cosas como estas (jodidos locos! :D). Un gran tipo con una gran filosofía. Thanks Corey! ;)
Y, a comer!
  • 14:00-15:00 Sesión de trabajo #4
Siguiente iteración! Quería ponerme con alguien que no fuera a hacerlo en Java, mi intención era .Net o Ruby pero ni una ni la otra, me junté con @cavalle y la hicimos en Groovy y estuvo genial! Fue una kata bastante pensada, íbamos justificando cada paso y poco a poco. Me encantó pasar un rato con Luismi, del que tanto había oído hablar y aún no conocía. Estábamos en pleno apogeo cuando sonó el final del pomodoro... pero... ¿ya? Podría ser que hubiera pasado rápido pero había algo raro. Enrique había puesto "restricciones" extra para esta iteración, como no métodos de más de 4 líneas (creo) y no usar "if".
En la retrospectiva nadie lo decía hasta que se escuchó: "el pomodoro ha sido más corto", claro! Había sido de 20 minutos! La mitad que los anteriores xD La verdad que las restropectivas estaban fenomenal, todos aportábamos algo e íbamos formando nuevas ideas para la siguiente iteración. Sobre todo son de recordar las cosas dichas por @XaV1uzz :)
  • 15:00-16:00 Sesión de trabajo #5
Penúltima iteración del día y allí iba yo con @jmbeas :) La hicimos en Groovy y, siguiendo las pautas como hasta ahora, fuimos paso a paso, con lógica de negocio dentro de cada test y luego refactorizando. Aunque no fue de las veces que más código escribí me dio la sensación que fue la vez que más avancé y más cerca estaba de "la posible solución". Me gustó hacer pair con José. Estuvimos muy enfocados en los nombres y en hacer que los test que parecían no tener nada en común fallaran y nos obligarán a avanzar o refactorizar. Si, aprendí una nueva forma de avanzar con TDD.
En la retrospectiva cada pareja expuso su último trabajo, José me dejó hablar a mi y para que lo haría xD ya se iba notando el cansancio en todos. Se votó en mayoría por una iteración más y, luego, habría una sorpresa, había que sortear una licencia de JetBrains para IntelliJ.
Para la última iteración, no sé quién lo propuso, creo que Xavi, volver a juntarnos con la primera pareja que tuvimos y, a partir de todas las cosas que habíamos ido adquiriendo, afrontáramos la kata. A Enrique le gustó la idea y, además, nos indicó hacerla siguiendo una aproximación diferente, la "temporal" basada en la evolución de las generaciones. Interesante...
  • 16:00-17:00 Sesión de trabajo #6
Allí estábamos de nuevo Israel y yo. Menos mal que él sabía lo que estaba haciendo porque, yo, con eso de "temporal" estaba un poco perdido. Enseguida me metió en el partido y empecé a entender la aproximación. Otra vez la importancia del nombrado y saber que probábamos, pero había menos restricciones que antes y avanzamos bastante. Parecía una mejor forma de abordar la kata, centrándonos en las generaciones.
  • 17:00-18:00 Retrospectiva y discusión
Y hasta aquí las iteraciones :) Había algunos que querían seguir pero la mayoría no podíamos más... que paliza mental! Ahora tocaba sortear la licencia de JetBrains. Para ello @ecomba propuso exponer la solución de la kata StringCalculator (en este enlace está resuelta por Corey). Algunos valientes se presentaron al concurso: @jmbeas, @albertovilches, @alfredocasado y (que al final no lo hizo) @XaV1uzz. Fue algo muy divertido, sobre todo creo que sirvió para algo muy importante, no hay superestrellas. Me explico, era un evento con gente muy buena en la programación, cada uno con su técnica, su entorno o su lenguaje, pero conocidas en este entorno/familia. Poder ver como programan, como se enfrentan al TDD y como se encuentran con los mismos problemas que todos es algo que motiva y normaliza este tipo de actos. Creo que ayuda a que más gente se anima a "mostrarse" codificando en público. Mi punto a favor de resolver katas así, espero poder hacerlo en un futuro encuentro ;)
Al final nos dieron las 8 de la tarde y me tuve que ir pitando para la estación de autobuses, me quedé con ganas de charlas más tiempo con la gente, pero el día fue lo suficientemente completo para irme con una sonrisa y muchas ganas de hacer cosas que me ayuden a mejorar como profesional. Aunque estos actos puedan parecer un juego, que lo son porque nos divertimos, también tienen un fondo que pasa desapercibido, donde adquirimos puntos de vista, técnicas, ideas, etc que surgirán en el día a día, en el trabajo y, seguro, permitirán crear un código más limpio, robusto, mínimo,...
Puede que ahora seamos siempre los mismos, que vayamos pocos (relativamente) y que no tengamos mucho peso/voz en nuestro entorno laboral pero hablando con @rcanalesmora me contó una gran verdad: "estamos haciendo una pirámide". Ahora, nosotros, con estas cosas, estamos aportando palas de arena y piedras a esa construcción que, en algún momento, tendrá la suficiente altura para que se vea de lejos. En este momento que se vea, que levante interés, nuestras parcelas serán las más cercanas a la pirámide, estábamos desde el principio, y se recogerán los frutos de todo esto. ¿Dinero? No, ni mucho menos. Trabajamos por crear y mejorar un sector a medio/largo plazo, trabajamos para generar el sector del desarrollo software que queremos que exista en un futuro.
Gracias Autentia, gracias @agilismo, gracias @ecomba. Gracias a todo! :D