Back in October, I wrote Is Your Software Complex. This has prompted a number of discussions in multiple venues, so it seems a good idea to look at the term “Complex” in a bit more detail.
Like many words, it has a number of distinct meanings, and when one is not clear which meaning is intended, then confusion (and related problems) is sure to occur.
Roger Sessions has been writing about one meaning of complexity for about a decade. His book Simple Architectures for Complex Enterprises created an entire field of study. Overly simplifying [and with apologies to Roger], complexity in this context is a mathematical model based on the number of nodes and interconnects between the nodes.
Dave Snowden formulated the Cynefin Framework nearly 20 years ago which categorizes systems into one of four categories: Simple, Complicated, Complex and Chaotic. Once again oversimplifying, Complex is characterized by “The complex domain represents the “unknown unknowns”. Cause and effect can only be deduced in retrospect. There are no right answers“.
Clearly, these are really different topics that simply happen to share an English word. At the same time there are interesting relationships. Calculating the Complexity [Sessions] of a Complex [Snowden] system is unlikely to be possible, simply because of the unknowns. Complicated or Simple [Snowden] systems are well defined, but there is not necessarily a correspondence to the resultant Complexity [Sessions]. So one can have a Complicated [Snowden] System with moderate to low complexity [Sessions], and have a Simple [Snowden] System with very high complexity [Sessions].
One approach to dealing with this is to use Cynfin/Snowden when talking about “problems” (something to be addressed) and Sessions when talking about “solutions” (the concrete resulting system). As one starts to analyze a problem, there are sure to be “unknown unknowns”. By the time a system has been “completed” everything about the system (at least for a point in time) is defined – and one can make the appropriate measurements and calculations necessary to evaluate the complexity.