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?