Why do we need two testing cycles - qa servers and stage servers?
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 can't we simply push code directly to the "Production server".
I know it's not safe and one more round of testing is always good, it's our gut feeling but if we go logically, why?
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 than 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 an environment similar 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 handling the application.