Software systems are likely the most challenging aspect of our IT estate to track, manage, and maintain. Compared to physical assets or infrastructure, it can be considerably more difficult to track the status or manage and document changes to our software tools.
Additionally, our configuration management processes and solutions are closely related to how we manage development and deploy software, especially with regard to pushing changes to production tools.
As such, while information about our software estate is required as part of our broader service configuration management practice, software configuration management is typically handled as a distinct concern, requiring its own systems, processes, and capabilities.
In this resource, we’re exploring what’s involved in managing the configuration of software systems in the wider context of our ITSM efforts, including service configuration management, as well as other related ITIL practices.
We’ll start by examining what software configuration management is and what it achieves before thinking about the specific process and capabilities we can leverage to implement this in the real world.
Software configuration management comprises all of our efforts to maintain our software systems in a consistent, usable state. This means documenting, maintaining, and controlling the information that underpins our systems.
The goal is to define and implement measures to track, govern, and manage changes to our software systems in order to minimize errors, boost traceability, and enhance the quality and reliability of our systems.
In more specific terms, this involves a few key tasks. These include:
This is closely related to how we structure our development and deployment processes within the development team, including the methodology that we adopt. For instance, this could look quite a bit different across Agile or Waterfall-based projects.
Ultimately, the purpose of software configuration management is to establish and implement processes that track and manage all software resources, documents, issues, hardware, budgets, and dependencies relating to a product or development project.
The scale and scope of this will vary based on the specific requirements of your organization.
For instance, SCM is obviously a bigger concern in large organizations with extensive in-house development teams compared to smaller organizations with relatively little custom internal tooling.
This is also a highly interdisciplinary effort, requiring input from a range of technical and non-technical stakeholders, including developers, DevOps teams, project managers, product owners, solutions architects, systems engineers, and more.
Take a look at our resource on network configuration management .
Software configuration management plays a key role, both within development projects and across our IT estate more broadly.
In the most basic terms, the core benefit here is establishing control and visibility over our software assets, including how these are used and how they evolve over time.
In turn, this ensures that software tools are fit for purpose, providing the maximum organizational value with the least possible resource incursion.
At a more granular level, this also facilitates a range of key technical and operational tasks, including within our software development practice, as well as more general service management issues, including legal, financial, project management, and other processes.
Across these categories, some of the key benefits of software configuration management include:
Of course, as with any aspect of our IT operations, the specific balance of these is determined by our internal goals, requirements, and the resources we have available.
That is, within our own specific systems, we may be focused more on some of these elements than others. As such, it’s important to develop configuration management processes and solutions that align with our underlying goals.
In the following sections, we’ll explore the key stages of an effective software configuration management process, including some of the key decisions we’ll need to make at each, before checking out some of the most important tools and capabilities we’ll need to support this.
Regardless of the scale, scope, or goals of our software configuration management, our efforts will follow the same broad outline comprising the core tasks that are required to establish control and oversight of our software projects.
We can break this into the following five stages.
First, we have the identification and planning stage. The goal of this is to establish the scope of a development project, and then plan and identify the elements that are required to achieving this.
Based on this, we’ll also determine the structure and delivery timelines of our project. This includes the ultimate goals, as well as the criteria that will determine that a project has been completed.
Depending on our choice of development methodology, this can look quite a bit different. For instance, in an Agile project, we might release multiple smaller versions of our final product, whereas Waterfall might involve less frequent, more substantial releases.
In any case, to effectively plan the key milestones of our project, including iterative releases, completion dates for specific features, core modules, or other time-bound deliverables.
In addition to this, the core tasks of the identification and planning phase include:
One of the critical concepts within our software configuration management efforts is what’s known as the baseline. This is a formally approved version of a particular software tool or underlying CI that can only be modified via a formal procedure.
Essentially, a baseline is an agreed description of our software system’s attributes. We can then implement controlled changes to this to progress our system or project to its next stage or state.
This must be agreed upon and documented as a reference version of how our software systems are expected to operate. We’ll then use our baselines as a reference point in the subsequent stages of software configuration management.
Baselines can also be used to signify and operationalize project milestones. In other words, once a baseline is achieved in the real world, we’ll know we’ve reached the corresponding milestone.
Different types of baselines include:
With a baseline product in place, we can also begin to enforce version control. This is the process through which we implement updates to the system. When this results in a new agreed baseline, this results in a new version.
Within this, we’ll need to define a framework for tracking and managing new versions and their associated labeling, hierarchies, and revisions.
Therefore, version control seeks to enforce defined approval and authorization processes to ensure that our baselines remain consistent with the underlying goals and requirements of the system.
Change control is the formal process that ensures that any alterations made to our system or project are consistent with our baselines and requirements. The goal is to govern the specific changes that are made in order to maintain our product’s functionality and usefulness.
Most changes include adding, removing, or updating configuration items. For example, updating user permissions.
This requires us to establish workflows for the following:
We’ll likely implement distinct controls for different kinds of changes based on their respective costs and benefits. This applies both to the change authority and the specific controls we’ll put in place.
For example, something minor like a UI tweak could potentially be approved by a project manager. More extensive changes to our code base might require highly involved controls from several stakeholders.
We can also implement more complex roles and responsibilities in terms of how users request changes. For instance, only enabling certain colleagues to request particular actions in the first place.
Take a look at our guide to ITIL change management to learn more about how this can be applied across our IT estate.
Configuration status accounting means tracking the real-world development of the project against our baselines. This means reporting on the status of configurations that are scheduled or should have been completed.
In most cases, we can break this down into three components:
The goal, ultimately, is to ensure that our system continues to adhere to our underlying requirements.
So, another way of framing this is that this stage of the software configuration management process deals with how we ensure that information about our systems is kept up to date with their real-world state.
This assists with a huge range of related asks. For instance, support teams need to have a clear understanding of the current status of our systems in order to formulate responses that solve end users’ problems.
Configuration status accounting is also vital for reducing the incidence of errors across tasks that draw on our software assets. For instance, eliminating the risk of conflicts relating to undocumented changes.
The final stage of the software configuration management process is conducting regular audits and reviews.
Audits are used to systematically review all of the actions, workflows, configuration items, changes, files, documentation, tests, and anything else that has contributed to reaching our baselines.
The review process also involves assessing our software systems to verify their integrity, as well as assisting in creating key documentation, such as release notes, end-user guides, installation manuals, and more.
For instance, confirming that changes to our baselines reflect what is included in relevant reports.
We may also opt to conduct audits and reviews that are more focused on specific metrics or issues. For instance, relating to security vulnerabilities or cost-controls within our development processes.
The overarching goal here is to confirm that our software systems, as they are in situ, align with the underlying objectives of the project.
Additionally, this helps us to ensure that our configuration management and change control processes are, firstly, fit for purpose and, secondly, adequately adhered to in the real world.
This stage of the software configuration management process typically culminates in the creation of several documents and resources, which may include FAQs, user manuals, configuration guides, how-tos, release notes, memos, or other comms.
As such, this also assists us with a range of follow-on activities, including end-user training and onboarding.
Lastly, we can consider some of the key technical solutions that we’ll need to consider in order to implement effective software configuration management processes.
Many development teams rely on dedicated configuration management platforms. These are solutions that combine code repositories with key capabilities, such as automated reviews, deployment tools, uptime monitoring, audit logs, and change control policies.
Most of these are Git-based, meaning that versions and updates are tracked, recorded, and reversible. This forms the backbone of all stages of our process by simplifying the process of recording and managing configuration information.
Another key capability we need to consider is how we handle end-user interactions outside of our development team. In the context of software configuration management, the most common example of this is facilitating change requests.
It’s common to handle this outside of our core repository management tools, often for security and user management reasons.
Typically, this involves developing internal tools such as forms or approval apps in order to enable users to submit requests in a defined schema for our IT team to assess, analyze, approve, and implement.
Check out our guide to change management software to learn more.
Lastly, our configuration management systems must also integrate effectively with other relevant tools within our IT estate. The most important elements of this are our ticketing and service desk platforms.
For instance, we should prioritize interactions both in terms of escalating tickets to our SCM team, as well as providing relevant configuration information to our support colleagues in order to reach effective resolutions as quickly as possible.