The complex adaptive systems concept, which originated from the discipline of systems studies, is a departure from older approaches to IT systems management in which engineers assumed that, by understanding each of the individual parts of a system, they could understand and control the behavior of the system as a whole. This is not always the case in modern IT environments, whose various components communicate, integrate, scale and fail in ways that engineers cannot always anticipate.
A simple example of the lack of total predictability that exists within a complex adaptive system is the storage capacity required for the infrastructure that supports an application delivery pipeline. Storage needs and availability are based on a complex mix of factors. They include not only user demand and the number of disks available in a storage array, but also the size of application binaries, file system overhead and disk failure rates. The latter factors are affected, respectively, by compiler-specific behavior, environment configuration variables and luck. They are impossible to predict with total certainty. For this reason, when planning the storage infrastructure for a delivery pipeline, engineers cannot simply implement a given amount of storage and have total confidence that it will suffice. The best they can do is estimate how much storage to implement, then manage the storage depending on actual needs.
Put simply, a complex adaptive system can be managed, but it cannot be controlled. Engineers can establish initial configurations that they believe will best serve the needs of the system they are implementing, but they cannot expect the system to behave exactly as specified. They must instead be prepared to manage the system’s behavior by monitoring it, identifying problems and reacting to them on an ongoing basis.
The complex adaptive systems concept encourages DevOps engineers to adopt this management-rather-than-control mentality in order to take a realistic approach to managing applications and infrastructure.