# Scalability and Elasticity

## Scalability:

An app or project or something can handle greater or less loads by adapting, there are 2 types of scalability:

* **Horizontal Scalability - Increasing your number of resources - Adding - Aka elasticity.**
* **Vertical Scalability - Making your current resources better - Upgrading.**

So basically, being scalable means your app can handle bigger loads/more traffic by either adding more resources (horizontal scaling) or upgrading the current resources (vertical scaling).

## High Availability:

**Running your application or system across multiple Availability Zones** (in a **minimum of 2 Availability Zones**).

## Elasticity:

This means that the **system will have auto-scaling**. So it will **scale up when the demand is high** and **scale down when the demand is low**, this is extremely **cost-efficient and useful for on-demand or pay-per-use** things as it can save a lot of money and you don't have to keep "guessing capacity".

## Agility:

**Means that you can do things very quickly because you can get/delete IT resources in a matter of seconds.**
