Posts

Building a Tiling Window Manager in Pure Go

How I built gowm, a minimal X11 tiling window manager from scratch using Go

Building a High-Performance Push Notifications Service in Go

Building a push notifications service that handles millions of events reliably requires careful architectural decisions. In this post, I'll walk through how I built a notifications backend in Go that processes events via gRPC and delivers push notifications through AWS SNS.

Rewriting a Python Notifications Service in Go: 5x Throughput, 10x Smaller

A deep dive into rewriting a Python asyncio notifications backend in Go, achieving 5x throughput improvement, proper distributed deduplication, and a 10x smaller Docker image.

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.