Documentation / Scheduling / The Critical Path & float

The Critical Path & float

Every project has one chain of tasks that decides its finish date. If any task on that chain slips, the whole project finishes later. Gantt Excel finds that chain for you — automatically, every time the schedule changes.

Tasks that are not on the critical path have some breathing room — they can slip a little, or start a little later, without pushing the project’s end date out. That breathing room is called float, and it is also known as slack. Gantt Excel works both out for you from your durations, your dependencies and each resource’s working calendar, and writes the answers into five columns on the sheet.

01 What the critical path is

The critical path is the set of tasks you cannot afford to let slip. Everything else has float, and the float columns tell you exactly how much room each of those tasks has.

You never enter any of it by hand. The calculation runs after the scheduler has settled every date, so it always reflects the plan as it stands right now — change a duration, add a dependency or move a start date and the five columns are brought up to date on the next redraw.

02 The five Critical Path columns

Gantt Excel adds five read-only columns to your chart, just before the Custom 1 column. They are calculated results — look at them, sort them, filter on them, but don’t type into them.

ColumnWhat it tells you
Late StartThe latest the task could start without delaying the project.
Late FinishThe latest the task could finish without delaying the project.
Total FloatHow much the task can slip in total before it delays the project finish. 0 means it’s critical.
Free SlackHow much the task can slip without moving the earliest task that depends on it. A task with nothing depending on it gets its room to the project finish instead. It is normally equal to or smaller than Total Float.
CriticalYes if the task is on the critical path, No if it has room to spare.

A critical task is one whose Total Float is 0 — there is simply no room to move. The rule behind the Critical column is exactly that and nothing else:

Critical  =  Yes  when  Total Float  =  0

Zero float does not mean the dates match. Total Float counts working time on the task’s own resource calendar, so a task finishing on a Monday can have a Late Finish of Wednesday and still read 0 — if that resource works Mondays only, there is no working day of theirs in between to spend. It is the float number that decides Critical, never the look of the two dates. Section 07 works that case through.

Total Float is never shown as a negative number — the smallest it goes is zero. And Late Start is worked out by stepping back from Late Finish by the task’s own duration, on that task’s own resource calendar, which is why the two always agree with each other.

03 Switching the red highlight on

The five columns are always calculated, whether or not anything is red on the chart. The red highlight is a separate, optional thing, and it is controlled by the Show Critical Path tickbox in the Settings dialog — Gantt ExcelSettingsSettings on the ribbon. There is no critical-path button on the ribbon itself.

  • Ticked → the critical path is drawn in red on the chart.
  • Unticked → the chart looks normal; the five columns still show their values.

That split is deliberate. The columns are data, and stale data is worse than no data — so they are kept current in the background even when you have the highlight switched off and there is nothing on screen to tell you they are being maintained.

The critical-path colour defaults to red and can be changed per chart from the colour swatch beside the tickbox. The tickbox has to be on first: click the swatch with Show Critical Path unticked and Gantt Excel says Enable Show Critical Path first to change its color.

The Settings dialog on the Display tab with the Show Critical Path tickbox ticked and a red Critical colour swatch beside it.
Show Critical Path lives in Settings — it is not on the ribbon.

04 Reading the red highlight

Two things turn red, and they answer to slightly different rules.

  • Task bars get a red outline when that row’s Critical column reads Yes. Only the outline changes — the bar keeps its own fill colour.
  • Dependency arrows turn red only when the tasks at both ends of the link are critical. An arrow from a critical task into one with float stays its normal colour, because that link is not part of the chain.
Your chartTask barsDependency arrows
Day-based chart (Daily / Weekly / Monthly)🔴 red outline on critical bars🔴 red along the critical chain
Hourly chart, shown in a day-based view🔴 red outline on critical bars🔴 red along the critical chain
Hourly chart, at the hourly view🔴 red outline around the coloured hour cells🔴 red along the critical chain
Hourly chart, at the hourly view, with Hourly View – Shapes Based tickedno outline on task bars — critical milestones keep their red diamond outline🔴 red along the critical chain

The last row is the one exception worth knowing. An hourly chart normally paints its bars by colouring the hour cells themselves, and a critical task gets a red border drawn round that block of cells. Tick Hourly View – Shapes Based in Settings and the bars become drawn objects instead, and that alternative renderer does not outline them. Milestones are unaffected either way — they are drawn as diamonds by the day-based renderer whichever hourly mode you are in, so a critical milestone is still outlined in red. For ordinary tasks the red arrows are then your only visual cue. In every case the five columns are fully correct; the red is a visual aid sitting on top of them.

