Back to Classic problems

Hidden dependencies: why blockers appear too late

Ce qu'il faut retenir

  • A blocker is almost never a surprise. It is a dependency that existed from day one and was never written down.
  • Cross-team, external and resource dependencies hide best, because no single person can see both ends.
  • A task list cannot represent a dependency. Only a network can.

A project rarely fails because a task took longer than planned. It fails because something could not start when it was supposed to. And when you trace the blocker back, it was almost never unforeseeable — it was a dependency that existed from the first day and was never modelled.

Hidden project dependencies discovered too late

Why a task list cannot hold a dependency

This is the structural cause, and it is worth stating plainly: a list has no way to express "this cannot start until that is done".

A spreadsheet, a Kanban board or a backlog can record what has to happen. None of them can record the constraints between items. The information is not lost through carelessness — the format simply has no field for it.

So the dependency lives in someone's head. It stays valid as long as that person is in the room, remembers it, and is asked. The first time one of those three conditions fails, the dependency becomes invisible.

The four kinds that hide best

Cross-team dependencies

Team A needs something from Team B. Each team plans its own work coherently. Neither plan contains the other. The gap only becomes visible when A is ready and B has not started — typically several weeks after the point where it could have been fixed cheaply.

External dependencies

A supplier, a client validation, a regulatory approval, a third-party API. These sit outside the plan because they sit outside the organisation, and they are the hardest to accelerate once they bite.

Resource dependencies

Two tasks that look independent both require the same person. On paper they run in parallel; in reality they queue. This is the dependency most often missed, because it does not appear in any logical model of the work — only in the calendar of one individual.

Implicit sequencing

"Obviously you can't test before the environment is up." Obvious to the person who has done it before, invisible to the plan. Experience compensates for missing structure right up until the experienced person is on another project.

The compounding effect

A single unmodelled dependency costs a delay. The problem is that they interact.

When a task slips, the consequence is not local. It propagates through every downstream chain that depends on it. If the task sits on the critical path, the whole project moves. If it sits on a chain with little float, it becomes critical — and now a second chain is fragile too.

This is why delays feel like they come in bursts. They do not. They were queued.

Why they surface at the worst moment

An unmodelled dependency does not announce itself. It becomes visible at exactly the moment it blocks something — which is the moment when every option is expensive.

At framing, resolving it costs a conversation. During execution, it costs rework, an escalation, or a renegotiated date. The information was available at both points. Only the price changed.

How to surface them

The mechanism is not complicated, but it has to be deliberate.

Start from deliverables, not tasks. A work breakdown structure forces every piece of work to be named. You cannot model a dependency on something nobody has written down.

Ask the reverse question. Teams naturally list what they will produce. Ask instead: what do you need, from whom, and by when, before you can start? That question surfaces cross-team and external dependencies in minutes.

Model them in a network, not a list. A PERT chart is the only view that holds constraints. Once the network exists, convergence points — where several chains meet — identify themselves, and those are where risk concentrates.

Do it before the schedule. A Gantt chart built before the dependencies are known encodes assumptions as if they were commitments. Every later correction is manual.

Frequently asked questions

Because an unmodelled dependency is only visible at the moment it blocks something. The information existed from the start; nothing in the plan forced anyone to write it down.

Resource dependencies. Two tasks that are logically independent but need the same person appear parallel in the plan and queue in reality. Nothing in a logical model shows it.

Not structurally. A board shows state, not constraints between items. Some tools add dependency links on top, but the board view itself cannot show you a chain or a critical path.

Ask each team what they need from others before they can start, rather than what they will deliver. The inbound question surfaces cross-team and external constraints far faster than the outbound one.

Because delays propagate along dependency chains. A slip on a task with little float makes its chain critical, which makes previously safe tasks fragile. The delays were queued, not simultaneous.

You have spotted the problems in your projects. Now find out how to solve them.

Make dependencies visibleExplore ways to structure a project

Related articles

Scope creep: why projects grow without anyone deciding
Classic problems

Scope creep: why projects grow without anyone deciding

Scope creep is rarely a single bad decision. It is the accumulation of small additions nobody logged, on a scope that was never fully written down.

7 min read