Why DI Becomes a Liability at Scale
Dependency injection helps early, but at scale it can preserve coupling instead of preventing it. The real issue is not wiring, it is boundaries.
Dependency injection helps early, but at scale it can preserve coupling instead of preventing it. The real issue is not wiring, it is boundaries.
A scoped message channel can keep components independent without turning your app into a global event bus, as long as orchestration and state mutation stay centralized.
A small set of boundaries that keep an iOS codebase loose: AppContext orchestrates, AppServices do work, AppState stays value-only, and ViewContext becomes the view’s contract.
How small boundary violations compound over time, and why many iOS codebases begin to resist the very teams trying to evolve them.