Distributed Systems
Event-driven architecture, message queues, and async workflows for resilient, scalable systems.
Beginner
What is Eventual Consistency — and When Should You Use It?
A practical introduction to eventual consistency: what it means, how it differs from strong consistency, the trade-offs involved, and how to design systems that work correctly when data is eventually consistent.
Introduction to Message Queues — Why, When, and How
A practical introduction to message queues: what problems they solve, the difference between queues and pub/sub, when to use a message broker vs direct HTTP calls, and how to get started with Azure Service Bus and RabbitMQ.
Intermediate
Kafka Architecture: Topics, Partitions, Offsets & Consumer Groups
Understand Apache Kafka from the ground up — brokers, topics, partitions, replication, offsets, consumer groups, delivery guarantees, and when to use Kafka vs a message queue.
Kafka Producers & Consumers in Java and Python
Write production Kafka producers and consumers in Java (Spring Kafka) and Python (confluent-kafka) — serialization, error handling, manual offset commits, Dead Letter Topics, and idempotent processing.
Advanced
CAP Theorem in Practice — Consistency, Availability, and Partition Tolerance
Beyond the 'pick 2' oversimplification — how CAP theorem actually governs .NET distributed systems, with concrete trade-offs in PostgreSQL, Cassandra, DynamoDB, and real C# implementation patterns.
Distributed Consensus — Raft, Leader Election, and Coordination in .NET
Why distributed consensus is fundamentally hard, how Raft solves it, and concrete .NET patterns for distributed locks, leader election, and when to avoid consensus entirely.
Event-Driven Architecture Patterns — Event Sourcing, Outbox, and Choreography vs Orchestration
A senior engineer's guide to event types, the dual-write problem, outbox pattern with EF Core, event sourcing with Marten, and idempotent consumers — all with production-grade C# code.
Distributed Clocks — Logical Clocks, Vector Clocks, and Ordering Events Correctly
Why wall-clock time fails in distributed systems, how Lamport timestamps and vector clocks establish causality, Hybrid Logical Clocks in CockroachDB, and practical C# implementations of VectorClock, ULID, and Snowflake IDs.
Kafka Connect: Source & Sink Data Pipelines
Build data pipelines with Kafka Connect — stream database changes with Debezium CDC, sync data to DynamoDB and PostgreSQL with custom sink connectors, manage connectors via REST API, and monitor pipeline health.
Kafka Schema Registry & Avro: Enforcing Data Contracts
Prevent breaking changes in Kafka event pipelines — define Avro schemas, register them in Confluent Schema Registry, configure compatibility rules, evolve schemas safely, and use schemas in Java and Python producers/consumers.
Kafka Streams: Real-Time Stream Processing in Java
Process event streams in real time with Kafka Streams — stateless transformations, stateful aggregations, windowed operations, join streams, and build a live call volume counter and appointment funnel.