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

Simulate 1000 MQTT Clients in C# (mqtt-churn, Part 1)

Simulate 1000 MQTT Clients in C# (mqtt-churn, Part 1)

November 7, 2026.NETMQTTMQTTnetLoad TestingLast WillIoT

Build a fleet of 1000 MQTTnet clients with paced connects and a Last Will each, then measure connect latency honestly: why localhost cost 2 seconds per client and why the first numbers measured the harness, not the broker.

Read more
MQTT Explained: Why AI Agents Need an Event Bus

MQTT Explained: Why AI Agents Need an Event Bus

October 28, 2026.NETMQTTMQTTnetIoTEdge AIAI AgentsEvent-Driven Architecture

MQTT for .NET developers, from the angle of an AI agent reading live device data: broker, topics, wildcards, QoS, retained messages, Last Will, sessions and shared subscriptions, and the traps in each.

Read more
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

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 🗙