Systems built to hold where they're not allowed to fail.
From home energy to the way software itself gets built. Field notes, one layer up from any product.
Latest posts
-
Requirements as a Living System: Why 80% of Projects Lose Their Meaning Between Brief and Build
Most projects lose the original intent on the way from brief to code. The cure isn't a tidier spec — it's treating requirements as a living system, traceable all the way down to architecture, tests, and the implementation meant to satisfy them.
-
The bottleneck in AI-assisted development isn't generation. It's verification.
AI generates code faster than anyone can read it — but generation was never the hard part. The constraint has moved downstream, to proving the output actually holds. Why verification is the new bottleneck in AI-assisted development, and what it changes about how we build.
-
Why remote work forced me to build orchestrated backup power — and reject Home Assistant
Home Assistant is the best home-automation platform there is — which is exactly why it's the wrong tool for energy orchestration. A developer's case for why automation and orchestration are different problems, and why mistaking one for the other costs you months.
-
You don't have a backup. You have an assumption.
Nineteenth floor of a twenty-two-storey block, no gas: water, heat, the stove, the lift, the light — and the income of two remote developers — all on one wire. What a blackout taught me about invisible single points of failure, at home and in the systems we build.
-
This blog is the thinking, not the changelog
I build systems meant to hold where they're not allowed to fail — from home energy to the way software itself gets built. This is where I think out loud: the principles, the wrong turns, the trade-offs, one layer up from any product. Engineering writing for people who build, not a release feed.