martes, 12 de agosto de 2014

CleanCodeando la Planeación

Yo tengo el superpoder de reconocer a gente chingona a primera vista. Algo así como un Chingoneómetro integrado que hace que mis ojitos parpadeen rápido y comience a babear. No es una escena bonita, pero bueno, así me pasa. La cuestión es que, cuando vi un video del Uncle Bob en YouTube hablando de funciones, descompuse el teclado de la compu por tanta baba. Así que tuve que molestar gente (mi segundo superpoder) para obtener todo lo de CleanCoders.com y por eso este grupo de codeamestadores hablan de SOLID y demás. Si no los han visto, ya se están tardando. En esos videos por fin entendí qué era eso de TDD y cómo se usa. 

Podría pensarse que el concepto es sencillo: probar antes de programar... pero la realidad es que va más allá. Estas son las reglas en español del Tío Bob:


Antes que nada quiero aclarar para aquellos que no me conocen que yo ya no hago código productivo. Entonces, ¿cómo me atrevo a hablar de Clean Code y TDD? HEREJE DEL MAL. Mi pretexto es que me alejé del camino del bien porque me chocaba hacer front ends o debuggear para testear. Así que mejor me hice tester, ya que pensaba que eso sería la salvación de la calidad de software. No me juzgen; era más joven y menos sabia. Después herré aún más mi camino qualitoso al hacerme de procesos... pero ya no quiero acordarme. La cosa es que hoy sé que la calidad está en el código y que un código limpio y hecho con TDD me hace llorar.

Mi primera vez con TDD y Clean Code

Que no haga código productivo no quiere decir que no le entre a las Katas de Codeamesta (que próximamente subiremos) y entendí que sólo viviéndolas se pueden entender estas 3 leyes. Con la Kata de StringCalculator y Bowling, entendí la maravilla de comenzar con los escenarios más sencillos y aguantarse de hacer más código productivo del necesario; con la de Pokar, a limpiar y refactorear para que las reglas de negocio las lea cualquier ser humano.

Algo sucede al hacer estas katas y ver esos videos que los conceptos le alteran uno el ADN y uno comienza a CleanCodear aunque no haya código. Algo así nos pasó al estimar y planear un nuevo desarrollo.

Estimando y Planeando a la Clean Coder

Alberto y yo tuvimos que estimar un desarrollo. En realidad Alberto ya lo había estimado con Armando, pero básicamente la regaron: no usaron casos de uso y la arquitectura son los casos de uso. Entonces cuando quisimos planear en base a un diseño y dar entregables funcionales nos dimos cuenta de que no podíamos desacoplar la planeación de nuestro diseño. No era funcionalmente incremental. 

Así que como dije, volvimos a estimar. Esta vez hice casos de uso y los validé con gente de negocio e incluso algunos escenarios de pruebas de funcionalidades base. Ya habiendo entendido qué se espera de nuestra aplicación, hicimos un diseño con la funcionalidad más básica que se nos ocurrió. Nada de configuraciones ni reportes ni logs ni esas cosas que el usuario pide. Partimos el diseño en tareas y estimamos. Poco a poco fuimos “complicando” la funcionalidad. 

Mientras diseñábamos nos preguntábamos ¿cuál es el siguiente caso de uso más sencillo? ¿Quién debe hacer eso? Nos dimos cuenta que estábamos aplicando una variante de “As the tests get more especific, the code gets more generic” y “Single Responsability”.

Conforme avanzábamos en la planeación, dibujábamos en el pintarrón el pedacito de diseño que hacía la funcionalidad más específica y escribíamos tareas para una funcionalidad más genérica… El resultado, los últimos sprints fueron más rápido de diseñar y planear.

Y ahora, a codificar

El desarrollo comenzó con la estimación aún calientita y muchos unknowns. Incluso, hoy revisamos con arquitectura nuestro hermoso diseño y uno de los Arquitectos dijo, quitándose los lentes y removiendo una lagrimita, “si hubieramos hecho esto hace un año”. En fin. Ahora los programadores tienen que volver a estimar, tomar decisiones sobre la implementación y la organización de su grupo y si todo resulta como dice la teoría, Clean Code nos hará más rápidos… ya se enterarán.

Uncle Bob dice que TDD no es religión, yo la verdad tengo mi cartita de Uncle Bob en la cartera.