A Gantt chart with Show Critical Path on: critical bars outlined in red, red dependency arrows, and the Late Start, Late Finish, Total Float, Free Slack and Critical columns alongside.
The critical path highlighted in red, with the five calculated columns alongside it.

05 Day-based charts: everything is in days

The unit follows the kind of chart you created, not the view you happen to be looking at. On a day-based chart — any chart that is not an hourly one — durations are in working days, so the critical-path numbers are in working days too, whether you are viewing it daily, weekly or monthly:

  • Total Float and Free Slack are a number of working days.
  • Late Start and Late Finish are shown as dates.

Working days respect the resource’s calendar — weekends and holidays are skipped, exactly like the bars on the chart.

Worked example — the villa’s first fix

Take the First Fix phase of the Oakfield Villa build. A Monday–Friday week, no holidays in the way. Three trades start the moment the house is watertight, and the plastering waits on the two that hide their work behind the walls:

Watertight → Electrical first fix (5 days) and Plumbing first fix (4 days) → Plastering (6 days)
TaskStartsCriticalTotal Float
Electrical first fixThu 3 SepYes0 days
Plumbing first fixThu 3 SepNo1 day
PlasteringThu 10 SepYes0 days

Both trades are on site from Thursday 3 September, but the electrician needs five days and the plumber only four. The plasterer cannot start until both are out, so plastering begins on Thursday 10 September either way — which hands the plumber one working day of float. Their Late Start reads Friday 4 September: they could turn up a day late and hold nothing up. The electrician has no such slack, so a single day lost on the wiring moves the handover.

Notice what float is not. Windows and doors starts the same morning and carries 18 days of float — not because it is unimportant, but because nothing waits on it at all, so its slack runs all the way to the end of the project.

06 Hourly charts: everything is in hours

On an hourly chart, durations are measured in working hours rather than days — so the critical-path numbers switch to hours automatically. That is a property of the chart, so switching it into a daily view to see a wider span does not change it: the figures stay in hours.

  • Total Float and Free Slack are a number of working hours.
  • Late Start and Late Finish carry a date and a time of day. They pick up their format from the chart’s own start-date column, so they show exactly the same way your other dates do.

“Working hours” respect each resource’s working day. If a resource works 9:00–17:00, a task finishing at 17:00 and the next one starting at 9:00 the following morning are treated as back to back — the overnight gap is not counted as float, because none of it is working time. That is what lets hour-based float be exact instead of rounding everything to whole days.

Worked example — installation day

The same refit, planned by the hour. One fitter working 9:00–17:00 (8 working hours a day), Monday–Friday:

Deliver and unpack (8h) → Fit units (4h) and Fit splashback (2h) → Connect appliances (4h)
TaskStartFinishCriticalTotal Float
Deliver and unpackMon 09:00Mon 17:00Yes0h
Fit unitsTue 09:00Tue 13:00Yes0h
Fit splashbackTue 09:00Tue 11:00No2h
Connect appliancesTue 13:00Tue 17:00Yes0h

The critical path is Deliver and unpack → Fit units → Connect appliances. Fit splashback finishes at 11:00, but connecting the appliances can’t start until 13:00 — it is waiting on the longer Fit units — so the splashback carries 2 working hours of float. Its Late Start reads Tue 11:00: it could begin two working hours later and still hold nothing up.

Notice the numbers are the same idea as the day example, just measured in hours instead of days. That is the whole difference between the two.

07 When linked tasks use different working calendars

Each resource has their own working week, and float is always counted in the working time of the resource doing the task. When two linked tasks are done by resources who work different days, that has a consequence people rarely expect: a gap that looks like clear breathing room on the calendar can be worth no float at all.

A worked example

Suppose the crane the roofers need is only on site on Mondays, so the Roofer works Mondays only, while everyone else works Monday to Friday. Roof structure finishes on a Monday. Roof tiling depends on it — but it is also waiting on other work that runs longer, and that is what sets its start, so it begins on the Thursday.

Roof structure (Mondays only) → Roof tiling (Mon–Fri), starting Thursday

Two clear days sit between them, so it is tempting to read that as slack. Gantt Excel works out that the roof structure could indeed finish as late as the Wednesday without moving the tiling — that is its Late Finish. It then measures the distance from the Monday to that Wednesday on the roofer’s calendar, and the roofer works neither the Tuesday nor the Wednesday:

TaskFinishesLate FinishTotal FloatCritical
Roof structureMondayWednesday0 daysYes

So the roof structure is on the critical path. That is the right answer, and you can check it yourself: the roofer’s next working day is the following Monday, which is after the tiling was due to start — so letting the structure slip by one of the roofer’s own days pushes the tiling, and everything after it, out.

