$ ls ~/blog
Notes from production.
What I've learned keeping real systems boring: what broke, why, and what I'd do again. Client details are anonymized.
How I cut incident response time by 40% without buying new tools Most of the time in an incident isn't spent fixing anything. Here's where it goes, and the boring changes that win it back. Read post → A failed release should never touch production Gated pipelines run every check before anything is deployed. When one fails, nothing ships and production keeps running the version it had. Read post → Build once, deploy everywhere If staging and production each get their own build, you never shipped what you tested. Immutable, versioned releases fix that. Read post → Build, then configure: why OpenTofu and Ansible stay separate Provisioning servers and configuring them are different jobs. Keeping them in two phases makes both safer to change and easier to fix. Read post → Do you actually need Kubernetes? Kubernetes is powerful and widely used. For many small teams it's also the most expensive way to run a handful of services. Here's how I decide. Read post → One server to four: what happened when we split a crashing VM A fintech platform kept crashing on a single machine. Splitting it into four small, isolated servers fixed stability and security at the same time. Read post → Right-sizing without breaking production Shrinking servers saves money until it causes an outage. Here's the careful way: measure first, change one thing at a time, and keep a way back. Read post → Self-hosting Supabase: what the paid plan was quietly doing for you Moving from managed Supabase to your own server can solve data residency and cost problems. It also hands you every job the platform used to do. Read post → Stop sharing server passwords When 40+ developers share server passwords, nobody can say who did what, and nobody can be removed cleanly. Here's how to fix access without slowing anyone down. Read post → When marketing emails took down our database Newsletter campaigns kept crashing the database and web server. The cause wasn't a bug. It was volume, and the fix was a queue. Read post → Where your cloud bill actually leaks Most cloud waste isn't one big mistake. It's a dozen small things nobody owns. Here's where I look first, and how to stop it coming back. Read post → Why I run two backup strategies, not one Continuous backups and daily dumps protect you from different failures. And the backup doesn't count until you've restored from it. Read post → Your Lovable MVP isn't production-ready yet. Here's the checklist. AI app builders get you to a working product fast. Here's what they don't give you, and what to fix before real users and real data arrive. Read post →