The Staging Environment is a complete copy of the production environment (hardware and software), independent and similar in terms of location, database load with the production etc which makes it possible to test accurately and define important standards in order to release new features in production with a high level of confidence and no major impact to customers.
For most of the companies, three environments are common:
- development (or local)
- staging (or pre production)
- production (or live)
1. Development environment
This represents the working local code where changes made by developers are deployed here, so integration and features can be tested.
This environment is updated on a daily basis and contains the most recent version of the application.
2. Staging environment
This usually contains the RC (release candidate) version of you code, and this environment is normally a similar to the production environment.
The staging environment has the following characteristics:
- contains the next version of the application
- is used for final integration testing between different services
- is used for load and performance testing, stress testing and memory-leak testing of the integrated services
- is used for demo purposes as it contains similar data with the production (live) environment
- is used for client/manager approvals before going live
Website speed testing can be executed in the staging environment in order to check page speed improvements or degradation.
3. Production environment
This is the newly released version of the application, accessible to the client/end users.
This version does not change except for during scheduled releases. It may contain different features, turned On/Off based on different segmentation options.
May contain A/B tests where two users may see different data, or different workflows based on random segmentation or location based segmentation.
Visual comparison between the staging and production environments for different pages may be achieved with our visual regression testing service.
Why is a staging environment so important?
Having a staging environment is important because it allows to test bug fixes, new features and other product improvements in an environment similar to the one the customers are facing.
Testing on development, local or a QA environments may be faster, but since is not identical with the production environment, may hide important issues, such as potential functional bugs, performance bottlenecks and important security bugs.
The development or the test environment doesn’t have exactly what the production environment does. The database is usually not the same, the latency may be different which may cause releasing critical defects to customers because they’re not testing in a real-world environment.
Devs and QA engineers tweak the dev and test environments to simulate the production environment, but usually simulating the production environment is not the same with have a staging (pre production) environment where hardware and software is similar to production.
Challenges for Staging Environments
Staging environments may be expensive, difficult to get accurate data from, and hard to maintain. Not having a staging environment may involve taking additional risk and you may end up impacting your current and future customers. This may lead to a bigger cost than owning, maintaining and testing on such a environment.
Do you have multiple services that are developed independently, and you need to make sure that they integrate correctly, as per the previously defined contract? Then a staging environment can provide that End to End level of testing, which will be helpful to release with more confidence in terms of service integration.
Are you able to test everything in production and avoid the cost and time for creating such an environment? Most likely not, depends again on the risks and the ability to turn ON/OFF features in production environment, show them only to a percentage of customers, and hiding the very fast in case something goes awfully wrong.