Skip to content
Learn

Gantt chart dependencies, explained

Links are what turn a picture of bars into a schedule that reacts. Four types, one number, and a few traps.

Why links matter more than bars

A Gantt chart without dependencies is a drawing: pretty, static, and wrong the moment anything changes. A dependency (a link between two tasks) encodes a fact about reality: this work cannot happen until that work reaches a certain point. Once the facts are in, the schedule can do its real job, when one task moves, everything downstream moves correctly, and you can see what a slip actually costs before agreeing to it.

The four types

FS

Finish-to-Start

~90% of real links

B starts after A finishes. "Pour the foundation, THEN build the walls." If you are unsure which type to use, it is this one.

SS

Start-to-Start

occasional

B starts when A starts (often with a lag). "Start writing documentation 2 days after development starts", the work overlaps on purpose.

FF

Finish-to-Finish

occasional

B cannot finish until A finishes. "Testing ends when the last fix lands." The ends are tied together; the starts are free.

SF

Start-to-Finish

rare, and usually a smell

B cannot finish until A starts. Legitimate in shift handovers ("the night guard finishes when the day guard arrives"); in most other plans it means the link is drawn backwards.

Lag: the number on the link

Every link can carry a lag, a deliberate wait: "walls start 3 working days after the foundation finishes" is FS+3. The alternative people reach for, quietly padding the task estimate, hides the buffer where nobody can see or question it. Lag on the link is visible, survives every reschedule, and documents itself.

What happens when things move

The whole point of links is the cascade: pull a predecessor two days right and everything chained after it shifts two days, gaps intact, in working days (so a shift across a weekend lands on Monday, not Saturday). Two behaviors separate serious tools from drawing tools here: whether your hand-set gaps are preserved through moves, and whether an impossible arrangement is flagged as a conflict for a human to resolve rather than silently "fixed" by rearranging other people's commitments.

The three classic mistakes

  • No links at all. The chart becomes wall art; every change means manually re-dragging twenty bars, so nobody updates it, so it dies.
  • Linking everything to everything. An over-constrained plan cannot flex; one small slip cascades into chaos. Link real constraints only, "nice to do first" is not a dependency.
  • Date-pinning instead of linking. Typing a start date "because that is when the predecessor ends" freezes today's answer into the plan. When the predecessor moves, the pinned task does not, and the chart starts lying.

Common questions

Which dependency type should I use?

Finish-to-start, unless you have a specific reason. It matches how most work actually flows, and a plan of mostly FS links with a few deliberate SS overlaps is easy for everyone to read. If you find yourself reaching for start-to-finish, first check whether the link is simply drawn in the wrong direction.

What is lag (and lead)?

Lag is a deliberate wait built into a link: "start 3 days after the dependency finishes", curing concrete, waiting for a review window. Lead (negative lag) overlaps the work instead: "start 2 days before it finishes". Lag on the link beats padding the task, because it survives rescheduling and everyone can see WHY the gap exists.

What happens to my gaps when tasks move?

In a good scheduler, the gap you set on a link is preserved when the predecessor moves: the whole chain shifts and your 2-day buffer is still 2 days. Cheap tools sometimes collapse gaps to zero on every move, silently eating your buffers, one of the first things worth testing in any Gantt tool.

What is a dependency conflict?

A state where a task sits earlier than its links allow, for example after someone drags it left of its predecessor's finish. Tools handle this differently: the honest ones detect and FLAG the conflict so a human decides; the dangerous ones silently rearrange other tasks to make it fit. Silent fixing feels smooth and quietly rewrites commitments.

Should milestones have dependencies?

Yes, that is their whole value. A milestone with incoming links moves when reality moves, so "Launch" is always an honest date. A milestone without links is a wish pinned to a calendar.

Related: what is the critical path · how to plan a project with a Gantt chart

All four types, lag, gap preservation and conflict flags, built in

GanttPulse is free during the beta. Local-first, one-time license, no cloud account.

Join the free beta