The alternative, vertical scaling, means moving to a larger instance. It is simpler and requires no application changes, which makes it the right first move — but every provider has a largest instance, and a single machine remains a single point of failure regardless of its size.
Horizontal scaling has a prerequisite that is easy to miss until it bites: instances must not hold state that other instances need. Sessions, uploaded files and in-process caches all have to move to shared services first. The database usually becomes the next bottleneck, which is where read replicas, connection pooling and caching enter.
Codazz builds this in production — Performance & Scaling.