Design event-driven systems with well-named events, appropriate messaging infrastructure, and correct delivery semantics — covering event vs. command, event schemas and versioning, queues vs. logs, idempotent consumers, ordering, dead-letter handling, and the outbox pattern; use when decoupling services, building async workflows, integrating via messaging, or debugging duplicate, lost, or out-of-order messages.