Critical Path Method (CPM) Explained with a Worked Example

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:

DateNameComputed by
ESEarly StartForward pass
EFEarly FinishForward pass (ES + duration)
LSLate StartBackward pass (LF − duration)
LFLate FinishBackward 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

  1. 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".
  2. Multiple critical paths — after crashing one path, another usually goes critical. Always re-run the analysis.
  3. Leads, lags and non-FS links — SS and FF relationships with lags change the arithmetic; most hand-calculation errors happen here.
  4. Progress override vs retained logic — in P6, this setting changes how out-of-sequence progress affects the path. Know which one your schedule uses.
  5. 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.

Keep reading