The term staging environment refers to a server environment that allows the testing of websites and software applications under almost real conditions. A staging environment consists of similar hardware similar to production variant that provides the final release. During staging, parts of the database are accessed, and there may be a number of users who have privileged access to the system to check the functionality. This is to simulate how the system behaves when it is tested independently of the development environment, under input of data and under consideration of the infrastructure.
Staging is part of the workflow in most development projects. A staging environment is a component of the so-called deployment process, which includes the launch of web applications and software solutions with regard to the infrastructure. A distinction is made between development or work steps and the associated systems or environments. There is usually a separate server environment for each development step. This does not necessarily have to be a physical server, as this is often not possible for cost reasons. For staging, a virtual server that is hosted on the server that also hosts the website - but is shielded by a sandbox - is usually sufficient. The development and production system should be clearly separated from each other to avoid possible conflicts in practice and errors during the migration of databases.
A distinction is made between development, staging and production for small and medium-sized web development projects. In some cases, there is still a testing environment between development and staging. However, this is only possible for very large projects because the costs are considerably higher. The terms dev, qa, staging and production have become established in the English-speaking world.
- Dev (Development): This is the working copy of the software or web application that resides either on a secured server or local machine. Developers can make changes to the source code and upload individual features. Since the working version is usually operated with compiler, debugging and testing tools, it is only functional in this environment. Developers also often have a reduced database to check certain functions. When developing an online shop, for example, a part of the product catalog can be used to transfer the metastructure of data such as fields for price, availability or different product variants into the application. If several developers are working on large projects, a version control system such as Git, Mercurial or Subversion is usually used to synchronize changes and updates.
- Staging: As soon as all bugs in the application have been fixed, the working copy of the source code can be migrated to the staging environment. This version is the release candidate of the application. Usually, the staging environment is identical to the production environment, so software and hardware do not differ significantly when using the application. The latter also has the purpose of verifying connectivity within the overall system: for example, access to databases and interaction with the periphery. Since the performance of the system depends largely on the environment, loading times and other performance criteria are also assessed during staging. If quality assurance no longer applies - and this is likely to be the case with most projects - staging is used for testing. In this case, staging is in a sense the dress rehearsal before the application is migrated to the production environment.
- Production: The production environment is ideally a one-to-one copy of the staging environment. In practice, this is not always possible, but the hardware and the software of the components used in staging should be very similar. This is the only way to avoid conflicts. Developers will no longer make any changes at this point because the former working copy of the source code is already on the live server. The source code could be published because it was extensively tested, tested and improved by the different environments.
Significance for programming
In most cases, staging environments are only used at enterprise level. The more developers working on an application, the greater the risk of a system crash and data loss. That costs time and money. Therefore, the various development steps are carried out individually. In smaller projects, development and production systems are isolated to save the costs of providing resources. Staging systems require a relatively large number of resources: the hardware must be procured and should be as similar as possible to the production system. The system must be configured and set up with the required data. Only then does it fulfil its purpose: To simulate the production system in order to test the application under the most realistic conditions possible. 
- ↑ What is a staging environment? programmerinterview.com. Accessed on 10/19/2015
- ↑ Web Development: What is Staging? commonplaces.com. Accessed on 10/19/2015
- ↑ Deployments Best Practices guides.beanstalkapp.com. Accessed on 10/19/2015
- ↑ Dev vs Stage environment vs Prod Environment programmers.stackexchange.com. Accessed on 10/19/2015
- ↑ What is the main purpose and sense to have staging server the same as production? stackoverflow.com. Accessed on 10/19/2015