Blog
RSSLong-form posts on backend systems, infrastructure, and how I build.
2026
Shipping a side project with an AI pair programmer
What changed in my workflow after three months of building with an agent in the loop.
Postgres row-level locks bit me in production
A postmortem on a deadlock that only showed up under real traffic.
Self-hosting a link shortener on a $4 VPS
Docker Compose, Caddy, and a tiny Go service — soup to nuts.
2025
Designing idempotent APIs that survive retries
Idempotency keys, exactly-once illusions, and what clients actually do.
Why we moved from REST to gRPC internally
Service-to-service calls got a lot cheaper once we stopped paying the JSON tax.
From cron jobs to event-driven pipelines
Migrating a nightly batch monolith to queues without a big-bang rewrite.
Terraform state: what nobody tells you
Locking, drift, and the day someone force-unlocked prod.
2024
Kubernetes readiness probes that lied
A postmortem on a rollout that looked healthy and wasn't.
Building a rate limiter with Redis and Lua
Sliding-window counters, atomic Lua scripts, and the race condition we almost shipped.
The day our CDN cache poisoning bug shipped
An unkeyed header turned one user's error page into everyone's error page.