All posts
architecture

Reading a dependency graph: finding the modules that will hurt you

The Impact team·May 27, 2026

Most teams see their dependency graph exactly once — in a slide, during an architecture review, looking impressive and telling no one anything. Read properly, it's a map of where change is expensive.

Look for the hubs

Every graph has a few nodes that everything points to. A shared utils module, a core model, a base class. These hubs have high fan-in: lots of code depends on them. That's not inherently bad — shared code is the point — but it means a change to a hub has a large blast radius. Break the hub and you break everything downstream. Hubs deserve stability, strong tests, and careful versioning.

Look for the tangles

Healthy architecture flows one direction: UI depends on services, services depend on data, not the other way around. When you see cycles — module A imports B imports C imports A — you've found a tangle. Cycles make code impossible to test in isolation, hard to reason about, and resistant to change. They're where "I'll just refactor this quickly" turns into a two-week yak-shave.

Look for the islands

Clusters that barely connect to the rest are usually a good sign — they're well-encapsulated, and you can change them without fear. When a feature is one tight island with a single edge to the rest of the system, that's a boundary you can trust.

From picture to priority

The value isn't the visualization; it's the prioritization it gives you:

  • Hubs → invest in tests and stability.
  • Cycles → break them before they metastasize.
  • Islands → safe to move fast.

Impact renders your architecture as an interactive graph and computes blast radius per module, so "which change is risky" stops being a gut call.

Want to see this on your own codebase?

Analyze a repo free
Reading a dependency graph: finding the modules that will hurt you