# 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]]