Metrics
Architecture metrics, made practical
Metrics are only useful when they help you decide what to do next. Each page below starts with plain-English interpretation: what a high value means, when to act on it, when to ignore it, and where AtlasArc shows it.
AtlasArc marks readings that need context. Detailed explanations include a Keep in mind caveat, while ratio metrics on packages with fewer than three classes carry a low-confidence signal rather than presenting a fragile extreme as certainty.
Inside AtlasArc, a clickable sidebar value opens a drill-down that explains the reading and exposes the evidence available behind it. Depending on the metric, that can mean coupled units and edge references, formula operands, contributing classes, methods or files, packages, or edge sets—so an aggregate signal leads to inspectable causes rather than an unspecified detail panel.
- Structural
Cyclic dependencies
Count and classify dependency cycles as architectural, aggregation, or nested-internal. See which packages are entangled and which relationships form the cycle core.
- Coupling
Fan-in and fan-out
Measure how widely a package is used and how many dependencies it takes on. The primary signal for evaluating structural stability and coupling.
- Stability
Instability and abstractness
Read coupling balance and public abstraction together, including Zone of Pain and Zone of Uselessness position.
- Visibility
Relative visibility
Measure the share of JVM classes that are public, then inspect whether that package surface is deliberate.
- Complexity
Cyclomatic complexity
Count independent control-flow paths through methods. CC max reveals the worst offender; CC avg shows how widespread the complexity is across the package.
- Complexity
Cognitive complexity
Measure how hard code is to read by penalizing nesting and flow-breaking constructs. This is a closer proxy for actual reading difficulty than cyclomatic complexity.
- Size
Class and source-file count
Count declared JVM types or represented TypeScript source files inside an architecture boundary before refactoring or extraction work.
- Size
Lines of code
Count source lines in a package or class. The fastest orientation metric for finding where the weight is in an unfamiliar codebase.
- Size
Method count
Count methods on a class. High method count is the fastest smell test for a class that has accumulated too many responsibilities over time.
- Coverage
Line and branch coverage
Surface JaCoCo line and branch coverage as architecture heatmaps. Find which load-bearing packages the test suite is not actually exercising.
Alternative terms
Afferent coupling (Ca)
Alternative name for Fan-in and fan-out
Efferent coupling (Ce)
Alternative name for Fan-in and fan-out
Distance from the main sequence (D)
Alternative name for Instability and abstractness
Stable abstractions principle
Alternative name for Instability and abstractness
Zone of pain
Alternative name for Instability and abstractness
Zone of uselessness
Alternative name for Instability and abstractness
Strongly connected components (SCCs)
Alternative name for Cyclic dependencies
Circular dependencies
Alternative name for Cyclic dependencies
Dependency cycles
Alternative name for Cyclic dependencies
Metric matrix
AtlasArc computes package, subsystem, class, coverage, cycle, and project-level metrics from the same analysis model. This matrix maps each metric to common aliases, what it measures, the lenses where it most directly drives interpretation, and the workflows that use it.
Availability follows the evidence in the active analysis. Java and Kotlin supply JVM-only readings such as Abstractness, Distance, and Relative Visibility; those stay unavailable for TypeScript. Java/Kotlin complexity comes from AtlasArc's built-in analysis, while TypeScript complexity requires compatible SARIF evidence. Coverage appears only after a JaCoCo or LCOV report is loaded. This is a product-wide metric map, not a promise that every row exists in every analysis. See TypeScript support and each metric page for the exact input and unavailable-state contract.
| Name | Alias | What it measures | Primary lens drivers | Workflows |
|---|---|---|---|---|
| Package and class metrics | ||||
| Fan-out | Efferent coupling, Ce, exits | Outgoing dependency targets; external packages this package or class uses. | Topology Graph, Package Matrix, Hotspots, Composition heatmap, Metrics sidebar | Review package boundaries; Understand subsystem coupling; Find packages that know too much; Stable but too concrete; Packages in the wrong place; Zone of Uselessness; Ticking time bombs; Audit a module boundary |
| Fan-in | Afferent coupling, Ca, entrances | Incoming dependency sources; packages or classes depending on this item. | Topology Graph, Package Matrix, Hotspots, Composition heatmap, Metrics sidebar | Review package boundaries; Understand subsystem coupling; Show me the backbone; Find packages that know too much; Stable but too concrete; Zone of Pain; Zone of Uselessness; Leaky internals; Hard-to-change packages; Audit a module boundary |
| Instability | I | Dependency balance; fan-out divided by fan-in plus fan-out, 0 stable to 1 unstable. | Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap | Identify risky hotspots; Understand subsystem coupling; Show me the backbone; Cycle / tangle reduction; Zone of Pain; Zone of Uselessness; Ticking time bombs; Audit a module boundary |
| Abstractness | A | Public abstraction ratio; interfaces and abstract types compared with public type count. | Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap | Identify risky hotspots; Show me the backbone; Stable but too concrete; Zone of Pain; Zone of Uselessness |
| Distance from main sequence | D, normalized distance | Fit to stable abstractions principle; absolute distance from A + I = 1. | Hotspots Zone Map, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Identify risky hotspots; Packages in the wrong place; Zone of Pain; Zone of Uselessness; Inspect subsystem composition |
| Relative visibility | RV, visibility | Public JVM classes divided by all JVM classes represented for the package in the metric model. | Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap and JVM-public class markings | Leaky internals; Understand subsystem coupling |
| Cyclomatic complexity max | CC max | Strongest control-flow path-count outlier beneath a package, class, source folder, or source file. | Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Identify risky hotspots; Hard-to-change packages; Complexity hotspots |
| Cyclomatic complexity average | CC avg | Mean control-flow path count across scanned methods or class-weighted package rollups. | Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Complexity hotspots |
| Cognitive complexity max | CogC max | Strongest estimated reading-difficulty signal from nesting, branching, recursion, and flow disruption. | Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Complexity hotspots; Inspect subsystem composition |
| Cognitive complexity average | CogC avg | Mean reading difficulty across scanned methods or class-weighted package rollups. | Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Complexity hotspots |
| Class / source-file count | Types, type count, source-file count | Implementation-unit count: declared types for Java/Kotlin packages and represented source files for TypeScript source folders. | Composition, Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap | Identify risky hotspots; Understand subsystem coupling; Inspect subsystem composition |
| Lines of code | LOC, lines | Code mass by source lines in a package, class, or subtree. | Composition, Hotspots, Subsystems, Topology Graph heatmap, Package Matrix heatmap | Inspect subsystem composition |
| Method count | Methods | Class-level size and responsibility count; number of methods on a class bubble. | Hotspots class mode, Composition class mode | Complexity hotspots |
| Line coverage | JaCoCo / LCOV line coverage | Executed line ratio from a loaded coverage report; low values are riskier. | Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Manual coverage heatmap review |
| Branch coverage | JaCoCo / LCOV branch coverage | Executed branch ratio from a loaded coverage report; low values expose untested decisions. | Topology Graph heatmap, Package Matrix heatmap, Composition heatmap, Metrics sidebar | Manual coverage heatmap review |
| Dependency, cycle, and subsystem metrics | ||||
| Dependency references | Edge count, ref count, weight | Number of concrete references from one package to another. | Package Matrix boundary mode, Topology Graph, exports | Find cyclic package dependencies; Review package boundaries; Show me the backbone; Find packages that know too much; Find accidental boundary leaks; Packages in the wrong place |
| Cycle status | Cyclic dependencies, SCC, cycle type | Whether an item participates in architectural, nested, aggregation, governed, or no cycles. | Topology Graph, Package Matrix, Subsystems internal tangles, Hotspots cycle colour | Find cyclic package dependencies; Cycle / tangle reduction; Audit individual cycle groups |
| Cycle group count | Internal cycles, SCC count | Number of strongly connected dependency groups fully inside a subsystem tree. | Subsystems internal tangles, Metrics sidebar | Find cyclic package dependencies; Cycle / tangle reduction; Audit a module boundary; Audit individual cycle groups |
| Largest cycle size | Largest SCC | Package count in the largest internal dependency cycle for a subsystem tree. | Subsystems internal tangles, Metrics sidebar | Cycle / tangle reduction; Audit a module boundary; Audit individual cycle groups |
| Architecture-unit count | Package count, source-folder count, subsystem size | Number of packages in a JVM subtree or source folders in a TypeScript subtree; structural breadth, distinct from implementation-unit count. | Subsystems, Composition, Metrics sidebar | Understand subsystem coupling; Audit a module boundary; Inspect subsystem composition |
| Internal edges | Internal coupling | Dependency edges where source and target are both inside the same subtree. | Subsystems, Boundary Flow, Metrics sidebar | Understand subsystem coupling; Audit a module boundary |
| Boundary fan-out | Subsystem exits, efferent boundary coupling | External packages depended on by packages inside the subsystem. | Subsystems boundary risk, Boundary Flow, Metrics sidebar | Understand subsystem coupling; Audit a module boundary |
| Boundary fan-in | Subsystem entrances, afferent boundary coupling | External packages that depend on packages inside the subsystem. | Subsystems boundary risk, Boundary Flow, Metrics sidebar | Understand subsystem coupling; Audit a module boundary |
| Subsystem instability | Boundary I | Subsystem boundary balance; exits divided by exits plus entrances. | Subsystems boundary risk, Metrics sidebar | Understand subsystem coupling; Stable but too concrete; Zone of Pain; Audit a module boundary |
| Subsystem cohesion | Cohesion | Internal connectedness; internal edges compared with total internal plus boundary edges. | Subsystems boundary risk, Metrics sidebar | Understand subsystem coupling; Audit a module boundary |
| Recursive abstractness | Subsystem abstractness | Class-count-weighted abstractness across every package in a subtree. | Subsystems visibility surface, Topology Graph subsystem heatmap, Package Matrix subsystem heatmap | Stable but too concrete; Zone of Pain |
| Recursive visibility | Subsystem visibility | Class-count-weighted relative visibility across every package in a subtree. | Subsystems visibility surface, Metrics sidebar | Leaky internals; Understand subsystem coupling |
| Project-level metrics | ||||
| Cumulative component dependency | CCD | Total transitive dependency load across all components. | Project stats, reports, model exports | Project architecture health review |
| Average component dependency | ACD | Average transitive dependency load per component. | Project stats, reports, model exports | Project architecture health review |
| Relative average component dependency | RACD | Average transitive dependency load normalized by graph size. | Project stats bar, Metrics sidebar | Project architecture health review |
| Normalized cumulative component dependency | NCCD | Overall coupling density compared with a balanced component hierarchy. | Project stats bar, Metrics sidebar | Project architecture health review |
| Average relative visibility | ARV | Arithmetic mean of package RV values, giving each package equal weight. | Project stats bar, Metrics sidebar | Leaky internals; Project architecture health review |
| Global relative visibility | GRV | Public JVM classes divided by all JVM classes across the graph. | Project stats bar, Metrics sidebar | Leaky internals; Project architecture health review |