Gantt Chart with Dependencies in Excel
Link two tasks, and every date after them takes care of itself
Every spreadsheet Gantt chart arrives at the same moment. A task slips by two days, you drag its bar across, and then you sit there working out by hand which of the other forty bars have to move with it — and which can stay exactly where they are.
Dependencies are the fix for that. You describe the relationships between tasks once, in a column, and from then on the schedule works out the consequences itself. This page explains how they behave, using one real project followed from the first day to the last, and shows what our Excel template does with them.
The short version
- A dependency is a link that says this task waits for that one.
- Set it once, and every date after it stays correct on its own. You stop retyping dates.
- There are four kinds. Finish to start — B begins after A ends — covers nearly everything.
- Lag is a wait built into a link: plaster drying, a delivery, a notice period. A negative lag lets two tasks overlap instead.
- Float is how long a task can slip before the finish date moves. Tasks with none are on the critical path, and those are the ones to watch.
Watch it done, start to finish
Every step on this page in one take — linking two tasks by dragging one bar onto another, using the Edit Task form when you need more control, and what happens to the plan when a task runs late.
01 What a dependency actually is
Put the vocabulary aside for a minute. A dependency is a rule you write down once so that the plan can keep applying it without you.
The units cannot go in until the plaster has dried. Record that as a link between two rows and the schedule knows it permanently. Move the plastering and the units move. Shorten the plastering and the units come forward. You never do that arithmetic again.
There is a single test for whether two tasks are genuinely linked.
If the answer is yes, it is a dependency. If the honest answer is “not really, it would just be a bit awkward”, then it is not one, and linking them anyway invents a delay that does not exist on site. That mistake is common enough that it has its own section further down.
02 One project, followed all the way through
Everything below uses the same job: a kitchen refit starting Monday 5 January. Twelve tasks, one crew, and a worktop supplier who works to their own timetable. Small enough to hold in your head, awkward enough to be honest.
The Waits for column is the whole plan in one place. Read it as ordinary English — that is genuinely all a dependency is. Nobody typed a start or a finish date below the first row; every one of them was worked out from that column.
| Task | Days | Waits for | Start | Finish | |
|---|---|---|---|---|---|
| 1 | Strip out old kitchen | 2 | Nothing — the job starts here | Mon 5 Jan | Tue 6 Jan |
| 2 | First-fix plumbing | 3 | Starts after Strip out old kitchen | Wed 7 Jan | Fri 9 Jan |
| 3 | First-fix electrics | 3 | Starts with First-fix plumbing | Wed 7 Jan | Fri 9 Jan |
| 4 | Plastering | 2 | Starts after First-fix electrics | Mon 12 Jan | Tue 13 Jan |
| 5 | Fit units | 4 | Starts 3 days after Plastering | Mon 19 Jan | Thu 22 Jan |
| 6 | Appliances delivered | 10 | Finishes when Fit units finishes | Fri 9 Jan | Thu 22 Jan |
| 7 | Worktop template | 1 | Starts after Fit units | Fri 23 Jan | Fri 23 Jan |
| 8 | Worktop fabrication | 5 | Starts after Worktop template | Mon 26 Jan | Fri 30 Jan |
| 9 | Worktop fitted | 1 | Starts after Worktop fabrication | Mon 2 Feb | Mon 2 Feb |
| 10 | Light fittings ordered | 12 | Nothing — it can be done any time | Mon 5 Jan | Tue 20 Jan |
| 11 | Second fix | 2 | Starts after Worktop fitted and Light fittings ordered | Tue 3 Feb | Wed 4 Feb |
| 12 | Tiling and painting | 3 | Starts after Second fix | Thu 5 Feb | Mon 9 Feb |
The plan as drawn. Red bars sit on the critical path — the chain that decides the finish date. Green bars have slack. Every arrow is one line of the Waits for column, drawn.
Three of those lines are worth stopping on.
Row 3 starts with the plumbing, not after it. The electrician does not wait for the plumber to finish. Both need the walls open, both start the moment the room is stripped, and they work around each other for three days. Make the electrics wait for the plumbing to finish instead and this plan comes out three working days longer than the job really is, finishing on Thursday 12 February.
Row 5 waits three days longer than it has to. Those three days are not work. They are plaster drying. No one is on site, nothing is being spent, and the calendar moves anyway. A wait like that built into a link has a name — lag — and section 05 is about it.
Row 6 runs backwards from how most people think. The appliance delivery is not driving the unit fitting — the unit fitting is driving the delivery. What matters is that the appliances land as the units go in. Arrive a fortnight early and you have a fridge-freezer in the hallway; arrive late and a fitter stands around. That is a finish-to-finish link, and it is the one most plans quietly leave out.
Everything else is an ordinary finish-to-start link, which is what most of any plan turns out to be.
03 Then the plasterer does not turn up
He is double-booked. Plastering moves from Monday to Wednesday. Two days.
The same plan, two days later on one task. Dotted outlines show where each bar used to be.
Seven more bars moved behind it. Two of them have no obvious connection to plastering at all: the worktop fabrication, which happens in a workshop twenty miles away, and the tiling, three weeks downstream. The delivery window for the appliances quietly slid too, because it is tied to the end of the unit fitting. The finish date went from Monday 9 February to Wednesday 11 February.
Working that out by hand is maybe ten minutes of careful tracing. It is also precisely the sort of careful tracing people skip when they are busy, which is how a plan stops being true without anyone noticing.
Now put the same two days somewhere else.
Float is the difference. Plastering has none, so every day it slips is a day the project slips. The light fittings have nine days spare before anyone needs them, so the same delay costs nothing at all.
This is the part that changes how people run a job. Two identical delays, two completely different outcomes, and no way to tell them apart by looking at the tasks. Float is not something a task has on its own — it emerges from the whole web of links, and it moves every time anything else does.
04 The four types, and the two you will actually use
There are four ways to link two tasks. You will use the first constantly, the second fairly often, the third when you remember it exists, and the fourth almost never.
Finish to start is the workhorse. If it were the only link type you ever used, your plan would still be broadly right. Everything physical tends to work this way: you cannot plaster a wall you have not wired.
Start to start is for work that runs alongside rather than after. Two trades in the same room, a test team that can begin once development has begun, a marketing push that starts when the build starts. Neither task waits for the other to finish; the second simply cannot begin first.
Finish to finish is the one people skip and then miss. It is for work that has to land together — a delivery timed to an installation, documentation that must be ready when the thing it documents is ready, a training session that has to be done by the time a system goes live.
Start to finish is genuinely rare — the least-used of the four by a long way — and most articles on this subject pad themselves out by pretending otherwise. It is a just-in-time hand-off: the successor has to be finished by the time the predecessor starts. Clear the garage before the lorry arrives to unload into it. Get the driveway swept before the skip lands on it. If you find yourself reaching for start-to-finish for anything else, it is worth checking you have not simply got the two tasks the wrong way round.
05 Lag and lead time
A link says what waits. Lag and lead say how long.
Lag is the wait that is not work. Concrete curing. Paint drying. A supplier’s lead time. A fourteen-day notice period. A planning department that answers when it answers. The clock runs, nobody is on site, and no schedule that ignores it is telling the truth.
Every lag is counted in working days, on the calendar of the resource doing the work, so weekends and that person’s holidays never eat into it. Leave the field empty and it stores zero, which is what you want almost every time.
Lead is the reverse — a deliberate overlap, written as a negative lag. Set a
finish-to-start link to -2 and the next task starts two working days
before its predecessor finishes. The worktop fitter can template the first run while the
joiner is still fixing the last unit.
06 Reading your links back
Links are made in two places, and neither involves typing anything cryptic: the Dependencies tab of the task form, where you pick the predecessor, the type and the lag from lists, or a drag of one task’s bar onto the row of the task it should wait for, which makes a plain finish-to-start link in a single gesture.
Underneath that, the file keeps its own record. A WBS Predecessors column and a WBS Successors column sit on the sheet, hidden by default and read-only, holding those same links written as short codes. Most people never open them. The reason to unhide one is auditing: a whole plan’s worth of “what is this actually waiting on?” in one column you can read down in a single pass, instead of opening forty task forms.
They are rebuilt from your links on every recalculation, so typing into one changes nothing. Here is the code taken apart.
A task can wait for as many others as it needs. Row 11 in the plan above reads
9 FS 0|10 FS 0|: second fix waits for the worktop to be fitted
and for the light fittings to have arrived. Every link is a “no earlier than” floor
rather than a fixed date, so the task is scheduled from whichever predecessor holds it up
longest — and it does not care which one that turns out to be on the day.
That is also why a plan tightens as it grows. Each extra predecessor can only push a task later, never earlier, so the more honest you are about what a task really waits for, the more realistic — and usually the longer — the schedule becomes.
07 Five ways this goes wrong
Linking tasks that are merely related. Two jobs can be about the same thing without either needing the other to finish. Link them anyway and you have manufactured a delay. The plan will report a finish date later than it needs to be, and nobody looking at it will be able to see why.
Using a link to mean “the same person is doing both”. Dave cannot paint two rooms at once, so the two rooms get linked finish-to-start. The dates come out right and the plan now lies about the reason. Hire a second painter and it still insists the rooms must happen in sequence. That is a resource constraint, not a dependency, and it belongs in the resource calendar.
One long unbranched chain. If every task has exactly one predecessor and one successor, you have written a numbered list wearing a Gantt chart costume. Real projects fan out and rejoin. A plan with no parallel work has nothing to compress, and its critical path is simply everything.
Waiting on a whole phase when you only need one task inside it. A summary row can be a predecessor, and its rolled-up dates drive the link — which means the successor waits for the last thing in that phase, including the parts you did not care about. Link task to task, and let the phase heading roll the dates up on its own. (The reverse is not even possible: a summary task cannot be given a predecessor, because its dates belong to its children.)
Building a loop. Each link looks reasonable on its own, and together they describe a project that can never begin.
Loops are easy to create and hard to see, because you never look at all three links at the same time. This is one of the few places where a scheduling engine earns its keep instantly: it refuses the link that closes the circle and tells you which tasks are involved. A hand-built spreadsheet formula gives you a circular reference warning at best, and a silent zero at worst.
08 Why a plain spreadsheet struggles with this
You can get further than you might expect with a formula. Give yourself a Start column and a Duration column, and the start of the next task is roughly:
=WORKDAY(C2, D2)That genuinely works. It even skips weekends. It is a real finish-to-start dependency, and for a ten-row plan that runs in a single line, it is enough.
Then the job gets normal.
A task waits for two others, so the formula
becomes MAX of two WORKDAY calls. Then three.
One link is start-to-start, which is a different formula shape entirely. Another is finish-to-finish, which is a third.
Lag arrives, and so does bank holidays, so every formula grows another argument pointing at a range that has to be absolute.
Somebody inserts a row, and every reference below it quietly shifts by one.
All of that is survivable. It is tedious, and it fails silently rather than loudly, but a determined person can keep it standing.
What cannot be done in a cell formula is find the critical path.
Float is not a property of a task. It belongs to the network as a whole, and working it out means walking forward through every chain to find the earliest each task could possibly happen, then walking backward from the finish date to find the latest each one could happen without pushing the end. Two full passes over the plan, in dependency order, every time anything changes. That is an algorithm, not a cell reference — and any attempt to write it as one collapses into a circular reference, because the answer for each task depends on the answers for the tasks that depend on it.
Which is the honest reason most spreadsheet Gantt charts stop at coloured bars.
09 What this template does with all of it
Gantt Excel is an ordinary Microsoft Excel workbook with that scheduling engine already inside it. You type tasks into a grid and set what each one waits for. It works out the dates, draws the bars, finds the critical path, and redoes all three every time you change something.
All four types, plus lag and lead
Finish-to-start, start-to-start, finish-to-finish and start-to-finish, with a lag or a lead on any of them, and as many predecessors per task as the work needs.
Real working days
Weekends, holidays and per-person working patterns are counted properly, so a four-day task lands where it really lands.
The critical path, kept current
The chain that decides your finish date, identified automatically and re-identified on every change, so you always know which slip matters.
Two ways to make a link, depending on how much control you want. Drag a task’s bar onto the row of the task it should wait for and you get a plain finish-to-start link in one gesture — which is most links, most of the time. Open the task form’s Dependencies tab when you want to choose the type or set a lag.
Links that cannot be scheduled are refused at the moment you make them rather than accepted and quietly ignored, and each refusal says why: a task cannot depend on itself, a duplicate link is turned away, and anything that would close a loop is blocked — the predecessor picker leaves those tasks out of the list in the first place.
It runs in Microsoft Excel on Windows and Mac. Nothing to install, no account, and the file lives wherever your files live.
The step-by-step guide to linking tasks → · The critical path and float → · Creating your first chart → · What else is in the template →
10 Every term on this page, in one line each
Written for anyone meeting this vocabulary for the first time — including students, who get handed all of it at once and none of it in plain English.
11 Common questions
Can Excel do Gantt chart dependencies?
How do I show dependencies in an Excel Gantt chart?
What does 4 FS 3| mean in the WBS Predecessors column?
9 FS 0|10 FS 0| in a single cell. The column is hidden by default
and read-only — it is rebuilt from your links every time the schedule recalculates, so it
is something to read, never something to fill in.