A customer orders. The Orders service phones Email itself.
Email answers. One call done.
Now Orders phones Rewards too.
Rewards is down, and Orders is stuck waiting.
Each new service means changing Orders to call one more.
The sender announces once and does not know who listens.
Adding a listener never means changing the sender.
Loose coupling is the gain, and hidden dependencies are the price.
Reach for it when
When one event, like order placed, feeds email, rewards and analytics, and more listeners will come later. One receiver? Call it directly.
The catch
Orders cannot see who listens, so renaming one field in the message can quietly break Analytics, which nobody remembered.
Say it in an interview“I would publish an event to a topic so new consumers can subscribe without touching the producer. I would version messages, since I cannot see every subscriber.”