It used to be that cards served to handle code in the old days of computer “dinosaurs”. And not the type of medium is important here, but the point that programmer delivered it personally hand-to-hand. Later, in time of floppy disks the process haven’t changed much. One programmer works on one program and then delivers it on a floppy. It was simple to ask and find answers to the questions who and when will deliver a new version of a program. And with only one computer available there wasn’t any separate environment for tests. The process was think-code-test-think again and repeat until the computer calculated it right. Of course the expectations from computer owners were different too. Nobody expected to calculate millions of customers’ transactions over one night or served a database for an Internet store with thousands of products and millions of clicks working 24/7.
But the technology and the business expectations changed over time and we need to deal with that. Now the business requires reliable production system to work 24/7 and serve multiple concurrent users. For the reason the business is ready to pay the test team and pay for hardware, licenses, etc. And the business requires complex, heterogeneous systems that no longer can be developed by one programmer. There are teams developing complex systems and then improving the systems.
The one think that doesn’t change are the questions that business ask: what and when you can give us and how much it will cost? And the business would like to hear that it will be available just the same day and will cost less, the best next to zero.
The expectations place the developers managers in an uncomfortable situation. Some might think, that the solution is to hire different developers who will do the same and more job for less. But it is walking on thin ice. The quality of good work must cost and there is no doubt about it. What usually is possible to improve are the procedures.
Since there is a long way from developers to the production there are many places for improvements. And that is the area where Configuration Management is especially significant today. Configuration Management is not only to control how the changes are coded, tested, fixed and delivered to Production. Good Configuration Management helps developers to work in teams more efficiency and then smoothly deliver their work through all phases into production.
The Configuration Management have some important functions today.
The first is to control who is making what change and when the change was committed into code, then control when the change got into tests, when it was tested and then when delivered to pilot and to production. All this helps to manage the changes and helps business to plan the time for tests and confirm delivery. And should something go wrong, it will give a chance to speak with people working on the change and learn lessen and then improve to avoid problems in the future.
And there is much more today about controlling the changes. To plan and know that all is according to schedule is not enough. Controlling means to actually be possible to change what will be delivered to test and then to pilot and production. The world is changing and it is not unusual, that Business might ask to change the priority of changes, maybe drop one change to make place for another more important. And the Configuration Management should be flexible enough to allow that kind of changes and should be efficient to make it for cost acceptable for the business.
For the flexibility and reasonable costs we need adequate structures and procedures. One path of workflow is not sufficient to support flexible Configuration Management system. It takes many parallel paths that can be implemented by parallel branches in revision control system. Multiple parallel branches makes it possible to move changes between them when it is required by the business. And the move operations is not free, it will take time and will cost. But sometimes the business is willing to pay the cost.
Another very important aspect of modern Configuration Management is the team work. Good Configuration Management not only makes it possible but makes it efficient. Efficient in assigning tasks to developers and then coding, unit-testing and committing changes. But it also must be efficient in resolving conflicts when two developers changed the same file. And it must allow more complicated operations like withdrawing changes or retrofitting changes to other branches.
There are many elements for the Configuration Management process to consider. And somebody could ask what is the best way to make it working? Well, the one way that is recommended it to apply the trunk and branches structure for revision control system and then carefully follow the procedures…