Cum funcționează planificarea CPM
Forward pass, backward pass, float și drumul critic - cum calculează CPM datele și flexibilitatea sarcinilor din proiect.
Când un proiect are zeci sau sute de sarcini, întrebarea „pe ce ne concentrăm?" devine critică. Unele sarcini pot fi amânate câteva zile fără consecințe. Altele, dacă întârzie cu o singură zi, împing întregul proiect peste termen. Diferența dintre cele două categorii nu este intuitivă - ea se calculează.
Critical Path Method (CPM) este tehnica de planificare care răspunde exact la această întrebare. Dezvoltată în anii 1950 pentru proiectele de construcții și apărare, CPM a devenit standardul de referință în managementul proiectelor (inclusiv în PMBOK, ghidul editat de PMI). Proiect.ro implementează CPM complet, cu calcul automat al datelor, flexibilității și drumului critic.
Acest articol explică logica din spatele planificării CPM: ce calculează, de ce funcționează și ce informații practice îți oferă. Nu vei vedea pași de configurare (pentru asta există ghidul de dependențe), ci vei înțelege mecanismul care stă la baza planificării de proiect.
Ideea de bază: dependențele determină planificarea
Într-un proiect real, sarcinile nu sunt independente. Testarea nu poate începe înainte de dezvoltare. Dezvoltarea nu poate începe înainte de specificații. Formarea echipei nu poate începe înainte de aprobarea bugetului. Aceste relații de ordine se numesc dependențe.
CPM pornește de la o premisă simplă: dacă știi cât durează fiecare sarcină și care sunt dependențele dintre ele, poți calcula exact când poate începe și când poate termina fiecare sarcină. Nu aproximativ, nu „pe undeva" - ci matematic, pe baza structurii proiectului.
Proiect.ro recunoaște patru tipuri de dependențe între sarcini:
| Tip | Semnificație | Exemplu |
|---|---|---|
| FS | Finish-to-Start: B nu poate începe până nu se termină A | Testarea nu poate începe până nu se termină dezvoltarea |
| SS | Start-to-Start: B nu poate începe până nu începe A | Documentarea poate începe odată cu dezvoltarea |
| FF | Finish-to-Finish: B nu se poate termina până nu se termină A | Revizuirea codului se termină odată cu dezvoltarea |
| SF | Start-to-Finish: B nu se poate termina până nu începe A | Suportul pe vechiul sistem se termină când începe cel nou |
Cel mai frecvent tip este FS (Finish-to-Start) - sarcina următoare începe după ce se termină cea anterioară. Dar celelalte trei tipuri sunt esențiale pentru a modela corect situațiile în care sarcinile se suprapun parțial sau au relații mai complexe. Articolul E10 explorează aceste tipuri de dependențe în profunzime.
Forward pass: cel mai devreme posibil
Primul pas al algoritmului CPM se numește forward pass (trecerea înainte). El răspunde la întrebarea: „Cel mai devreme când poate începe și termina fiecare sarcină?"
Calculul pornește de la sarcinile care nu au predecesori - cele care pot începe imediat, de la data de start a proiectului. Pentru ele, Early Start (ES) este data de început a proiectului, iar Early Finish (EF) este ES plus durata estimată.
Apoi, algoritmul avansează prin rețeaua de dependențe. Pentru fiecare sarcină care are predecesori, Early Start este determinat de cel mai târziu Early Finish al predecesorilor săi. Cu alte cuvinte: o sarcină nu poate începe până nu se termină ultimul ei predecesor.
Exemplu concret:
Hai să ne gândim la un proiect de implementare software care începe pe 1 iunie:
| Sarcină | Durată | Depinde de | Early Start | Early Finish |
|---|---|---|---|---|
| A - Specificații | 5 zile | - | 1 iun | 5 iun |
| B - Design | 3 zile | A (FS) | 5 iun | 8 iun |
| C - Dezvoltare | 10 zile | B (FS) | 8 iun | 18 iun |
| D - Documentare | 4 zile | B (FS) | 8 iun | 12 iun |
| E - Testare | 5 zile | C (FS), D (FS) | 18 iun | 23 iun |
Observă sarcina E (Testare): depinde atât de C (Dezvoltare) cât și de D (Documentare). C se termină pe 18 iunie, D pe 12 iunie. Early Start al testării este 18 iunie - cel mai târziu dintre cele două, pentru că ambele trebuie terminate înainte de a putea testa.
După forward pass, știm că proiectul durează minim 23 de zile lucrătoare (de pe 1 iunie până pe 23 iunie). Această durată minimă este determinată de cel mai mare Early Finish din rețea.
Backward pass: cel mai târziu acceptabil
Al doilea pas se numește backward pass (trecerea înapoi). El răspunde la întrebarea complementară: „Cel mai târziu când poate începe și termina fiecare sarcină fără să întârzie proiectul?"
Calculul pornește de la sfârșitul proiectului și merge înapoi. Pentru sarcinile finale (cele fără succesori), Late Finish (LF) este data de terminare a proiectului. Late Start (LS) se obține scăzând durata din Late Finish.
Pentru fiecare sarcină cu succesori, Late Finish este determinat de cel mai devreme Late Start al succesorilor. Cu alte cuvinte: o sarcină trebuie să se termine suficient de devreme pentru a nu întârzia niciun succesor.
Continuând exemplul:
| Sarcină | Durată | Late Start | Late Finish |
|---|---|---|---|
| E - Testare | 5 zile | 18 iun | 23 iun |
| C - Dezvoltare | 10 zile | 8 iun | 18 iun |
| D - Documentare | 4 zile | 14 iun | 18 iun |
| B - Design | 3 zile | 5 iun | 8 iun |
| A - Specificații | 5 zile | 1 iun | 5 iun |
Observă sarcina D (Documentare): Early Start era 8 iunie, dar Late Start este 14 iunie. Asta înseamnă că documentarea poate fi amânată cu 6 zile fără consecințe asupra proiectului. În schimb, pentru sarcina C (Dezvoltare), Early Start și Late Start sunt identice (8 iunie) - nu există nicio marjă de manevră.
Float: cât de mult poți întârzia o sarcină
Diferența dintre Late Start și Early Start se numește total float (sau slack). Este numărul de zile cu care o sarcină poate fi amânată fără să întârzie data de terminare a proiectului.
Float-ul din exemplul nostru:
| Sarcină | Early Start | Late Start | Total Float |
|---|---|---|---|
| A - Specificații | 1 iun | 1 iun | 0 zile |
| B - Design | 5 iun | 5 iun | 0 zile |
| C - Dezvoltare | 8 iun | 8 iun | 0 zile |
| D - Documentare | 8 iun | 14 iun | 6 zile |
| E - Testare | 18 iun | 18 iun | 0 zile |
Proiect.ro calculează două tipuri de float:
- Total float - cu câte zile poți amâna sarcina fără să întârzii terminarea proiectului.
- Free float - cu câte zile poți amâna sarcina fără să întârzii niciun succesor imediat. Free float este întotdeauna mai mic sau egal cu total float.
Distincția contează. O sarcină poate avea total float de 6 zile (nu întârzie proiectul), dar free float de doar 2 zile (după 2 zile de amânare, succesorul imediat este afectat, chiar dacă proiectul în ansamblu nu). Free float îți arată cât de mult poți amâna o sarcină fără a deranja pe nimeni.
Drumul critic: lanțul fără marjă
Drumul critic (critical path) este secvența de sarcini care au total float egal cu zero. Acestea sunt sarcinile care, dacă întârzie cu o singură zi, împing întregul proiect peste termen.
În exemplul nostru, drumul critic este: Specificații - Design - Dezvoltare - Testare (A - B - C - E). Toate au float zero. Documentarea (D) nu este pe drumul critic - are 6 zile de flexibilitate.
De ce contează drumul critic? Pentru că:
- Orice întârziere pe drumul critic = întârziere a proiectului. Dacă dezvoltarea durează 12 zile în loc de 10, proiectul se termină pe 25 iunie, nu pe 23.
- Scurtarea proiectului se poate face doar scurtând sarcinile de pe drumul critic. Dacă vrei să termini mai devreme, poți adăuga oameni la dezvoltare (10 zile) - dar nu câștigi nimic scurtând documentarea (4 zile), pentru că ea nu este pe drumul critic.
- Resursele de pe drumul critic sunt cele mai sensibile. Dacă un membru al echipei care lucrează la o sarcină critică ia o zi liberă neprevăzut, impactul se simte imediat la nivel de proiect.
Un proiect poate avea mai multe drumuri critice simultane - dacă două sau mai multe lanțuri de sarcini au aceeași durată totală și toate au float zero. Când se întâmplă asta, riscul crește: ai mai multe „fire" pe care nu le poți întinde.
Recalculare automată
CPM nu este un calcul pe care îl faci o dată la începutul proiectului și apoi îl uiți. Planificarea se schimbă pe măsură ce proiectul avansează: estimările se ajustează, dependențele se adaugă sau se modifică, datele de start se mută.
Proiect.ro recalculează automat planificarea CPM când:
- Adaugi, modifici sau ștergi o dependență între sarcini
- Schimbi durata estimată a unei sarcini
- Modifici datele planificate ale unei sarcini
- Schimbi data de start sau de sfârșit a proiectului
Fiecare dintre aceste modificări poate schimba drumul critic. O sarcină care ieri avea 4 zile de float poate deveni critică astăzi dacă un predecesor al ei și-a crescut durata. Invers, o sarcină critică poate căpăta flexibilitate dacă adaugi o resursă suplimentară și îi scurtezi durata.
Rezultatele calculului sunt afișate în tab-ul de planificare (Schedule) al proiectului. Aici vezi un tabel cu toate sarcinile planificabile, datele calculate (Early Start, Early Finish, Late Start, Late Finish), float-ul și marcajul de drum critic. Pe diagramul Gantt, sarcinile critice sunt evidențiate vizual pentru a atrage atenția.
Constrângeri de planificare
Nu toate sarcinile sunt libere să fie planificate doar pe baza dependențelor. Uneori, realitatea impune constrângeri externe: un termen legal, o dată de lansare promisă clientului, o resursă disponibilă doar într-o anumită perioadă.
Proiect.ro suportă opt tipuri de constrângeri de planificare:
| Constrângere | Ce face |
|---|---|
| As Soon As Possible | Implicit. Sarcina este planificată cât mai devreme permite rețeaua de dependențe. |
| As Late As Possible | Sarcina este planificată cât mai târziu posibil, fără să întârzie proiectul. |
| Start No Earlier Than | Sarcina nu poate începe înainte de o anumită dată, dar poate începe mai târziu dacă dependențele cer asta. |
| Finish No Later Than | Sarcina trebuie terminată până la o anumită dată. Ideal pentru termene limită contractuale. |
| Start No Later Than | Sarcina trebuie să înceapă cel târziu la o anumită dată. |
| Finish No Earlier Than | Sarcina nu se poate termina înainte de o dată specifică. Utilă pentru sarcini care trebuie să rămână deschise un anumit timp, ca o perioadă de revizuire publică. |
| Must Start On | Sarcina este fixată să înceapă exact la o dată specificată, indiferent de dependențe. Poate genera conflicte de planificare. |
| Must Finish On | Sarcina este fixată să se termine exact la o dată specificată. Data de start se calculează automat din dată minus durată. |
Ce participă în calcul și ce nu
Nu toate elementele de lucru dintr-un proiect participă în calculul CPM. Regula este legată de comportamentul de planificare al fiecărui tip de element:
- Elementele de execuție (sarcini, activități) participă direct în calcul. Au durată estimată, pot avea dependențe și primesc date calculate.
- Elementele de tip eveniment (milestone-uri) au durată zero, dar participă și ele. Un milestone poate fi un punct critic pe drumul critic - de exemplu, aprobarea unui livrabil care blochează etapa următoare.
- Elementele de tip sumar (faze, livrabile) nu participă direct. Datele lor sunt agregate automat de jos în sus: Early Start-ul unei faze este cel mai devreme Early Start al copiilor săi, iar Early Finish-ul este cel mai târziu Early Finish al copiilor.
Această separare este importantă. Dependențele se creează între elemente de execuție și evenimente, nu între elemente de sumar. Fazele și livrabilele își derivă planificarea din conținutul lor, nu din relații directe cu alte elemente.
Valoarea practică a CPM
CPM nu este un exercițiu academic. Iată ce poți face concret cu informațiile pe care ți le oferă:
- Prioritizare informată - Știi exact care sarcini necesită atenție imediată (cele cu float zero) și care pot aștepta. Nu mai aloci resurse pe baza intuiției, ci pe baza datelor.
- Estimare realistă a datei de terminare - Forward pass-ul calculează durata minimă a proiectului pe baza rețelei de dependențe. Dacă vrei să promiți clientului o dată de livrare, aceasta este cea mai optimistă estimare fundamentată matematic.
- Analiza „ce se întâmplă dacă" - Dacă modifici o durată sau adaugi o dependență, recalcularea îți arată imediat impactul. „Ce se întâmplă dacă dezvoltarea durează 15 zile în loc de 10?" - răspunsul este vizibil instant.
- Negociere cu date - Când clientul cere livrare mai devreme, poți arăta exact care sarcini trebuie scurtate și cu cât. Conversația trece de la „nu putem" la „putem, dacă...".
- Gestionarea riscurilor - Sarcinile de pe drumul critic sunt cele cu risc maxim. Dacă o sarcină critică are probabilitate ridicată de întârziere, știi exact unde să adaugi un tampon sau o resursă suplimentară.
Imaginea de ansamblu
CPM leagă trei informații pe care le ai deja (durate estimate, dependențe între sarcini, date de start) într-un model predictiv al proiectului. Din acest model rezultă patru lucruri noi:
- Date calculate - Early Start, Early Finish, Late Start, Late Finish pentru fiecare sarcină planificabilă.
- Float - Câte zile de flexibilitate are fiecare sarcină (total float și free float).
- Drumul critic - Secvența de sarcini cu float zero, care determină durata minimă a proiectului.
- Durata minimă - Cât durează proiectul dacă totul merge conform planului, fără depășiri.
Modelul este viu. Se actualizează la fiecare schimbare a datelor de intrare. Drumul critic de astăzi nu este neapărat drumul critic de mâine - și tocmai asta face CPM valoros: îți oferă o imagine actualizată în permanență, nu o fotografie statică de la începutul proiectului.
CPM dă cel mai bun rezultat când dependențele sunt modelate corect și duratele estimate sunt realiste. Fără dependențe, toate sarcinile ar putea începe simultan și float-ul nu ar avea sens. Fără estimări corecte, datele calculate sunt doar numere frumoase fără valoare practică. Instrumentul este puternic, dar calitatea rezultatului depinde de calitatea datelor de intrare.