Scalability is a common design element and a useful response control for many systems in modern environments where services are designed to scale across many servers instead of requiring a larger server to handle more workload. You should consider two major categories of scalability: - **Vertical scalability** requires a larger or more powerful system or device (eg: adding more RAM). Vertical scalability can help when all tasks or functions need to be handled on the same system or infrastructure. Vertical scalability *can be very expensive* to increase, particularly if the event that drives the need to scale is not ongoing or frequent. There are, however, times when vertical scalability is required, such as for every large memory footprint application that cannot be run on smaller, less capable systems. - **Horizontal scaling** uses smaller systems or devices but adds more of them. When designed and managed correctly, a horizontally scaled system can take advantage of the ability to transparently add and remove more resources, allowing it to adjust as needs grow or shrink. This approach also provides opportunities for transparent upgrades, patching, and even incident response. Moves to the *cloud* and *virtualisation* have allowed *scaling to be done more easily*. Many environments support horizontal scaling with software-defined services and systems that can scale at need to meet demand. They also allow safer patching capabilities and the ability to handle failed systems by simply replacing them with another identical replacement as needed.