When our application acquires more moving parts, it acquires more communication overhead. That's because our components need to communicate with one another in order to realize the larger behavior of our features. We could reduce the inter-component communication overhead to essentially zero, if we were so inclined, but then we would face the issue of monolithic and repetitive code. If we want modular components, communication has to happen, but that comes at a cost.
This section looks at some issues we'll face as we scale our software in terms of communication bottlenecks. We need to look for the trade-offs that improve communication performance, without sacrificing modularity. One of the most effective ways to do that is by using the profiling tools available in our web browsers. They can reveal the same responsiveness issues that the user experiences while interacting with our UI.