Make large codebases small enough to reason about

Large projects do not fail because they have too many packages. They fail when every view shows everything at once. A full dependency graph is useful only after you have made it smaller, or after you have switched to a view that answers a narrower question.

AtlasArc handles large projects by reduction. Set the relevant module, package, or source folder as Current Focus, pin a structural subject when outside relationships matter, contract pass-through package folders, roll deep namespaces up for triage, filter weak or irrelevant dependencies, and switch from the graph to Matrix, Subsystems, Hotspots, or Composition when another lens is more honest about the problem.

Use this page as a field guide. It starts with the moment the graph is too large to read and ends with the exact dependency examples, source files, and exports you need for a review or refactoring ticket.

Start with a readable map

The first mistake on a large codebase is to expand everything. That gives you a diagram of the scanner's completeness, not a map of the architecture. AtlasArc starts from the opposite direction: show the first level where real package relationships are visible, then let you open more detail only where it helps.

Contracted folders are deliberately conservative. AtlasArc does not absorb a leaf package, a direct cycle participant, the current Focus root, a Safe Haven, or a folder with multiple visible children. The point is to remove namespace ceremony, not hide a meaningful boundary.

Start here when the first graph looks either too empty or too dense. Before changing any filters, check whether the default expansion has already found the first useful architectural layer.

Screenshot: smart initial expansion and contracted package folders

Choose what should stay in view

The fastest way to make a large project readable is to stop looking at all of it. Sometimes the question lives inside one module or package. Sometimes one subsystem, boundary, or cycle group is the subject and its outside relationships need to remain visible. AtlasArc gives those different questions different controls.

Use Root when the question stays inside one module, package, or source-folder subtree; use a pinned subject for a local dependency perimeter or boundary read; use Cycle View when the subject is already a strongly connected group. Neighbourhood and Boundary are explanatory readings of a pinned subject, not separate product modes. These are different reductions, not synonyms.

Screenshot: Focus opening every lens on one subsystem

Roll up detail without losing signal

Even after choosing Current Focus, a Java, Kotlin, or TypeScript hierarchy can be deeper than the architectural question. In that case, read the shape first and expand the exact branches later. AtlasArc gives you several ways to reduce depth while preserving the signals that matter.

The important detail is that subsystem health is computed from the repository-scoped structural graph, not from whatever happens to be visible after your current view filters. A filtered view can be narrow; the rollup metrics still describe the in-scope subsystem underneath it.

Progressively reveal the whole project: enable rollup and choose the lowest depth that still separates meaningful hierarchy branches, then use Expand All. The hierarchy is now fully expanded underneath the rollup, so raise Rollup depth one step at a time to reveal the next namespace level beneath Current Focus. Stop as soon as the added detail makes the diagram harder rather than easier to read, then set the suspicious package as Root before drilling further.

Screenshot: Deep Package Rollup with collapsed-folder cycle indicators

Filter the noise

On a large project, filters are how you make a question precise enough to answer. Start with a broad scope, then use thresholds and view exclusions until the remaining packages all have a reason to be on screen. Hiding something from the view does not remove it from the analyzed architecture.

Do not treat one filter setting as "the architecture." Treat each filter as a hypothesis. For example: "show packages with high fan-in and low fan-out," "show boundary edges with at most two references," or "show only cycle participants under this module." Because the Status Cluster keeps every active filter in view, you can narrow the model hard without losing track of how much you have hidden — the warning arrives while you are still narrowing, not only when the graph is already empty.

Screenshot: reference and fan filters with Hide isolated enabled

Use the right lens for the question

A graph is the right lens when you need shape: paths, neighbours, clusters, and visible cycles. It is not always the right lens for direction, relative size, subsystem comparison, or metric outliers. AtlasArc keeps one shared architecture model underneath the lenses, so switching views changes the question without discarding the scope you already chose.

The escape route from an unreadable graph is often not "tune the graph harder." If you are checking intended dependency direction, use the Matrix. If you are mapping pressure across visible architecture boundaries, use Subsystems. If you are building a refactoring shortlist, use Hotspots. If you are trying to understand where the code lives, use Composition.

Screenshot: same scoped model in Matrix, Subsystems, Hotspots, and Composition

Triage cycles one group at a time

Cycle detection is more than a red highlight. On a large project, the useful question is not "are there cycles?" It is "which cycle group is this, what kind of cycle is it, and what decision does it need?" AtlasArc separates the full structural graph from the problem graph: the subset of packages and edges that participate in unresolved cycle problems.

A good cycle triage pass usually has three outcomes: refactor now, record a debt item, or sanction an intentional exception. AtlasArc keeps those decisions visible instead of pretending accepted coupling disappeared.

Useful next steps: run the Find cyclic dependencies workflow for discovery, then use Audit individual cycle groups when the backlog is large enough to need a group-by-group pass.

Screenshot: Only Cycles with detail levels, group navigator, and Safe Haven state

Prioritize what to fix first

Reduction gets the model small enough to inspect. Prioritization decides where effort pays off. Do not fix the first red node just because it is visible. Compare coupling pressure, stability, size, complexity, coverage, and subsystem context before choosing the next refactor.

For a first prioritization pass on an unfamiliar large project, start with Show me the backbone, then compare Identify risky hotspots and Understand subsystem coupling. If coverage data is available, add Complex code with weak coverage before committing to a risky refactor.

Screenshot: Hotspots Galaxy continuation with visible package Routes

Drill to evidence and report

A reduced visual finding only matters if it becomes evidence. Once you have narrowed a large project to a package, boundary, cycle, or hotspot, the next step is to inspect the actual dependency examples and produce something the team can act on.

The strongest reports are scoped to a decision. Generate a whole-project baseline when you need trend comparison; generate a subject, boundary, cycle, or current-investigation report when you need evidence for the next action.

Screenshot: edge examples sidebar and generated Architecture Report

Built to stay fast

The reductions above are not cosmetic browser tricks. AtlasArc computes the meaningful reductions in the plugin backend and sends the UI a view model that already reflects Current Focus, filters, cycle detail, rollup, and lens data.

This is why the large-project strategy is reduction, not force. You should not have to wait for a huge full graph before you can ask a smaller question.

Where to go next

To see the same reduction ideas in the product story, open the product overview. To try them on your own repository, start with Getting started. For guided investigations, use the workflow library: it turns the moves above into concrete questions such as finding cycles, reviewing package boundaries, identifying hotspots, auditing a subsystem, or preparing an architecture health review.