Separation of Concerns

Separation of concerns is the practice of structuring a system so that each part addresses a single, distinct concern, with as little overlap as possible between parts. When concerns are kept apart, each one can be studied, reasoned about, and changed largely on its own, which makes a system easier to understand and modify.

The term comes from Edsger Dijkstra’s 1974 essay “On the role of scientific thought” (EWD447). Dijkstra describes “the separation of concerns” as “the only available technique for effective ordering of one’s thoughts” that he knows of - a way to focus on one aspect of a problem at a time, such as correctness or efficiency, while remaining aware that the aspects are interdependent. He frames it as a general principle of disciplined thinking, not merely a programming trick.

The idea became foundational to software design. It underlies modularity, layered architectures, and patterns such as Model-View-Controller, all of which divide responsibilities so that changes in one area do not ripple unnecessarily into others.

Robert C. Martin draws an explicit line from Dijkstra’s separation of concerns to his own Single Responsibility Principle, treating the two as expressions of the same underlying goal: keeping things that change for different reasons apart from one another.