When Your Use Case Half-Succeeds: Designing for Partial Failure in .NET
A use case isn't a transaction. The moment it touches more than one system, you are dealing with partial failure. Here's how I classify side effects a...
Page 3 of 22. Practical .NET and software architecture lessons.
A use case isn't a transaction. The moment it touches more than one system, you are dealing with partial failure. Here's how I classify side effects a...
Most teams reach for v2 too early because they don't have a contract evolution strategy. Here's the API change management approach I prefer: evolve co...
Most 'DDD-ish' code I review enforces business rules everywhere except in the model itself, so the same rule ends up duplicated across handlers and va...
The test pyramid made sense when integration tests meant a shared database server and a 20-minute build. It doesn't match how I build .NET systems in ...
I resisted primary constructors for a while. They felt like a shortcut that would cost me later. But after using them across several projects, I'm sol...
Long-running business processes don't fit neatly into a single request. Wolverine's Saga support gives you a convention-based approach to orchestratin...
The Outbox pattern guarantees reliable publishing. But what about the consumer side? The Inbox pattern ensures each incoming message is processed exac...
Vector search doesn't require a dedicated vector database. PostgreSQL with pgvector gives you similarity search right next to your relational data. He...
SignalR connections are server-local. Scale out to multiple instances and messages stop reaching the right clients. Here's how the Redis backplane fix...
Seven approaches to bulk-updating rows in PostgreSQL from .NET using Dapper and EF Core, from naive per-row updates to binary COPY. Each step cuts dow...
Join 66,000+ readers of The .NET Weekly for practical tips and resources to improve your .NET and software architecture skills.