Don’t build monolithic applications
Instead of a monolithic approach, build a number of smaller applications that can call each other as necessary via APIs. Automated scaling allows you to keep costs down whilst ensuring demand is met.
Cloud technologies depend on good elasticity to be competitive. It’s easier to see which parts of your application are the most resource hungry (or the most utilized) and improves troubleshooting.
Building with micro-services is good practice is generally thought to be good practice. It allows improvement of individual services which adds agility.
Go Serverless where possible as this puts the onus on the CSP to provide the automated scalability.
With fully Automated scaling, horizontal scaling occurs in response to your Alerts.
NB. Applications divided into micro-services need to be stateless!