Blog

RSS

Long-form posts on backend systems, infrastructure, and how I build.

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.

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.

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.

Older →