Cover art by Damian Mendez Romera.

The latest AI models have this tendency to produce so much output that they feel like the AI equivalent of a verbose person. Producing flowery language and handling every imaginable edge case are common things that the latest frontier models are increasingly good at, although that is not necessarily a good thing. A while ago I read this article about how nobody gets promoted for simplicity, which accurately describes a feeling I have had for a long time in the software industry: the love for unnecessary complexity.

Complexity is not a bad thing per se. According to Living with Complexity by Donald A. Norman, systems tend to get more complex with time. Being simple is not the end state of things, because real activities are incredibly intricate with numerous components that require flexible execution and the need for numerous alternatives. But it’s unnecessary complexity, the result of poor design with completely arbitrary steps without apparent reason, that makes things perplexing, confusing and frustrating.

Complex systems are desirable; what you want to avoid is unnecessary complexity.

The software industry has had an equivalent of this AI verbosity for a long time. Unnecessarily complex systems permeate companies here and there. It pays to speak in grandiloquent terms and to build systems designed to scale, even if nobody will ever use them at anything close to the projected scale for which they were designed. In my experience, it was always easier to justify a full-fledged solution that scales automatically and has all the bells-and-whistles from the cloud provider of the day than to sell the idea of building something small, probably a monolith, that could scale maybe only horizontally (and not without some effort). To fellow software engineers, the idea of building something complex is always tempting. You get to use fancy tools, apply new techniques and explore different problems from those you encounter when building a dead-simple monolithic service. To the company paying for those solutions, both in terms of infrastructure and salaries for the developers working on them, it’s always good to have a pitch about how you will handle the gazillion users you’ll someday have, so having a well-thought-out system that scales properly from the very beginning is essential, even when your system has nowhere near a couple hundred daily users.

It’s now ironic that this human behavior of making things more complex than necessary has somehow reached today’s most advanced LLMs. I have been using AI daily to code for years and I have noticed lately how much useless slop they produce. These models don’t even try to optimize their own token output. They go down the path of adding exception handling for weird scenarios that, when called out, turn your code into a messy pile of patches applied one after another, on an edge-case-by-edge-case basis. A human being, me for instance, would be bothered by the constant repetition of patches applied to flawed logic. A developer worth their salt would be uneasy about the wrong assumptions in the original design or, at the very least, by the messy spaghetti blob of edge-case handling code.

Where does this tendency toward complexity come from? I’m inclined to think it’s because under a token-output-based billing model, models that make you spend more tokens generate more revenue for their creators. Cheaper models are more succinct, yet their output requires more cross-checking to validate it, which brings us back to either verifying the output with other models or having a human in the loop. And both things cost money.

Could we have a model optimized for controlling complexity? A model that somehow feels the same pain I feel when a solution is convoluted, bloated, complex without clear logical connections between its parts. One that spends a ludicrous amount of tokens looking for the simple route, not the one that takes fewer lines of code, but the one that is easy to explain, no matter how complex its component parts may be.

Because simple is hard. Simple is expensive. Simple is taming complexity. You can’t provide simple without convoluted mental gymnastics that take complexity apart. My brain hurts when I’m forced to deal with complexity, so I seek to eliminate it. A machine doesn’t have this problem, it’s all just numbers to it.