Home / Knowledge / Separation of Concerns

What Is Separation of Concerns?

Short answer

Separation of concerns is the principle of breaking a system into parts so that each part carries exactly one responsibility (a concern) and needs to know as little as possible about the others. The computer scientist Edsger W. Dijkstra coined the term in 1974, in his essay “On the role of scientific thought.” In manufacturing, the principle shows up in the separation of IT and OT, in zones and conduits under IEC 62443, or in a namespace that separates data storage from application logic. Separation of concerns is a design principle, not a ready-made pattern.

Reading time 9 minutesEditorial team, inray Industriesoftware
Tight coupling means one change ripples through the whole system, separation of concerns means each module owns its data behind a clear interface

Definition: Separation of Concerns

Edsger W. Dijkstra coined the term in 1974, in his essay “On the role of scientific thought” (EWD447), published in the E.W. Dijkstra Archive at the University of Texas at Austin. In it, he describes it as the only effective way to deal with the complexity of a problem: focusing on a single aspect at any given moment, without losing sight of the other aspects and how they interact.

A concern is a well-defined responsibility of a system — capturing measurements, storing them, securing them, or displaying them, for instance. Separation of concerns requires that each part of a system carry exactly one such concern and know the other parts only through a defined interface.

The idea was formalized shortly afterward in structured analysis and structured design: W. P. Stevens, G. J. Myers, and L. L. Constantine described the concepts of coupling and cohesion in 1974 in the IBM Systems Journal as measurable indicators of good separation.

Term Meaning Goal
Concern a well-defined responsibility of a system exactly one concern per part
Coupling how strongly two parts depend on each other as low as possible
Cohesion how strongly the tasks within a part belong together as high as possible

Why systems get broken into responsibilities

Without separation, every part of a system can, in the worst case, know every other part: with six modules, that is up to fifteen possible dependencies, with ten, up to forty-five — the same arithmetic that describes coupling between individual IT systems. Every change to one module can then touch every other one, and no one can predict alone what a small adjustment will actually affect.

Separation of concerns reduces these dependencies to defined interfaces between a small number of parts. A data-capture module can change without the analysis layer noticing, as long as the interface between them stays the same. The separation does not make a system smaller, but it makes it understandable — and, more importantly, changeable, without every change turning into an investigation of the whole system.

Coupling and cohesion

These two measures from structured analysis can be read off any system — whether it consists of code, of equipment, or of organizational units.

Trait High Coupling / Low Cohesion Low Coupling / High Cohesion
Changes trigger follow-on changes elsewhere stay contained to one module
Data access several modules read and write the same data source each module owns its data; others query it through an interface
Testability a module cannot be tested without the others a module can be tested in isolation
Team boundaries a change needs coordination across several teams one team can own a module on its own

The goal is not to eliminate coupling entirely — no system works without connections between its parts — but to concentrate it into a small number of named interfaces instead of letting it spread uncontrolled across the whole system.

Examples in practice

  • IT/OT separation. Responsibility for production control (OT) is separated from responsibility for office IT — not out of distrust, but because the two follow different requirements for availability, update cadence, and failover.
  • Zones and conduits under IEC 62443. The standard divides an automation network into security zones with comparable protection needs and allows communication between them only through defined, monitored crossings (conduits) — separation of concerns as a security architecture.
  • Unified Namespace. A namespace separates the responsibility for holding data (the current state of each source) from the responsibility of each individual application that uses that data — source and consumer never know each other, only the name of the information.
  • Layered architecture. The classic split into data capture, data storage, business logic, and presentation is the oldest and most widespread application of the principle.

What the separation technically runs on

  • Interfaces as a contract. An interface (API) defines what one part may expect from another — and what it may not. If the inside of a module changes without touching the interface, the rest of the system never notices.
  • No shared data access across responsibilities. Each module owns its data; other modules query it instead of reading or writing directly into a shared database — otherwise coupling forms that no interface makes visible.
  • Event-driven decoupling. A publish-subscribe pattern, the same one underlying a Unified Namespace, decouples source and consumer in both time and technology: both only know the name of the information, not each other.
  • Versioning. Interfaces do change eventually — a version number makes visible which side is speaking with which expectation, instead of breaking silently.

