In his Behaviorally Speaking series, Bob Aiello discusses hands-on software configuration management best practices within the context of organizational and group behavior.
Developers need to be trained to successfully use version control tools that secure the source code and reliably create milestones, including version labels or tags. DevOps also needs to focus on the seminal competency of excellent source code management. In other words, every function of DevOps depends upon effective source code management for success. Once your code is under version control, you should then work on an automated application build in which each configuration item is embedding a unique and immutable version ID. Release packages are created with embedded manifests containing a complete list of every included configuration item, whether it is a derived binary, text-based configuration file, or a Word document containing essential release notes. Good release management means that you can identify all of the code that is about to be deployed and also provide a procedure (known as a physical configuration audit) to verify that the correct code was, in fact, deployed. It is equally essential to provide a mechanism to ensure that unauthorized individuals have not modified a release package. Testing is also fundamental.
Deming noted that you should build in quality from the beginning. Effective DevOps embraces QA and testing best practices. This is true both for the application itself and also for the automated DevOps procedures that are being developed as part of this effort. In other words, as a DevOps engineer you write code to automate every function and you need to regard this work as a project too. In effect, we need to practice the procedures that we recommend for others as part of our own internal DevOps procedures development effort. This is also a paradigm shift. Developing DevOps is its own agile development effort and should be treated with the same rigor as any other project with the goal of having a fully automated application deployment effort.
The focus on developing these procedures from the beginning of the lifecycle and taking an agile iterative approach as they are developed are what make these practices “DevOps.” There is also an essential effort to share knowledge equally between development, QA, and operations. Development often knows the technology best, but operations understands the real-world challenges that will result in developers being roused from their slumber in the middle of the night. QA helps by developing the procedures to ensure that bugs are not found a second time in any release. DevOps is all about the synergy of productivity and quality with the real-world focus on sharing knowledge and building competencies.