I purposely didn’t specify server and environments. It’s EXTREMELY important that the staging environment isn’t sharing the same box as the production box.
A good staging box perfectly mirrors the production box, you’d imagine, that it’d be two birds with one stone, if you simply create a staging environment on the production machine. This is an extremely risky and bad idea.
The staging environment is for testing, all sorts of crazy things can happen, from installing hacked code, to code that are so inefficiently coded that the web server and the connecting database server’s load goes out of control. When this happens, sales will be lost, data won’t transmit, and there will be a definite cost to business.
So when weighing the convenience versus the cost, having a staging environment on a production environment is almost never worth the cost.