For most scenarios, an application should have DEV, QA, STAGE, and PROD environments.
DEV is used by the development team to validate integration of source code.
QA is used by the QA team to test the application.
STAGE is used for user acceptance and other pre-production validation.
PROD is used for production workloads.
All environments for an application hosted in Azure should be provisioned with the lowest amount of resources as possible. Resources should be increased once performance has been determined to be an issue.
Provided that CI+CD of IaC is performed, the STAGE environment need NOT always be provisioned at the same level as production. If load testing is required, we can “spin-up” additional resources for load testing and then “spin-down” the additional resources once load testing is complete.
When working with a 3rd party or consuming external resources, most often only a PROD environment is available for consumption (and sometimes a NON-PROD environment). In these situations, STAGE and PROD environments should be created, but DEV and QA environments are not required. With smaller applications or internal applications hosted in Azure, only DEV, QA, and PROD environments should be provisioned. QA should double as the STAGE environment.