---------------------------------------- "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!