Oct 23, 2026
Concurrency and Locking in .NET · Part 2
Part 2 of the locking series: the optimistic concurrency EF Core gives you for a rowversion column, measured under 50 concurrent transfers. How the token becomes a WHERE predicate, how to handle DbUpdateConcurrencyException without a stale change tracker, which retry policy does not stampede, and where a hot row breaks it.
Oct 19, 2026
Silo, pooled compute with siloed data, or one partitioned database: the layout sets the isolation boundaries. The leak is always the same mistake, a request that reached the data layer without knowing its tenant. Put the tenant id in the token, resolve it once at the edge, let the data layer apply it to reads and writes, and hand it explicitly to workers and jobs.
Oct 2, 2026
There is no best architecture. Every decision gives you something and takes something away. The price starts on day one, the benefit only when the need shows up. Why moving code to another server does not fix coupling.
Sep 28, 2026
A customer support agent built with the Microsoft Agent Framework inside a clean architecture solution: the abstraction in Application, Ollama and the C# tools in Infrastructure, a domain that never hears about AI, and a model that can only ask for the methods you chose to expose.
Sep 26, 2026
A model turns text into text and nothing else. The harness is the loop, the tools, the context and the guardrails around it, and it is the part that decides whether an AI tool works. Agent harness, eval harness, and why you should compare harnesses instead of models.
Sep 25, 2026
Greenfield project, small team, no microservices on day one. Bounded contexts as separate projects, one schema per module, messages between modules, and why the split to services later is a deployment decision and not a rewrite.
Sep 16, 2026
DTOs in .NET · Part 2
The 1-to-1 mapping trap, the two jobs a DTO actually does (composition and boundary isolation), data on the inside versus outside, and how MediatR queries and commands replace CRUD wrappers around tables.
Sep 16, 2026
DTOs in .NET · Part 1
Five rules for DTOs in modern .NET: no behavior, no encapsulation, properties instead of fields, the Dto suffix as a last resort, one type per boundary, plus the DataAnnotations trap on positional records.
Aug 7, 2026
Concurrency and Locking in .NET · Part 1
A LIMS case study: two lab technicians dispatch material from the same aliquot, and an in-process lock (lock, SemaphoreSlim) stops working the moment a second instance is deployed.
Aug 7, 2026
Concurrency and Locking in .NET
A five-part series on race conditions in .NET and how to fix them at the right layer: in-process locks, database locks, optimistic concurrency and distributed locks.
Aug 7, 2026
Step by step guide to adding ASP.NET Core Identity to a Blazor app inside a .NET Aspire solution, including the database, migrations and login flow.