Dependency Direction & Coupling

A healthy dependency graph generally points from high-level features toward lower-level reusable infrastructure. Circular dependencies and feature-to-feature imports should be deliberate and rare.

Use public module boundaries to prevent consumers from reaching deep into another feature's internals. This allows refactoring without breaking unrelated code.

Architecture is not only folder structure. It is the set of dependencies the codebase permits.

Key Takeaways
  • Control what modules are allowed to depend on.
  • Expose stable public APIs for features.
  • Architecture should constrain coupling, not merely document it.