We all understand that our complicated world is giving way to a more complex one. We also recognize that our systems engineering techniques used to create modular designs are breaking down as we deal with new levels of complexity. It seems we don’t talk so much about modularity and its relationship to complexity. Let’s put on our “systems thinking” hat and take a look.
Modularity. When we look at a given system, how do we judge modularity? We might start by looking at the parts of the system and observe how distinguishable they might be. We might next look at the interactions and observe how parts interact with other parts. If we determine that the parts of the system are easy to identify and that the interactions between the parts are minimized, then we can judge that the system is modular to some extent.
As systems engineers, we use the concept of modularity in the development of complicated systems to organize system behavior into functional areas and reduce the interactions of the parts. Sometimes we use the terms “loose coupling” or “information hiding” when referring to the concept of modularity.
When a system is modular, the parts and interfaces of the system can be easily and clearly specified. The behavior of the system is easier to define and quantify. The design becomes tractable, even elegant. The system is predictable.
Immodularity. On the other hand, if as we examine a system and determine that the interactions are not so readily identified or understood, or, if the beginning of one part and the end of another is hard to identify, then we may be looking at an immodular system.
When a system is immodular, the parts, if they can be identified at all, may interact on many different levels. The number of parts or interactions may become intractable and difficult to engineer or manage. The system is unpredictable.
In the case of complicated systems, modularity is the goal of good systems engineering because by creating a modular design, we make parts of the system easier to develop, maintain, and replace. By creating a poor design, we can make our systems immodular and harder to maintain and operate. Immodularity is, in that case, something to avoid.
Complexity. In complex systems, multiple interactions occur between many different parts of the system, much like what we see in immodular systems. As systems gain in complexity, the interactions become nonlinear, and the behavior of the system becomes dynamic and harder to predict. Since the behavior of complex systems is hard to predict, they very often surprise us. Connections that were unknown a priori, suddenly come into play and we see new behavior and results, sometimes referred to as emergent behavior.
Complex systems become difficult to model and simulate due to the interacting web of dependencies. At the far end of the complexity spectrum we even find chaotic behavior characterized by the “butterfly effect” where small changes in initial conditions lead to drastically different results.
Complexity and Modularity. We see from the descriptions above that complexity and immodularity go hand in hand. Complexity drives immodularity by increasing the interdependencies among the parts of a system. We also learn that as systems become more complex, we can eventually lose our ability to effectively engineer those systems. As systems engineers, we can no longer avoid immodularity, because complexity is forcing us away from easily predictable, elegant, modular designs. We will increasingly deal with systems that are not fully predicable and that may have messy designs. The key for systems engineers is to develop new techniques that will help deal with systems of greater complexity.
As systems engineers developing complicated systems, we avoided immodularity to control variables and make our systems predictable. However, as our system domains become more complex, can we still develop systems using the same design principles? If the systems we are dealing with are inherently immodular, what is a systems engineer to do?
Techniques for Dealing with Complexity. As we deal with systems of higher complexity, we will need to learn new skills and techniques. Here are two techniques that are critical. I’ll discuss others in future blog posts.
Synthetic Thinking. As engineers and technicians, we learn to look at our technology and discipline almost to the exclusion of other engineering disciplines. We are taught to look inwards and tend to design our systems in isolation. This approach is called analytic thinking (or reductionism). We are thinking analytically when we focus on the design of a specific component. We are thinking analytically as we examine or simulate the behavior of a specific component. Analytic thinking has served us well and will continue to do so.
But analytical thinking can also work against us. When thinking analytically, we “have the blinders on,” so to speak. We are also thinking analytically when we are “down in the weeds” and when we “lose the forest for the trees.” We can unintentionally ignore interfaces or forget about maintenance, logistics, and the disposal of our systems. Better to look at our systems synthetically at the 30,000 foot level, and the interactions the system has with its environment.
Defined as seeing the combination of ideas into a complex whole, synthetic thinking (or holism) enables us to deal with more complexity. With synthetic thinking, rather than looking inward to learn about our system, we look across and upward. We look to examine the system within its operating environment and understand its interactions with externals. As we delve into more details of our system design, synthetic thinking encourages us to examine the interactions between our system components. We gain insight and understanding of how our system should operate and why.
In fact, as systems engineers, we are trained to think synthetically when we define a systems boundary, when we identify external interfaces, and negotiate interface specifications. We are also thinking synthetically when we reach out to stakeholders and end-users to learn their needs and requirements.
MBSE. Model-based systems engineering, or MBSE, is also an important tool to deal with complexity. MBSE can help us think synthetically as a team. A true MBSE modeling environment is structured around a systems metamodel. The systems metamodel allows engineers and systems engineers to connect ideas and tools to work concurrently on system development. (See The Systems Metamodel and Communication, What is the Difference Between a System Model and a Systems Metamodel, and A Grounded Systems Metamodel – Now!)
When working concurrently, engineers can look at the entire system design—from a high level down to a detailed view. Systems engineering can connect with detailed engineering tools to learn how interfaces are being implemented. Detail engineers can look at the MBSE tool and understand the functionality envisioned for the system as a whole. It will also help them understand those elements driving requirements. Engineers are able to identify interfaces early and continually throughout development, and in so doing examine necessary trade-offs.
Engineering teams not taking full advantage of MBSE will remain in organizational siloes. Siloed organizations are stuck in an analytic thinking mindset. Systems engineering may have high-level design but be informed by detailed engineering. Detailed engineering may develop solutions without insight from systems engineering.
We are engineering analytically when we develop requirements without understanding necessary behavior. We are engineering analytically when the ground system is siloed away from the spacecraft system and when the weapons system is siloed away from the supporting ship systems. Each organization engineers its own system in varying degrees of isolation, and they come together during integration and test. Surprises occur.
In earlier times of predominantly complicated systems, we could engineer solutions close enough to overcome surprises found in integration and test, although with additional cost and schedule slips. With the rise of complexity, we will increasingly encounter failure. MBSE helps teams stay connected and concurrent in order to tackle complexity as it emerges. Synthetic thinking allows us to break down silos and broaden our approaches.
Thinking in Systems. The complex engineering world we live in demands new techniques for us to be successful. Taking the time to do some systems thinking helps us understand complexity and its relationship to modularity. It also helps us understand the power of synthetic thinking, the limitations of analytical thinking, and the role MBSE can play in our engineering efforts.