Configuration Management

Configuration Management (CM) is an area in software development and engineering that generally gets some what less attention than it really needs. Configuration Management is also critical for day to day reliability, performance and security of the product or solution.  

We can also consider Configuration Management a part of a systems engineering process that consistency of the software product after its development phase.

In reality Configuration Management should be a part of every phase of the SDLC cycle in some respects and for that matter every part of a robust production environment.

Every software project should have a practice of defining how project configuration management should be addressed.

For example. The foremost organization on project management, the Project Management Institute(PMI) defines the project configuration management as follows.

Project configuration management (PCM) is the collective body of processes, activities, tools and methods project practitioners can use to manage items during the project life cycle. PCM addresses the composition of a project, the documentation defining it, and other data supporting it.

There is also a real need for industry professionals that understand this holistic view of IT solutions.

The main objectives covered in this article are

  • Define what Configuration Management is and the benefits
  • Compare Change Management and Configuration Management
  • Identify how Successful Software Development can be facilitated.

Configuration Management (CM)

Configuration management encompasses the practices and tooling to automate the delivery and operation of infrastructure. Configuration Management is actually part of a solid change management program.

Configuration management solutions commonly model infrastructure, continually monitor and enforce desired configurations, and automatically remmediate any unexpected changes or configuration drift.

With CM this will enable your organization to deliver better software faster, configuration management helps lay the foundation for DevOps

The primary goal of the CM process is to increase productivity with minimal mistakes. Provisioning your resources efficiently and effectively is critical and the CM process should enable this robustly.

The main reason behind configuration management processes are around having multiple people working on software which is continually being updated. CM helps establish concurrency, synchronization, and version control thru the use of templates.

Templates work with configuration files and can create a deployment using a configuration at any time. They address more complex configurations and the main purpose is to create and use templates for more flexible and robust configurations.

In a nutshell a template is a separate file from your configuration that defines a set of resources that are part of your requirements.

Configuration Management Tools

Configuration management tools are generally automated and provide robust features.

Some commonly used Configuration Management tools are:

  • Ansible
  • Chef
  • Puppet

  Configuration Management tools deal with two or more tasks are happening at same time which is known as concurrent operations.  If we talk concurrency in context to SCM it means that the same file being edited by multiple persons at the same time. If concurrency is not managed properly with SCM tools then you can run into corruption of the codes, reduced security, lack of compliance, etc.

Using the right tools for the right development scenario is critical since the investment in a solution can be costly both from a time perspective as well as overall costs of your purchasing and maintenance costs.

Configuration Management Best Practices

A best practice is generally considered to be a widely accepted to be effective.  The configuration management best practices are focused on DevOps.

1. Development should be done with as few code lines as possible

2. Test early and often before production is even ready

3. Integrate pipelines early and often as well ensure workspaces are efficient

4. Use tools to automate testing, build, and integration such as Puppet or Chef.

Check out my article on Kubernetes Best Security!

Difference between Configuration Management and Change Management

With CM this will enable your organization to deliver better software faster, configuration management helps lay the foundation for DevOps.

Configuration management and change management are closely related but are very different terms to understand.

Configuration management deals with the state of any given infrastructure or software system at any given time.

Change management is somewhat different in contrast and deals with how changes are made to those configurations.

This image has an empty alt attribute; its file name is image.png

Change management uses a CMDB to track and manage changes

Workspaces (Development Environments)

Workspace patterns are where the actual application development occurs. These patterns feed into the active development line and eventually the main line. The primary workspace pattern called the “private workspace”, where individual developers can replicate the main line and make changes without impacting the other developers.

Another way I reference what a workspace is really a “development environment” that is sanctioned by best practices.

Other patterns then feed into the private workspace and enable developers to build, integrate, and test along the way. These patterns include:

  • Private build
  • Integration build
  • Smoke tests
  • Unit tests
  • Integration tests

Lets Review some Questions

1..  ________________ work with configuration files and can create a deployment using a configuration at any time. Select One

  1. Template
  2. API
  3. Source Code
  4. Script

2.  What is the primary goal of Configuration Management? Select One

  1. Increase productivity with minimal mistakes
  2. Increase productivity with minimal costing
  3. Increase the ROI with minimal costing
  4. Increase the TCO with minimal costing

If you selected A for both 1 and 2 great job!

Summary

One way for a Successful Software Development project can be facilitated is thru the implementation of solid Agile best practices in the Agile manifesto.

The four core values of Agile software development as stated by the Agile Manifesto are:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan.

Solid Project Management principles need to be funded, documented and of implemented in any software development project.

Another area of focus should be implementing DevOps best practices and encouraging collaboration between business units.

Agile, DevOps and even project management have some solid governance structures, best practices and knowledge base. These are all ways to ensure a higher chance of success on your software development projects.

Carry on my cloud friends and please do let me know any feedback or suggestions.

Joe Holbrook, the Cloud Tech Guy