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:
- Customers demand features, management and engineering are downstream of that
- Management doesn’t see or understand engineering’s code
- Management doesn’t see code as a liability
- Customers likewise, don’t see or understand an engineer’s code
- Engineers often prefer what’s familiar and feature-filled
- Very little incentive to remove unused code
- Very little incentive to complete tasks more efficiently
- Very little incentive to make software that’s usable in 30+ years
- Bravado, in understanding the complexity
- Complexity may be seen (by some) as a kind of job security
- Consistent emphasis on the short term outlook from all involved
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.