Back in time to the days of monolithic architecture. Back then application components were tightly coupled. That means they were directly connected. So in a simple retail application, if we had checkout service, and it needed to communicate with an inventory service, that would be done directly through a TCP connection. So this had some limitations. As soon as the checkout sends the message it would need to hear a reply before it can move on to the next task, or worse if the inventory service went down it would try over and over again until it was able to make that connection.