In today’s world where we are becoming more and more digital and everything depends upon software, software management is a real challenge. All the software projects are getting more complex and complicated in terms of logic, size, difficulty and technologies used for them.
In every organisation, daily a new fix/enhancement is added to the project that makes the software management even more complex and the response time to get it done is very less.
All software’s are subject to constant changes during each phase of software life cycle, such as planning, design, development and even after development.
Here, Software Configuration Management (SCM) comes into picture.
The need for software configuration management is no more unknown to anyone in this digital world and it’s well pronounced than ever.
Software configuration management is a method of bringing control to the software development and software management process. It enhances productivity and boosts application quality.
SCM is a process used for more efficiently developing and maintaining software, which is accomplished by improving accountability, audit-ability, reproducibility, traceability and coordination.
Importance and Need of SCM:
Let’s assume an example of the organization where they didn’t opt SCM process and started working on the project. They gathered the requirements from the client but neither they identified any control change nor accounted it .The team started developing the code in ordinary system and built software out of it. They then deployed it manually without using any tool and showed it to the client. Client was happy with the front look.
After some days someone found a bug in login functionality and developers started working on it.
Only one user was working on the affected module while others were just waiting for him to finish his work.
Few days later other users also modified their code and they decided to deploy it.
This time they took a backup (a full backup which consumed a lot disk space) of their code before deploying it.
But later one of the team member changed something by mistake and he didn’t informed anybody, at the same time other team member found out that a text box and the graphics are not looking good. He modified the code slightly without taking a backup because the disk was almost full and showed it to the client. Client asked them to put the same page which was shown to him first time.
Now here the trouble started: –
Team didn’t document the configuration items and changes, they modified the code without any backup and they were not able to recognize who has changed the logic.
They had to rework for the same piece of work which they did before.
If they would have chosen a SCM process and implemented any version control system then they just have to take out the old version of code from repository and were able to work in parallel when they found a bug.
They would have easily identified who had changed the code and moreover the user himself would have been able to revert it without any trouble.
They would have also used one of the SCM build & deployment tool to save the exhausting manual work of building and deploying the code.
Without SCM, Every organization always comes across numerous common software problems. Some examples of these problems are missing source code, changed component libraries, incapability to do parallel development, an inability to track on why, when, and who made a change and difficulty in finding out why the program which was working earlier has suddenly stopped working.
These problems are really frustrating because they are difficult to fix and they reoccur frequently in software field. For example, a difficult bug that was fixed previously suddenly reappears, the updated version of the requirements document is not found, a developed and tested feature is missing or the source code and the executable program are of different versions. SCM definitely helps to eliminate these problems by implementing best processes of it. SCM plays an important role in the software life cycle by ensuring what was designed is same as what is built and deployed.
The SCM Process
SCM process comprises of:
- Identification of configuration items and Baseline management
- Documentation of characteristics
- Controlling change
- Configuration status accounting
- Auditing and Reproducibility
- Build and Deployment Management
- Process and Environment management
- Continuous Integration and Continuous deployment
- Defect tracking and traceability
- Ensuring integrity, visibility, project coordination and project evolution
Myths about SCM:
Like any other software industry process, there are many myths about SCM. here are some familiar ones:
- A large scale software development can easily succeed without SCM.
- SCM will always slows down the software development process
- SCM is a difficult and lengthy activity.
- SCM just provides version control system
- SCM can only benefits developers or the SCM team
- Once SCM implemented then the SCM tools will take care of everything
- One SCM tool is compatible with every project.
- SCM is too expensive and tough to maintain.
SCM Best practice includes:
- Always identify and store artifacts in a secure repository.
- Control and audit changes for artifacts.
- Require Change Requests and Change Packages
- Organize versioned artifacts into versioned components.
- Create baselines at project milestones.
- Record and track requests for change.
- Organize and integrate consistent sets of versions using activities.
- Maintain stable and consistent workspaces.
- Support concurrent changes to artifacts and to components.
- Integrate early and frequently
- Ability to do continuous build and deployments
- Ensure absolute reproducibility for all artifacts
Benefits of SCM:
SCM not only benefits just the developers and SCM team, but also plays an important role for Business Analysts, Program managers, Testing and Quality Assurance teams.
Some of the benefits of SCM are as follows:
- Gives ability to work as distributed team across the globe and saves time for everyone.
- Manages complex business processes and provides auditable software every time.
- Provides an ability to go back to last working stage or any previous stages as per requirement
- Improves management control over software development activities
- Reduces manual efforts and makes the source code traceable.
- Improves software development productivity and organizational competitiveness
- Better customer service and high return on investment
- Prevents the risk of losing functioning code or breaking test scripts by overwriting files
- Improved security and higher software reusability
- Lower software maintenance costs with better quality assurance
- Quicker problem identification and bug fixes with reduction of defects and bugs
- Process-dependent development rather than person-dependent development
- Gives assurance that the correct system is build every time
Words to the wise:
Users recognize the importance of SCM only when things go wrong in the project, but sometimes it is too late and getting a project back on track can be a tedious task without SCM.
The complete implementation of SCM is not a piece of cake. Team has to do a lot of work to implement and keep an SCM system in good shape, but frankly speaking whole effort is worth of every penny. You will realize it once you have a well implemented SCM in your organization.
To avoid any failure later in the process, SCM system should not just be implemented for the sake of certification or audit purpose. It should always be cautiously designed, properly implemented and practiced systematically before you actually start working with SCM.
SCM can help you to stop any trouble before it actually starts and with the help of it you can make sure that you are building comprehensive and reliable software.
I hope this article gives you a fair amount of idea on what SCM is and what are the other essential things that you need to know about it!
If you require any help or have any feedback – Please spare sometime and leave a comment 🙂
In our next article, I’ll shed some light on version control system – what is VCS, what is its use and why its needed in any organization, etc.
Till then, stay tuned!