When we try to design or analyse systems, many times we tend to concentrate only on each individual part to inspect its attributes and functionality. The truth is though that the interactions between the individual parts of a system are equally (or more) important. Assessing the design of a system by examining its components in isolation will likely lead to wrong conclusions.
Imagine a scenario where we design a smart home that includes a security camera and a smart TV. Tested in isolation both work perfectly fine. We connect the devices to the home network and realise that when the smart TV is streaming high-definition video it consumes significant bandwidth, causing the security camera feed to lag.
Interactions among individual components of a system can create emergent properties that couldn’t be predicted (or at least is very difficult) by studying the components individually. This is not something tha happens only in software engineering, it is the reality of nature. These interactions can result in positive side-effects improving one aspect of the system, or negative, resulting in unanticipated failures.
For example, in medicine, doctors avoid to combine Warfarin and Aspirin because when taken together they can increase the risk of bleeding. On the other hand, the combination of Atorvastatin and Amlodipine is an approach used to reduce cardiovascular risk.
Another aspect of studying the interactions between the components of a system is that they help us understand the robustness and reliability of the whole. For example, multiple smoke detectors connected to the grid may appear that they offer high coverage, after all, if one fails to detect smoke, another will detect it. But what happens in the event of power outage?
Studying the individual components AND their interactions can go us far but it is not enough. The scaling of the system may affect it in non predicted ways. For example, a home with some basic electrical wiring may work fine with a few common appliances like a microwace, but may start failing leading to electrical fires when more high-power devices are integrated, like an air-conditioner.
There are cases where a system can be simulated or tested under various conditions (e.g. performance testing, load testing, spike testing), but is not always possible. Software engineering is one of the few disciplines where a testing environment where integrations can be tested exist. Interactions MUST be considered when studying the components of a system, with the prism of scalability and robustness.