This is a post in 3 parts:
Part 2: The Cost of Complexity (this post)
The Cost of Complexity
In the previous post I looked at applying cyclomatic complexity to IT architectures (systems of systems) to quantify the complexity. However, I don’t think that cyclomatic complexity goes far enough when it comes to understanding the complexity of enterprise IT. My view is that we need to understand the cost of the integration of the architecture to understand the true cost of the complexity.
I have purposely avoided measuring the cost of individual components as the total cost of ownership of an individual component or system is often understood, at least at a ballpark level. What I don’t think is recognised is the cost of joining these systems together. That is why I have come up with the “cyclomatic complexity cost”.
Calculating Cyclomatic Complexity Cost
Consider an integration between two systems. Often described in architecture diagrams as simple boxes with an arrow to indicate that there is an interface between these two systems.
What this view does not consider is the respective costs incurred on each component to connect to the other. It is important to recognise that when integrating two components that there is a cost impact for both parties in the integration. This integration cost impact may be different for each party.
To calculate the cyclomatic complexity cost, or integration cost, then we need to come up with a relatively simple mechanism for determining the relative costs for the integration.
To determine all of the costs we need to break down the costs on each side of the interfaces down into some cost factors:
- Cost for each party to build the interface
- Cost for each party to operate the interface
- Cost for each party to alter or change the interface
The build, operate, alter factors can then be decomposed to the individual cost drivers.
Drivers that determine the relative cost to build the interface for each side of the connection:
- Software costs
- Infrastructure costs
- Labour costs (design, build, test)
Drivers that determine the relative cost to operate the interface for each side of the connection:
- Software maintenance costs
- Infrastructure maintenance costs
- Support labour costs (monitoring, management, administration)
Drivers that determine the relative cost to alter the interface for each side of the connection:
- Design and build cost
- Regression test cost
- Infrastructure impact (software and hardware)
Working out the Cost
To keep things simple, cost in this context will be a relative measure and calculated by assigning High, Medium, Low relative scores to each of the below factors. Once a H/M/L score is assigned, they are converted to a number: High = 3, Medium = 2, Low = 1.
The complexity cost for each interface is determined by averaging all of the above, the BOA (build, operate, alter) for each side of the interface.
For example, consider the following architecture:
Each individual connection is assessed independently. For each connection assign the relative high/medium/low scores for each of the build, operate, alter factors:
Next average the cost factors for each connection:
Finally, average all of the connection costs to create an average interface cost, or in the parlance of cyclomatic complexity, the average edge cost:
Now that the relative cost of integration has been determined it is possible to apply that to the cyclomatic complexity formula and calculate the “cyclomatic complexity cost”.
Cyclomatic Complexity Cost
The cyclomatic complexity formula is described in the previous post. Now we are going to apply a cost factor to the formula. The cyclomatic complexity cost needs to take the cost of the component integrations in an architecture.
Therefore the formula for the cyclomatic complexity cost (CCC) is:
CCC = EC – N + 2P
Where C is the average edge cost.
In the example above the CCC is calculated as
N=4; E=3; P=1; C=1.5
CCC = (3*1.5) – 4 + (2*1) = 2.5
What is means is that it is now possible to compare two architectures and look at both the cyclomatic complexity and the cyclomatic complexity cost. In the example above, the cyclomatic complexity (CC) is 1 but it doesn’t reflect the costs and complexity of the integration. However, the cyclomatic complexity cost (CCC) is 2.5 which reflects the integration costs of the system.
In the next post, I’ll look at how the cyclomatic complexity cost could be applied to real world systems of systems.