Dark matter force: simple interactions
An operation’s complexity is proportional to the number of components that collaborate to implement it and the number of messages they exchange. Let’s look at why simple interactions are important and how minimizing their complexity is an attractive force between subdomains.
Ideally each operation should be local to a single service
Ideally, an operation should be local to a single service. That’s because a local operation is easier to understand and troubleshoot. If an operation fails, you know exactly which service is responsible. You only need to look in the logs of that service. The knowledge about that service often belongs to a single team.
But it’s inevitable that some operations will be distributed
However, it’s not always possible to create a microservice architecture where all operations are local. It would require each operation’s subdomains to be packaged as a single service, which might only be achieved by a monolith. As a result, some operations will be distributed across multiple services. Each distributed operation is implemented by multiple collaborating services.
Simplify critical operations
When designing a microservice architecture, you should strive to group the subdomains so that the critical operations are as simple as possible. For example, business critical operations that need to be highly available should either be local to a single service or be distributed across as few services as possible in order to minimize the amount of time it takes to troubleshoot a failure.