How We Deliver 15 Million Webhooks a Day Without Losing a Single Event
Delivering 15M webhooks a day to endpoints you don't control is deceptively hard. Here's the outbox + queue + retry design that never drops an event.
Long-form tutorials and engineering notes on .NET, React, AI/ML, and SaaS architecture.
Delivering 15M webhooks a day to endpoints you don't control is deceptively hard. Here's the outbox + queue + retry design that never drops an event.
How Mattrx swapped synchronous REST calls for Kafka — decoupling the ingestion pipeline, killing cascading failures, and cutting failures by 90%.
Clean Architecture in .NET — the Dependency Rule, four layers, full ASP.NET Core + EF Core + MediatR code, trade-offs, and the version that ships.
CQRS in .NET — the problem it solves, MediatR + EF Core implementation, separate read/write models, and when CQRS pays off vs over-engineering.
Azure Functions in .NET — when to pick them over Web API, hosting plans, HTTP/Queue/Timer/Durable code, cold starts, and the real cost model.
Outbox pattern in .NET — the dual-write problem, EF Core implementation, relay/dispatcher code, CDC vs polling, and the pitfalls that break production.
SAGA pattern in microservices — Choreography vs Orchestration, an order-processing walkthrough with .NET code, compensating transactions, and pitfalls.
Microservices from basic to advanced — when to pick them, real .NET code, communication patterns, observability, trade-offs, and where they fail.
Strategy, Decorator, Adapter, Builder, and Mediator — with the C# idioms that make them feel natural rather than ceremonial.
A real production debugging story: the systematic path from "the dashboard is slow" to a 25x speedup. Tools, traces, and the four bottlenecks we found.
Microservices solve specific problems. Adopting them without the prerequisites doubles your operational cost and slows delivery. Here is when to say no.
Three Azure compute options that overlap heavily. The decision tree, cost model, and the specific signals that tell you when to graduate from one to the next.