Blog posts

2026

Multi-Tenancy Patterns in ASP.NET Core

2 minute read

Published:

This post covers common multi-tenancy patterns in ASP.NET Core. Multi-tenancy means one application serves multiple customers, organizations, or logical tenants while keeping their data and configuration separated. The hard parts are tenant identification, data isolation, configuration, security, and operations.

Deploying ASP.NET Core Apps: Docker, Linux Hosting, Nginx, and Health Checks

2 minute read

Published:

This post covers practical deployment patterns for ASP.NET Core apps: Docker images, Linux hosting, reverse proxies such as Nginx, and health checks. Deployment is part of application design. An app that cannot start, stop, report health, and receive traffic cleanly is not production-ready.

gRPC in .NET: Contracts, Streaming, and Interop

2 minute read

Published:

This post introduces gRPC in .NET: contract-first service definitions, generated clients, streaming calls, and interop considerations. REST and JSON are still excellent for many APIs, but gRPC is useful when strongly typed contracts and efficient service-to-service communication matter.

Security Deep Dive for .NET APIs: OWASP, Rate Limiting, Headers, and CORS

2 minute read

Published:

This post covers practical security controls for ASP.NET Core APIs: OWASP API risks, rate limiting, security headers, CORS, authentication, authorization, and input handling. Security is not one feature. It is a set of controls that reduce the chance and impact of abuse.

Performance Tuning in .NET: Kestrel, GC, Allocations, and BenchmarkDotNet

3 minute read

Published:

This post covers practical performance tuning in .NET: Kestrel configuration, garbage collection, allocation reduction, and benchmarking with BenchmarkDotNet. Performance work should start with measurement. Guessing usually leads to busy code that is not actually faster.

Observability in .NET: OpenTelemetry Traces, Metrics, and Logs

2 minute read

Published:

This post covers observability in .NET using traces, metrics, logs, and OpenTelemetry. Logging tells you what happened. Observability helps you understand how a system behaves across services, dependencies, and time.

Outbox Pattern in .NET: Reliable Messaging and Eventual Consistency

3 minute read

Published:

This post covers the outbox pattern, one of the most important patterns for reliable messaging. The problem is simple: your application needs to save data and publish a message, but the database and message broker do not share one transaction. The outbox pattern solves this by storing messages in the database first and publishing them later.

Messaging and Event-Driven Design in .NET: MassTransit, RabbitMQ, and Kafka Basics

2 minute read

Published:

This post covers the basics of messaging and event-driven design in .NET. When systems grow, not every operation should be a direct HTTP call. Messaging lets services communicate through commands, events, queues, topics, and streams so work can happen asynchronously and systems can be less tightly coupled.