The cross-service join problem is definitely a weak point of microservices. Generally you&#x27;d try to avoid designing service boundaries that you plan to do joins or transactions, etc. across. If you do need joins&#x2F;transactions though, it&#x27;s not impossible to coordinate them across services.<p>Your reporting feature that wants to provide a sortable list of orders+customer information, whether it lives in the order or customer services or in its own, would have to collect order information including customer ids, then use those ids to collect customer information, join these together in a working area of some kind if they&#x27;re large (in-memory cache as you&#x27;ve mentioned is a decent candidate) and sort&#x2F;filter that as needed. A cache + invalidation strategy appropriate to the application could definitely be needed for acceptable performance.<p>Depending on the characteristics of the team: size, planning style, communication style, etc. the cost of having to solve cases like these can be well worth paying to have smaller projects which can be reviewed easier with clearer ownership responsibility etc. Sometimes the tradeoff is a dramatic win and these are where the microservices advocates come from.<p>Everything is trade-offs. With billions of humans, the worst design pattern&#x2F;methodology&#x2F;technology you can think of still probably has an appropriate application somewhere.