Notes from distributed systems in production.
Essays and field reports from building and operating high-traffic, polyglot platforms — Kubernetes, AWS, incident response, iGaming scale.
Redis Cache Invalidation: Four Patterns From Production
Cache invalidation is famously "one of the two hard things in CS." True — but the hard part isn't the magic, it's choosing the right pattern for your shape of system. Four field-tested patterns from iGaming production.
Zero-Downtime Database Migrations: The Expand-Contract Pattern
Schema changes are the most-feared deploys in most systems. With the right approach, zero downtime is achievable. The expand-contract pattern I've used for years and the step-by-step plan.
Background Jobs: Idempotency, Retries, and DLQs
Async job queues are the silent backbone of production. Get them wrong and you ship duplicate operations, lost messages, and data inconsistency. Three patterns that have kept us safe in production.
Scaling WebSockets: Connections, State, Broadcast
Scaling an HTTP API to tens of thousands of users is relatively easy. Managing the same load over WebSocket connections is a different game. Four years of multiplayer production.
Redis Pub/Sub or RabbitMQ? When to Pick Which
I've run both in the same platform for years. Why each got chosen, when I paid the cost of a wrong call, and the four questions I ask before picking.
Polyglot Architecture: Java, .NET, and Python on One Platform
Our production platform has 20+ microservices — some Java/Spring, some .NET Core, some Python. Can multiple languages live next to each other cleanly? When is it necessary, when is it regret?
MySQL + MongoDB Together: The Real Cost of Polyglot Persistence
In our game platform, MySQL and MongoDB run side by side. The advantages of using both, the costs that sneak up on you, and four questions to ask before that decision.