Skip to content

Separation of Concerns

Organizing code so that each component addresses a single concern reduces cognitive load, enables parallel development, and localizes the impact of changes.

Tension Addressed

Abstraction vs. Concreteness

Recognizable As

MVC/MVP patterns, aspect-oriented programming, microservices, layered architecture, cross-cutting concerns

Canonical Sources

Edsger Dijkstra, "On the role of scientific thought" (1974); Parnas, module decomposition (1972)

Transfers To

Architecture (system decomposition), Database Design (normalization), UI Design (separation of presentation and logic), Infrastructure (separation of compute and storage)

The challenge is identifying what constitutes a "concern" - this requires domain understanding, not just technical partitioning.