In his Behaviorally Speaking series, Bob Aiello discusses hands-on software configuration management best practices within the context of organizational and group behavior. Bob Aiello helps you enhance your existing CM best practices by applying the core principles that deliver excellent process and quality.
While many of my colleagues are expert build, release, or deployment engineers, there still are those who do not understand the underlying principles that focus so heavily on process and quality. This is true in both agile and non-agile environments. This article will help you enhance your existing CM best practices by applying the core principles that deliver excellent process and quality. We will also take a moment and make sure that we get our terminology straight.
So, what exactly does it mean to have a process? There are many times when I hear colleagues say, “Well, our process is...” while referring to a set of activities that I would never really consider to be a “process.” My favorite authoritative resource is the free IEEE online dictionary called Sevocab , which describes a process as a “set of interrelated or interacting activities that transforms inputs into outputs.” Sevocab also notes that the term "activities" covers use of resources and a process may have multiple starting points and multiple end points. I like to use Sevocab because it also notes the standard (e.g., IEEE) or framework (e.g., ITIL) where the term is used, which can be very helpful for understanding the term within a specific context. I usually describe a process as being a well-defined way of doing a particular set of worth-noting activities that are implicitly repeatable.
In configuration management, we often create processes that support the application build, release, and deployment engineering. It is essential that all processes be automated or at least “semi-automated,” which means that the script proceeds through each step—although this perhaps requires someone to verify each step based upon the information on the screen. Scripting the entire release process ensures that the process is repeatable and that errors are avoided. An error-free process also helps to ensure that we achieve a quality result. Manual procedures will always be sources of errors and mistakes. Automating the step, even if you need some human intervention, will go a long way toward improving your process and quality.
Sevocab defines quality as the degree to which a system, component, or process meets specified requirements and the ability of a product, service, system, component, or process to meet customer or user needs, expectations, or requirements. Configuration management principles help to ensure quality. Here are some of the guiding principles for source code management :
1. Code is locked down and can never be lost
2. Code is baselined, marking a specific milestone or other point in time
3. Managing variants in the code should be easy with proper branching
4. Code changed on a branch (variant) can be merged back onto the main trunk (or another variant)
5. Source code management processes are repeatable
6. Source code management provides traceability and tracking of all changes
7. Source code management best practices help improve productivity and quality
Regardless of the version control tool that you are using, these principles will help you manage your code better and the result is better quality. Here are some principles as they relate to build engineering :
1. Builds are understood and repeatable
2. Builds are fast and reliable
3. Every configuration item is identifiable
4. The source and compile dependencies can be easily determined
5. Code should be built once and deployed anywhere
6. Build anomalies are identified and managed in an acceptable way
The cause of broken builds is quickly and easily identified (and fixed), and will help you get started improving both process and quality.
Process and quality are essential for the success of any technology development effort. Implementing the core configuration management best practices of source code management, build engineering, environment management, change control, release management, and deployment will help you successfully develop software and systems while maximizing productivity and quality!
2. Aiello, Robert and Leslie Sachs. Configuration Management Best Practices: Practical Methods that Work in the Real World. Addison-Wesley, 2010.