Top 10 reasons for having a Configuration management solution

I received a comment on an earlier post asking “what are the possible advantages of chef on windows?”

I was originally going to just respond to that question directly but I feel the question opened up a bigger question as to why use a configuration management solution at all.  See the original comment here   Dissection of a chef recipe or two for windows

 So I thought I’d post my top 10 reasons for using a configuration management solution.

So here they are with at least one qualifying statement  for each  ( Each reason could be a blog post I itself ).  In no particular order of why  a  configuration management  solution is  important in these days of cloudy scalable / elastic solutions :

Automation: Being able to automate the provisioning and configuration of systems reduces the risk of error; frees up time spent by the team responsible for configuration for other tasks and  provides a reproducible way of  setting up systems. Automation is key to being able to deliver a self healing, elastic solution.

Reproducibility:  Knowing that every time you deploy another instance ( or  VM ,server etc) it will be exactly the same as the previously deployed  instances  so  will behave exactly the same provides a degree of confidence .  You can  provision and configure a  test environment that can actually mirror the production environment  apply changes  to that environment knowing that there are no differences ( apart from say connection string changes ) between that and the production environment so providing the nirvana of the test environment being an identical mirror of the production environment.

Platform agnostic:  Being able to create configuration scripts that can be deployed to   targets hosted on different platforms e.g using Rackspace instead of AWS as an example means there is no vendor lock in. The work will be around how to integrate with the new platform.

Improves support:  Knowing  exactly  how a n  instance was configured i.e. what was done in what order  and being able to spin up a mirror  environment  provisioned and configured exactly the same way  to test fixes on is just brilliant from a support perspective no flaffing around trying to figure out what exactly  has  been run in what order you can just focus on the problem at hand quicker .

Auditing of configuration:  The ITIL definition of configuration management is:

The process of identifying and defining the Configuration Items in a system, recording and reporting the status of Configuration Items and Requests For Change, and verifying the completeness and correctness of Configuration Items.

The use of a configuration management solution addresses this requirement.

Change control: Being able to apply a specific configuration is useful in certain situations maybe the latest configuration update has a problem so being able to apply a known good state i.e the ability to roll back like you can with an application. I know many a time I’ve wanted to be able to do that

Scalable:  Being able to scale up or down within minutes.   Knowing that the new instances /servers etc will be identically configured as the existing running instances/servers

Cost effective:  In terms of requiring  less resources in maintaining the environment  and reducing support effort

Can build upon typical system skills:  Any decent configuration management system will be capable of taking advantage of what the target O/S offers so on windows you will expect to be able to leverage Powershell.


 Centralised Repository:  A good starting point to understand the status of your environment e.g what instances/ servers are undertaking what role. What configuration scripts have been applied in what order, up time and other useful info such as IP addresses etc