Summary
This chapter introduced the notion that not everything in our application is infinitely scalable. In fact, nothing about our application is infinitely scalable, as each aspect is constrained by different factors. These factors all blend together in unique ways, and it's up to us to make the necessary trade-offs. If we want to keep scaling up, we have to scale down in other areas.
New features come from customer demand, and they often overlap with other features we've already implemented. This could be because we haven't defined the new feature very well, or because the existing entry points into the system aren't very well defined. Either way, this can make for a challenging exercise; the removal of existing features, in place of a new feature. We often need to remove the areas of overlap, as they cause confusion both at the code level and the usability level.
Scaling down isn't just a piece by piece activity—there are the design patterns to think about as well. After we've removed...