Llevo ya bastantes meses utilizando TDD. La verdad es que mi experiencia con el TDD aunque no siempre ha sido completa (en algunos proyectos, especialmente los antiguos que me tocó hacer el unittesting a posteriori, ha sido altamente positiva. Hay ya muchos artículos sobre las bondades del unittesting y no quiero que este sea uno más.

Lo que me gustaría comentar aquí es algo más genérico y que en ocasiones no hacemos demasiado.

El TDD está muy bien, y a bote pronto se pueden decir muchos motivos de por qué. La norma general al no haber usado nunca el Desarrollo Dirigido a Tests es escepticismo y pensar que se pierde más tiempo del que se gana. No es hasta cuando te decides y lo pruebas en un proyecto real en serio, hasta que te das cuenta de que funciona. No importa lo mucho que te digan que eso es así. Hay que probarlo.

Si modificas tu framework de trabajo, empiezas a utilizar alguna librería o tecnología nueva, si te funciona es fácil que empieces a olvidar la forma de trabajar de antes, las APIs de antes, las tecnologías anteriores. Evolucionar está bien, pero olvidar no tanto.

He aprovechado parte de esta semana en utilizar la metodología de trabajo que utilizaba antes del TDD. En este caso sabía lo que podía esperar del experimento: diseñaría la arquitectura antes de montarla, y luego me pondría a picar código como un descosido. Al principio bien, pero luego me encontraría con cosas difíciles de probar manualmente o con las que perdía mucho tiempo, bugs y problemas. Los iría corrigiendo, me daría cuenta de que había cosas que no funcionaban exáctamente igual como las había pensado y habría escrito código que me tocaría tirar a la basura. Además de que cada cambio que hiciese sometería a gran parte del sistema a tests manuales para evitar que petase el asunto.

El horror. Tenía el 90% de la funcionalidad al 2º día. Y he estado el resto de días corrigiendo errores, viendo que había cosas que no había planteado bien, etc. etc.
Acabé muy agobiado y estresado y no conseguí terminarlo.

Ayer me puse ya a montar tests. Vi que lo había montado de una forma que me permitía hacer los tests con mayor facilidad que antes de empezar a hacer TDD, pero que aun así había cosas con las que no podía hacer TDD directamente. Eran difíciles de testear y por lo tanto difíciles de mantener y de seguir. Tardé varias horas en montar los tests, con los tests montados, probar la funcionalidad era cuestión de pulsar un botón. Si rompía algo me enteraba al momento. Hice el 10% infernal que no había podido hacer en varios días en un par de horas, entretenido y sin agobio alguno.

A mí esta experiencia me ha servido para valorar aún más la metodología TDD. Me ha servido para ver que tras haber usado TDD el código que escribo, sin ser perfecto, ha aumentado en calidad y en capacidad de mantenimiento.

En el caso del TDD no he encontrado nada que me hiciese volver para atrás parte de mi forma de pensar. Pero estoy seguro que con algunas tecnologías después de haberlas estado usando un tiempo y viciado con su forma de funcionar, podría replantearme ciertas cosas al hacer una retrospectiva tecnológica.

“Echa un breve vistazo hacia atrás antes de pensar cómo seguir hacia delante.”

Me gustaría también comentar otra cosa. Me regalaron para reyes los libros “El libro negro del emprendedor” y “Vivir sin jefe”. Son dos libros que recomiendo enérgicamente a cualquiera; independientemente de que sean emprendedores o de que no. Habrán también ya artículos sobre estos dos libros y otros similares, así que no voy a hablar sobre ellos demasiado.

Simplemente quería dejar por escrito mi intención de hacer una segunda lectura de estos libros, extrayendo las ideas que considero claves. Especialmente las áreas donde tengo que mejorar.

Seguridad interna, autoestima, integridad, constancia y tranquilidad, antifrustración ante las dependencias ajenas, barbecho, la clave está en los detalles, los errores y los imprevistos no son malos sino sabias lecciones, levantarse las veces que haga falta, control de gestión de recursos, adaptación, renovación e integración contínua y perfecta ante cualquier molde y situación (be water my friend), equilibrio entre desarrollo y beneficio, excelencia técnica y profesional, puntualidad, meta-reflexión periódica, experiencias nuevas y estimulantes para el desarrollo personal y la eliminación de los prejuicios.

Ayer también vi “La Red Social”. Como frikazo me gustó bastante, pero aún sin ello considero que es una muy buena película que vale la pena ver.