This document discusses techniques for managing data at scale using a microservices architecture and event-driven design. It explains how events can be used as the primary mechanism for sharing data between services, enabling joins across services, and coordinating transactions that span multiple services. Specific techniques covered include using events with asynchronous caches to share data, services that materialize joins, and implementing workflows as sagas of events with compensating actions. The key message is that events provide a unified approach for handling the major data challenges introduced by splitting an application into independent microservices.