Configuration management (CM) is a discipline with practices that can improve quality and productivity throughout the entire software and systems delivery lifecycle. A poorly implemented CM plan or a lack of CM best practices can be disastrous for an organization, but excellence in CM can be just as beneficial.
It is important to consider what excellence will look like. For me, “CM best practices” means that we always know exactly which version of the code—actually, configuration items (or CIs)—is running in production or QA at any point in time. We also want to be able to retrieve the exact version of the code used to build and deploy the release to production or QA, and we need to be able to make small changes to the code without any chance of code regression due to the wrong version of a header file or some other dependency. These three capabilities are the starting point for CM excellence. Unfortunately, many companies do not have these procedures in place.
Here's how to implement them. It is essential to start with version control, including baselining your code using a tag or label. Baselining refers to identifying all of the CIs for a specific milestone. Link change sets to work items so that you have traceability as to exactly why a change occurred and who gave the authorization. When a bug fix is necessary, you need to have variant management using branches or streams.
You also need automated application builds with immutable version IDs embedded in each CI. Package the release with a manifest (often called a “bill of materials”) that shows the contents and also contains a procedure that can verify both the package contents and the deployed application. Physical configuration audits verify that you have the correct CIs, and a functional configuration audit verifies that the CIs are performing as they should be. Fully automate the application deployment, which should enable you to deploy applications frequently and painlessly. It is also ideal to have a complete deployment framework to help ensure a consistent and reliable methodology for automated application deployment.
Many different challenges can impact the successful implementation of CM. The biggest challenge I have found is a lack of communication between developers and the operations folks who are responsible for ensuring reliable and continuous service. One aspect of this challenge involves the sharing of technical knowledge. Developers get to learn new technologies and spend countless hours working with complex technologies. Operations folks get the runtime code when it is about to go live and often have only a short period of time to get up to speed. I have experienced this exact challenge as a build engineer. It is particularly difficult when the technology changes and there is less-than-adequate communication and training to help operation get up to speed.
DevOps is emerging as an industry best practice that focuses on improving communication between development and operations. Applications should be built with the necessary tools, including version control, automated build, package and deployment to maintain them and especially ensure continuous and excellent service. Moving automated build, package, and deployment upstream means that automated procedures required for deployment to production can also be used for deployment to development test regions, QA, and user acceptance testing. This approach allows us to achieve excellence by having our automation developed and tested early in the process.
Excellence in CM requires that you implement best practices that meet the needs of your team. Done well, automated build, package, and deployment can help streamline the entire software and system development process, improving quality and productivity for your entire team.