Event-Driven Architecture means services communicate by emitting and listening to events. User signs up → "UserCreated" event → email service sends welcome email, analytics service tracks signup, etc. Services are decoupled—they don't call each other directly. Events go to event bus (Kafka, RabbitMQ), subscribers process them. Great for loosely-coupled systems, async workflows, and audit trails. More complex than direct calls but enables flexibility.
Use event-driven when you have multiple services that need to react to the same action (user signup triggers 5 things), when you want services decoupled (email service doesn't know about analytics), when you need audit trails, or when operations can be async. Don't use for synchronous user-facing operations (user waits for response). Start with simple function calls, go event-driven when coupling becomes painful.
System Design Patterns
Services react to events, not direct calls