TDD para aumentar la productividad

Uno de los aspectos menos populares de TDD es el de la productividad. La tendencia es pensar que TDD nos hace ir más lentos en el desarrollo ya que nos detenemos a pensar y a escribir ejemplos para ir diseñando el código de producción. Sin embargo, la experiencia nos dice que a medio y largo plazo la inversión en tiempo es de sobra recuparada gracias a un código más fácil de mantener y con un menor número de defectos.
Lo que es menos evidente es que TDD aumenta nuestra productividad al mantenernos concentrados en todo momento en lo que hacemos. Leyendo a David Allen en "Getting things done, the art of stress-free productivity" podemos observar una cantidad enorme de similitudes entre las técnicas de productividad descritas por el autor y TDD. David lleva décadas ayudando a personal de empresas de diverso tipo a trabajar de una manera más productiva y es considerado un experto en la materia.
Basicamente nos habla de que la productividad pasa por tener la cabeza limpia de preocupaciones y tareas pendientes, algo que en TDD cumplimos con nuestra libreta. La libreta nos permite tener una lista de próximas tareas a implementar a la vez que nos permite tener la cabeza vacía y centrada tan sólo en el ejemplo que estamos abordando. Gracias a que los tests nos proporcionan un feedback rápido, el ritmo de ir abordando tareas de la libreta puede llegar a ser muy productivo, siempre que respetemos las reglas de TDD, tales como escribir tests que se ejecuten en milisegundos.

Cuando nos lanzamos a escribir código de producción sin ejemplos (tests) de uso primero, nuestra cabeza está llena de ruido y aumenta la probabilidad de introducir defectos en el código, además de que se nos vaya el santo al cielo.

Una página del libro de David dice:

¿Por qué le damos vueltas a las cosas en la cabeza?

  • Porque no tenemos claro cual es el resultado que queremos obtener
  • Porque no hemos decidido cual es la siguiente acción que deberíamos afrontar
  • No hemos escrito en ningún sitio el resultado que queremos ni las próximas acciones

Está claro que todo eso nos lo quitamos de encima practicando TDD. Según el autor la cantidad de cosas que tenemos en la cabeza es inversamente proporcional a nuestra productividad. Es decir, cuanto más ruido en la cabeza menos producimos. De hecho, la principal causa de atasco en los proyectos no es la falta de tiempo, sino la ausencia de definición de cosas por hacer o tareas pendientes. "No hay razón para tener un pensamiento dos veces, salvo que te guste ese pensamiento." Extrapolando: ¿Por qué seguir preocupados por aquel caso en que la función lanza aquella excepción?

La sensación de que estamos siendo productivos nos lleva a la sensación de que estamos avanzando en los proyectos que a su vez nos produce la satisfacción del trabajo bien hecho. Esta filosofía de la mente vacía y clara no solo aparece en el libro de David Allen sino que podemos leer el mismo mensaje en otras corrientes como las artes marciales, etc...

Ante la pregunta clásica de ... "¿qué pasa si haciendo TDD se te olvida un ejemplo y se produce un bug?" mi respuesta siempre es... "¿acaso la probabilidad de que eso pase, disminuye cuando NO haces TDD?".

Cuando compagino TDD con la técnica del pomodoro soy todavia más productivo. A día de hoy recomiendo muchísimo la técnica del pomodoro 🙂

Enjoyed reading this post?
Subscribe to the RSS feed and have all new posts delivered straight to you.
  • Jose

    Cuando leí “Libro de David”… pensé en algo bíblico ❗ 😀 😀
    Menos mal que no era así. Buen artículo.

  • http://eclijava.blogspot.com Grego

    Gracias por el artículo Carlos, está genial y siempre viene bien tener recursos para cuando toca hacer de “vendedor” 😉
    Un abrazo!

  • http://agilizar.es juan

    Carlos, ¡qué buena anotación! Muy bien argumentada y algo en lo que nunca me había parado a pensar.

    Sobre lo que dices en: “¿qué pasa si haciendo TDD se te olvida un ejemplo y se produce un bug?” mi respuesta siempre es… ¿acaso la probabilidad de que eso pase, disminuye cuando NO haces TDD?”

    En mi opinión, no sólo es que no disminuye, sino que puede aumentar puesto que, por lo general, no se presta tanta atención a las pruebas.

    Saludos,

    Juan

  • http://farmerdev.com Israel

    Buena visión Carlos,personalmente siempre me cuesta mucho explicar este tema entre clientes.Siempre surge la misma pregunta:como puede TDD aumentar la productividad si estoy haciendo (programando) dos veces lo mismo?
    Respuesta:con TDD piensas,diseñas,implementas y mejoras el código…donde está la repetición?

    Nos falta mucho evangelismo para hacer ver estas cosas.

    Enhorabuena por el artículo

  • http://carlosble.com Carlos Ble

    Me alegro que os guste el artículo. Os recomiendo el libro de David Allen que por cierto, se lo ví a Joserra en su mesa y en español! Así que no hace falta leerlo en inglés aunque es un inglés bastante culto del que se aprende leyendo. Es agradable.

    Como bien dices Juan, al no hacer TDD el riesgo de que se te olviden cosas es mayor, no menor, pero es una conclusión que quería dejar para el lector. Es algo bastante evidente para la gente con experiencia 🙂

    Gracias por el feedback

  • Wilson

    Bueno la verdad es que hacer TDD es como sacar muchas cosas productivas de muchas filosfias, pensamientos y trasladarlos a TDD… me gusta.. pero la barrera de todo esto, es tener experiencia, y no es facil para un novato como yo, aplicar TDD sabiendo solo teoria es como patear oxigeno… pero bueno voy a ir aprendiendo poco a poco.

  • http://carlosble.com Carlos Ble

    Hola Wilson. Piano piano se llega a lontano. Algo asi dicen, no?
    Si estas en España ya sabes tambien que tenemos cursos en varias ciudades, no? Tambien tienes el libro en dirigidoPorTests.com.
    En fin, ya va habiendo recursos, ahora es ponerse a practicar.

    Animo

  • http://www.kwzz.info/story.php?title=gutter-cleaning-sydney sydney gutter cleaning

    Reliable information you. Many thanks for sharing.