The current consensus is that we should have a Production environment (with +1 and -1 slots) and a Test environment (with +1 and -1 slots).
The deployment process would go like this:
1. Deployment to Test +1
2. Testing on Test +1
3. Test +1 -> Test -> Test -1
4. Testing on Test
5. Deployment to Production +1
6. Testing on Production +1
7. Production +1 -> Production -> Production -1
8. Testing on Production
The idea is that tests on Production +1 would mimic how tests should perform on production, while tests on Test and Test +1 should ensure the move from Production +1 -> Production will be smooth.
What alternatives are you taking up and what do you consider "best practice" and why?