The blog

Latest deep dives

Deep dives on .NET, system design, architecture and databases. 11 practical articles.

.NET7 min

Inside dotnet/extensions: resilience, telemetry, and AI for .NET services

A tour of dotnet/extensions' nine libraries: resilience pipelines, IChatClient, LogProperties, redaction, contextual options, and testing fakes.

.NET10 min

Configuration in .NET: Options pattern, validation, reloading, and secrets

How the options pattern builds on IConfiguration: DI registration, three lifetimes, validation, and secrets

.NET6 min

Configuration in .NET: sources, providers & precedence

How .NET layers appsettings.json, environment variables, command-line args, and custom sources into one IConfiguration, then binds it to typed options.

.NET6 min

.NET 10 and C# 14: The features I'd actually use in production

The C# 14 and .NET 10 features that earn their place in production: field, null-conditional assignment, extension members, Minimal API validation, and SSE.

.NET6 min

ProblemDetails in .NET: A practical guide to standardized API errors

Return consistent API errors in .NET with ProblemDetails: the RFC 9457 fields, Results.Problem, ValidationProblemDetails, and IExceptionHandler.

.NET7 min

Filters in .NET: Complete guide to authorization, resource, action, exception, and result filters

How .NET filters intercept requests and responses to handle authorization, validation, error handling, and logging without bloating your controllers.

DATABASES8 min

Dapper Plus or SqlBulkCopy? Pros, cons, and hidden limitations for high-performance .NET data ingestion

Raw TDS streaming vs orchestrated MERGE: an architectural and performance comparison, plus the hidden traps that catch even experienced engineers.

CROSS-PLATFORM5 min

.NET MAUI vs Flutter vs React Native: An honest comparison

No winners, just facts: rendering philosophy, performance realities, and how to pick the cross-platform framework that fits your team's true profile.

DATABASES7 min

Where vs. WhereBulkContains: What's the real difference in EF Core?

Compare EF Core's version-dependent Contains translations with a temporary-table JOIN strategy, including tradeoffs for large and composite key sets.

.NET7 min

Introduction to Entity Framework Extensions library

SaveChanges() generates one SQL statement per entity, a bottleneck at scale. EF Extensions adds true bulk operations to your existing DbContext.

.NET6 min

Why every .NET developer should know about Dapper Plus

Dapper is famous for fast reads, but bulk writes are its weak spot. Dapper Plus fills that gap with one-line bulk insert, update, delete, merge and synchronize.