Posts
Building an Event-Sourced Banking System in Go: From Theory to Production
A hands-on guide to implementing Event Sourcing and CQRS in Go, with a complete banking domain example including aggregates, projections, and snapshots.
Building an MMORPG from Scratch with Go - Part 1: The Foundation
Part 1 of the 'Building an MMORPG' series
The Hidden Costs of CQRS in Production
What the tutorials don't tell you about eventual consistency, debugging distributed state, and the operational complexity that comes with separating reads from writes.
CQRS and Event Sourcing in Go: Practical Patterns from the Trenches
Building scalable systems often means accepting that the traditional CRUD approach won't cut it. When audit requirements get strict, when read and write patterns diverge, or when you need to answer
Managing Race Conditions in Event-Driven Systems with Go
Building distributed systems means accepting that events won't always arrive in the order they were created. When Services communicate asynchronously through message queues and event streams, race conditions become inevitable. This guide exploires practical strategies for handling out-of-order events using Go.
Writing Testable Go Code Without Mocking Everything
Real implementations over mocks, test fixtures that work, and design patterns that make code testable without generating mock files for every interface.
Profiling Memory Allocations in a High-Throughput Go Service
How we reduced GC pauses from 50ms to 2ms by finding hidden allocations. Practical pprof techniques, escape analysis, and the optimizations that actually matter.
Worker Pools and Bounded Concurrency in Go
Practical patterns for controlling concurrency: worker pools, errgroup, semaphores, fan-out/fan-in, and backpressure. How to process work concurrently without overwhelming your system.
Graceful Shutdown in Go Is Harder Than You Think
Handling in-flight requests, Kafka consumers, database connections, and Kubernetes termination signals correctly. The details that tutorials skip.
Error Handling Strategies Beyond if err != nil
Structured errors, error wrapping done right, sentinel errors vs behavior checking, and patterns that make debugging production issues actually possible.