Krima is a multi-skilled journalist and writer with extensive print, broadcast, online, and digital experience.
Designing a software system that involves a significant level of complexity usually leads to panic amongst the developing team members. This is perhaps because of the lack of know-how or incomplete knowledge of dealing with such complex parts of a system. The focal point here is not the lack of technical knowledge but the lack of know-how regarding the approach to designing such a system.
For many, complex system or complex engineering refers to designing several components with critical, interdependent functionalities that implement business rules and technical principles for valid and synchronized communications.
So, it is not the number of components but the functionalities that can make one’s design complex. For example, while designing an electronic circuit design software such as a Printed Circuit Board (PCB), the functionalities might be based on a couple of principles of electronics, which simply adds to the complexity.
The level of complexity increases in this case, as it becomes tough to keep a track of all functionalities. A simple solution to this problem is modularity.
Modularity Simplifying Complexity
Just think about how a building of five floors is made. From a technical viewpoint, it is a system that is composed of smaller sub-systems such as the floors, staircases, lift, and flats. A flat is further made up of sub-components such as walls and rooms.
Breaking down the room sub-component further, there are walls, floors, windows, and doors. While a building system looks truly complex, nothing is specifically complex to comprehend if one focuses on its components and the process that makes them work together. This is what modular designing is all about!
Developers are required to apply the same approach to designing a complex application. When the system is big, they should split it into smaller modules for designing. A popular and in-demand technique for such an approach is object-oriented programming in which each module is a coherent unit with the least dependency on other modules yet ensuring consistency and synchronization.
For a modular approach, it is essential to identify the modules of a new system or software application. Below are the basic steps to do so:
- Find a part, functional group, or sub-system, as it can be a module.
- Ascertain all the elements or components that belong to that sub-system or group.
- Recognize the inputs and outputs of the module, which will form the interface.
- Draw a suitable diagram to represent the sub-system and its interface.
Once you do so, consider going through the diagram to know how the components interrelate. Now, it is simple to develop the whole design. At this point of time, you may even find that some components could be modularized (split) further.
For modularization, there are many tools available, such as drawing tools and custom design tools. For example, for an electric circuit design, there are PCB tools to consider for modularization.
In short, simplifying a complex system includes splitting it into smaller parts and designing them. This is a simple key to convert even the most complex system into a simpler one.