Float is always in the task’s own working time

This is the part that most often surprises people. Float is measured in the working time of the resource doing that task — not in calendar time, and not in anyone else’s hours. Suppose the plan above were looser and both of those tasks did have room. Both could show 3 and mean very different things:

TaskResource worksTotal FloatRoughly how much calendar time
Roof structureMondays only3 daysAbout three weeks
Roof tilingMonday–Friday3 daysAbout three days

Both are correct. “Three days of float” means “this task’s resource could put in three more of their working days before anything downstream moves”. If you want to know how much of the calendar that buys, look at the Late Finish date — that is the answer as a real date.

Roof structure, on a Mondays-only Roofer, finishes Monday 21 September with a Late Finish of Wednesday 23 September, Total Float 0 and Critical Yes; Roof tiling, on a Monday–Friday Tiler, starts Thursday 24 September. Both bars are outlined in red.
Two clear calendar days sit between the bars, but they are worth zero working days to a Mondays-only resource — so the roof structure is critical.

08 Summary tasks & milestones

A summary (parent) row doesn’t get its own calculation — every value on it is taken straight from the tasks underneath:

  • Critical reads Yes if any task inside it is critical.
  • Total Float and Free Slack show the smallest value among its tasks — the tightest one in the group.
  • Late Start is the earliest Late Start inside it and Late Finish the latest Late Finish, so the row spans the full late window of everything it contains.

One consequence is worth knowing. On a summary row, Total Float is a summary statistic — the tightest task in the group — so it won’t always line up arithmetically with that same row’s Late Finish. On the individual task rows underneath, the two always agree exactly.

Linking a task to a summary row

You can point a dependency at a summary row rather than at an individual task, and it means what you would expect: “start when everything in that group is finished.” A summary row finishes when the last task inside it finishes, so that is the date your successor waits for.

It works the same way in reverse, which is the part worth spelling out. If the successor’s deadline pushes back onto the summary row, that deadline belongs to every task inside the group — because the group can only be finished once all of them are. So the whole chain leading into that group is measured against it, and any task inside with no room to spare shows up as critical, exactly as it would if you had linked to it directly.

09 Quick reference

Day-based chartHourly chart
Total Float / Free Slack unitWorking daysWorking hours
Whose working time is it measured in?The task’s own resource — so a wide calendar gap can still count as zero; see section 07
Late Start / Late FinishDateDate and time
Critical bars outlined in red✅ except with Hourly View – Shapes Based on
Critical arrows turn red✅ both ends must be critical✅ both ends must be critical
Columns calculated with the highlight off✅ always✅ always
You edit these columnsNever — they’re calculatedNever — they’re calculated

10 Common questions

Two tasks both say Yes and seem to run in parallel — is that a mistake?
No. A project can have more than one critical path. If two chains are equally tight, every task on both is marked critical.
A task shows Critical = Yes but I expected it to have float.
The rule is simply Critical = Yes when Total Float is 0 — nothing else. So look at the Total Float column: if it reads 0, the task really has no room, and something in the chain is holding it exactly where it is. The two columns can never disagree. If there is visibly a gap on the calendar after that task, check whose calendar it sits on — a gap that spans days its resource does not work is worth nothing to them, which is exactly the case in section 07.
A task shows float but I expected it to be critical.
Two common causes, both correct behaviour. Either the task it feeds is being held up by a longer chain arriving from somewhere else, so this one is quietly waiting and has room to spare — that is Plumbing first fix in section 05. Or the task has nothing depending on it at all, in which case its room runs all the way to the project finish. Either way, check the Late Finish date: it tells you the latest this task could actually run.
I used a negative lag (a lead) so a task can start before its predecessor finishes.
That’s fully supported, and the float figures account for it — a lead doesn’t create any artificial breathing room. A tight chain stays fully critical right through a lead link. The four link types and their lags are covered in the Dependencies guide.
Nothing turns red even though tasks show Critical = Yes.
Check three things, in this order. Is Show Critical Path ticked in Gantt ExcelSettings? Are your groups collapsed — the highlight is suppressed while rows are hidden by grouping. And on an hourly chart, is Hourly View – Shapes Based ticked? With that on, the task bars are not outlined — only the arrows, and any critical milestone diamonds, turn red.
The columns look empty on an older chart.
Charts created before this feature gain the five columns automatically the first time something touches them — make any edit to the schedule, or open Settings once, and they appear. Reopening the workbook on its own will not do it: nothing recalculates until something actually changes. They are inserted immediately before the Custom 1 column, so your own custom columns stay to the right of them.

Related: Linking tasks with dependencies · Planning by the hour · Resources, calendars & working days · Settings