# Separation of Concerns
Separation of Concerns (SoC) is a design principle that advocates dividing a system into distinct sections, each addressing a separate concern. A "concern" is any piece of interest or focus in a program: rendering, data access, business logic, error handling, etc. The term was coined by [[Edsger Dijkstra]] in 1974.
The goal is to minimize overlap between sections so that each can be understood, developed, tested, and maintained independently. When concerns are well-separated, changing one part of the system doesn't ripple unpredictably through others.
SoC manifests everywhere in software: MVC architecture separates data, presentation, and control flow. Microservices separate business capabilities. CSS separates styling from structure. In [[Context Engineering]] for AI, the same principle drives the [[Receptionist AI Design Pattern]] (routing separated from task execution) and [[Prompt Lazy Loading AI Design Pattern (PLL)]] (context separated by role and loaded independently). [[AI Agent Skills]] embody SoC by encapsulating specific capabilities with their own instructions, independent of the base system prompt.
The principle is related to but distinct from modularity: SoC is the reason you modularize; modularity is the mechanism you use.
## References
- Dijkstra, E.W. (1974). "On the role of scientific thought"
## Related
- [[Context Engineering]]
- [[Receptionist AI Design Pattern]]
- [[Prompt Lazy Loading AI Design Pattern (PLL)]]
- [[AI Agent Skills]]
- [[AI Agent Orchestration]]
- [[Lazy Loading]]
- [[Progressive Disclosure]]
- [[SOLID Principles]]
- [[High Cohesion]]
- [[Loose Coupling]]
- [[Atomicity]]