The necessity of good modularity

The system should be assembled from modules according to the principle of a submarine, in which all compartments are made as autonomous as possible --- if one of them gets flooded, it does not mean the submarine will be flooded. This holds true for both hardware and software systems, and organizational systems, for all systems.

In a system, all parts of the system are interconnected, in the system environment, they behave completely differently than they would behave without the system environment. If we do not have clearly defined and well-described interfaces through which we control all interactions in the system, any attempt to improve a module may result not only in the improvement of that module but also have a side effect: deteriorating the system as a whole through the impact on other modules through untracked connections.

Here are the graphs of computer simulation illustrating the dependency of development cost reduction on the improvement of n individual modules, with d connections each[1]:

It can be seen that if there is one connection, the development cost decreases rapidly with each improvement following an exponential curve, weakly depending on the number of modules. But if there are more connections, errors from local improvements spread through these connections, and the decrease in development cost from improvements in individual modules does not go well. Each connection has its systemic price, and without this price, we would not even have "organs" and "cells" in living nature[2].

The modularity of the human body is evolved, and it cannot be compared to the modularity of a modern computer or smartphone, assembled from standardized components with clearly defined interfaces. Therefore, a poorly modular human body is not very clear how to improve or even to treat (but there is modularity here too! Organ transplants work!). It is much easier to improve and repair a computer or smartphone structurally as modularity of a computer or smartphone is meticulously thought out.

Interfaces need to be managed: design them carefully, consider their presence, identify parasitic (i.e., unplanned) interfaces, and take measures to eliminate them. Through these parasitic interfaces, harmful, erroneous interactions can spread in the systems. Good modularity, implemented through quality interfaces --- it is a guarantee for the possibility of autonomous improvement of individual modules, a guarantee of the quality work of the whole system.

An interface is not just a connection, it is a connection through a fairly specific physical channel/set of interface modules according to a well-defined protocol (it would be better - defined by an open standard, not just an intra-project agreement, though this is not always followed), so that this interaction can be traced, and an error will not spread throughout the system. Moreover, a module can be simply replaced with an alternative (which is easier if the interface is standard) --- and the system will continue to operate. Even the organizational unit of accounting can be replaced: replace your department with an external accounting service! However, if some connections pass not through the interfaces of modules but the system uses these connections to implement its function, replacing the module will lead to the disappearance of these connections and disruptions in the system's operation.

There are many methods that help reduce the coupling of modules in the created system. One of the most well-known methods is DSM (design/dependency structure matrix)[3].

Minimal coupling of modules is necessary in hardware systems, software systems, organizational systems, and even in dances. This does not mean that parts of the system/subsystem are not closely interconnected. This means that these interactions of construction units are put under strict control, and subsystems can be improved, and with standardization of the interface can even be replaced by fundamentally different in design and principle of operation, without risking deteriorating the overall system performance.

The systemic approach is usually called holistic because it focuses on the system as a whole. But there are no other approaches that help so well to deal with dividing into completely different parts, as the systemic approach. The essence of the systemic approach is not only to pay attention to the whole system but also to simultaneously paying attention to the parts of the system. The systemic approach --- this is about multilevel thinking: consciously keeping the focus on at least three systemic levels, including elements of construction: supra system (where we embed our system), system-of-interest (what we do), subsystems (what we assemble from).


  1. http://www.pnas.org/content/108/22/9008.full ↩︎

  2. http://arxiv.org/abs/1207.2743 ↩︎

  3. http://www.dsmweb.org/ ↩︎