Feature Flags in .NET with Microsoft.FeatureManagement
How to implement feature flags in .NET using Microsoft.FeatureManagement for safe deployments, A/B testing, and gradual rollouts.
Blazor Sections and Streaming Rendering in .NET 8
Using SectionOutlet and streaming rendering to build responsive pages that load progressively.
The Modular Monolith in .NET: Best of Both Worlds
How to structure a modular monolith in .NET that gives you the boundaries of microservices without the operational complexity.
JavaScript Interop in Blazor: When and How to Call JS from .NET
Practical patterns for calling JavaScript from Blazor and .NET from JavaScript.
Event Sourcing Basics in .NET
An introduction to event sourcing in .NET, covering event stores, aggregate rehydration, and projections with practical code examples.
The Saga Pattern in .NET: Managing Distributed Transactions
How to use the saga pattern to coordinate multi-step business processes across services in .NET, with orchestration and choreography approaches.
Forms and Validation in Blazor
Building robust forms with built-in validation using EditForm, DataAnnotations, and custom validators.
The Outbox Pattern for Reliable Messaging in .NET
How to use the transactional outbox pattern to guarantee reliable message publishing alongside database writes in .NET.
Respawn: Fast Database Reset Between Integration Tests
Use Respawn to intelligently reset your test database between tests without the overhead of dropping and recreating it.
Cascading Values and Parameters in Blazor
How to pass data down the component tree without prop drilling using cascading values.
The Specification Pattern in .NET: Composable Query Logic
How to use the specification pattern to encapsulate, compose, and reuse query logic in .NET applications.
The Repository Pattern: When to Use It and When to Skip It
A balanced look at the repository pattern in .NET, including when it helps, when it hurts, and what alternatives exist.
Testing Async Code in .NET: Patterns and Pitfalls
Practical patterns for testing asynchronous .NET code correctly, including common mistakes that lead to false-passing tests.
Understanding the Blazor Component Lifecycle
A deep dive into Blazor's component lifecycle methods and when each one fires.
CQRS with MediatR in .NET: Separating Reads from Writes
A hands-on guide to implementing the CQRS pattern in .NET using MediatR, with pipeline behaviours for cross-cutting concerns.
Mutation Testing with Stryker.NET: Are Your Tests Actually Good?
Use Stryker.NET to evaluate the real effectiveness of your test suite by introducing deliberate mutations to your code.
Vertical Slice Architecture: Organising by Feature, Not Layer
How vertical slice architecture groups code by feature rather than technical layer, and why it can reduce coupling in .NET applications.
Blazor Server vs WebAssembly vs Auto: Choosing the Right Render Mode
A practical comparison of Blazor's three render modes and when to use each one.
Clean Architecture in .NET: Structuring Projects That Last
A practical guide to implementing Clean Architecture in .NET, with project structure, dependency rules, and real code examples.
Architecture Testing in .NET with NetArchTest
Enforce architectural rules as automated tests using NetArchTest to prevent dependency violations and structural drift.
Application Insights and OpenTelemetry in .NET
How to instrument .NET applications with OpenTelemetry and export telemetry to Application Insights for end-to-end observability.
End-to-End UI Testing with Playwright for .NET
Use Playwright's .NET bindings to write reliable, cross-browser end-to-end tests for your web applications.
Bicep for .NET Developers: Infrastructure as Code Without the YAML
A practical introduction to Azure Bicep for .NET developers who want to define their infrastructure alongside their application code.
Generating Realistic Test Data with Bogus in .NET
Use the Bogus library to generate realistic fake data for your .NET tests with deterministic, locale-aware data generation.
Test Data Builders in .NET: Clean, Maintainable Test Setup
The test data builder pattern helps you construct complex test objects with sensible defaults while keeping tests readable and maintainable.