Implementing W3C Trace Context across Distributed Services
Why you cannot debug without a Trace ID spanning all services
Implementing Exponential Backoff to Prevent Thundering Herds
Immediate retries turn a brief blip into a self-inflicted outage. How exponential backoff with full jitter works, a production-ready retry helper in TypeScript, Envoy and gRPC configs, and where retries should and should not live.
Implementing Circuit Breakers with Resilience4j/Polly
Implementing patterns to stop cascading failures in services
Handling Duplicate Messages in Kafka Consumers
Kafka delivers at least once, and its exactly-once features stop at the edge of Kafka. Where duplicates come from, and how to build idempotent consumers with an inbox table, sane offset commits, and dead letter topics for poison pills.
Explaining Eventual Consistency to Non-Technical Stakeholders
Explaining to stakeholders why data isn't instantly consistent
Decoupling Microservices: Moving from REST to Events
The trade-off between coupling (HTTP) and latency (Events)
The Distributed Nightmare of Auto-Numbers
Why auto-increment fails when you try to shard a database or merge data from multiple regions
Kafka vs. NATS: Why Your Team Is Probably Better Off With the Underdog
Challenging the default enterprise choice of Kafka by arguing that for most modern, real-time applications, NATS provides a simpler, more performant, and cost-effective solution without the operational overhead.