Month 1 Domain-Driven Design (DDD) & Hexagonal Architecture in NestJS
- Session 1-2: Strategic DDD in Node.js: Ubiquitous language, bounded contexts, domain subdomains, and context mapping.
- Session 3-4: Tactical DDD building blocks: Aggregates, immutable Entities, Value Objects, Domain Events, and Repository contracts.
- Session 5-6: Ports & Adapters (Hexagonal Architecture): Strict dependency inversion, domain isolation from NestJS framework decorators, and custom mapper layers.
- Session 7-8 (Live Hand-Holding): Monolith Decoupling Lab — Refactoring an anemic CRUD service into an aggregate-driven Hexagonal domain module with zero framework leakage.
Month 2 Command Query Responsibility Segregation (CQRS) Fundamentals
- Session 9-10: Core CQRS anatomy: Command Bus, Query Bus, Command Handlers, and side-effect isolation using
@nestjs/cqrs. - Session 11-12: Asynchronous Command validation, pipeline middleware, idempotency interceptors, and strict transactional unit-of-work patterns.
- Session 13-14: Query optimization: Materialized read models, database read-replicas, and projection synchronization strategies.
- Session 15-16 (Live Hand-Holding): High-Throughput Banking Ledger Lab — Designing a double-entry ledger handling concurrent debit/credit commands isolated from query view projections.
Month 3 Event Sourcing & Audit-Grade State Engines
- Session 17-18: Event Sourcing mechanics: Event Store tables, append-only logs, event rehydration, and optimistic concurrency versioning.
- Session 19-20: Aggregate snapshots, stream version rollover, and pruning strategies for aggregates with 100k+ historical events.
- Session 21-22: Schema evolution: Upcasting legacy domain events without mutating immutable historical event payloads.
- Session 23-24 (Live Hand-Holding): Custom PostgreSQL Event Store Lab — Building a pure PostgreSQL append-only Event Store with serializable locks and aggregate replay engines.
Month 4 Distributed Message Streaming & Kafka Event Fabric
- Session 25-26: Kafka fundamentals in NestJS: Topics, partitions, consumer groups, offsets, and high-performance producer batching.
- Session 27-28: The Dual-Write dilemma: Implementing the Transactional Outbox pattern with Debezium CDC and PostgreSQL WAL streaming.
- Session 29-30: Idempotent consumer design, dead-letter topics (DLT), poison pill handling, and graceful rebalance hooks.
- Session 31-32 (Live Hand-Holding): Cross-Service Event Pipeline Lab — Emitting domain events via transactional outbox to Kafka, consuming across services with exactly-once idempotency guards.
Month 5 Asynchronous Background Queues & Distributed Resiliency
- Session 33-34: NestJS + BullMQ orchestration: Sandboxed child process workers, distributed concurrency limiters, and parent-child parent job flows.
- Session 35-36: Distributed rate-limiting, exponential backoffs, and jittered retries under third-party API rate caps.
- Session 37-38: Distributed mutual exclusion with Redis Redlock to guard non-event-sourced critical sections and cache stampedes.
- Session 39-40 (Live Hand-Holding): Reliable Batch Ingestion Lab — Architecting an automated 50,000-record CSV ingestion and validation pipeline running on BullMQ worker clusters with zero data loss.
Month 6 Production Hardening, Tracing & Capstone Defense
- Session 41-42: Distributed telemetry: Tracing commands and Kafka events across boundaries using OpenTelemetry, Jaeger, and correlation IDs.
- Session 43-44: Load stress profiling with k6: Auditing memory leaks, Node.js event loop lag, and connection pool bottlenecks under 10,000 RPS.
- Session 45-46: Multi-stage Docker builds, non-root security containerization, health probes, and zero-downtime deployment pipelines.
- Session 47-48 (Final Capstone & Architecture Defense): Live Production System Defense — Deploying each student's complete CQRS & Event-Sourced microservice cluster on live infrastructure with live load verification.