14 noviembre 2007

A Sudoku for Project Managers

Gran comentario el realizado por Don Anónimo en el anuncio anterior. Y una buena excusa para profundizar en el submundo que subyace al cálculo del camino crítico y las holguras de un proyecto. Si he pillado bien la tabla que muestra, el cronograma al que se refiere es el de la figura 0 (pinchar sobre las figuras para ampliarlas).


En principio, no existe ninguna razón por la que no debamos fiarnos de los resultados que ofrecen los paquetes de software para el cálculo del camino crítico y las holguras del proyecto. Ni tampoco existe ninguna razón por la que tengamos que hacerlo a mano, ya que nuestra labor no es divertirnos con ello, sino llevar un proyecto. Ahora bien, todo profesional de los proyectos debería haber hecho, al menos, un cálculo a mano en su vida, aunque sólo sea para aprehender los conceptos y mecanismos que hay por detrás, saber sus condiciones de uso y aplicación, y juzgar cuándo y cómo deber ser utilizado. Así que el problema lanzado por nuestro comentarista anónimo es una buena excusa para hacer uno aquí.

Para ello vamos a construir un diagrama de red utilizando el método de diagramación por precedencias (PDM de sus siglas en inglés), en el que los nodos de la red corresponderán a las tareas y sus uniones las interrelaciones lógicas entre ellas. Los nodos de tarea vendrán representados por la caja mostrada en la imagen de la izquierda. Los conceptos mostrados son los estándares del método del camino crítico. Como recordatorio, tengamos presente que la diferencia entre los tiempos de finalización y de inicio, tanto tempranos como tardíos, es igual a la duración de la tarea; y la diferencia entre los tiempos tardíos y tempranos, tanto de inicio como de finalización, es igual a la holgura total. Así pues, el diagrama de red del proyecto correspondiente al cronograma de la figura 0, es el que se muestra en la figura 1.


El siguiente paso consiste en hallar los tiempos de inicio y finalización tempranos, lo que se conoce como el forward-pass. Para ello comenzamos con la primera actividad de la red, a la que asignamos la bandera de salida, que consiste en adjudicarle el instante cero como tiempo de inicio más temprano. A partir de ahí se calcula su tiempo de finalización más temprano como el de inicio más temprano mas la duración de la tarea. Cuando pasamos de una tarea a su sucesora, el tiempo de inicio más temprano de esta última coincidirá con el de finalización más temprano de su predecesora, sumando o restando el decalaje que lleve la relación de precedencia. Veamos algunos ejemplos:

  • La relación lógica entre la t1 y t2 indica que t2 no puede comenzar hasta 5 días antes de que haya finalizado t1. Por tanto, si el tiempo de finalización más temprano de t1 es 15 (ver figura 2), el de inicio más temprano de t2 será 10.

  • La relación lógica entre t2 y t4 indica que t4 no puede comenzar antes de que hayan transcurrido 10 días depuse de haber comenzado t2. Por tanto, si el tiempo de inicio más temprano de t2 es 10, el de inicio más temprano de t4 será 20.

Esto funciona muy bien cuando una tarea sólo tiene una predecesora. Pero, ¿qué ocurre cuando tiene más de una? Obviamente, no podrá comenzar hasta que haya finalizado la última de todas. En la figura 2 vemos el caso en las tareas t6 y t10. En ambos casos, su tiempo de inicio más temprano es el mayor valor de los tiempos de finalización más tempranos correspondientes a sus respectivas predecesoras. El resultado de este paso, el forward-pass –es decir, recorrer la red de izquierda a derecha o hacia delante-, se muestra en la figura 2.


Una vez hallados los tiempos de inicio y finalización más tempranos, estamos en disposición de hallar los tiempos de inicio y finalización más tardíos, lo que se conoce como el backward-pass. Es decir, ahora recorremos la red en sentido inverso, hacia atrás. Y para ello, comenzamos con la última actividad de la red, la que tiene la bandera de meta. Obviamente, el tiempo de finalización más tardío del proyecto debe coincidir con el de inicio más tardío, el proyecto debe tener un plazo único. Por lo tanto, el tiempo de finalización más tardío de t10 será 144. Y de ahí, su tiempo de inicio más tardío será igual al de finalización más tardío menos su duración, igual a 114. Cuando pasamos a sus predecesoras, éstas deberán finalizar como muy tarde cuando su sucesora comience como muy tarde. Es decir, el tiempo de finalización más tardío de t7, t8 y t9 será 114. Nuevamente, como en un caso parecido en el paso anterior, esto funciona bien cuando una tarea sólo tiene una sucesora. Cuando tiene más de una sucesora, como el caso de la tarea t6, el cálculo es algo más, sólo algo, complejo. El resultado para t6 se muestra en la figura 3.


