Essential complexity
Essential complexity is the unavoidable difficulty inherent in a problem’s domain, rules, and required outcomes, which cannot be removed without sacrificing necessary behavior.
Collaborative Software Design: How to facilitate domain modeling decisions
Essential complexity is the irreducible complexity inherent in the problem domain that software design can manage but not eliminate.
- How it is used
- Guides bounded-context decisions by balancing local simplicity against communication complexity across boundaries.
- How deep it goes
- Explains the design trade-off and recommends modeling communication, but stops short of prescribing a complexity metric.
- Examples
- Uses alternative bounded-context designs and a group's concern about communication between split contexts.
- What you can do after
- Apply it via domain message flow modeling to compare boundary designs before implementation.
Functional Design and Architecture: Examples in Haskell
Complexity inherent in the problem domain that cannot be removed without failing to support required behavior.
- How it is used
- Frames software design around distinguishing unavoidable domain demands from complexity introduced by implementation choices.
- How deep it goes
- Defines unavoidable complexity and illustrates it through architecture, then stops before measuring or formally decomposing complexity.
- Examples
- Uses spaceship redundancy, recovery codes, subsystem commands, and differing booster and rotary-engine APIs.
- What you can do after
- Evaluate/understand which complexity required behavior imposes and which abstraction choices can keep implementation concerns manageable.
Read how Functional Design and Architecture: Examples in Haskell explains essential complexity →
Related concepts
- complexitykind of · Complexity is the degree of difficulty in understanding, analyzing, changing, or operating a system or problem, arising from its structure, behavior, or interacting parts.
- accidental complexitycontrasts with · Accidental complexity is difficulty arising from implementation choices or technical constraints rather than from the essential requirements of the problem being solved.
- bounded contextcontrasts with · A bounded context is a defined boundary within which a domain model, terminology, and associated rules have consistent meaning and application.
- intrinsic loadequivalent to · Intrinsic load is the mental effort required by the inherent complexity, difficulty, and interactivity of a task or subject matter.
These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.

