Take a look at a product in your room; a computer, a watch, a mobile phone, speakers, anything. Now think to yourself 'how does it work?'. Unless you have investigated the inner workings of this thing previously, it is difficult to answer the question simply by looking at it from the outside. One approach to understanding how things work, is modularity; a process by which a system or thing is divided into separate parts or modules.
Author/Copyright holder: Gavin Mackintosh. Copyright terms and licence: CC BY 2.0
Modular design is the practice of subdividing a product into its components modules to develop a better understanding of how it works. Once something has been deconstructed in this way - it can be a figurative exercise, rather than physically taking something apart - we can identify areas for potential improvement.
Modular Systems Design
Modular design is an approach to complex systems analysis. Aspects of the interface are divided into discrete modules, and gradual improvements are made by removing modules and/or adding new ones onto the design. The technique works only when a system can be compartmentalised and the individual elements treated and developed outside of the whole system.
Provide Simple Interfaces - Simplicity in interface design reduces the dependence of one module upon another. When there is a high-level of dependency it is difficult to make changes to a system that will not result in deeper issues. It also allows the reuse of modules in the same design, which offers cost-savings and reductions in time expenditure.
Ensure that modules hide information - The gains from modular design are not just derived from dividing a product or system into separate modules; it is affected by the way we deconstruct. The modules should "encapsulate information that is not available to the rest of a program". Dividing into modules in this 'graceful' manner (i.e. by reducing the system into sections where the visible elements are available only in that module) is referred to as Information Hiding. The main benefit to information hiding is the reduction of costs, as changes can be made more easily (i.e. without having diffuse effects).
Use Appropriate Tools - This principle refers to the computer programming language you are using. Some languages afford information hiding through the inherent code and data structures.
Use a Design Checklist to test modules - Assess the 'quality' of your modules using a checklist, such as the one provided in the list of modular design principles by Argonne National Laboratory.
Author/Copyright holder: BlueStone Solutions for Business. Copyright terms and licence: All rights reserved Img source
The Major Benefits of Modular Design
The deconstruction of systems into discrete and reusable modules can be time and cost-saving. When permitted, an existing module can be inserted into another part of the system, which means a new module does not have to be developed. Modular design also permits the use of standardised interfaces.
Changes can be made quickly and easily. As the system is broken into separate modules (also referred to as skids) new modules can be inserted or 'plugged in'.
There is greater flexibility, due to the independent nature of the modules. A change can be made simply by removing a whole module. adding a module, or making changes to an existing module without influencing any others. Modular design marries standardisation with customisation, as the design team are able to use 'off-the-shelf' interfaces and system elements, whilst making custom changes to tailor the product according to their users' needs.
Modular design is an approach aimed at helping designers identify areas for improvement. By deconstructing something into its component parts we can see where new elements can be added, and existing, no longer useful elements can be removed.
Modular systems design is an approach which affords the benefits of standardisation and customisation. However, we must be mindful when using this approach to define the specifications of the product, create quality metrics, allocate time and resources appropriately, prototype to ensure the right modules have been divided, removed, and/or added, and to iterate.