Lección 21 — Método de la cadena crítica

Estimaciones agresivas y seguras, colchón del proyecto y de alimentación, cadena crítica con recursos, gestión de los colchones, varios proyectos con un recurso tambor y comportamientos que consumen los márgenes

Qué se aprende

A programar un proyecto con el método de la cadena crítica (CCPM, Critical Chain Project Management, propuesto por Goldratt en 1997): quitar el margen de seguridad oculto en cada estimación, concentrarlo en colchones donde protege la fecha de entrega, tener en cuenta los recursos compartidos al buscar la secuencia que manda, y seguir el proyecto por el consumo de los colchones. La Guía del PMBOK lo presenta como un método que coloca colchones en las rutas del cronograma para tener en cuenta los recursos limitados y la incertidumbre; el colchón sustituye a los márgenes de las tareas, no se suma a ellos.

Conceptos

Por qué los proyectos se retrasan aunque las estimaciones sean prudentes. Quien estima una duración suele dar una estimación segura (la que cumpliría unas nueve de cada diez veces, el percentil 90), no la mediana. Cada actividad lleva así un margen oculto, que se pierde por:

  • el síndrome del estudiante: con holgura, se empieza en el último momento y el margen se consume antes de empezar;
  • la ley de Parkinson: el trabajo se expande hasta ocupar el tiempo disponible; quien termina antes no lo comunica, de modo que los adelantos no se transmiten y los retrasos sí;
  • la multitarea: repartir a una persona entre varias tareas retrasa todas (cada una termina en su último turno) y, si cambiar de tarea cuesta, reduce lo que produce;
  • el sesgo de convergencia: en los nudos donde confluyen caminos manda el que llega más tarde.

Estimaciones agresivas. Para cada actividad se toma una estimación agresiva pero alcanzable, del orden de la mediana (P50). El margen retirado es segura − agresiva. Como es la mediana, se espera que la mitad de las actividades la superen: nunca se penaliza a quien no la cumple.

Cadena crítica. La secuencia más larga de actividades dependientes, contando las relaciones lógicas y las dependencias de recursos (dos actividades que usan el mismo recurso no pueden hacerse a la vez), con las estimaciones agresivas. Sin recursos compartidos es la ruta crítica; con ellos puede no coincidir.

Resolver los conflictos de recursos. En esta colección cada recurso es una unidad (un equipo, una persona). Se programa día a día: cuando varias actividades del mismo equipo pueden empezar, tiene prioridad la de menor inicio más tardío del cronograma sin recursos; a igualdad, la de menor duración y, después, el orden alfabético. El orden en que cada equipo atiende a sus actividades se añade a la red como enlaces de recurso; la red resultante, nivelada, garantiza que cualquier programación que respete sus prelaciones respeta los equipos, y su ruta crítica es la cadena crítica.

Colchón del proyecto (CP). Parte del margen retirado de la cadena se devuelve, agregado, al final. Dos reglas, con redondeo al día superior:

  • cortar y pegar: la mitad de la suma de los márgenes, \(CP = \tfrac12\sum m_i\);
  • raíz de la suma de cuadrados: \(CP = \sqrt{\sum m_i^2}\). Si las duraciones son independientes y el margen es \(1{,}2816\,\sigma_i\) (normal, P90 − P50), este colchón es exactamente \(1{,}2816\,\sigma\) de la cadena: da un 90 % para la cadena entera.

Para \(n\) actividades con el mismo margen \(m\), cortar y pegar vale \(nm/2\) y la raíz \(\sqrt n\,m\): son iguales con \(n = 4\); con más actividades cortar y pegar sobreprotege, con menos protege por debajo del 90 %. La fecha comprometida es la duración de la cadena más el colchón del proyecto.

Colchones de alimentación (CA). Donde un camino que no es de la cadena desemboca en ella (o en el final del proyecto) se coloca un colchón que protege a la cadena de sus retrasos: es la respuesta al sesgo de convergencia. Se dimensiona con los márgenes de la cadena de alimentación más larga que llega a ese punto. Las actividades de alimentación se programan lo más tarde posible, con su colchón por delante de la cadena, para no comprometer recursos ni dinero antes de tiempo. La holgura disponible es el inicio de la actividad de la cadena menos el fin más temprano de la de alimentación; si el colchón no cabe, en esta colección se reduce a esa holgura (la cadena crítica no se retrasa) y la cadena de alimentación empieza en su inicio más temprano; la alternativa, mantenerlo y retrasar la cadena, alarga el compromiso.

