← ClaudeAtlas

event-driven-designlisted

When designing loosely coupled systems that react to state changes asynchronously.
KraitDev/skiLL.Md · ★ 4 · AI & Automation · score 81
Install: claude install-skill KraitDev/skiLL.Md
# Event-Driven Design ## Purpose Tightly coupled systems break and scale poorly. Event-driven architectures decouple producers from consumers by using immutable, timestamped facts as the communication mechanism. This enables systems to evolve independently, scale horizontally, and handle distributed failures gracefully. ## When to use - De-coupling monolithic microservices - Implementing long-running asynchronous workflows (e.g., video processing, email sending) - Triggering multiple side-effects across different domains from a single action - Designing systems that need to replay history or audit changes ## When NOT to use - Simple synchronous request-response flows (don't add unnecessary complexity) - Real-time bidirectional communication (use WebSockets instead) - Workflows requiring immediate response to action ## Inputs required - Microservices or monolithic application with clear domain boundaries - Message broker infrastructure (Kafka, RabbitMQ, EventBridge, etc.) - Understanding of event sourcing concepts ## Workflow 1. **Define Events**: Identify state changes in the domain and model them as past-tense events (e.g., `OrderPlaced`, `UserRegistered`, `PaymentProcessed`) 2. **Design Event Payloads**: Include Event ID, Timestamp, Event Type, and minimal required data (avoid large nested objects) 3. **Publishing Mechanism**: Have the producer system emit the event to a Message Broker without caring who consumes it 4. **Idempotent Consumers**: Ensure consumer services