Maintaining consistency in a distributed system is hard. You face a trade-off between consistency and availability, between tight coupling and loose coupling. Events complement commands and queries in microservices to foster loose-coupling and evolvability.