Domain
Architecture & System Design
Skill Profile
Event sourcing, CQRS, saga, pub/sub, message brokers
Roles
9
where this skill appears
Levels
5
structured growth path
Mandatory requirements
0
the other 45 optional
Architecture & System Design
Event-Driven Architecture
3/17/2026
Choose your current level and compare expectations. The items below show what to cover to advance to the next level.
The table shows how skill depth grows from Junior to Principal. Click a row to see details.
| Role | Required | Description |
|---|---|---|
| Backend Developer (C#/.NET) | Understands event-driven architecture concepts in .NET context. Knows C# events and delegates, MediatR for internal events, understands the purpose of message brokers (RabbitMQ, Azure Service Bus) in .NET applications. | |
| Backend Developer (Elixir) | Understands event-driven architecture in the context of BEAM VM and OTP. Knows GenServer as the foundation for message processing in Elixir, distinguishes between call and cast, understands the role of Phoenix PubSub for internal events. | |
| Backend Developer (Go) | Understands event-driven architecture concepts and the role of Go channels as an internal event passing mechanism. Knows the difference between pub/sub and point-to-point and why message brokers are needed in Go projects. | |
| Backend Developer (Java/Kotlin) | Understands event-driven architecture in the Java/Spring ecosystem context. Knows the purpose of Spring Events, ApplicationEventPublisher, difference between synchronous and asynchronous events in Spring Framework. | |
| Backend Developer (Node.js) | Understands Node.js event loop as the foundation of event-driven model. Knows EventEmitter, distinguishes internal application events from external ones via message brokers. Understands why Redis Pub/Sub and BullMQ are used in Node.js projects. | |
| Backend Developer (PHP) | Understands event-driven architecture concepts and PHP limitations as a request-response language. Knows Laravel Events/Listeners, Symfony EventDispatcher, understands why PHP applications need queues (Laravel Queue, Symfony Messenger). | |
| Backend Developer (Python) | Understands event-driven architecture concept and its difference from synchronous request-response. Knows what an event bus is and why pub/sub pattern is needed in Python applications. | |
| Backend Developer (Rust) | Understands event-driven architecture concepts and the role of Rust ownership model for safe event processing. Knows tokio channels, distinguishes between mpsc and broadcast channels, understands why Rust services need message brokers. | |
| Backend Developer (Scala) | Understands event-driven architecture in Scala/Akka ecosystem context. Knows Actor Model, Akka actors as message processing method, distinguishes tell and ask patterns. Understands Kafka's role in Scala projects. |
| Role | Required | Description |
|---|---|---|
| Backend Developer (C#/.NET) | Develops event-driven .NET services with MassTransit or NServiceBus. Implements consumers with retry policies, configures dead letter queues, applies MediatR for CQRS within bounded context. Uses Azure Service Bus or RabbitMQ as transport. | |
| Backend Developer (Elixir) | Implements event-driven Elixir systems with Broadway (Kafka/RabbitMQ/SQS consumers), GenStage for stream processing. Applies Phoenix PubSub for real-time events, Oban for background jobs with retry logic. Uses BEAM supervision trees for fault-tolerant event processing. | |
| Backend Developer (Go) | Implements event-driven microservices in Go using NATS, Kafka, or RabbitMQ. Applies goroutines and channels for internal event processing, implements graceful shutdown of consumers, handles errors with retry and backoff strategies. | |
| Backend Developer (Java/Kotlin) | Develops event-driven Java services using Spring Kafka, Spring AMQP, or Spring Cloud Stream. Implements producer/consumer with error handling, configures retry-template, dead letter topic. Applies @KafkaListener with manual offset commit. | |
| Backend Developer (Node.js) | Develops event-driven Node.js services with BullMQ, RabbitMQ (amqplib) or kafkajs. Handles events asynchronously with retry logic, configures dead letter queues. Uses NestJS CQRS module or custom pub/sub pattern implementations. | |
| Backend Developer (PHP) | Implements event-driven processing in PHP via Laravel Queue / Symfony Messenger with RabbitMQ or Redis. Configures workers, retry policies, dead letter queues. Applies domain events for business logic decoupling in Laravel/Symfony applications. | |
| Backend Developer (Python) | Designs async event handlers in Python using Celery, RabbitMQ, or Redis Streams. Implements producer-consumer pattern, handles errors in event chains, and configures retry policies. | |
| Backend Developer (Rust) | Implements event-driven Rust services with rdkafka, lapin (RabbitMQ) or async-nats. Uses tokio for async event processing, implements graceful shutdown with CancellationToken. Handles event deserialization errors through serde with proper error types. | |
| Backend Developer (Scala) | Develops event-driven Scala services with Akka Streams, Alpakka Kafka or FS2/Cats Effect. Implements reactive streams with backpressure, processes events through Akka Persistence for event sourcing. Applies Scala type system for type-safe event contracts. |
| Role | Required | Description |
|---|---|---|
| Backend Developer (C#/.NET) | Designs event sourcing with EventStoreDB or Marten in .NET. Implements saga pattern via MassTransit Automatonymous, transactional outbox with EF Core. Ensures exactly-once processing, designs event schema evolution with backward compatibility. | |
| Backend Developer (Elixir) | Designs event sourcing on Elixir with Commanded framework, CQRS through separate read/write models. Implements saga pattern through Commanded process managers, ensures exactly-once processing. Uses BEAM distributed Erlang for event propagation between nodes. | |
| Backend Developer (Go) | Designs high-performance event-driven systems in Go, leveraging the language's concurrency model. Implements event sourcing, CQRS, saga patterns. Ensures exactly-once semantics via idempotent handlers and transactional outbox in Go services. | |
| Backend Developer (Java/Kotlin) | Designs event sourcing and CQRS on Java using Axon Framework or custom solutions on Spring. Implements saga pattern for distributed transactions, transactional outbox via Debezium CDC. Ensures ordering guarantees and exactly-once processing in Kafka Streams. | |
| Backend Developer (Node.js) | Designs event sourcing and CQRS on Node.js considering single-threaded model. Implements saga orchestration via message broker, applies transactional outbox. Ensures handler idempotency, manages backpressure in event streams under high load. | |
| Backend Developer (PHP) | Designs event-driven PHP systems with Symfony Messenger or Laravel Horizon. Implements event sourcing via Prooph or Ecotone framework, saga pattern for distributed transactions. Ensures reliable message processing in stateless PHP conditions (long-running workers, Swoole/RoadRunner). | |
| Backend Developer (Python) | Designs event-driven Python systems with delivery guarantees (at-least-once, exactly-once). Applies event sourcing for critical domains, implements saga pattern for distributed transactions via Celery/Kafka. Ensures handler idempotency. | |
| Backend Developer (Rust) | Designs high-performance event-driven systems in Rust using zero-copy deserialization, lock-free queues. Implements event sourcing with type-safe aggregates through Rust enum/trait system. Ensures exactly-once processing, transactional outbox with sqlx. | |
| Backend Developer (Scala) | Designs event sourcing and CQRS on Scala with Akka Persistence / Akka Projection or pure FP approaches (FS2 + Doobie). Implements saga through Akka FSM, ensures exactly-once through Kafka Streams DSL on Scala. Uses ADT (sealed traits) for type-safe domain events. |
| Role | Required | Description |
|---|---|---|
| Backend Developer (C#/.NET) | Defines event-driven .NET system architecture: chooses between MassTransit, NServiceBus, Wolverine. Designs integration events between bounded contexts, schema registry for .NET services. Develops corporate NuGet packages for standardizing event-driven communication. | |
| Backend Developer (Elixir) | Defines architecture of event-driven Elixir systems: choosing between Commanded, EventStore, Broadway for different use cases. Designs multi-node event propagation through BEAM clustering, GenStage pipeline monitoring. Develops libraries for type-safe events using Elixir behaviours and protocols. | |
| Backend Developer (Go) | Designs event-driven system architecture for the Go platform: broker selection (NATS vs Kafka), schema evolution design, consumer lag monitoring. Develops internal Go libraries for standardized event handling, trains the team on Event Storming and domain events. | |
| Backend Developer (Java/Kotlin) | Defines event-driven Java system architecture for the company: choosing between Kafka, RabbitMQ, Pulsar, partitioning strategy, schema registry (Confluent/Apicurio). Develops corporate starters for standardizing event handling in Spring Boot microservices. | |
| Backend Developer (Node.js) | Defines event-driven Node.js system architecture: chooses between BullMQ, Kafka, NATS. Designs schema validation for events (JSON Schema, Avro), consumer lag monitoring. Creates internal NPM packages for standardizing event handling in Node.js microservices. | |
| Backend Developer (PHP) | Defines event-driven PHP system architecture: choosing between Symfony Messenger, Laravel Queue, Ecotone. Designs PHP service integration with Kafka/RabbitMQ, event schema validation. Solves PHP-specific problems: memory leaks in long-running workers, restart on deploy. | |
| Backend Developer (Python) | Defines event-driven system architecture at company level: choosing between Kafka, RabbitMQ, Redis Streams for Python services. Designs schema registry for events, contract versioning, event flow monitoring. Trains the team on working with eventually consistent systems. | |
| Backend Developer (Rust) | Defines Rust event-driven system architecture: transport selection, designing type-safe event schemas through Rust macros and proc macros. Develops internal crates for standardizing event handling, ensures compile-time guarantees for correct event processing. | |
| Backend Developer (Scala) | Defines architecture for event-driven Scala systems: choosing between Akka/Pekko, ZIO, Cats Effect ecosystems for event processing. Designs schema evolution for Avro/Protobuf events, actor systems monitoring. Develops libraries for standardizing event-driven communication. |
| Role | Required | Description |
|---|---|---|
| Backend Developer (C#/.NET) | Shapes event-driven strategy for enterprise-scale .NET platform. Defines event governance, versioning contracts, migration paths. Designs multi-regional event mesh with Azure Event Grid / Azure Service Bus. Leads transition from WCF/legacy .NET systems to event-driven .NET 8+ microservices. | |
| Backend Developer (Elixir) | Shapes event-driven architecture strategy for the Elixir platform, maximizing BEAM VM advantages (let it crash, supervision, distribution). Defines when to use BEAM-native messaging vs external brokers, event standards for polyglot systems. Leads event processing scaling on BEAM cluster. | |
| Backend Developer (Go) | Shapes platform-level event-driven architecture strategy. Defines event standards (CloudEvents), governance processes, schema registry and event catalog tools. Leads legacy system migration to event-driven approach, ensures observability via distributed event tracing. | |
| Backend Developer (Java/Kotlin) | Shapes event-driven strategy for enterprise-scale Java platform. Defines event governance, schema versioning, migration strategies. Leads transition from monolithic Spring application to event-driven microservices, designs event mesh for multi-cluster deployments. | |
| Backend Developer (Node.js) | Shapes event-driven architecture strategy for Node.js platform. Addresses event consumer scaling considering Node.js specifics (single-threaded), defines CloudEvents standards, designs event catalog and governance. Leads migration from monolithic Express/NestJS to event-driven microservices. | |
| Backend Developer (PHP) | Shapes event-driven architecture strategy for the PHP platform. Defines approaches to scaling PHP workers (Kubernetes + Horizon/Supervisor), event standards, governance. Leads migration from monolithic Laravel/Symfony to event-driven microservices considering PHP ecosystem specifics. | |
| Backend Developer (Python) | Shapes event-driven architecture strategy for the entire platform. Defines CloudEvents standards, event schema governance, migration from monolithic Python applications to event-driven microservices. Conducts architectural reviews of event systems and builds event flow observability. | |
| Backend Developer (Rust) | Shapes event-driven architecture strategy for Rust platform. Defines balance between compile-time safety and runtime flexibility for event schemas. Designs event mesh considering Rust specifics (ownership, lifetimes in async context), leads migration of critical services to event-driven Rust. | |
| Backend Developer (Scala) | Shapes event-driven strategy for Scala platform: FP-first approach (ZIO/CE) vs Actor Model (Akka/Pekko), event standards, governance. Designs migration path for framework changes, ensures observability for actor systems and stream processing. Leads architectural decisions for reactive event-driven systems. |