Vemos que t6 tiene como sucesoras a t7, t8 y t9, cuyos tiempos de inicio más tardíos son 89, 99 y 96, respectivamente. El tiempo de finalización más tardío de t6 se ha calculado en 94. ¿Cómo sale este número? Bueno, antes que nada es importante remarcar que, si las relaciones lógicas hubieran sido del tipo más común de fin a comienzo sin decalaje, el resultado hubiera sido el menor de todos –es decir, 89- ya que como muy tarde debe finalizar para cuando, como muy tarde, vaya a comenzar la que antes vaya a comenzar de todas sus sucesoras –esto parece un trabalenguas, pero es lo que hay, mil palabras valen menos que una imagen, y en algunos casos incluso menos que la tinta que se emplea en imprimirlas, pobrecito Wittgenstein. Pero en el caso que nos ocupa, las relaciones lógicas son algo más, un poquito más que algo, complejas. Lo que quiero decir es que el cálculo no es directo como en el caso en que hubieran sido del tipo fin a comienzo sin decalaje. Veamos los cálculos:

  • Relación t7-t6: es una del tipo comienzo a comienzo con un decalaje de 20 días. Eso quiere decir que t6 debe comenzar como muy tarde 20 días antes del comienzo tardío de t7, esto es en el día 76. Como su duración es de 38 días, su tiempo de finalización más tardío es de 114.

  • Relación t8-t6: es una del tipo fin a comienzo con un decalaje de 5 días. Eso quiere decir que t6 debe finalizar como muy tarde 5 días antes del comienzo tardío de t8, esto es el día 94.

  • Relación t9-t6: es una del tipo fin a comienzo con un decalaje de -5 días. Eso quiere decir que t6 debe finalizar como muy tarde 5 días después del comienzo tardío de t9, esto es el día 94.

Así pues, tenemos que los posibles tiempos de finalización más tardíos de t6 son 114, 94 y 94, respectivamente. De todos ellos el que más limita es el de 94. El resultado se muestra en la figura 3. Un cálculo similar se realiza en el caso de t2, que tiene como sucesoras t3 y t4. El resultado se muestra en la figura 4.


Aquí tenemos:

  • Relación t3-t2: es una del tipo fin a comienzo sin decalaje. Eso quiere decir que t2 debe finalizar como muy tarde en el comienzo tardío de t3, esto es el día 30.

  • Relación t4-t2: es una del tipo comienzo a comienzo con un decalaje de 10 días. Eso quiere decir que t2 debe comenzar como muy tarde 10 días antes del comienzo tardío de t4, esto es el día 13. Por tanto su tiempo de finalización más tardío será 33.

Y los posibles tiempos de finalización más tardía de t2 son 30 y 33, respectivamente. Nuevamente nos quedamos con el menor: 30. El resultado, ya completo, de este paso, el backward-pass, –es decir, recorrer la red de derecha a izquierda o hacia atrás-, se muestra en la figura 5.


Una comprobación que podemos hacer de que hay un error, es que el tiempo de inicio más tardío de la primera actividad no coincida con el de inicio más temprano, que deben ser igual a cero. Que coincidan no asegura que no haya algún error, aunque si no coinciden es un indicio claro de que algo está mal.

Ahora, tan sólo nos resta calcular las holguras totales. Recordemos que la holgura total viene dada por la diferencia entre los tiempos tardíos y tempranos, tanto de inicio como de finalización. Así pues, cada tiempo en color rojo de la caja-nodo de tarea menos su respectivo tiempo en color verde, y vecino superior, nos debe dar la holgura -otra forma de testar posibles errores es que ambas restas no coincidan. El resultado se muestra en la figura 6.


Y aquí acaba nuestro Sudoku. Toda esta mascletà fallera que se ha disparado hasta aquí es lo que los paquetes de software hacen en un visto y no visto, tanto para diez tareas como para diez mil. Si a nuestro comentarista anónimo se le estuviera pasando por la cabeza lanzar un Sudoku de estos con diez mil tareas, ni tan siquiera dos órdenes de magnitud menos, con la carne de gallina y los pelos de punta que se me ponen, le rogaría que no lo hiciera, no me gustaría cerrar el blog antes de hora ;-)

Ahora, para finalizar, me gustaría extraer una moraleja de todo esto. Huelga decir que, aunque hacer un cálculo de estos a mano es algo que debería hacerse una vez en la vida, nadie se pone a hacerlo cuando se arrastra por la trinchera bajo la lluvia de cascotes del proyecto. Para eso está el software. Además, a pesar de la multitud de posibilidades que ofrecen los tipos de relaciones lógicas y los decalajes, y que el software lo soporte todo, no hay que complicarse la vida. Cuanto más simple sea la red de actividades, mejor, más intuitiva será y más fácil realizar el seguimiento del proyecto. Cualquier aspecto técnico de estos puede llegar a distraer la atención del objetivo último de un director de proyecto, que es el de alcanzar los objetivos del proyecto que se trae entre manos. Así que ojo con ello. Por otro lado, hay que tener en cuenta la naturaleza determinista del método del camino crítico debido a la unicidad de las estimaciones. Un camino crítico es crítico hasta que deja de ser crítico, y las holguras pueden bailar al ritmo de una tarantella. Los escépticos pueden encontrar más opiniones desmitificadoras aquí, y en sus referencias. Otra cosa es lo que el jefe de proyecto haga en su tiempo libre. Si se ha cansado ya de los Sudokus, las sopas de letras y los crucigramas, puede pasar el rato resolviendo problemas como el que hemos tratado en este anuncio. De hecho ahí va una idea para emprendedores, el FLOATFINDER, que consiste en un puzzle como el de la figura 1 que hay que resolver hasta llegar a la solución de la figura 6.