There’s a genre of tech social media/content that goes something like this:

This language / framework / cloud is shitty because…reasons.

The authors of this content seem to apparate into any threads about the failings of said “tech.” And there’s you, the poor sod who spent the night wresting said “tech”, it is nice. You’re not alone out there, someone else has struggled with these docs or those obscure error messages. So when these detractors nod and point and say:

See, it’s obviously flawed and they don’t have it sorted.

It feels…good. There is community in this pain. It gets even better because this types of content usually include a recommendation of something better: a better language, framework, runtime, library, CLI, text editor, cloud, etc. If you will only lay down your burden, weary developer and come with me, you will find succor in the lovely arms of this other thing.

It’s more expressive! They actually thought about transactions! The UI/UX is worlds better! Way fewer outages! None of the cruft you get! You can’t represent invalid states! It’s boring and solid and that’s why it’s better! Everything they make just works and it works together! Lightweight, single binary! It’s made me so happy.

This evangelism makes (some) sense. Some database bit you in production too many times? Find another. Foot guns with this library not clearly documented? Find another. Evaluate your tools and proceed accordingly. Love the one who loves you back and all that.

And if you find the light? The one true piece of software that just works and gets out of your way and also gives you super powers and is objectively and subjectively lovely? Why, it’s practically your duty to spread the gospel.

No Rest For The Weary

It won’t work.

At some point in the future, the new thing, the better way, the “just works,” will let you down. Maybe not in the same way as the last one, maybe not as quickly or publicly. Maybe the docs are better, but the rate of improvement is glacial. Fewer memory leaks but shite concurrency. Better performance, with a toxic community. Incredible expressiveness but with low adoption. Great platform, horrible for society. God level metrics, can’t use it due to organizational policy. Perfect library, but your requirements have changed.

Everything breaks in some way, for some people.

All of the above was about software, but this desperate evangelism, this helter skelter rush from one thing to another is just as prevalent in ideas and methods (agile, team topologies etc.) as it is in code.

There is no safe harbor to be found in any piece of technology, no comfort in any runtime, platform, ideology or tech company. These pains, wrestling with tools, organizational complexity, industry insanity (hello interviews!) are part of the job description. These pains are a better description of the reality of software engineering than anything else.

Choose tools that work for you, change when they stop working. But don’t make them your religion.

Do You Believe In Miracles?

The more time I spend in the industry (~15 yrs so far), the more amazed I am that anything get’s built and that the things that get built work.

It is a miracle.

Building software cooperatively is a messy adventure. A mostly people shaped problem masquerading as a technical one. The software we build is flawed in the many confounding ways we are flawed. Even the triumphs of software are built on shaky clay. There is no escape from that big ball of mud, that’s what we are and that’s the software we build.

So preach on. Spread the good news about the thing. Just know, it’ll let you down soon. And that’s okay.