Four steps to separating concerns

  1. Name the responsibilities

    What concerns actually exist — data capture, security, analysis, presentation? The list comes from the task at hand, not from the technology already in place.

  2. Define interfaces instead of direct access

    Every responsibility gets an interface other parts use to address it — never direct access to its internal data.

  3. Assign ownership

    A responsibility should be clearly owned by one team or role — otherwise the technical separation does not hold either.

  4. Check the separation

    The bulkhead test: does a change in one part regularly force changes in another part that should have nothing to do with it? If so, the boundary is drawn in the wrong place.

What separation of concerns is not

  • Not an argument for any number of layers. The number of parts follows the number of genuinely distinct responsibilities — not a layer count someone believes is correct.
  • Not a substitute for defining an interface. Putting two modules into separate files or services without specifying what they may expect from each other separates nothing — it only renames the problem.
  • Not a purely technical matter. How a system is broken apart is closely tied to how the teams building and running it are organized — an observation known in software development as Conway’s Law.
  • Not an end in itself. A separation no one uses for changes, testing, or ownership is just extra effort with nothing to show for it.

Common pitfalls in practice

  • Over-separation. For a small, stable system, six neatly separated layers can cost more in interface upkeep than they gain in clarity.
  • Wrong boundaries. Separating along technical lines (say, by database table) instead of along actual responsibility means a single business process still ends up touching several modules at once.
  • The distributed monolith. Modules are deployed as separate services but still hit the same database and call each other synchronously everywhere — the result combines the complexity of a monolith with that of a distributed system, without the benefits of either.
  • Missing ownership. A responsibility with no clear owner drifts back into being mixed with others over time, even if the technical separation was clean to begin with.
The honest part

Separation always costs something: more interfaces, more contracts between the parts, more effort spent maintaining and testing the boundaries themselves. It pays off when parts change at different rates or are owned by different teams. For a small system with one team, two clearly separated layers are often worth more than six.

How pronubes separates concerns

pronubes is the platform between the shop floor and IT — built on the same principle it delivers to its customers.

  • pronubes Edge carries exactly one responsibility: capturing raw data at the source and buffering it through connection loss.
  • pronubes Zones carries the responsibility for structure and naming — independent of which application later uses the data.
  • pronubes Insights carries the responsibility for analysis and visibility, without capturing or structuring data itself.

Each component talks through a defined interface rather than a shared database — so replacing one piece never turns into rebuilding the whole landscape. More on the platform

Key terms explained
Separation of Concerns
Principle of breaking a system apart so each part carries exactly one responsibility and knows other parts only through an interface.
Concern
A well-defined responsibility of a system, such as data capture, security, or presentation.
Coupling
Measure of how strongly two parts of a system depend on each other. Goal: as low as possible.
Cohesion
Measure of how strongly the tasks within one part belong together. Goal: as high as possible.
Zones and Conduits
Concept from IEC 62443 that divides an automation network into security zones with defined, monitored crossings.
Distributed Monolith
Several separately deployed services that remain tightly coupled, for instance through a shared database.
Conway’s Law
Observation that a system’s structure mirrors the communication structure of the organization that builds it.
Ask us

Frequently asked questions

Is separation of concerns the same thing as microservices?

No. Microservices are one possible way to implement the principle, not the only one. Separation of concerns can just as well be applied inside a single system that is cleanly split into modules — separation is a question of structure, not of deployment.

How many layers is the right number?

As many as there are genuinely distinct responsibilities — no more. The principle does not set a fixed number.

What does this have to do with IT/OT separation?

IT/OT separation is a direct application of the principle: production control and office IT are treated as separate responsibilities, each with its own requirements for availability and security — formalized, among other places, in zones and conduits under IEC 62443.

How do you spot poor separation?

With the bulkhead test: if a change in one place regularly forces changes in another place that should have nothing to do with it, the boundary is drawn in the wrong spot.

When is strict separation not worth it?

For a small, stable system with one team that already has the full picture. There, every extra layer costs more to maintain than it adds in clarity.

Get started

Responsibilities that stay clear even after the tenth extension.

30 minutes on your system landscape: where concerns are mixed today, what interfaces should look like, and where separation fails in practice.

pronubes by inray

pronubes is a product of inray Industriesoftware GmbH. Over 30 years of industrial software made in Germany. Innovative and reliable for manufacturing companies.