Deadline Driven Development
Por qué marcarnos fechas límites es una de las mejores herramientas que tenemos a la hora de desarrollar productos de software.
En ingeniería existe un proceso de desarrollo de software llamado Test Driven Development (TDD). Este se basa en que antes de escribir una línea de código, se escribe el test que haría fallar ese código. Esta técnica no es más que una forma que tienen los ingenieros de obligarse a pararse a pensar antes de abordar un problema.
Esta semana comentaba con unos compañeros de ingeniería nuestro roadmap para el siguiente trimestre. Mis compañeros abogaban por estimar todo el trabajo pendiente para poder planificar, mientras mi postura era que empezáramos definiendo una fecha límite y entonces viéramos a qué podríamos llegar dentro de ese deadline.
La deadline, como el test en el caso de TDD, sería nuestro forma de obligarnos a pensar la aproximación más adecuada a un problema dado. Y es que el simple hecho de tener una fecha límite, te cambia la aproximación a una tarea.
Resulta curioso, pero lo he visto decenas de veces. Una épica estimada inicialmente para tres meses, que en el momento le pones una fecha límite por cualquier razón, hace que la estimación inicial se divida entre tres.
Obviamente la tarea no es la misma, ha cambiado durante el proceso. Lo que podías hacer en tres meses no te da tiempo a hacerlo en uno. Pero probablemente lo que hagas en uno sea justo lo que necesitas y no más. La deadline te ha obligado a cambiar la aproximación inicial que tenías. Y de paso, has liberado dos meses de esfuerzo que bien puedes dedicar a otras iniciativas.
En una industria donde caer en la sobreingeniería es uno de nuestros principales riesgos, las deadlines son una de nuestras mejores herramientas para contenerla.
Una deadline también te ayuda a priorizar. Obviamente, todos queremos hacer productos perfectos, llenos de funcionalidades que cubran todos los casos de usos habidos y por haber, pero en el momento defines una fecha límite, el sueño se termina. Probablemente sólo puedas cubrir uno o dos casos de uso, pero los que cubras serán los más importantes. La mera existencia de la deadline te ha ayudado a priorizar lo importante de lo que no lo era.
Las deadlines también son una herramienta que permite iniciar conversaciones difíciles. Si una empresa decide invertir un esfuerzo de un mes en una iniciativa, pero ingeniería la estima en tres, la mera presencia de la deadline propicia que se abra la conversación sobre por qué algo nos lleva tanto tiempo.
Bien es demasiado ambicioso desde producto, bien el código no es lo suficientemente estable. Sea por la razón que sea, tener esa conversación es importante. Una verdadera empresa de producto que quiera sobrevivir hoy en día tiene que ser extremadamente eficiente. Y para hacerlo a veces hay que dotarse de herramientas que permitan abrir este tipo de conversaciones.
Otra ventaja de las deadlines es que nos ayuda a evitar la falacia de la planificación. La ciencia ha demostrado una y otra vez que los humanos somos terribles planificando, pero sin embargo, nos autoengañamos una y otra vez haciendo grandes planes porque eso nos da una falsa sensación de seguridad. Llevo lo bastante en el sector para saber que los planes rara vez salen cómo se plantean. Una fecha límite autoimpuesta es una buena forma de no perder demasiado tiempo buscando algo que en realidad no sirve para mucho una vez echas a andar.
Por si fuera poco la ciencia también ha demostrado que las deadlines aumentan nuestro rendimiento. Todos hemos experimentado ese picorsito cuando se acerca la fecha límite de hacer algo. Los seres humanos somos máquinas perfectas de procrastinar, y nuestro cerebro siempre hará lo posible por hacer el menor esfuerzo posible. Una fecha límite actúa activador de nuestro sentimiento de urgencia obligándonos a actuar.
Las deadlines tienen que ser realistas, eso sí. Nuestra eficiencia aumenta cuando la meta está al alcance de la mano, pero pasado ese límite, nuestra performance baja. Por eso es importante que el scope de lo que se quiere abordar sea variable y se pueda ajustar en base a las conversaciones dentro de la empresa. Lo que mata a los equipos son fechas límite con scopes cerrados.
Ya por último, que es domingo, las deadlines también te ayudan a evitar que se cancele tu proyecto. Aunque no tenga una fecha límite, la realidad es que cualquier iniciativa tiene una fecha de caducidad implícita. Y por lo tanto, cuánto más se alargue en el tiempo, más posibilidades tendrá de ser cancelada.
Y esto último es reflexivo. Porque cuánto más se alarga una iniciativa, más tiempo das a distintos stakeholders a pedir más y más cambios, lo que a su vez termina alargando la misma, lo cual como hemos dicho, aumenta sus posibilidades de que sea cancelada. Es la pescadilla que se muerde la cola.
Es por esto vital definir hitos en el camino que te permitan validar cada poco tiempo tus avances. Cuánto más cortos, mejor.
Utiliza las deadlines a tu favor
A modo de resumen, las deadlines son una de las mejores herramientas que tenemos a la hora de crear productos en un entorno competitivo. Si trabajas en un monopolio o en un ministerio, las deadlines te hacen poca falta.
Si compites en el mercado, tu tiempo de vida es limitado, así que más te vale aprovecharlo bien. Recuerda, la velocidad de iteración es una ventaja competitiva.
Una buena deadline te ayudará a:
Priorizar más efectivamente
Protegerte de la sobreingeniería
Iniciar conversaciones difíciles pero necesarias
No caer en la falacia de la planificación
Aumentar el rendimiento de tu equipo o empresa
Evitar que tu iniciativa se cancele
Un buen ejemplo de esfuerzo guiado por una deadline lo tenéis en esta propia newsletter. En algún momento hace dos años decidí autoimponerme tratar de publicar un artículo sobre producto semanalmente.
El mero hecho de saber que cada domingo temprano tengo que estar enviándolo me resulta incómodo, pero al mismo tiempo si no tuviera esa presión, no hubiera escrito ya más de 80 artículos a estas alturas.
Ese ciclo de presión, esfuerzo y recompensa se retroalimenta y termina siendo terriblemente productivo. Y ese tipo de ciclos cortos, que nos permitan iterar soluciones lo más rápidamente posibles, es el tipo de proceso de desarrollo de software que hace que un producto conquiste un mercado.
Estoy completamente de acuerdo contigo Simón, un proyecto si no lo delimitas puede ocupar tiempo infinito, porque siempre surgirá algo que perfeccionar o cambiar, por eso se hace imprescindible las deadlines. Además, siempre habrá tiempo de mejorar o ampliar en la siguiente iteración si así lo desea tu cliente.
¡Sí a todo!. Obviamente hay que tener cuidado con no usar mal la técnica: "quiero ir a Marte para el próximo jueves" sería imposible con el deadline del próximo jueves o de enero de 2023, pero dejando de lado el mal uso de la técnica, usada de forma racional me parece una aproximación brillante.