Mastering .NET & Distributed Architecture

Advanced C# tutorials, system design deep-dives, and real-world developer tools built in public.

Active development · Build in Public

mqtt-churn: an MQTT presence stress-test tool

An open-source .NET tool, built one episode at a time. It simulates fleets of MQTT clients, each with a Last Will, and measures what a broker does under churn: connect latency first, then how long it takes to tell everyone a client has died.

.NET 10 MQTTnet MQTT 5 Mosquitto

Latest YouTube deep-dives

All videos

Latest articles

RabbitMQ in Local .NET Development with Aspire

RabbitMQ in Local .NET Development with Aspire

September 28, 2026dotnetaspirerabbitmqmessaginglocal-development

Run RabbitMQ locally with Aspire, inject its connection into a .NET 10 API, publish and consume a job, inspect the management UI, and understand what local orchestration does not guarantee.

Read more
Change Data Capture in PostgreSQL with .NET and Aspire

Change Data Capture in PostgreSQL with .NET and Aspire

September 16, 2026dotnetpostgresqlcdcchange-data-captureaspiremessagingnpgsqloutbox-pattern

How change data capture works in PostgreSQL: the WAL, logical decoding, replication slots and publications. Build a working CDC consumer in .NET with Npgsql and Aspire, and see when CDC beats the Outbox pattern.

Read more
Unlock Dependency Inversion: Who Owns the Interface?

Unlock Dependency Inversion: Who Owns the Interface?

September 2, 2026dotnetcsharpsolidarchitecturedependency-inversionports-and-adapters

Your solution is full of interfaces and you still can't swap anything. The Dependency Inversion Principle isn't about having abstractions — it's about who owns them. Ports, adapters, and the compile-time test that settles the argument in .NET.

Read more
NATS Message Broker in .NET: Subjects and Queue Groups

NATS Message Broker in .NET: Subjects and Queue Groups

July 22, 2026dotnetnatsmessagingmicroservicesnugetopen-sourcerabbitmqkafka

How the NATS message broker works in .NET: subjects and wildcard subscriptions, queue groups for load balancing, how NATS compares to RabbitMQ and Kafka, and validating every incoming message in one line with MessageValidation.NatsNet.

Read more

About

Written by Romain Ottonelli Dabadie, .NET engineer. Messaging, distributed systems and the architecture decisions that still hold up two years later. More about me.

An unhandled error has occurred. Reload 🗙