The need for systems engineering is actually very simple. In real life, it is very easy for things to go wrong. Projects overrun, airplanes fall out of the sky, software and IT bring organizations to their knees, and whole societies are crippled by non-joined-up government and management, all of which are the result of system failures at one level or another.
Since it is so easy for things to go wrong, it is important to understand why. Fundamentally, there are three main causes for such system failures, which are as follows:
- Complexity, where complexity is not identified and, therefore, cannot be managed or controlled.
- Communication, where communication fails or is ambiguous.
- Understanding, where different points of view are not taken into account, and assumptions are made.
The problem is actually worse than this as these three main causes feed into one another, so unmanaged complexity will lead to communication failure and a lack of understanding; communication failure will lead to complexity and a lack of understanding; and a lack of understanding will lead to increased complexity and communication problems (Holt 2001).
These three causes are often referred to as the three evils of systems engineering and each will be discussed in more detail in the following sections.
Complexity
Complexity exists in every system and may be thought of as being one of two types, as shown in the following diagram:
Figure 1.10 – Types of complexity
The diagram in Figure 1.10 shows that systems manifest complexity. There are two main types of complexity:
- Essential complexity is the natural complexity that is inherent in the system. The term "essential" is used here as it refers to complexity that manifests in the essence of the system. It is not possible to lower the essential complexity of a system, but it is possible to manage and control this complexity providing, of course, it has been identified in the first instance.
- Accidental complexity is not natural and is introduced by inefficiencies in the peoples, processes, and tools that are employed to implement systems engineering, which will be discussed later in this chapter. Accidental complexity can certainly be lowered and this forms a natural part of systems engineering.
Complexity manifests itself in the relationships between things, whether these are between the system elements that make up the system or between systems themselves. There are many subtleties to complexity that will be discussed in more detail in the following sections.
An example…
In order to illustrate and, therefore, understand how complexity has changed and evolved over the last few decades, a simple example of a system will be introduced that will be used throughout this book to explain the various concepts and techniques that will be used as part of the overall approach to systems engineering.
For this example, the system that will be considered is a motor car, so now consider two such cars: one that was developed and built 50 years ago, around 1970, and one that was developed and built in the modern age, around 2020.
Consider the need for the system. The purpose of any car is to transport a number of people from point A to point B. The user interface of the car is, basically, a steering wheel, gear stick, and three pedals (accelerator, brake, and clutch pedals).
This basic need, or purpose, of a car has not really changed over the last 50 years, but the point of discussion here is that the complexity of the car has changed in four different ways, which will be discussed in turn in the following sections.
The complexity of the system elements
In order to illustrate how the complexity of the system elements has changed over the last 50 years, each of the cars will be discussed separately and then compared and contrasted.
Figure 1.11 – Basic breakdown of a car
The diagram in Figure 1.11 shows a simple example system of a car. There are four system elements at the next level down that make up the car, which are as follows:
- The body, which includes lower-level system elements such as wings, doors, mirrors, and so on.
- The chassis, which includes lower-level system elements, such as brakes, wheels, suspension, and so on.
- The interior, which includes lower-level system elements such as seats, dashboard, controls, and so on.
- The drive train, which includes lower-level system elements such as the motor and the gearing.
The system elements that make up the 50-year-old car are entirely mechanical and electrical in nature. On top of this, almost all of the system elements will be mechanical; only very few of them will be electrical.
Electrical system elements will be limited to the lights, indicators, fan, wipers, and starter motor, and that is really the extent of the electrical system elements. The mechanical elements, however, will make up all of the other system elements that relate to the body, chassis, drive train, and interior. The vast majority of the system elements, therefore, are mechanical with only a handful of them being electrical. This means that almost all of the interfaces between the system elements will be mechanical in nature, with only a few being electrical or electro-mechanical.
In order to build this car, it is largely a matter of integrating self-contained system elements that have well-defined interfaces. Also, any electrical connections will require quite simple point-to-point wiring.
Now consider the modern car. There are two new major types of system elements that now exist that did not exist at all on the 50-year-old car, which are electronic and software-based system elements. The vast majority of system elements on a modern car will fall into one of these two categories. Electronic system elements will include the following:
- Controllers (such as light controllers, indicator controllers, and so on)
- Sensors (such as temperature, pressure, rotation, and so on)
- Actuators (such as levers, small gears, motors, and so on)
- Display elements (such as dashboard lights, audio alerts, and so on)
All modern cars contain a vast amount of software and, in every case, this software will be split across multiple nodes across the whole vehicle. On top of the software itself, the software must be connected to its associated electronic component, which will, in turn, lead to the need for communication buses, such as Controller Area Networks (CANs), which will themselves use communication protocols.
In order to build the modern car, it is no longer a matter of simply integrating system elements because the interfaces between the elements are now far more complex and will involve subtle changes in voltage and current levels, data transfer, communication protocols, and complex wiring.
The complexity of the system elements that make up the car has, therefore, greatly increased between the two vehicles. Indeed, not only has it increased in terms of the number of system elements but also in the nature of these system elements.
The complexity of constraints
It has already been stated that the basic need for a car has not really changed at a high level in the last 50 years. The basic need is to transport people from point A to point B. In the past, the emphasis of most cars was to make them go as quickly as possible with little regard for anything else. One of the major things that has changed over the last 50 years is not necessarily the basic needs, but the constraints that are now imposed on those needs.
Figure 1.12 – Simple constraints
The diagram in Figure 1.12 shows a simple need that is named Develop car and there are two main constraints associated with this, which are Be safe and Be fast. This diagram here represents, at a very high level, the basic needs and constraints associated with the 50-year-old car.
The number of constraints associated with the older car is very small compared to that of the modern car, which is shown in the following diagram:
Figure 1.13 – Complex constraints
The diagram in Figure 1.13 shows the constraints associated with the modern car. The first thing to notice when comparing the two sets of constraints is that the number of constraints themselves has increased dramatically. There are new sets of constraints that simply did not exist in the older car, for example, Be secure is now an issue that was not really a main consideration previously. Likewise, there is a whole set of new constraints associated with Provide positive driving experience. This increase in the number of constraints will lead to an increased number of relationships between the basic needs and constraints, which will naturally lead to an increase in the complexity of the needs and constraints.
It is not just the increase in the number of constraints that leads to an increase in complexity, but also the complexity of individual constraints has increased. There are a number of constraints now that are related to best-practice models, such as Comply with standards and Comply with legislation. This is interesting from a complexity point of view as these constraints will also relate directly to other constraints. Consider Be safe, which was previously seen as a standalone constraint. In the modern vehicle, this constraint will also have both of the compliance constraints associated with it. Since there are far more standards and legislation in place now that apply to cars that did not exist 50 years ago, the complexity of individual constraints has increased along with the increase of dependencies between constraints.
The complexity of a system of systems
Another area where the car has increased in complexity over the last 50 years occurs when a higher-level system of systems is considered. A system of systems is not just a collection of interacting systems, it is a collection of interacting systems that exhibits some behavior that is not exhibited by any of its constituent systems. Therefore, it can be argued that a fleet of vehicles is not a system of systems, as it is simply a collection of systems that does little more than make the overall system slightly more complex. A true higher-level system of systems may be the transport network that a car forms part of. The overall transport system of systems exhibits a number of behaviors, such as ensuring an efficient journey from end to end, keeping traffic moving when accidents occur, and providing seamless links with smart cites and other transport systems, such as rail.
A modern car is now truly part of a system of systems as the vehicle itself interacts with other systems, such as smart cities, smart roads, the cloud, satellites, and so on, that did not occur with an older vehicle. The modern car is also taking over some of the skills that were previously the sole domain of the driver, such as parking, maintaining constant speeds, identifying potential dangers, and so on.
The complexity of the car system has therefore increased due to the fact that the car is now truly part of a wider system of systems.
Complexity shift
The final aspect of increased complexity that will be discussed does not necessarily manifest as an increase in the same type of complexity but, rather, represents a shift in complexity due to increases in other aspects of complexity.
Consider again the older car and its motor. The motor in the 50-year-old car is an internal combustion engine that mainly comprises mechanical system elements with a handful of electrical system elements. The internal combustion engine may be considered to have quite a high level of mechanical complexity that is naturally exhibited.
Now consider a modern electric car. The motor on the modern electric car is an electric motor that has a single moving part, that of the motor shaft. The mechanical complexity of the modern car is practically non-existent when compared with the older car. The complexity of the modern car lives mainly in the software that monitors the rest of the car and controls the electric motor. There is no software whatsoever in the older car.
The older car, therefore, has high mechanical complexity and zero software complexity. The modern car has very low mechanical complexity and very high software complexity.
The complexity in the modern car has therefore shifted in nature – in this case, away from mechanical complexity and towards software complexity.
Bringing it all together
It can be seen that the complexity of a typical system has increased dramatically over the last few decades. In the example we have used, the car increases in complexity for four different reasons, which have been discussed.
This increase in complexity does not apply just to automotive systems but to any and all types of systems. In reality, these four types of increased complexity will actually have interdependencies, which in turn will also increase the overall complexity. For example, the increase in complexity of the system elements will also lead to a complexity shift and, potentially, an increase in the system of systems complexity, which in turn, will lead to an increase in the number of constraints.
Identifying complexity
The key to managing complexity is identifying where the complexity lives in a system. This is a topic that will be followed up throughout the book, particularly when artifacts and models are discussed.
The next section discusses the problems associated with communication, which, alongside complexity and understanding, is one of the three evils of systems engineering.
Communication
Communication is key to successful systems engineering. It has already been discussed that systems engineering naturally brings together people from multiple and disparate backgrounds, which will lead to an increase in potential communication problems. Poorly-specified information, language, and protocols lead to ambiguity, which will lead to poor or inefficient communication.
Communication can exist at many levels, such as the following:
- Between people: The obvious form of communication is between people. People interacting with other people is key to any successful project and is a matter that is more complex than it at first appears, as will be discussed in this section.
- Between and within organizations: A successful business relies on different organizations, or organizational units, within the same company being able to communicate effectively. The media for these communications may be through documents, agreements, contracts, and so on but the same communication problems will occur.
- Between and within systems and system elements: It is essential that the systems that are relied upon for our business and projects can also communicate effectively. This will include IT systems, other technical systems, and service-based systems, to name but a few.
When thinking about communication, another way to think about it is that communication must be effective and efficient between all stakeholders, whether they are represented by people, organizations, or things (such as systems). When considering communication in the world of systems engineering, it is inter-stakeholder communication that is being addressed.
These communication problems are further compounded by the fact that communication can also exist between these different types, such as between people and systems, people and organizations, and so on.
Defining common languages
One of the main solutions that is vaunted for improving communication is to get all parties to "speak a common language." This is an obvious solution and an important one, but speaking a common language is actually more complex than it may at first appear.
When considering a common language, there are actually two types of language that must be defined, as shown in the following diagram:
Figure 1.14 – Aspects of the common language
The diagram in Figure 1.14 shows that stakeholders communicate using a Language, so it is essential that this Language is as clear and unambiguous as possible. This Language, however, has two aspects: Spoken Language and Domain-Specific Language.
The first aspect that will be considered is that of the Spoken Language, which provides a basic mechanism for communication. An example of Spoken Language is the fact that this book is written in the English language. In order to understand the information in this book, it is essential that the reader can speak English. Clearly, there are many more spoken languages than the English language, but the decision that has been made for this book (or system) was to select English as the chosen Spoken Language. This is clearly an obvious decision that needs to be made but, just because everyone reading this book speaks English does not mean that there will be no ambiguity nor misunderstandings. This is because the second aspect of Language that needs to be considered is Domain-Specific Language.
Domain-Specific Language defines the specific concepts and terminology that will be used for a given application or domain. For example, consider the word "function." The word "function" is a common English language word but a word that will actually take on different meanings depending on which stakeholder is reading it.
It is essential that the Domain-Specific Language is defined as it forms the cornerstone for successful systems engineering. This chapter actually defines the Domain-Specific Language for systems engineering that is used throughout this book. Each diagram in this chapter contributes towards defining the full set of concepts and the associated terminology that is used for systems engineering in this book.
Languages for systems engineering
When it comes to languages that can be used for systems engineering, both the Spoken Language and the Domain-Specific Language must be defined:
- In terms of the Spoken Language, there are several standard languages that can be adopted that are used throughout the industry across the world, such as the Unified Modeling Language, Systems Modeling Language, and Business Process Modeling Notation, among others. For the purposes of this book, the Spoken Language that has been selected is the Systems Modeling Language (SysML), which will be discussed in more detail in Chapter 2, Model-Based Systems Engineering.
- In terms of the Domain-Specific Language, this will be different for every organization. A generic Domain-Specific Language for systems engineering is defined in this chapter and used throughout this book and may be used as a basis for readers to tailor into a language that fits their specific business.
Both types of language must be defined for successful systems engineering.
The next section discusses the problems associated with understanding, which, alongside complexity and communication, is one of the three evils of systems engineering.
Understanding
It is essential that all stakeholders share an understanding of the system, however, different stakeholders will perceive the system in different ways due to their different backgrounds and knowledge, which creates a potentially large problem. This problem may be addressed by considering the concept of "context." In order to understand the concept of context, consider a set of generic stakeholders, as shown in the following diagram:
Figure 1.15 – Generic set of stakeholders
The diagram in Figure 1.15 shows a generic set of stakeholders associated with the car system.
There are three broad categories of stakeholder, which are as follows:
- Customer, which represents the set of roles that will ultimately benefit from the system that is being developed. The diagram here shows that Customer has two types, which are User, such as the Driver of the vehicle, and Operator, such as the Maintainer of the vehicle.
- External, which represents the set of roles that have an interest in the system that will limit or restrict the system in some way. The diagram here shows that there is a single type of External stakeholder, which is Standard.
- Supplier, which represents the set of roles that are interested in developing and delivering the systems, such as Engineer.
The identification of stakeholders is an essential part of systems engineering, as it is this complete set of stakeholders whose expectations need to be understood and managed, rather than just the end user of the system.
When considering the complete set of stakeholders, it should be kept in mind that different stakeholders may look at the same system and perceive different needs or, as in almost all systems, they may look at the same need and interpret it in a different way depending on their point of view. When something is interpreted in a different way from a different point of view, this is referred to as a "context."
The concept of context is one of the single most important aspects of representing a system that must be understood for successful systems engineering, yet is one that is often overlooked or ignored altogether.
In order to illustrate this crucial concept of context, imagine that there is a statement of need associated with a system, which is the system must be safe. At first glance, this may seem like a straightforward statement with little or no room for ambiguity, but the actual meaning of this statement will be different for each of the different stakeholders. For example, from the point of view of the Driver, this statement may be interpreted as the car must have seatbelts, airbags, driver-assist technology, and so on. From the point of view of the Maintainer, this statement may mean that the drive train must be developed in such a way that the battery can be turned off to ensure that no parts of the car are live when maintaining the vehicle. From the point of view of the Standard stakeholder there may be several safety aspects, such as meeting specific requirements for crash impact. Finally, from the point of view of the Engineer, the system may have to satisfy a number of scenarios relating to the safety case for the vehicle.
The point here is that there are multiple interpretations for the same set of needs. In order to manage the expectations of all stakeholders, it is important that all of these different points of view, or contexts, can be understood.
Now that the three evils of systems engineering have been discussed, it is time to consider the implementation of systems engineering
The implementation of systems engineering
In order to implement systems engineering successfully, there are three aspects of implementation that must be considered, which are shown in the following diagram:
Figure 1.16 – The classic systems engineering mantra – people, process, and tools
The diagram in Figure 1.16 shows three main concepts: People, Process, and Tools. These are referred to as the Systems Engineering Mantra (Holt & Perry 2019).
These three concepts are very important but it is the relationships between them that provide a true understanding of what information is being conveyed. It is important that these People enable the overall Process as the competencies associated with the People are worth nothing if they do not enable the overall approach. Also, the overall approach must drive the choice of Tools, rather than the Tools affecting the Process.
These concepts are expanded upon in the following diagram:
Figure 1.17 – Expanded concepts of People, Process, and Tools
The diagram in Figure 1.17 shows the expanded concepts that were first introduced in Figure 1.16. By considering each of the main concepts in turn, it is possible to enhance the original descriptions:
- People: It is the competencies of the people that are of interest, rather than the presence of the people themselves. It is essential that people have the appropriate set of knowledge and skills and the attitude that is required to do the task at hand effectively and efficiently. It is also important not to confuse the concept of People with that of stakeholders. As was discussed previously, People may hold any number of stakeholder roles and it is a set of competencies associated with these roles that may be thought of as the ability of the individual.
- Process: It is the overall approach that is being followed, rather than just a set of individual processes. The term Process here may be thought of as the overall ability of the organization or organizational unit to carry out a specific task.
- Tools: The set of software, resources, or, in fact, anything that is intended to allow People to carry out their Process in a more effective or efficient manner. Such Tools may include software design and modeling tools, management tools, pen and paper, standards, notation, and so on.
Overall, it is important that there is a balance between People, Process, and Tools to enable successful systems engineering.