We must ensure that we always use production-like environments at every stage of the value stream. They need to be created in an automated manner. Our goal is to ensure that we can recreate the entire production environment based on what is in version control.
One of the major causes of chaotic and disruptive software releases is the first time we ever see how our application behaves in a production environment with realistic load and data sets.
We want developers to run production like environments on their own laptops, created on demand and self serviced.
We have to define and automate creation of known and good environments, that include collective knowledge of the organization. All our requirements are not stored in documents or someone's head but codified in our automated environment build process.
Developers can quickly reproduce and analyze defects in their own environments without putting production at risk. They can also experiment on changing the environment and share the knowledge across all engineers.
All parts of our software system must be in version control.
Developers keep their application code and configuration in version control thus we ops should also keep their environments in VCS. Version control is for everyone, including QA, ops, infosec.
For binaries we can use Nexus, Artifactory or S3. Docker images can be stored in ECR.
Use of VCS by ops has the highest predictor of IT and organizational performance than for developers.
There are orders of magnitude more configurable settings in our environment than in our code. Consequently, environment is what needs to be the most in VCS.
VCS also helps in communication for everyone in the value stream based on the changes.