I worked in many companies, each of which has a different set of environments, the one that I most had 5 environments:
1) Local: basically your car. This is where you code and check your changes before you even ask an expert for a review.
2) Dev: If for some reason you can’t test your code locally (dependency problems mostly: "My code is not compiled in my machine, but it compiles fine in Jenkins / Bamboo / Travis"), then you click your changes to your function branch in Git and make Bamboo compile it and deploy it to the Dev server where you can test (you are still not sure that it will work, so there is no expert evaluation yet).
3) Stage: you think your code is working and you like the way it looks. You create a Pull request so that your peers can look at it before it is merged with the main branch. Here they make comments and fix possible problems, since you are more confident in your changes, you make Bamboo deploy it to the Staging environment, where there is more “stable” code, and more realistic data is stored in any database. After deployment, another developer / tester can verify that your changes really work and make you “QA Failure in Interim Rendering”.
4) Stable: Well, now you are completely sure that your changes have been working since you were deployed to Staging and nothing broke. You merge your branch into master and Bamboo compiles the master and deploys to other servers in a stable environment (no one needs to merge to master until you complete the deployment in Production to avoid merging unrelated merges). This environment should be a replica of production conditions, data, code, and server. Here you indicate your changes to your manager, product owner or responsible person for confirming your work before sending it to production. You get final approval, everything is fine, you are sweaty, you worked 30 days in a row to make this change, your wife divorced you, but you are very sure that he works great.
5) Production: where customers connect to the consumption of company services or the final assembly of your software to be sent to customers. With a few clicks of the mouse in Bamboo, you make it deploy to production servers or compile the final assembly. He is green, everything looks fine. You check that Splunk is looking for mistakes, everything is fine, life is good, you drink another sip of coffee before you leave, you go home and sleep all weekend with a dog by your side.
This is a happy ending, because since so many “test” environments provide quality, no changes are made until EVERYBODY (and not just you) is completely sure that the changes work.