Our team has not had dev and test environments since it started 2-3 years ago. We had decided to give this (creation of dev and test environments) more priority.
Current Environment
- One production environment with outdated software (OS, programming language, tools) - but security patches are regularly installed
- 5-6 developers connecting to the production machine to perform development
- Separate user in the OS that's considered to be the actual production environment where processes will run in an automated fashion
- Virtually no test suite
New Environment Options
We have (at least) two approaches to choose from, to set up the dev environment:
Clone production, write tests, upgrade everything
- Create a dev environment that resembles the current production environment as closely as possible
- Write tests
- Upgrade everything (may be gradually, one-by-one) and see if anything fails (and fix it)
Pros: Less risky
Cons: Slower
Create new environment with latest versions of everything, then migrate the code
Create the dev environment with latest versions of everything (OS, programming language, tools, more standard practices)
Start migrating the codebase (although the codebase has hundreds of scripts, it is possible to copy over 2-3 scripts at a time and ensure they run well in the new environment)
- Fix anything that doesn't work
- Write tests for the newer codebase
Pros: Faster (probably); ability to take advantage of latest features sooner
Cons: May end up being more time-consuming
Notes
- Some of the team members have been here for 2-3 years, while I joined a few months ago
- I'm biased towards option #2 (upgrade first, migrate code) - so, the pros and cons listed under both the options are results of my biased view
- On the other hand, one of my teammates is (I think) in favor of option #1 as it may seem a bit more conservative (so, less risky) - I may be wrong about this. He seems, in general, an open-minded person.