The Critical Path Method (CPM) is the mathematical backbone of every scheduling tool — Primavera P6, Microsoft Project, and everything else. If you understand CPM by hand, you can debug any schedule.
The core idea
Every project is a network of activities linked by dependencies. The critical path is the longest chain through that network — it determines the minimum project duration. Delay anything on it, and the project end date moves day-for-day.
The four dates
For each activity, CPM computes:
| Date | Name | Computed by |
|---|---|---|
| ES | Early Start | Forward pass |
| EF | Early Finish | Forward pass (ES + duration) |
| LS | Late Start | Backward pass (LF − duration) |
| LF | Late Finish | Backward pass |
Forward pass
Work left to right. Each activity's ES is the latest EF of all its predecessors (for finish-to-start links). EF = ES + duration.
Backward pass
Work right to left from the project end date. Each activity's LF is the earliest LS of all its successors. LS = LF − duration.
Float
- Total Float = LS − ES = LF − EF. How much the activity can slip without delaying the project.
- Free Float = ES(successor) − EF. How much it can slip without delaying the next activity.
Activities with zero total float form the critical path.
Worked example
Five activities (durations in days): A(3) → B(5) → D(4) → E(2), and A → C(2) → D.
Forward pass: A: ES 0, EF 3. B: ES 3, EF 8. C: ES 3, EF 5. D needs both B and D's predecessors done, so ES = max(8, 5) = 8, EF 12. E: ES 12, EF 14. Project duration = 14 days.
Backward pass from day 14: E: LF 14, LS 12. D: LF 12, LS 8. B: LF 8, LS 3. C: LF 8, LS 6. A: LF 3, LS 0.
Float: A, B, D, E all have TF = 0 → critical path is A–B–D–E. C has TF = 6 − 3 = 3 days of float.
What trips people up in real schedules
- Negative float — appears when a constraint (e.g. a contractual finish date) is earlier than what the network can achieve. It means "recovery required", not "the software is broken".
- Multiple critical paths — after crashing one path, another usually goes critical. Always re-run the analysis.
- Leads, lags and non-FS links — SS and FF relationships with lags change the arithmetic; most hand-calculation errors happen here.
- Progress override vs retained logic — in P6, this setting changes how out-of-sequence progress affects the path. Know which one your schedule uses.
- Float belongs to the path, not the activity. Two activities sharing a path share the same float — one consuming it starves the other.
Use our Float Calculator to check individual activities, and read our Delay Analysis guide for what happens when float runs out.