----------------------------------------
"Simple" is both hard and unrealistic
July 25 2021
----------------------------------------
It is a curious thing how "it's complicated" serves as something of an
explanation in its own right.
A moment's reflection reveals why that might be. Our world is indeed
very complicated. Our bodies themselves are massively parallel
systems that sustain themselves through the constant regulation of
bloodflow, metabolism, air circulation, and more. Each of these
systems considered in themselves is not hard to understand, but the
whole is a wonder to behold. When this is our starting point, it is
no wonder that we find the world complicated from our very first
moments.
"It's complicated" also short-circuits a lot of questions, and it fits
nicely with the human cognitive strategy of eliminating extraneous
information so as to optimize our focus. We avoid overloading
ourselves with all the trivial (or at least boring to consider)
details and keep to the meat-and-potatoes facts, and this is all we
ask of ourselves for many things.
"Why is the government so inefficient?" It's complicated.
"Why do you feel that way?" It's complicated.
"Why can't we all just get along?" It's complicated.
Yet, in the one area where "it's complicated" ought to have the least
explanatory power, still we implicitly let it be an answer.
I am referring, of course, to engineered systems, and most especially
to the production and support IT systems in regular use today.
Lately I find myself asking "why" of increasingly more of these.
Failover systems are complicated when it seems like they would be the
last thing you want to have a thousand ways it can go wrong. PHP,
having become something of a staple of web development, breaks when
you stare at it a little too hard. Don't even get me started with all
things Node, hypervisors, monitoring systems, and practically
everything that takes a YAML file these days.
These frameworks and ecosystems of software are built "for the real
world" and have about as much wrong with them as you would expect of
tools built for every possible use case. They are like
wrench-screwdriver-jackhammer-hedgecutter-nailclipper-shoeshiners with
an optional cheese knife attachment. And somehow, despite all that
capability and complexity, they don't do any one thing particularly
well. They also don't have standards that represent a minimum of
necessary complexity, but rather a minimum of expected functionality.
How did this happen? Wherefore the many overengineered systems?
Say it with me this time. "It's complicated."
I think this merits some investigation, to see where things went wrong
and why. Not every system has exactly the same problems for exactly
the same reasons, even if the "overengineered" label applies to one
just as well as others. We ought to be able to tease out some of what
went right and wrong in the case of a few systems.
And, though I don't want to begin with the conclusion, I think my
initial intuition about how we got here with such systems will still
be meaningful after that investigation.
The intuition is this - that "simple" systems require greater
discipline and are often harder to create in this sense than complex
ones. Further, I imagine that simple systems are frequently
dismissed as being unrealistic, whether at inception, or at some point
in development when new applications are being created, or when the
simple system is considered for filling the role of a more complex
and older one.
I hope to test these ideas against at least 3 or 4 examples of
common industry technology in coming phlog entries. Stay tuned!