Colchones de recursos. Antes de cada actividad de la cadena que usa un recurso que no usaba su predecesora en la cadena se avisa al recurso para que esté preparado en cuanto reciba el testigo. No es tiempo en el cronograma.

Ejecución: el corredor de relevos. Las actividades de la cadena no tienen fecha fija de inicio: cada una empieza en cuanto termina su predecesora; no hay multitarea en la cadena; a los responsables se les pide la duración restante, no si cumplen su fecha de fin.

Gestión de los colchones. En cada informe:

  • fin previsto de la cadena = fecha del informe + duración restante de la actividad en curso + duraciones agresivas de las pendientes (si una cadena de alimentación se retrasa más que su colchón, también empuja a la cadena);
  • colchón consumido = fin previsto − duración de la cadena, en días y en % del colchón del proyecto;
  • cadena completada = (duración de la cadena − duración restante de la cadena) / duración de la cadena: cada actividad terminada cuenta por su duración agresiva y la que está en curso por su duración agresiva menos lo que le queda (cero si le queda más);
  • BPI (índice de protección del colchón) = % de colchón restante / % de cadena restante: mayor que 1, queda proporcionalmente más colchón que trabajo;
  • gráfico de fiebre: consumo frente a avance, en tres zonas. En esta colección la frontera verde–amarilla va del 10 % de consumo (avance 0) al 70 % (avance 100 %), \(10 + 0{,}6\,x\), y la amarilla–roja del 30 % al 90 %, \(30 + 0{,}6\,x\). Verde: no se hace nada; amarilla: se prepara un plan de recuperación; roja: se ejecuta.

Consumo de los colchones de alimentación y prioridades. En el plan, un colchón de alimentación empieza cuando debería terminar su cadena de alimentación; todo lo que esa cadena termine más tarde lo consume. Si lo consume entero, el exceso retrasa a la actividad de la cadena crítica en la que desemboca y pasa a consumir colchón del proyecto. Para decidir a qué actividad se dedican los recursos se mira el colchón que protege a cada una (el del proyecto, para las de la cadena; el de alimentación al que llegan, para las demás): tiene prioridad la de colchón más consumido en porcentaje. Las holguras del calendario no sirven para esto: la alimentación está programada lo más tarde posible y su margen es su colchón.

