Nos lanzamos a programar con el objetivo incorrecto: terminar. El software nunca se termina, así que partir con el objetivo de terminar es partir con el barco hacia el arrecife. Lo vas a hundir. El software evoluciona o degenera, pero nunca se termina.
El verdadero objetivo es hacerlo lo mejor posible con los recursos que se tienen. Esto lo estoy experimentando de primera mano desde hace tiempo con mis propios proyectos. Es una visión basada en la experiencia.
Cuando hemos pensado que teniamos que terminar un hito, pocas veces hemos conseguido implementar lo que teníamos en mente en el tiempo y forma imaginados. Sin embargo, el 100% de las veces que hemos perseguido terminar, hemos introducido bugs y problemas de regresión.
Por otra parte, cuando hemos trabajado en proyectos colaterales con el fin de construir una buena herramienta en lugar de “terminar algo”, hemos alcanzado una calidad que sobrepasa lo que podíamos imaginar. Calidad significa, conseguir un producto que nos aporta valor en corto plazo de tiempo y que nos permite seguirlo evolucionando con poco esfuerzo para seguir ampliando su valía. Los dos frameworks open source que he desarrollado en mi vida confirman esta idea. La clave ha sido abordar pequeñas funcionalidades de necesidad prioritaria, pensando siempre en cómo se utilizarían y no en cuándo estaría terminado.
Cuando nos sentamos a programar no se debe tener la mente puesta en sacar la próxima release. La mente debe estar concentrada en resolver lo mejor posible el próximo criterio de aceptación o el próximo test. El único momento en que se puede hacer énfasis en “terminar” es cuando un test unitario está rojo y hay que conseguir el verde.
No se puede desarrollar con prisa porque se consigue justo lo contrario de lo que se quiere. Cuando cambiamos prisa por concentración se alcanza un beneficio espectacular. Como dicen en el libro Rework, la palabra ASAP (As soon as possible) es un veneno.
En muchos proyectos seguiremos viéndonos obligados a dar estimaciones muy abstractas a medio y largo plazo pero todo el mundo sabe que las estimaciones de este tiempo son casi como tirar los dados. Si te ves obligado a estimar lo inestimable, al menos no te creas tu mismo que el objetivo es cumplir con esa estimación. El objetivo es entregar la herramienta más útil al cliente y para ello hay que priorizar adecuadamente, meter la tijera y trabajar sin el objetivo de llegar a esa supuesta estimación.