In my white paper, TheMathematics of IT Simplification, I gave the following equation for calculating the complexity of an IT system
C = F3.11
where C is the complexity in Standard Complexity Units (SCUs) and F is the number of business functions implemented within the system. As I point out in the paper, F can be either business functions or dependencies on other systems. An SCU, by the way, is the amount of complexity in a single business function unconnected and unrelated to any other business function.
This equation is a simplification of a more complex equation that I called Bird's equation after a friend, Chris Bird, who first derived that more complex equation. This simplification was suggested by a woman reader who's name I have regrettably misplaced. If this person was you, please let me know so I can give you credit.
Although I was correct in my discussion about this equation in the white paper, I was a little vague on the proof. A friend, Bill Indest, challenged me on the proof. So with the help of another friend, Nikos Salingaros, I have decided to fully derive the equation, and go one better. Not only will I derive this equation, I will derive the more general, more useful form.
This equation starts with what I call Glass's Law which, as I explain in the white paper, is named for Robert Glass who popularized the law that increasing the functionality of a system by 25% doubles the complexity of the system.
So we know that complexity and functionality increase together, and complexity increases faster than functionality. This describes a proportional relationship between F (functionality) and C (complexity). The simplest such dependence is an exponential one: in other words, there exists some power X such that C = FX. Okay. Now let's solve for X .
We know from Glass's Law that when functionality increases by 0.25, complexity doubles. In other words,
2C = (1.25)FX
So now we have two equations, both of which must be true.
Eq. 1: C = FX
Eq. 2: 2C = (1.25F)X
Now we need to move into logarithms. Recall that logW Y = Z is interpreted as Y = WZ. And also recall that if W (the base) is not specified, then it is assumed to be 10. So, for example,
log10 100 = 2, or we could just say
log 100 = 2, since 10 is assumed.
One of the laws of logarithms states that if
A = B, then
log A = log B
So let’s go back to our two equations:
Eq 1: C=FX
Eq 2: 2C = (1.25F)X
We can use this property of logarithms to transform equations 1 and 2 into their logarithmic equivalents:
Eq 3: log C= log (FX)
Eq 4: log 2C = log (1.25F)X
Now we use another two log identities:
log AB = B log A
log AB = log A + log B
Using these identifies, we can transform Equation 3 and 4 into
Eq 5: log C = X log F
Eq 6: log 2 + log C = X (log 1.25 + log F)
We now subtract Eq 5 from Eq 6 giving
Eq 7: log 2 = X(log 1.25 + log F) – X log F
which is the same as
Eq 8: log 2 = X log 1.25 + X log F – X log F
which reduces to
Eq 9: log 2 = X log 1.25
We can now divide both sides of Eq 9 by log 1.25, giving
Eq 10: log 2/log 1.25 = X
Since log 2 is a constant=3.01, and log 1.25 is a constant=0.097, then the first half of Eq 10 simplifies to 3.01/0.097, which is 3.11.
Thus X in Eq 1 is equal to 3.11, and complexity is related to functionality by
Eq 11: C = F3.11.
This, of course, was my original assertion. Now this equation assumes that you buy into the fact that complexity doubles when functionality increases by 25%. But if you don’t agree with this, you can replace the X by a value that represents your belief (or, even better, observation.)
Eq. 12: C = F (logC/logF)
Let’s say you observe that in your organization that complexity doubles when F goes up by 50%. Then your formula for complexity is
Eq. 13: C = F (log2/log1.5)
Which would be
Eq. 14: C = F (0.301/0.176) = F 1.71
Equation 12 is so important to understanding complexity in an enterprise that I will refer to it as the Fundamental Equation for Enterprise Complexity. Everything you need to know about enterprise complexity can be derived from this equation. The formula should be memorized by every enterprise architect.
See? Aren’t you glad you stayed awake?