event-driven

v2026.09.24

Event-driven architecture patterns and best practices. Covers Saga, Outbox, CQRS, Event Sourcing, and messaging patterns for distributed systems. USE WHEN: user mentions "event-driven", "Saga", "Outbox pattern", "CQRS", "Event Sourcing", "distributed transactions", "eventual consistency", "message broker", "event bus", asks about "microservices communication", "async patterns", "compensating transactions" DO NOT USE FOR: Simple pub/sub - use messaging framework skills (Kafka, RabbitMQ), REST APIs - use API design skills, Real-time updates - use WebSocket skills, Basic async/await - use language-specific skills

GitHub
Install command
npx skhub add claude-dev-suite/event-driven
Markdown
SKILL.md

Event-Driven Architecture Core Knowledge

Full Reference: See advanced.md for Saga implementations (Node.js, Java), Outbox pattern implementations, Event Sourcing, CQRS, and idempotency patterns.

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: event-driven for comprehensive documentation.

When NOT to Use This Skill

  • Monolithic applications - Use simple in-process events
  • Simple CRUD operations - Use REST APIs or GraphQL
  • Real-time UI updates - Use WebSockets or SSE
  • Synchronous workflows - Use traditional transactions

Architecture Patterns Overview

PatternPurposeComplexity
Pub/SubDecouple producers from consumersLow
Event SourcingStore state as event sequenceHigh
CQRSSeparate read/write modelsMedium-High
SagaDistributed transactionsHigh
OutboxReliable event publishingMedium

Saga Pattern

Manages distributed transactions across services without 2PC.

Choreography Saga

┌─────────┐    event    ┌─────────┐    event    ┌─────────┐
│Order Svc│────────────▶│Payment  │────────────▶│Inventory│
└─────────┘             │   Svc   │             │   Svc   │
     ▲                  └─────────┘             └─────────┘
     │    compensate         │    compensate         │
     └───────────────────────┴───────────────────────┘

Orchestration Saga

                    ┌─────────────┐
                    │    Saga     │
                    │Orchestrator │
                    └─────────────┘
                    /      |      \
                   ▼       ▼       ▼
            ┌───────┐ ┌───────┐ ┌───────┐
            │Order  │ │Payment│ │Invent.│
            └───────┘ └───────┘ └───────┘

Transactional Outbox Pattern

Ensures reliable event publishing with database transactions.

┌────────────────────────────────────────────┐
│            Database Transaction            │
│  ┌──────────────┐    ┌──────────────────┐  │
│  │   Business   │    │   Outbox Table   │  │
│  │    Table     │    │   (messages)     │  │
│  └──────────────┘    └──────────────────┘  │
└────────────────────────────────────────────┘
                             │
                    Polling Relay / CDC
                             │
                    ┌─────────────────┐
                    │  Message Broker │
                    └─────────────────┘

Outbox Table Schema

CREATE TABLE outbox (
    id UUID PRIMARY KEY,
    aggregate_type VARCHAR(255) NOT NULL,
    aggregate_id VARCHAR(255) NOT NULL,
    event_type VARCHAR(255) NOT NULL,
    payload JSONB NOT NULL,
    status VARCHAR(50) DEFAULT 'PENDING',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CQRS Architecture

        Commands                          Queries
            │                                 │
            ▼                                 ▼
    ┌───────────────┐                ┌───────────────┐
    │ Command Model │                │  Query Model  │
    │   (Write)     │                │   (Read)      │
    └───────────────┘                └───────────────┘
            │                                 ▲
            ▼                                 │
    ┌───────────────┐     Events     ┌───────────────┐
    │  Write Store  │───────────────▶│  Read Store   │
    └───────────────┘                └───────────────┘

Anti-Patterns

Anti-PatternWhy It's BadSolution
Event SoupToo many fine-grained eventsDesign coarse-grained domain events
Missing IdempotencyDuplicate processingAdd idempotency keys
No Compensation LogicFailed saga can't rollbackImplement compensating transactions
No Dead Letter QueueFailed events lostConfigure DLQ for error handling
Weak Event OrderingRace conditionsUse partitioning or ordered queues

Quick Troubleshooting

IssueDiagnosticSolution
Lost eventsCheck message brokerImplement Outbox pattern
Duplicate processingLogs show multiple executionsAdd idempotency checks
Saga stuckCompensation not triggeredAdd timeout handling
Growing DLQMany failed messagesAnalyze failures, fix consumers
Slow event processingHigh message lagScale consumers, optimize handlers

Best Practices

Message Design

  • Include correlation ID for tracing
  • Version your events for evolution
  • Keep payloads small, reference large data

Error Handling

  • Implement retry with exponential backoff
  • Use Dead Letter Queues for failed messages
  • Set up alerting on DLQ growth

Monitoring

  • Track message lag
  • Monitor consumer group health
  • Alert on processing errors
  • Trace message flow across services

Reference Documentation

Available topics: patterns, saga, outbox, cqrs

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/best-practices/event-driven

Default branch

main

Latest commit

9496306

Tree SHA

fe4e2f1