I really like this description of an event-driven pattern for services, even micro-services. It is still compatible with event sourcing for data and CQRS patterns, but provides a way to reason about service interaction more easily. I’ve tried to promote this type of architecture before, but the article below explains it much better than I have in the past.
In this blog post, we look at composing services not through chains of commands, but rather through streams of events.
Source: Build Services on a Backbone of Events | Confluent for Microservices