Tendencia. La velocidad de consumo entre dos informes es \(\Delta(\%\ \text{colchón consumido})/\Delta(\%\ \text{cadena completada})\). Las fronteras de las zonas suben 0,6: con una velocidad mayor el punto se acerca a la zona superior aunque no cambie de zona; con una mayor que 1, el colchón se consume más deprisa de lo que avanza la cadena. Si se mantiene la velocidad \(v\) desde un informe \((x, y)\), al terminar la cadena se habrá consumido \(y + v\,(100 - x)\) % del colchón, y la tendencia entra en la zona roja donde \(y + v\,(x' - x) = 30 + 0{,}6\,x'\). El BPI, \((100 - y)/(100 - x)\), es precisamente la velocidad media que el colchón puede soportar hasta el final: si la real es mayor, el colchón se agota antes de terminar la cadena.

BPI frente al SPI del valor ganado. El SPI (\(EV/PV\)) suma en dinero todas las actividades, críticas o no: el trabajo adelantado fuera de la cadena compensa el retraso de la cadena, y un retraso de la alimentación que cabe en su colchón parece un problema. Además depende de la línea base (con la alimentación programada lo más tarde posible, empezarla antes eleva el EV sin acercar la entrega) y tiende a 1 al final aunque se termine tarde. El BPI sólo mira lo que fija la entrega. La Guía del PMBOK presenta el BPI como una señal pensada para proteger la fecha de entrega y para ordenar el trabajo diario, a diferencia del SPI; el valor ganado sigue sirviendo para controlar el coste.

Varios proyectos y un recurso tambor. Cuando varios proyectos comparten un recurso escaso (el tambor: el que limita cuántos proyectos puede terminar la organización), lanzarlos todos a la vez sólo crea colas y multitarea en el tambor, que retrasa a casi todos. Se escalonan: las tareas del tambor se programan en el orden de prioridad, sin interrupción, con un colchón de capacidad tras cada una (en esta colección, el 25 % de su duración, redondeado al día superior), y cada proyecto se lanza hacia atrás desde su turno, de modo que su parte anterior al tambor termine un colchón del tambor antes de que le toque. Así hay menos proyectos abiertos a la vez, cada uno dura menos desde que se lanza y su fecha comprometida no depende de cómo se reparta el tambor; el precio es la reserva de capacidad. Un proyecto nuevo se lanza para el primer turno libre del tambor: lanzarlo antes sólo lo tendría abierto esperando.

Simulación. Para comprobar si el colchón basta se simulan ejecuciones con duraciones lognormales de mediana la estimación agresiva y percentil 90 la segura (\(a\,e^{\sigma Z}\), \(\sigma = \ln(s/a)/1{,}2816\)). Por relevos, la cadena aislada cumple su duración algo más de la mitad de las veces y el proyecto completo, menos (sesgo de convergencia). En el régimen tradicional, con la ley de Parkinson y fechas fijas, ninguna actividad termina antes de su estimación segura: la probabilidad de cumplir no supera \(0{,}9^k\) para una ruta crítica de \(k\) actividades.

Ejemplo guía

El proyecto común de las lecciones, con estimaciones agresivas (las duraciones de siempre) y seguras, en días:

A B C D E F G
Predecesoras — — A A, B B C, D E
Agresiva (P50) 3 2 4 1 2 3 2
Segura (P90) 4 3 6 2 3 4 3
Margen 1 1 2 1 1 1 1

Sin recursos compartidos. Con las estimaciones seguras el proyecto dura 4 + 6 + 4 = 14 días (A–C–F). Con las agresivas, la cadena crítica es A–C–F, de 10 días, y su margen suma 1 + 2 + 1 = 4. Colchón del proyecto: cortar y pegar, 0,5 · 4 = 2 días; raíz, \(\sqrt{1 + 4 + 1} = 2{,}45 \to 3\). Con cortar y pegar se compromete el día 12, dos antes que el cronograma tradicional.

Colchones de alimentación (cortar y pegar): en F desemboca D, cuya cadena de alimentación más larga es B–D (márgenes 1 + 1, colchón 1; holgura disponible: inicio de F, 7, menos el fin más temprano de D, 4, es decir, 3 días: cabe); al final del proyecto llega G, con la cadena B–E–G (márgenes 1 + 1 + 1, colchón 1,5 → 2; holgura 10 − 6 = 4). Programando hacia atrás: G termina en 10 − 2 = 8 y empieza en 6; E termina en 6 y empieza en 4; D termina en 7 − 1 = 6 y empieza en 5; B termina en mín(5, 4) = 4 y empieza en 2.

Plan de cadena crítica sin recursos compartidos: cadena A–C–F (rojo), alimentación lo más tarde posible (verde), colchones de alimentación CA1 y CA2 y colchón del proyecto CP (naranja)

Con un equipo compartido. Si C y D los hace el mismo equipo X, en el cronograma sin recursos se solapan en el día 4 (C ocupa [3, 7) y D [3, 4)). Con la regla de prioridad, C (inicio más tardío 3) va antes que D (6): D espera a que C termine y se añade el enlace de recurso C → D. La red nivelada dura 3 + 4 + 1 + 3 = 11 días por A–C–D–F: esa es la cadena crítica, distinta de la ruta crítica A–C–F, y pasa por un enlace de recurso. Colchón del proyecto: 0,5 · (1 + 2 + 1 + 1) = 2,5 → 3 días; compromiso, el día 14 (el cronograma tradicional con la misma secuencia del equipo dura 4 + 6 + 2 + 4 = 16). Colchón de recursos: avisar al equipo X antes de que termine A.

Plan de cadena crítica con el equipo X compartido por C y D (enlace de recurso C → D discontinuo)

Seguimiento. Con el plan sin recursos (cadena de 10 días, CP de 2), un informe del día 5 dice que A terminó el día 3 y B el día 4, que a C le quedan 3 días y a E, 1 (D aún no ha empezado): fin previsto 5 + 3 + 3 = 11, colchón consumido 1 día (50 %); cadena completada (10 − 6)/10 = 40 %; BPI = 50/60 = 0,83; límites 10 + 0,6 · 40 = 34 % y 30 + 0,6 · 40 = 54 %: zona amarilla, hay que preparar un plan de recuperación.

Gráfico de fiebre con el informe del día 5

El mismo informe con valor ganado. Si el presupuesto de cada actividad es proporcional a su duración (mil euros por día) y la línea base es el plan de cadena crítica, el día 5 estaba previsto haber hecho A (3), B (2), la mitad de C (2 de 4) y la mitad de E (1 de 2): PV = 8. Se ha hecho A (3), B (2), C al 2/(2 + 3) = 40 % (1,6) y E al 1/(1 + 1) = 50 % (1): EV = 7,6 y SPI = 0,95, un «5 % por detrás» que parece leve. El retraso de C, que está en la cadena, se diluye entre todas las actividades; el colchón, en cambio, ya está consumido en un 50 % con el 40 % de la cadena completada.

Con pmULE

plan = proyecto.plan_cadena_critica(datos, agresiva='agresiva', segura='segura',
                                    recurso='recurso',          # equipo de cada actividad ('---' si ninguno)
                                    metodo='cortar_pegar')      # o 'raiz'
plan.cadena, plan.duracion_cadena, plan.colchon_proyecto, plan.compromiso
plan.enlaces_recurso        # enlaces que la nivelación añade a la red
plan.enlaces_cadena         # de, a, motivo (precedencia | recurso)
plan.alimentacion           # cada colchón de alimentación: cadena, requerido, disponible, adoptado
plan.colchones_recursos     # avisos
plan.tabla()                # inicio y fin de cada actividad en el plan
plan.red_nivelada()         # cuadro de prelaciones con los enlaces de recurso
pinta_tikz(plan.gantt_tikz())
inf = plan.seguimiento(dia, terminadas={'A': 3}, en_curso={'C': 3})   # fin previsto, consumo, avance, BPI, zona
pinta_tikz(grafico_fiebre_tikz([inf1, inf2, inf3]))
duraciones = plan.simular(20000, semilla=1, regimen='relevos')        # o 'tradicional'

plan_cadena_critica no modifica el proyecto; secuencia_recursos={'X': ['D', 'C']} impone a mano el orden de un equipo.

Qué practica cada variante

multitarea: fines de varias tareas con y sin multitarea, pérdida por cambio y orden de menor tiempo medio. colchon-proyecto: cronograma tradicional, cadena con estimaciones agresivas, colchón por los dos métodos y fecha comprometida. dimensionado-colchon: probabilidad que da cada método con duraciones normales y cómo crecen con el número de actividades. colchones-alimentacion: cadenas de alimentación, holgura disponible, colchón que no cabe y programación lo más tarde posible. cadena-con-recursos: solapes, regla de prioridad, enlaces de recurso, red nivelada, cadena distinta de la ruta crítica y colchones de recursos. plan-completo: todo el plan con equipos y comparación con el cronograma tradicional. seguimiento-fiebre: tres informes de avance, BPI, zonas y gráfico de fiebre. monte-carlo-colchon: probabilidad de cada fecha, colchón para el 90 y el 95 % y sesgo de convergencia. parkinson-relevos: régimen tradicional con la ley de Parkinson frente a relevos y la cota \(0{,}9^k\). multiproyecto-tambor: varios proyectos con un recurso tambor lanzados a la vez (con y sin multitarea) o escalonados con colchón de capacidad y del tambor, y lanzamiento de un proyecto nuevo. consumo-alimentacion: previsión desde un informe, consumo de cada colchón de alimentación, colchón desbordado que pasa a la cadena, parte del consumo del colchón del proyecto que viene de la alimentación y prioridad por el estado de los colchones. tendencia-fiebre: cuatro informes, velocidad de consumo, previsión con la tendencia, entrada en la zona roja y el BPI como velocidad sostenible. bpi-frente-a-spi: el mismo informe con valor ganado (PV, EV, SPI global, de la cadena y de la alimentación) y con el colchón (BPI y zona), y por qué discrepan.

Cada cuaderno termina con una autoevaluación de respuesta múltiple calculada con sus propios datos (los distractores son errores típicos: sumar todo el margen, contar los días trabajados en lugar de los que quedan, confundir el BPI con la velocidad de consumo…). La misma celda la exporta en formato GIFT a ~/temp/cuestionario_cadena_critica.gift para importarla en Moodle.