1. 18Package boundaries define the blast radius
  2. 19Turning boundaries into build speed

Delivering change

19

Turning boundaries into build speed

Affected graphs and computation caching turn package architecture into fast, reliable CI feedback.

By Eyal Ellenbogen September 8, 2026 2 min read

Decoupled packages keep code understandable, but their real payoff is speed. Once our repository has an explicit dependency graph, our build tools can calculate exactly what changed—and skip everything else.

Run only what was touched

In a monolithic codebase without boundaries, every pull request pays the same tax: a change to a button label triggers the entire test suite, runs all linters, and rebuilds the whole application. As the project grows, CI times climb from five minutes to forty, and pull requests stack up in review queues.

Whether we work in a monorepo using tools like Nx and Turborepo, or coordinate across repositories with tools like Meta and Renovate, task runners calculate what to execute by tracing dependencies upward from modified code:

  • Editing an isolated feature: Only that feature's tests and build tasks run. Sibling features, design system packages, and unrelated end-to-end suites are bypassed completely. A flaky test in an unrelated area can never block a merge.
  • Editing shared UI infrastructure: The runner verifies the shared library and only the downstream packages that import it, ensuring regressions don't slip into consumers.

CI stops being an all-or-nothing bottleneck. The test surface scales with the scope of the change, not the size of the repository.

Computation caching eliminates repeat work

Affected execution skips untouched projects; computation caching skips repeated tasks.

Modern task runners hash the inputs for every task: source files, package dependencies, toolchain versions, and environment variables. If a task's inputs match an existing record in the cache, the runner replays the stored terminal output and artifact files in milliseconds instead of running the process again.

When we share this cache remotely across the team, the benefits compound:

  • CI runs once for everyone: When CI verifies a commit on main, every developer's local machine gets immediate cache hits for those builds and tests.
  • Pulling latest is instant: We can pull main and immediately start working without waiting for local rebuilds.

The architectural payoff

Frontend architecture often gets dismissed as theoretical polish or unnecessary indirection.

Ports, adapters, domain boundaries, and isolated packages do require discipline to set up. But this is where that investment pays off. They transform a codebase from a tangled monolith where every change is risky and slow into a system where changes are isolated, builds are fast, and delivery speed remains high as the team grows.