Float, the Critical Path, and Who Owns Delay
"We had three days of float, so we're fine"
Your stress analysis package (activity D) was due Tuesday. It went out Friday — three days late. You checked the schedule first: D showed 3 days of total float. You consumed it, the project end date did not move, nobody said anything.
Six weeks later the contracts manager asks you to write a statement about that week, because the valve vendor is claiming an extension of time and the argument turns on who used the float.
Guess first: you used float that existed on your own activity. Whose was it?
Most engineers answer "mine — it was on my line." The honest answer is: it depends entirely on a clause in the contract, and in many contracts it was not yours at all. Which brings us to the belief this note exists to kill:
"Float belongs to the contractor."
It is repeated everywhere and it is not a fact about schedules. It is a contract term — one that different standard forms answer three different ways, and that some contracts do not answer at all, which is worse.
Total float, free float, and the path that moves
Everything below comes from two passes over the logic network. No judgement, no opinion — just arithmetic.
FORWARD PASS (earliest dates)
ES = max(EF of all predecessors) EF = ES + duration
BACKWARD PASS (latest dates, from the project finish or the contract date)
LF = min(LS of all successors) LS = LF − duration
TF = LS − ES total float : slip before the PROJECT finish moves
FF = min(ES of successors) − EF free float : slip before the NEXT ACTIVITY moves
Three consequences people get wrong:
- The critical path is the LONGEST path, not the most important work. It is the chain with the minimum total float. Commissioning the fire-water system may be the most important thing on the job and sit with 40 days of float; a valve delivery nobody thinks about may be driving the end date.
- FF ≤ TF, always. Total float is shared along a path; free float is yours alone. An activity can have TF = 3 and FF = 0 — meaning you can slip 3 days without moving the end date, but you cannot slip a single day without pushing somebody else's start.
- The critical path moves. It is a property of the current durations and logic, not a fixed set of activities. Shorten the critical path enough and a different path becomes critical; that is why "crashing" has diminishing returns, and why a monthly update can hand you a critical path you were not watching.
Near-critical paths — anything within, say, 5–10 days of the critical path — deserve the same attention, because one bad update promotes them.
Why "longest path" beats "zero float" as the definition
Under a simple network with the backward pass run from the calculated finish, the critical path is exactly the set of zero-total-float activities, and the two definitions agree. They stop agreeing as soon as the schedule has:
- a contract completion date earlier or later than the calculated finish (the backward pass runs from the imposed date, so every activity on the driving path carries the same non-zero float — negative if the date is unreachable);
- constraints (Start-No-Earlier-Than, Finish-On, deadlines) which break float propagation;
- multiple calendars, where an activity with float in calendar days may have none in working days;
- resource levelling, which delays activities for reasons the logic does not record at all.
That is why the modern forensic definition (and the AACE Recommended Practice 29R-03 guidance) is the longest path through the network, and why planners say "the longest path" while software still colours "TF ≤ 0". Use zero-float as the everyday shorthand; use longest-path when money is on the table.
A real 7-activity network, calculated by hand
This is the network in the interactive. Piping deliverables on one chain, a long-lead valve package hanging off the line list.
A P&IDs issued for design 10 d —
B Line list + critical lines 6 d after A
C Piping GA / 3D layout 14 d after A
D Pipe stress analysis 8 d after B and C
E Support design + MTO 6 d after D
F Isometrics IFC 5 d after D and E
G Long-lead valve PO → site 24 d after B
Forward pass. A: 0→10. B: 10→16. C: 10→24. D starts at max(16, 24) = 24 → 32. E: 32→38. F starts at max(32, 38) = 38 → 43. G: 16→40. Project finish = 43 days.
Backward pass from day 43. F: LF 43, LS 38. G: LF 43, LS 19. E: LF = LS(F) = 38, LS 32. D: LF = min(LS E 32, LS F 38) = 32, LS 24. C: LF = LS(D) = 24, LS 10. B: LF = min(LS D 24, LS G 19) = 19, LS 13. A: LF = min(LS B 13, LS C 10) = 10, LS 0.
| Act | Dur | ES | EF | LS | LF | TF | FF |
|---|---|---|---|---|---|---|---|
| A | 10 | 0 | 10 | 0 | 10 | 0 | 0 |
| B | 6 | 10 | 16 | 13 | 19 | 3 | 0 |
| C | 14 | 10 | 24 | 10 | 24 | 0 | 0 |
| D | 8 | 24 | 32 | 24 | 32 | 0 | 0 |
| E | 6 | 32 | 38 | 32 | 38 | 0 | 0 |
| F | 5 | 38 | 43 | 38 | 43 | 0 | 0 |
| G | 24 | 16 | 40 | 19 | 43 | 3 | 3 |
Critical path: A → C → D → E → F = 10 + 14 + 8 + 6 + 5 = 43 days. Not the valve, even though the valve is the longest single activity on the job.
Now look at B: total float 3, free float 0. B can slip 3 days without moving the finish — but the moment it slips one day, G starts a day later and G's own 3 days of float shrink to 2. B's float is not B's; it is shared with G down the path. That single line is the reason the float-ownership question exists.
Drag any duration and watch the two passes recompute, the table update and the highlight jump when the path switches — stretch B from 6 to 10 days and the critical path becomes A → B → G: ▶ open the interactive: project float critical path calc
The same network in space, with the float drawn as translucent volumes trailing the non-critical blocks, is the clearest picture of "float is a gap, not a property of the bar": ▶ open the interactive: project float critical path 3d
Symbol key — every symbol on this sheet
- ES / EF — early start / early finish: the soonest an activity can start / end · days
- LS / LF — late start / late finish: the latest without delaying the project (or the contract date) · days
- TF — total float = LS − ES: slip available before the project finish moves · days
- FF — free float = (earliest successor ES) − EF: slip before the next activity moves · days
- Negative float — the backward pass was run from a date the logic cannot reach; the activity is already late before it starts · days
- CP — critical path: the longest path through the network (the chain with minimum TF)
- Near-critical — a path within a few days of the CP; the next update may promote it
- Lag — an imposed delay on a link (FS + 5 d); lead is a negative lag
- FS / SS / FF-link / SF — link types: Finish-Start, Start-Start, Finish-Finish, Start-Finish (note: the link "FF" is finish-to-finish and is not free float — same two letters, two different things)
- EOT — Extension of Time: relief from liquidated damages, granted for excusable delay
- LD — Liquidated Damages: the contractual rate per day of late completion
- Prolongation cost — time-related site/overhead cost of an extended period, claimed separately from an EOT
- MOC / MOS — Management of Change / Method of Statement; both can consume float invisibly
Who owns the float — the three answers
Float is a project resource created by the logic, and the contract decides who may spend it.
- Project-owns-float (shared, "first come first served"). The most common modern position (NEC-style thinking, and increasingly explicit in bespoke EPC forms). Float belongs to the project; whoever needs it first uses it; no compensation is due until the completion date actually moves. Clean and usually fair — but it silently rewards whoever disrupts earliest.
- Contractor-owns-float. Float is the contractor's contingency in its own programme, so any employer-caused consumption of it is an event in its own right, even if the end date never moves. Contractors argue for this; it turns every owner-caused hiccup into a claimable erosion of contingency.
- Owner/employer-owns-float. Rarer and usually resisted: the contractor may not use float to absorb its own slippage without approval.
What the standard forms actually do: FIDIC is famously silent — it grants an EOT only when completion "is or will be delayed," which is a completion-date test and therefore behaves like project-owns-float in practice. NEC3/NEC4 handles it differently again through terminal float and time risk allowance, and moves the Completion Date only when the planned Completion is pushed. The SCL Delay and Disruption Protocol (2nd ed.) recommends the project-owns-float position and says so explicitly. If your contract says nothing, assume a fight.
And the practical point behind all of it: consuming float changes the evidence. An activity at zero float is one disruption away from being critical. "We had float" is a statement about last month's schedule, not this month's.
Excusable, compensable, and the concurrency problem
Three categories, and mixing them up is how people lose claims:
- Non-excusable — contractor's own fault. No EOT, no money; LDs apply.
- Excusable but non-compensable — neither party's fault (exceptionally adverse weather, a named force-majeure event). EOT yes, money no. The parties share the pain: the owner loses time, the contractor loses its overhead recovery.
- Excusable and compensable — owner's fault (late access, late free-issue, a variation, late P&IDs). EOT and prolongation cost.
Concurrent delay is where two delays — one the owner's, one the contractor's — affect the critical path over the same period. The classic outcome is time but no money: the contractor gets the EOT (so no LDs) but not the prolongation cost, because it would have been delayed anyway. Getting there requires deciding whether the delays are truly concurrent (the "Malmaison" approach vs the dominant-cause approach vs apportionment), and whether you analyse prospectively (time impact analysis on the schedule as it stood) or retrospectively (as-built collapsed). Different methods on the same facts give different answers — which is why a contemporaneously updated, logic-driven schedule is worth more than any argument made afterwards.
What corrupts float — and what negative float on your package means
Float is only as honest as the logic that produced it. Things that manufacture fake float, or hide real risk:
- Constraints instead of logic. A Start-No-Earlier-Than date pinned on an activity stops float propagating through it. The bar looks comfortable; the path behind it is blind.
- Lags doing the work of activities. "FS + 20 d" for a concrete cure is defensible. "FS + 20 d" because the vendor is slow is a hidden activity with no owner and no progress.
- Resource levelling. Levelling delays activities for resource reasons the logic does not record. The result is a bar that has float on paper and none in reality — and a critical path that software will not show you unless you look at a resource-levelled longest path.
- Open ends and dangling logic. An activity with no successor inherits the project finish as its LF and shows enormous, entirely fictional float.
- Over-long activities. A 90-day "detailed engineering" bar hides every internal sequence problem inside itself.
Negative float on your IFC package is the one every discipline engineer eventually sees, and it is usually misread as "you are behind." It is not a measurement of you. It means the backward pass was run from a contract date the logic can no longer reach, so the planner's arithmetic says the work should have finished before today. Concretely: −6 days on your isometric package means the schedule, as currently logicked, requires six days you do not have. Your response is not to work faster in silence. It is to say which of the three things is true: the duration is wrong, the logic is wrong, or the date is unachievable and needs a recovery plan or an EOT.
The delay-injection control in the playground makes the ownership question concrete: put six days on A (owner-caused, zero float) and every downstream activity goes negative; put five days on C and compare what "project owns float" and "contractor owns float" each say about who pays: ▶ open the interactive: project float critical path calc
Common pitfalls
- Treating "float belongs to the contractor" as a fact. It is a contract term; read the clause before you rely on it.
- Confusing free float with total float. Consuming TF that has FF = 0 hurts somebody immediately, even though the end date is untouched.
- Reading the critical path as the important path. They are unrelated concepts that happen to share an adjective.
- Assuming the critical path is stable. It is recalculated every update; near-critical paths become critical routinely.
- Confusing the FF link type (finish-to-finish) with FF meaning free float. Same letters, completely different objects.
- Believing negative float means you are late. It means the plan is late against an imposed date — an arithmetic statement about the backward pass, not about your progress.
- Not recording when and why you used float. Float consumption is evidence. Undocumented float consumption is the other side's evidence.
Outcome
- TF = LS − ES (slip before the project moves); FF = earliest successor ES − EF (slip before the next activity moves); FF ≤ TF always. In the worked network B has TF 3 / FF 0 and G has TF 3 / FF 3 — and that difference is the whole ownership argument in two numbers.
- The critical path is the longest path, not the most important work; it is A → C → D → E → F (43 d) in the example, and it jumps to A → B → G the moment B stretches past its 3 days.
- Float ownership is contractual, not technical: project-owns (SCL Protocol's recommended position, and FIDIC's effective behaviour), contractor-owns, or shared — and silence means a dispute.
- Delay taxonomy: non-excusable (no time, no money) / excusable non-compensable (time, no money) / excusable compensable (time and money); concurrency typically yields time but not money.
- Constraints, lags, resource levelling and open ends all manufacture float that is not real — check the logic before trusting the number.
- Negative float on your IFC package = the backward pass ran from an unreachable contract date. Escalate the duration, the logic, or the date — do not absorb it quietly.
- Interactive: ▶ open the interactive: project float critical path calc — live CPM, path switching, delay injection under three ownership regimes.
- 3D: ▶ open the interactive: project float critical path 3d — the network in space, float as translucent volumes, critical path in the standard load colour.
Open items
- Add resource levelling to the playground so the difference between a logic-driven and a resource-levelled longest path is visible.
- Worked time-impact-analysis example (prospective) against an as-built collapsed analysis (retrospective) on the same 7-activity facts, to show why the method choice changes the answer.
- Map our own standard contract's float and EOT clauses onto the three ownership positions, so the answer is looked up rather than argued.
One sheet from EPiC Circle
Interactive engineering lessons across every EPC discipline — calculators, 3D models and misconception-first teaching. Free to read; sign in to track progress, take the quizzes and ask questions.
Open in EPiC Circle →Educational teaching material — simplified and illustrative. Not for engineering
design use.
© EPiC Circle · provided by PipeAxis