The most common trap when first designing a distributed system is the seductive simplicity of "an API can just call another API synchronously." The order API calls the payment API, the payment API calls the inventory API, and the inventory API calls the shipping API. The code looks clean, but the moment the payment API slows down by 100ms, the order API's response time grows by 100ms too, and if the inventory API goes down, orders can't even be accepted. Temporal and spatial coupling drag the availability of the whole system down multiplicatively.
The message queue is the oldest tool for turning that multiplication into addition