The benefits of modular design are widely known. Its disadvantages are not so commonly known. Here we will examine both advantages and disadvantages in the light of our experience.
When we examine the design of real world products we see hardware becoming more and more integrated while the tendency in personal computer and enterprise class software programming is towards more and more modular design.
Cost can be partitioned into development cost and production cost.
If the partitioning of the design into modules has already been done and the development consists of simply refining existing and assembling existing modules development cost is lower for modular design.
If however the design has to be partitioned into modules and the interfaces between modules defined, the development cost tend to be higher. This is particularly the case if the modules are designed to be reusable and the needs of products other than that being currently designed have to be taken into account
Some form of modular design is a necessity, in order for us to make sense of complex modern products. Development cost is more when we try to make modules that can be re used in other efforts.
For hardware, increased interconnects between different modules can add significantly to product cost. However if one can use modules in mass production cost is significantly reduced. This is the reason why we see so many power modules being currently sold, especially for the popular 7805 physical form factor.
Software development cost is higher or lower using modular design. If pre designed modules are already available in the form of libraries, the cost of design is lower. However if modular libraries are being developed as a part of the the development effort the development cost and time are higher.
This increased development cost and time can be recouped in future if the libraries generated are used for other purposes.
The development time is often lower because once the design is split up into modules, design teams can work in parallel on the different modules.
For software the increasing capability of modern machines has papered over the increasing hardware requirements of running software designed in a modular fashion.
For hardware the interconnect between different modules as subsystems often act as limits for overall performance. For example if we examine the personal computer, its performance is often limited by the amounts of data we can transfer over the different buses on the system.
The interfaces between different modules are often common causes of failure.
When I was starting out my career, an experienced satellite engineer told me that in a finished and tested system, 90% of failures are due to faulty cable connections. And over the years I have found this statement to be true.