A method of managing system complexity that involves dividing large systems into multiple, smaller self-contained systems.
Modularity is a structural principle used to manage complexity in systems. It involves identifying functional clusters of similarity in systems, and then transforming the clusters into interdependent self-contained systems (modules). For example, the modular design of computer memory chips provides computer owners the option of increasing the memory in their computer without any requirement to do so. If the design of the computer and memory chips were not modular in this way, the only practical method of upgrading computer memory would be to buy a new computer. The option to easily and inexpensively improve a system without the requirement to do so gives modular designs an intrinsic advantage over non-modular designs. id="footnote153a"> class="nounder totri-footnote" href="https://www.safaribooksonline.com/library/view/universal-principles-of/9781592535873/xhtml/ch74_fn.html#footnote153">1
Modules should be designed to hide their internal complexity and interact with other modules through simple interfaces. The result is an overall reduction in system complexity and a decentralization of system architecture, which improves reliability, flexibility, and maintainability. Additionally, a modular design encourages innovation of modules, as well as competition regarding their design and manufacture; it creates an opportunity for third parties to compete to develop better modules.
The benefits of modular design are not without costs: modular systems are significantly more complex to design than nonmodular systems. Designers must have significant knowledge of the inner workings of a system and its environment to decompose the systems into modules, and then make those modules function together as a whole. Consequently, most modular systems that exist today did not begin that way—they have been incrementally transformed to be more modular as knowledge of the system increased.
Consider modularity when designing or modifying complex systems. Identify functional clusters of similarity in systems, and clearly define their relationships with other system elements. If feasible, create modules that conceal their complexity and communicate with other modules through simple, standard interfaces. Do not attempt complex modular designs without experienced designers and a thorough understanding of the system. However, consider the incremental modularization of existing systems, especially during maintenance and product updates. id="footnote154a"> class="nounder totri-footnote" href="https://www.safaribooksonline.com/library/view/universal-principles-of/9781592535873/xhtml/ch74_fn.html#footnote154">2
See also 80/20 Rule, Chunking, and Cost-Benefit.
id="page_161"> src="https://www.safaribooksonline.com/library/view/universal-principles-of/9781592535873/images/f0161-01.jpg" alt="image" width="550" height="394" data-mfp-src="/library/view/universal-principles-of/9781592535873/images/f0161-01.jpg" />
The rapid increase in availability, quality, and computing power of personal computers over the last twenty years is largely attributable to their modular designs. The key components of the computer are standard modules that use standard interfaces. This enables competition among third-party manufacturers to improve modules and reduce price, which also improves the computer and reduces its price.