Total float and free float: where the definitions stop being well-defined
Total float is how long an activity can slip before it delays the project completion. Free float is the narrower quantity: how long it can slip before it moves any successor's early dates. Both fall out of the forward and backward pass, both are counted in working time on a calendar, and both are printed as a single number in every scheduling tool.
The definitions are not the interesting part — the glossary has them and Concepts has the long form. What follows is the part that decides arguments: where the two quantities stop being well-defined, where two tools reading one file report different numbers, and where a float figure is exact and still answers a question nobody asked. For who is entitled to spend float, see who owns the float.
A float figure is not an answer until three things are stated
A number on its own — "this activity has 12 days of float" — is not checkable. Three facts have to travel with it.
| What must be stated | Why it changes the number |
|---|---|
| Which float | Total and free diverge whenever a successor is not starting the moment this activity finishes. They diverge differently again past an as-late-as-possible successor — see below. |
| Against what anchor | Total float is measured against whatever the backward pass ran from. That may be the computed finish, or a completion date the schedule states. |
| On which calendar | Float is a count of working periods. Twelve days on a five-day week and twelve on a seven-day week are different spans, and counts taken on different calendars must not be added. |
And a fourth, less often noticed: which reading of total float. AACE RP 49R-06 records that total float may be computed from the start ends, from the finish ends, or as the lower of the two, and that scheduling software lets the user pick. On most networks the readings coincide, because an activity's two ends are separated by the same duration on the same calendar in both passes. They come apart on as-late-as-possible activities, as below. This project reads the selection the file itself records rather than substituting one.
An activity can drive the project finish and still carry float
This is the single most common way a float column surprises a reviewer, and it is arithmetic rather than a defect.
The backward pass has to start somewhere. If the schedule states a completion date — P6 stores one — it runs from that date. If not, it runs from the computed finish, which makes the last activity's float zero by construction. The two anchors produce different float on every activity in the network.
Read as a sentence: on one export examined for this project, the schedule stated a must-finish-by date one working day later than its own computed finish. Every activity on the driving chain therefore carried exactly one day of total float, because the deadline sat one day past the finish they drove. A reviewer filtering that file on total float at or below zero saw one activity — the start milestone. The driving chain through the same file was nineteen activities long, and the set of activities driving the finish was thirty-six. All three counts were right. None of them is a correction of the others.
So "zero total float" and "critical" are not synonyms, and the gap between them is often a single stated date.
"Critical" is not one test, and the specifications know it
AACE RP 49R-06 documents four operational methods for identifying the critical path and then declines to endorse any of them, on the ground that no absolute standard exists for what counts as a proper CPM calculation procedure. AACE RP 10S-90 separated critical path and longest path into distinct headwords in its December 2023 revision for the same reason. Concepts §2 owns that subject and this page does not restate it.
Three senses are computable from any imported file, and this project reports each separately rather than collapsing them:
| Sense | What it is | How it behaves |
|---|---|---|
| Total float at or below a threshold | Usually zero, sometimes a stated value | Sensitive to the backward-pass anchor, as above |
| The longest path | The driving chain walked back from the activity that sets the finish, one predecessor per hop | A chain: at a tie it follows one branch |
| The driving set | Every activity that drives the finish, including both sides of every tie | Always contains the chain and is wider wherever two predecessors tie at the same bound |
Specifications pick sides. UFGS 01 32 01.00 10 §3.12(f) requires critical activities to be defined as Longest Path rather than by total float, and a file recording the float setting is non-conformant on that clause — a question the tool answers by reading the file's own stored scheduling options rather than the ones it would have chosen. ASCE 67-17 §5.1 makes the same point from the other direction, treating criticality and longest-path membership as distinct and asking that divergence be reported. See the standards crosswalk and P6 scheduling options.
Float belongs to a path, and the tie is where that bites
Several activities in a chain share one quantity of float. If the first consumes it, the rest have none — which is why "the contractor used the float" and "the owner used the float" are usually claims about the same days, counted once and spent twice.
NYSDOT states the path reading expressly, defining total float as an attribute of a network path rather than of an individual activity. Most other documents leave it to be inferred, and the two readings part company exactly where an activity sits on more than one path: the activity has one float value and the paths through it do not.
The structural reason is the tie. Where two predecessors both permit a successor's early start at the same instant, both drive it, and accelerating either alone moves nothing. A chain carries only one of them, so a report naming one path through a network with ties has made a tie-break the reader cannot see. This project records every predecessor tied at the driving bound.
Negative float is a distance to a stated date, not a measure of delay
Negative float appears when a required date sits earlier than the logic-driven one: the late dates fall before the early dates. It is a symptom, and the magnitude is the distance to a date somebody stated — move the stated date and the number moves with it, with no work and no logic changing.
Two things follow, and both are routinely misread.
Which constraint produced it decides who reads as late. A constraint that caps the backward pass and leaves the forward pass alone — finish-no-later-than is the clean case — lets the forward pass overrun and surfaces the breach as negative float on the constrained activity. A mandatory constraint that overrides the forward pass as well pins the activity and pushes the breach onto its predecessors instead. The same lateness, on two different rows, depending on a constraint type. Schedule constraints sets out which types do which.
The authorities are talking about different documents rather than disagreeing. Several prohibit submitting a baseline carrying negative float; a federal section expects the negative sign to appear on an update genuinely late against an interim completion date. DCMA-EA PAM 200.1 §4.7 counts incomplete tasks with total float below zero and states that ideally there should not be any — a metric over a stated population, which the 14-point page treats properly.
Free float carries no cap from the completion date
Total float is bounded by the room between the computed finish and the anchor the backward pass ran from. Free float is not. It is a statement about successors only, and nothing in its definition mentions the project completion.
The consequence is one a reader has to hold: published P6 exports contain rows where free float exceeds total float. A tool that treats that as impossible, or silently clamps one to the other, is reporting something the file does not say. This project measured what happens if free float is capped at total float and refused the change, because it moves rows away from the answers P6 stored.
Free float before an as-late-as-possible successor
This is the case worth the most to a reviewer, because the number is exact and means something other than what it looks like.
An as-late-as-possible activity is placed against its late dates rather than its early ones. Its published early start is therefore not a forward-pass quantity at all: it is a placement derived from the late dates, and the late dates depend on the project finish.
Now spend a predecessor's free float. The predecessor's slip can move the project finish; the project finish moves the ALAP successor's late dates; and the ALAP successor's published early start — being derived from them — moves too. So the free float printed against that predecessor is exact against the schedule as it stands, and the largest slip that survives a re-solve is a smaller, different number.
Read as a sentence, from one generated case examined here: a predecessor reported 120 days of free float. Spending 117 moved nothing. At 118 the project finish moved and the successor stayed where it was. At 119 the successor's early start moved. So the largest slip leaving the successor in place was 118, against a printed 120 — and removing the successor's ALAP placement dropped the printed figure to 43, against a largest spendable slip of exactly 43. With the ALAP gone the printed number was exact.
Two things follow. First, the printed figure is not wrong: it is how far this activity can slip before it violates the bound it imposes on a successor standing where the schedule places it — the conventional definition, and the one P6's own stored rows follow, since P6 stores free float at zero on ALAP activities while total float survives. Second, the re-solved figure is a smaller, different quantity and nothing publishes it. A free float column past an ALAP successor should not be read as "days I can lose before the successor moves".
Who owns the float records the other half of this: ALAP is one of the mechanisms by which a schedule can show no float while a specification requires float to be shared, which is why several documents list it among the constraint types to inventory.
What this tool does with float, and what it refuses
It computes total float and free float on each activity's own calendar, using the float method the file itself records, reports the finish-end reading beside the selected one where they differ, and states the anchor the backward pass ran from.
It reports all three senses of critical separately and says so when they disagree, rather than presenting one as the answer. It reports the machinery behind a float value — every constraint, every calendar, every lag and the scheduling settings the file declares.
It refuses to decide whether a float value is reasonable, whether float was improperly suppressed, or who was entitled to consume it. Those are contractual determinations and the reviewing authority makes them.
Related reading
- Who owns the float — the three ownership regimes, with clause numbers.
- Schedule constraints — which types manufacture negative float, and on which row.
- Concepts §2 — the two schools of criticality, in full.
- The DCMA 14-point metrics — high float, negative float, and the populations each is counted over.
- Is this real? — how the computed values here are checked.
Source: web/pages/total-float-free-float.md. Source commit date: 2026-09-11.