Complexity is all about the nature of patterns of behaviour and structure and how the relationships between the components give rise to such behaviour. The hard science of complexity from which we can derive generalised principles is based upon the detailed study of simple mechanical systems, for which we understand the physics, or of mathematical equations, or of computational systems. Because these systems are in essence used as experimental laboratories they can to some degree or another be repeated many times to gauge differences in initial conditions and their response to defined changes. For these types of system we also know a lot about the rules on which they operate and this helps us to draw more conclusive results. This is not the case for real world social based systems such as projects. The big problem here is that we don’t understand the rules by which they operate because the human influence as part of the system is bound up with understanding the human condition, which is far too complex for us to be able to analyse to the depth required for precise science[1]. So we tend to create much simplified models that are usually computational. However this means that our analysis only allows us at best to make generalised and to a significant degree unsubstantiated inferences for these systems.

Another problem for the real systems is that the nature of these systems is far removed from the mechanical or computational systems explored by complexity science. This means that the interpretation of key concepts identified through controlled experiments and defined through mathematics become more anecdotal and metaphorical. For example the concept of bifurcation used in complexity science is only precisely defined in terms of the manipulation and outcome of systems that can be represented by differential equations. When talking about social systems we cannot apply differential equations and hence the concept of bifurcation can only be used as a metaphor for a general expansion of the number of potential states available to the system and hence the ability to use complexity science is much curtailed.

It is also true that the study of the science of complex adaptive systems is in its infancy and many of the ideas are immature and there is still no general agreement on the meaning of concepts such as emergence, edge of chaos (again only truly defined in the context of computational systems) and self-organisation.

Finally many of the concepts are based upon mathematical interpretations and this means that they are extremely difficult to apply in real situations.

So in reality the application of complexity science in real world complex software delivery is problematic to say the least. This is why we have to understand the nature of complexity in software delivery so that we can understand the limitations of applying complexity science to our projects.

[1] I’m being a little disingenuous. There is a lot of research into the area of adaptive agent and intelligent agent modelling, but it can only give us generalised rules of thumb for idealised situations.