Writing
Notes on building
Engineering, building with AI, and what it’s like to change careers in your thirties. Occasionally, something from a previous life.
Idempotency: Why Retrying a Request Shouldn't Duplicate It
Payment webhooks retry more than you'd think. Here's what breaks when your endpoint assumes every call is the first one, and the pattern that fixes it for good.
Authentication vs. Authorization: The Bug AI Won't Catch
An AI-built endpoint checked for a valid session and called it done — it never checked who owned the resource. Here's the one-line fix that closes the gap.
The Rate Limit I Forgot to Ask For
I asked an AI to build a public lottery-results endpoint. It worked perfectly in the browser and had no idea what happens at a thousand requests a second.
Your AI Assistant Has No Security Instinct
I asked an AI to connect my app to a database. It hardcoded the key in plain text, because I never told it not to. Here's the one-line fix.
I never got a tech job by applying on LinkedIn
Every door I've walked through in tech opened through a person, not an application form. Here's the first one.
Notes from three weeks building mobile with Expo
Coming from years of web, here's what surprised me about Expo, React Native and NativeWind, and where the honeymoon ends.
I asked an AI the same question twice
Two weeks apart, same question, completely different answer. The model didn't change. One line in my instructions did.
Your image optimizer uploads your files. Mine doesn't
Most online image tools quietly send your files to a server. WebAssembly means they don't have to anymore.
Two weeks on Module Federation before a single feature
We spent two weeks wiring up Module Federation before writing any product code. It was the right call, and here's what actually ate the time.
Software doesn't start in the editor
Vibe coding feels great until you realize you built something fast that you never actually thought through. The fix isn't less AI. It's planning first.
From "how do I build it" to "what problem does it solve"
The smallest shift that changed how I work: thinking about the user's problem before the implementation.
Context engineering and sub-agents beat vibe coding
Vibe coding falls apart the moment a project gets serious. Here's the workflow I landed on instead, and the repo I open-sourced from it.
Working out on an empty stomach: myths and facts
From a previous life as a sports scientist. Does training fasted actually burn more fat, or is it just gym folklore?
Why I started coding at 34
Once your career feels settled, starting over sounds reckless. I did it anyway. These are the reasons that pushed me in.