I like software built with care , healthy teams and puzzle pieces that fit
If you read my first two posts, you might remember my passionate, intellectual defense of technical self-reliance. I argued that dependencies are a trap, that building your own static site generator is a path to programming sovereignty, and that custom EDN-based rendering is the ultimate expression of data-driven design.
And then, I didn't publish a single post for over two years.
There is a delicious, painful irony here. The very system I built to liberate myself from the bloated abstractions of modern web development ended up silencing me. I fell victim to the classic NIH (Not Invented Here) hangover.
So, what happened? In the real world, things got busy. I started a new job. My wife and I welcomed our second child. My personal programming time, once a vast ocean of late-night hacking, shrunk to a few precious puddles of semi-conscious hours.
But the real reason for the silence was friction.
Every time I wanted to write a quick note, I had to open up custom Lisp files, copy-paste DSL templates, configure Aero tags, and manually structure layout vectors. If I wanted to tweak the design, I had to do major surgery on my custom engine's compiler passes.
I had wanted to take my custom DSL in a brand-new direction, but the sheer mental overhead of building and maintaining that tool started to exceed the utility of the blog itself. A blog's primary job is to be a communication tool—a record of thoughts. If the tool makes writing feel like work, you stop writing.
The ultimate developer trap is optimizing the shovel instead of digging the hole.
As a mid-career engineer, much of my value comes from guiding teams away from rabbit holes and engineering pitfalls. Yet, I had guided myself straight into one.
I needed to apply my own professional judgement to my personal projects. I sat down and asked: What are my actual priorities? If the priority is writing, then the engine needs to be as invisible as possible. The benefits of maintaining my own custom engine had run their course. It was time to outsource the plumbing.
I wanted something lightweight, built on a stack I loved, that handles the boring details while letting me write in plain Markdown. Enter quickblog by Michiel Borkent (affectionately known in the Clojure community as @borkdude).
Quickblog is built on Babashka—a fast, native Clojure scripting engine—and standard markdown parsing. It is clean, minimalist, and doesn't require a master's degree in language design to add a bulleted list. Porting my old posts and custom styles over took an afternoon of work, but the return on investment was immediate: the friction was gone.
This shift in priorities has made me reflect on a lesson I've been learning in parenting.
Lately, whenever my family is running late and I start rushing, my five-year-old daughter likes to look up and say, "Daddy, remember the story of the tortoise and the hare? Slow and steady wins!"
She is wiser than she knows. In software, as in parenting, rushing is almost always a trap. Trying to move quickly on an ineffective path (like building a custom layout engine just to write a blog post) is magnitudes slower than choosing an effective path and moving steadily.
I am no longer in the blog generator business. I am back in the writing business. And hopefully, you'll be reading more from me because of it.
Published: 2023-02-01
Tagged: priorities quickblog personal blog