Saturday January 7 2023

Why Software Engineers don’t avoid Complexity

Most engineering disciplines there’s a very solid understanding of complexity, how to manage it, when to reduce it. Enumeration of variables and reducing the state of things you have to worry about.

Automotive technicians do this kind of thing all the time, whether they realize it consciously or not. When troubleshooting they’ll go down the list of variables to check, from most likely, to least. That way reducing the set of potential problems. Often, though not always, this leads to an obvious solution.

Software engineering is a bit different, we have complicated, esoteric monstrosities all over the place. Perhaps, the most obvious is the whole stack of web technologies. Every browser, by design slurps down code from wherever you browse the internet and then executes it on your computer – that is unless you’ve explicitly configured your browser not to do so. Making matters worse, it’s layered upon HTML–which, is hostile to eyes and computers, much like XML. HTML also sucks at its job too, so now we have CSS and the <center></center> HTML tag… does what now? No, no, it’s real easy, margin: 0px auto; or something.

I won’t belabor the point about software being unnecessarily complex for no reason, others before me have already spent a lot of time on that topic.

The question here is why does it exist? Why isn’t simplicity prioritized?

It comes down to incentives for all parties at play, let’s enumerate a few:

All of these incentives are indeed fixable.

Many of them you can fix by being the engineer who asks questions, makes suggestions and approves only of simplicity.

Some of the others are a broader reflection of where we are at in society, though that’s not to say you cannot move the needle a bit.