Why need two cycles of testing first on "QA Server" and then on "Stage server"?
We first get the code to be tested on the "QA server" and then on the "Staging server". Now when we are already done testing on the "QA server" why we can't simply push code directly to the "Production server".
I know its not safe and one more round of testing is always good, it's our gut feeling but if we go logically, why?
(more or less) Quoted:
QA stands for Quality Assurance. Probably the QA server is suitable for testing, measuring the quality of the software/hardware. Probably unit tests/regression tests are meant to run on this server.
The what-you-call staging/pre-production server, is a system running the production code used for regular usage of the software/hardware.
This means; you run the unit-tests against the source code on the QA server. This is a server that has software installed to run those tests, and more often then not it's a server that has a load of software running that might help with situations like mocking (thus you don't test it like you would in production, you fake a lot of stuff).
The Staging server, however, does not run tests against source code, but against production code. You compile or transpile the code. That means you can run integration tests and use a environment simular to the one used for production. That server should be identical to the production server in such a way that, when you deliver your product, you can be sure the production server is capable of handeling the application.