Skip to contentTag · 8 entries
Production
- A Cron Job That Did Nothing Took Down My Deploy PlatformOct 6, 2026 · 10 min readIn July 2026 a stock-replenishment job that produced zero results ate the memory on Polaris's 4 GB VPS until the kernel killed Dokploy. How it got there, what made it worse, and what I changed.
- LangChain in Production: What the Tutorials Leave OutFeb 1, 2026 · 3 min readWhere LangChain is worth using, where it gets in the way, and the defaults that stop our AI features failing silently: timeouts, validation, persistent state, tracing and pinned versions.
- Agent Middleware: What Kept Obelisk's Agents in LineApr 8, 2026 · 5 min readObelisk runs more than fifteen specialist agents. Model choice, context, cost, retries and approvals all ended up in a middleware layer around them, and this is how that layer works.
- Taking Obelisk's Backend Deploy From 54 Minutes to 32Oct 6, 2026 · 10 min readOur backend deploys had crept up to almost an hour. Docker was fine. Most of the time went to migration tests waiting on one Postgres advisory lock, and to five Cloud Run services promoted one at a time.
- PgBouncer Transaction Pooling Broke Row-Level Security in PolarisOct 6, 2026 · 9 min readI put PgBouncer in front of Postgres to stop a login outage. Two weeks later customer search started returning empty lists on some requests, because tenant isolation depended on a session variable and transaction pooling doesn't keep sessions.
- Moving SMS Realtime Off Postgres Polling and Onto Redis StreamsOct 6, 2026 · 9 min readA Django app whose SSE endpoints polled Postgres from sleeping request threads, and the outbox, relay and Redis Streams setup that replaced them in March 2026.
- An SMS Queue That Wouldn't Drain, and the DynamoDB Row Every Send RewroteOct 6, 2026 · 9 min readIn September 2026 an SMS backlog on AWS drained at four or five messages a minute, and a few weeks later adding workers stopped making sends faster. How I drained the queue by hand, and the DynamoDB items every send was rewriting.
- I Shipped a Race Condition That Oversold Stock (And Other War Stories)Apr 8, 2026 · 4 min readTwo cashiers selling the last item, a chain that returned nothing, and a lock that only worked when both requests hit the same process. Bugs I shipped, and the small fixes that held.