Scheduling
Total float vs free float: the difference, the formulas and a worked example
Total float is how long an activity can slip without delaying the project finish; free float is how long it can slip without delaying the early start of any activity that follows it. Free float is never larger than total float, and the gap between the two tells you whose work you will disturb if a task runs late.
What total float and free float mean
Float (also called slack) is spare time in a schedule. It only exists on activities that are not on the critical path, the longest chain of linked work that sets the project finish date. If you are new to that idea, read the critical path method guide first; float falls straight out of it.
Total float answers the question: how many days can this activity slip before the project finish date moves? It belongs to a whole path, not to one activity. If three activities sit in a row on a side path with 10 days of total float, all three show 10 days, but they share those 10 days. Use 6 of them on the first activity and the other two have only 4 left.
Free float answers a narrower question: how many days can this activity slip before the next activity has to start later than its earliest possible start? Free float belongs to the activity alone. Using it disturbs nobody else in the plan.
That is why the two numbers are worth reading together. An activity with total float but no free float can slip without hurting the finish date, but the moment it slips, the next team's start date moves too.
The formulas
Both formulas use the four dates that the forward and backward pass produce: early start (ES), early finish (EF), late start (LS) and late finish (LF).
| Measure | Formula | Meaning |
|---|---|---|
| Total float (TF) | TF = LS - ES (or LF - EF) | Slip allowed before the project finish moves |
| Free float (FF) | FF = min(ES of successors) - EF | Slip allowed before any successor's early start moves |
The free float formula above is for finish-to-start links with no lag, which covers most schedules. With a lag, subtract the lag as well: FF = ES(successor) - EF - lag. For start-to-start, finish-to-finish and start-to-finish links, compare the matching dates instead (start with start, finish with finish). Scheduling software does this for you.
Two rules always hold: free float is never greater than total float, and both are zero on the critical path (unless a deadline or constraint creates negative float, which means the plan is already late).
How to calculate float step by step
- List activities, durations and links. Every activity needs at least one predecessor and one successor, except the start and finish.
- Run the forward pass. Start the first activity at day 0. For each activity, ES is the largest EF among its predecessors, and
EF = ES + duration. - Read the project finish. The largest EF in the network is the project duration.
- Run the backward pass. Set the LF of the last activity to the project finish. For each activity, LF is the smallest LS among its successors, and
LS = LF - duration. - Calculate total float as
LS - ESfor every activity. - Calculate free float as the earliest successor ES minus the activity's own EF.
- Mark the critical path: the activities with zero total float.
Worked example: six activities
Take a small network with finish-to-start links and no lags. A (3 days) starts the project. B (5 days) and C (2 days) both follow A. D (4 days) follows B. E (3 days) follows C. F (2 days) follows both D and E and ends the project.
Forward pass. A runs 0 to 3. B runs 3 to 8. C runs 3 to 5. D runs 8 to 12. E runs 5 to 8. F waits for the later of D (12) and E (8), so it runs 12 to 14. The project takes 14 days.
Backward pass. F: LF 14, LS 12. D: LF 12, LS 8. E: LF 12, LS 9. B: LF 8, LS 3. C: its only successor E has LS 9, so LF 9 and LS 7. A: the smaller of B's LS (3) and C's LS (7) is 3, so LF 3 and LS 0.
| Activity | Dur. | ES | EF | LS | LF | TF | FF |
|---|---|---|---|---|---|---|---|
| A | 3 | 0 | 3 | 0 | 3 | 0 | 0 |
| B | 5 | 3 | 8 | 3 | 8 | 0 | 0 |
| C | 2 | 3 | 5 | 7 | 9 | 4 | 0 |
| D | 4 | 8 | 12 | 8 | 12 | 0 | 0 |
| E | 3 | 5 | 8 | 9 | 12 | 4 | 4 |
| F | 2 | 12 | 14 | 12 | 14 | 0 | 0 |
The critical path is A, B, D, F (3 + 5 + 4 + 2 = 14 days). C and E sit on a side path with 4 days of total float, shared between them.
Now the useful part. C has free float 0: its successor E can start at day 5, which is exactly when C finishes. E has free float 4: F cannot start before day 12 anyway, and E finishes at day 8.
- If C slips 3 days, it finishes at day 8, so E moves to 8 to 11. F still starts at 12. The project is safe, but the E team now starts 3 days later than planned and has only 1 day of float left.
- If E slips 3 days, it finishes at day 11. Nothing else moves at all.
- If C slips 5 days, E runs 10 to 13, F starts at 13 and the project finishes at day 15, one day late. The 4 days of shared total float were used up and then exceeded.
How to use each number
Use total float to protect the finish date. Sort activities by total float, lowest first. Anything with zero or negative float drives the end date. Activities with a few days of float are the near-critical ones; they become critical after one bad week, so watch them as closely as the critical path itself.
Use free float to protect other people. When a team asks whether they can start late, free float is the honest answer. If it is zero, starting late pushes the next team, even when total float says the project is fine. In the example, letting C start late is a decision that affects E's team, and they should hear about it before it happens.
Agree who owns shared float. Because total float is shared along a path, the first activity to slip often consumes it all. Many teams treat float as a project resource that the planner releases, rather than a buffer that whoever runs late first gets to spend.
Common mistakes
- Adding up float along a path. Three activities showing 10 days each do not give you 30 days. They share 10.
- Trusting float in a schedule with missing logic. An activity with no successor shows float all the way to the project end, which is usually false. Fix open ends before reading float.
- Ignoring constraints. A "must finish on" date or a deadline can cut float or make it negative. Know which dates are driven by logic and which are imposed.
- Mixing calendars. Float is counted in working days of the activity's calendar. An activity on a five-day calendar and one on a seven-day calendar can show different float for the same gap in dates.
- Huge float values. Months of float on ordinary work usually means a missing link, not real freedom. The DCMA checks flag float above 44 working days for this reason.
How to do this in Critova
In a Critova project at the full controls level, the scheduler runs the forward and backward pass every time you change a duration or a link, and shows total float and free float for every activity alongside the Gantt chart. You pick predecessors by name, use any of the four link types with lags, and assign working calendars with holidays, so float is counted in real working days. The DCMA checks then list any activity with high or negative float. See how it works on the scheduling feature page, or open the live demo and look for the activities with the least total float.
Common questions
Can free float be larger than total float?
No. Free float is always less than or equal to total float. If an activity could slip further without touching its successors than without touching the finish date, the finish date would come before the successors, which is impossible.
What does negative total float mean?
It means the activity is already late against a deadline or constraint. Negative 5 days means you need to recover 5 days on that path to meet the imposed date.
Is slack the same as float?
Yes. Slack and float are two names for the same thing. Some tools say slack, most scheduling standards say float.
Bring one schedule. See your critical path in an hour.
Free during our launch until 31 March 2027.