Field guide 01 / Lesson 02
Modular Design Systems
Decompose systems around responsibility, hidden decisions, and explicit interface contracts.
On this page
- 1. Why decompose systems?
- 2. What makes a useful module?
- 3. Cohesion, coupling, and change propagation
- 4. Interfaces and contracts
- 5. Information hiding and abstraction
- 6. Modularity across domains
- 7. Software modules and Atomic Design
- 8. Event-bus simulator
- 9. Modularity tradeoffs
- 10. Worked architecture exercise
- Worked example
- Misconceptions
- Glossary
- Knowledge check
- References
Your destination
Learning objectives
- Explain why engineers decompose systems.
- Define a module in context.
- Distinguish purposeful decomposition from arbitrary subdivision.
- Explain cohesion, coupling, and information hiding.
- Describe interfaces as behavioral and operational contracts.
- Identify tight coupling and change propagation.
- Compare physical, software, organizational, and interface modularity.
- Evaluate modularity tradeoffs.
- Propose a modular decomposition for a familiar system.
Before you begin
- Systems Thinking is recommended but not required.
1. Why decompose systems?
Decomposition creates manageable reasoning units, but the cut lines determine what becomes easy or difficult to change.
Complex engineered systems are often organized into hierarchies whose elements interact strongly within groups and more weakly across groups. Simon described this near-decomposable structure as a recurring architecture of complexity. (Simon, 1962)
A useful decomposition can support parallel work, focused verification, replaceability, maintenance, reuse, change isolation, and fault containment. Those outcomes are not automatic: they depend on the criterion used to divide the system and on the quality of the resulting interfaces. (Parnas, 1972; National Aeronautics and Space Administration, 2016)
2. What makes a useful module?
A module is valuable when it creates a meaningful boundary around responsibility and change.
- Clear responsibility: a reason for the elements to belong together.
- Internal cohesion: related work and decisions remain close.
- Limited external dependency: other modules need little internal knowledge.
- Stable interface: externally visible commitments change less often than implementation.
- Replaceability: an alternative can satisfy the same contract.
- Testability: behavior can be examined at the boundary.
These qualities pull against one another. A boundary that maximizes reuse may require a more general interface; a specialized module may be faster or simpler but less replaceable.
3. Cohesion, coupling, and change propagation
A change is a practical test of architecture: how far must its consequences travel?
Tangled
- Shared internal data
- Hidden call-order assumptions
- Many direct dependencies
- A local change reaches several owners
Well bounded
- Owned internal state
- Explicit contract
- Few necessary dependencies
- Most changes stop at the boundary
Architecture simulator
Direct dependencies or event mediation?
Change impact: the sender knows three receivers.
Text alternative and tradeoff
Direct calls make receivers explicit but couple the sender to each receiver. Event mediation lets the sender depend on one event contract, while subscribers depend on delivery, ordering, schema, and observability behavior. A mismatched contract can isolate one subscriber when validation is local, or create a wider cascade when the shared contract changes incompatibly.
4. Interfaces and contracts
An interface is the complete agreement needed for two elements to interact—not merely the connector drawn between them.
- Inputs and outputs, including units and data formats.
- Physical fit, power, capacity, and environmental limits where relevant.
- Behavior, sequence, state, and timing.
- Communication protocol and error handling.
- Assumptions, ownership, security, and version compatibility.
Two components can fit physically or connect technically and still be incompatible because their timing, meaning, allowable state, version, or error assumptions differ.
5. Information hiding and abstraction
A strong boundary reveals what another module needs and conceals design decisions it should not depend on.
Information hiding
- Conceals replaceable implementation decisions.
- Reduces dependency on internal representation.
- Still exposes behavior needed for safe use.
Not the same as
- Secrecy from authorized stakeholders.
- Withholding hazards or constraints.
- An excuse for undocumented behavior.
Encapsulation is a mechanism for enforcing a boundary; abstraction is a simplified view for a purpose. They support information hiding but are not interchangeable terms. (Parnas, 1972)
6. Modularity across domains
The same reasoning appears in physical, software, organizational, and interface design, but the constraints differ.
- Physical: a replaceable battery pack must meet mechanical, electrical, thermal, and safety constraints.
- Software: a service module exposes operations and data contracts while owning internal storage decisions.
- Manufacturing: a cell groups equipment and work around a production responsibility.
- Organization: a team boundary assigns decision ownership but also creates coordination interfaces.
- User interface: reusable components organize visual and behavioral decisions.
7. Software modules and Atomic Design
Software and interface design provide familiar applications of broader modular principles.
JavaScript modules use explicit export and import syntax to define what a module makes available and what it consumes. Browser modules have their own scope, run in strict mode, and execute once per module graph. (Mozilla Developer Network contributors, 2026)
Atomic Design organizes interface work as atoms, molecules, organisms, templates, and pages. It is a design-system methodology: it can improve composition and consistency, but it is not a complete system architecture or a universal decomposition method. (Frost, 2016)
Broader engineering concept
- Module: contextual system boundary
- System architecture: elements, relationships, and principles
- Interface: cross-boundary contract
Specific applications
- JavaScript module: language/runtime unit
- Design system: reusable UI decisions and components
- Atomic Design: component hierarchy methodology
8. Event-bus simulator
Event mediation changes who knows whom. It removes some direct dependencies while introducing new operational contracts.
In direct communication, a sender calls known receivers. With an event bus, a sender publishes an event contract and subscribers react without the sender naming them. This can isolate some changes, but it can also make ordering, delivery, ownership, observability, and schema evolution harder.
9. Modularity tradeoffs
Every boundary adds an interface that must be designed, integrated, governed, tested, and evolved.
- Interface overhead and translation cost.
- Performance or latency across boundaries.
- Integration and version compatibility.
- Excessive fragmentation and distributed ownership.
- Difficulty selecting stable boundaries early.
- Reuse pressure that conflicts with specialized optimization.
- Operational complexity created by independent deployment.
Modularity is therefore a trade study, not a score to maximize. A useful design protects likely change, supports the needed operating model, and keeps interaction cost proportionate to the benefit.
10. Worked architecture exercise
Decompose a smart-home security service around responsibilities and contracts.
- Name system outcomes: detect, decide, notify, and allow authorized control.
- Group responsibilities: sensors, local decision logic, identity and access, notification, user experience, and audit history.
- Identify likely change: sensor vendors, notification channels, policy rules, and storage technology.
- Hide those decisions behind interfaces.
- Specify timing, offline behavior, error handling, ownership, and versioning.
- Test a change: replace the notification provider and trace affected modules.
Put it together
Decompose a smart-home security service
The system must detect conditions locally, apply rules, notify people, and remain useful during an internet outage. (Parnas, 1972; National Aeronautics and Space Administration, 2016)
- Separate sensing from policy evaluation so device details do not leak into rules.
- Define an event contract with type, source, timestamp, confidence, and schema version.
- Keep identity and authorization separate from presentation.
- Specify local fallback behavior at the interface, not as an undocumented implementation detail.
- Trace replacement of one notification provider to verify change isolation.
- Record tradeoffs: more boundaries improve replaceability but increase integration and observability needs.
Check the mental model
Common misconceptions
Myth: Decomposition is just cutting a system into smaller pieces.
The criterion for the cut determines whether responsibilities and change are isolated. (Parnas, 1972)
Myth: Low coupling means modules never interact.
Useful modules interact through deliberate, bounded dependencies.
Myth: Information hiding means secrecy.
It hides replaceable design decisions while preserving necessary safety and operating information. (Parnas, 1972)
Myth: A connector is a complete interface.
Timing, behavior, format, error, assumption, ownership, and version rules also matter. (National Aeronautics and Space Administration, 2016)
Myth: Event-driven architecture is always more modular.
It trades direct dependency for event-contract, delivery, ordering, and observability concerns.
Myth: More reusable pieces always improve the design.
Over-generalization and fragmentation can increase coordination and reduce fitness for purpose.
Remember this
Lesson summary
- Decomposition is a design decision.
- High cohesion keeps related responsibility together; low coupling limits necessary dependency.
- Information hiding protects likely-to-change decisions.
- Interfaces include behavior, timing, assumptions, error handling, ownership, and versioning.
- Event mediation changes dependency shape but introduces its own contracts.
- Choose modularity based on change, integration, performance, verification, and ownership tradeoffs.
Key language
Glossary
- Architecture
- The fundamental concepts or properties of an entity in its environment, expressed through its elements, relationships, and principles of design and evolution. (International Organization for Standardization, 2022)
- Module
- A bounded part of a system with a coherent responsibility and a defined interface to the rest of the system. (Parnas, 1972)
- Cohesion
- The degree to which the responsibilities and elements inside a module belong together around a focused purpose. (Parnas, 1972)
- Coupling
- The degree of dependency between modules or systems, including what one must know about or receive from another to operate. (Parnas, 1972)
- Information hiding
- A decomposition principle that assigns likely-to-change design decisions to modules whose interfaces conceal those decisions from other modules. (Parnas, 1972)
- Interface
- A defined boundary across which elements interact or exchange matter, energy, data, or control, including the assumptions and rules governing that exchange. (National Aeronautics and Space Administration, 2016)
- Abstraction
- A purposeful simplification that keeps the characteristics needed for a question while leaving out detail that is not needed. (SEBoK, 2026)
No matching terms in this lesson.
Apply what you learned
Knowledge check
Answer all 10 questions, then submit for explanations and a score. You can retry as often as you like.
Evidence
References
References are formatted to the project’s APA 7 conventions from structured source data.
- Parnas, D. L. (1972). On the criteria to be used in decomposing systems into modules. Communications of the ACM, 15(12), 1053–1058. Association for Computing Machinery. https://doi.org/10.1145/361598.361623
- Simon, H. A. (1962). The architecture of complexity. Proceedings of the American Philosophical Society, 106(6), 467–482. https://www.sfipress.org/21-simon-1962
- Frost, B. (2016). Atomic design. Brad Frost Web. https://atomicdesign.bradfrost.com/
- Mozilla Developer Network contributors. (2026). JavaScript modules. MDN Web Docs. Mozilla. Retrieved July 16, 2026, from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules
- National Aeronautics and Space Administration. (2016). NASA systems engineering handbook (Rev. 2). (NASA/SP-2016-6105 Rev2). National Aeronautics and Space Administration. https://www.nasa.gov/wp-content/uploads/2018/09/nasa_systems_engineering_handbook_0.pdf
- International Organization for Standardization, International Electrotechnical Commission, & Institute of Electrical and Electronics Engineers. (2022). Software, systems and enterprise — Architecture description. (ISO/IEC/IEEE 42010:2022). International Organization for Standardization. https://www.iso.org/standard/74393.html
Save your place
Finished this lesson?
Progress stays on this device. No account or tracking service is required.