A schedule you can defend is one you can recompute. This is the arithmetic behind it: how a duration is estimated under uncertainty, and how the earliest dates, latest dates and float are derived from a dependency network.
The PERT three-point estimate
A single duration estimate hides how confident you are. The PERT technique replaces it with three:
- O — optimistic: everything goes right
- M — most likely: the realistic case
- P — pessimistic: things go wrong, but nothing catastrophic
The expected duration is the weighted average:
tE = (O + 4M + P) / 6
The most likely value carries four times the weight of the extremes. The result is not the average of the three numbers — it deliberately pulls towards the realistic case while letting the tails influence it.
Worked example: a task estimated at 4 days optimistic, 6 most likely, 14 pessimistic gives tE = (4 + 24 + 14) / 6 = 7 days. A naïve average would give 8. The single-point estimate most people would have offered is 6.
Standard deviation
The spread tells you how much to trust the number:
σ = (P − O) / 6
In the example, σ = (14 − 4) / 6 ≈ 1.7 days. A task with a wide spread is not a task with a longer duration — it is a task you know less about. That distinction should change what you do about it, and usually does not.
The forward pass: earliest dates
Working left to right through the network, compute for each activity:
- ES (earliest start) = the largest EF of its predecessors
- EF (earliest finish) = ES + duration
The first activity starts at 0. The key word is largest: an activity with several predecessors waits for the slowest one. This is why convergence points concentrate risk.
The EF of the last activity is the minimum project duration.
The backward pass: latest dates
Working right to left from that end date:
- LF (latest finish) = the smallest LS of its successors
- LS (latest start) = LF − duration
Here the key word is smallest: an activity must finish early enough for its most urgent successor.
Float: total and free
Two measures come out of the two passes, and they answer different questions.
Total float = LS − ES (equivalently LF − EF)
Free float = smallest ES of successors − EF
Total float is how long an activity can slip without moving the project end date.
Free float is how long it can slip without moving any successor.
The difference matters in practice. An activity with 5 days of total float and 0 days of free float can absorb a delay without endangering the project — but the next task will be squeezed immediately. A manager looking only at total float will approve that delay and be surprised by the downstream complaint.
Reading off the critical path
Activities where total float = 0 form the critical path. There is no choice involved: it falls out of the arithmetic.
Two consequences follow immediately.
- A one-day delay on a zero-float activity is a one-day delay to delivery. Not a risk — a fact.
- Compressing the critical path only helps until another chain becomes the longest. Past that point, further effort buys nothing.
Why this has to be recomputed
Every number here depends on the durations and the dependency structure. Change one estimate and the float distribution changes; change enough and the critical path jumps to a different chain.
Doing this by hand once is instructive. Doing it by hand every week is not sustainable, which is why it is the part of scheduling worth automating — and why a Gantt chart maintained manually drifts away from reality within weeks.

