Selecting the Right Software Version Control Product

[article]
Summary:
Michael Feighner draws up a checklist of version-control-tool criteria to aid an organization in selecting the best tool. His goal here is to suggest a partial framework for deciding which tool best fits your needs while at the same time adhering to configuration management best practices.

For many years, I worked loyally for the same company where my expertise was restricted to one single software version control tool—the one that was already in place. I was not involved with determining whether the selected tool was appropriate for the company's needs; my role was to learn it well and use it within the accepted standards, guidelines, and internally approved processes. When I recently found myself back in the job market, I realized that there were many other version control tools in use in the industry. I then began to consult with other engineers in the field and gathered data from them on which version control tools their organizations were using and the selection criteria they used in choosing a version control tool for their organization. This experience opened up a whole new world for me and soon I realized that selecting and implementing the right tools was essential for the success of any software or systems development effort.

From this experience, I have drawn up a checklist of version-control-tool criteria to aid an organization in selecting the best tool. Although there are many good descriptions available on the Internet about the many tools currently on the market, I do not recommend one specific tool over the other, because some tools may fit great in one organization, but fail in another. My goal here is to suggest a partial framework for deciding which tool best fits your needs while at the same time adhering to configuration management best practices.

First, you will need to define your organization's goals, which could include any or all of the following:

  • Good documentation should accompany your tool purchase.
  • The tool should be portable to more than one platform.
  • If your organization is spread out over different time zones or even across international borders, your tool should support a multi-site rather than a single-site function.
  • The cost should be affordable.
  • The tool should be easy to use.
  • The tool should easily support branching and merging.
  • The tool should have the ability to lock a file when being edited to prevent two engineers from editing the same file simultaneously.
  • The tool should be able to accurately merge changes between two or more files.
  • The tool should log a history of changes with notes on who made the change and why the change was made.
  • The tool should have the ability to establish immutable baselines.

Next, you will need to review your organization's requirements for software version control and carefully review the various software tools on the market to determine which one best matches your organization's needs. Some may be better suited for your project than others. Selecting the wrong tool can have devastating effects on your team's effort. Lack of a good version control tool can be a major cause for delays and problems during your organization's application development. The project will run over cost and behind schedule and can be prone to risks associated with the manual management and distribution of your project's dependencies. Unauthorized changes and results will occur, and the customer will not be satisfied.

The tool you select should not impede the implementation of configuration management best practices, which serve as a means to add value to the process, improve quality, and increase productivity. The following are some, but not all, of the questions you will need to consider.

Documentation
Is the tool well documented? Is support documentation available on this tool's installation and for the tool's use by both administrators and developers? As a reference manual, the tool's documentation should adequately describe the tool's features—each dialog box, tab, field, button, etc. It should answer a user's questions about completing a specific task in a clear and concise way. Frequently, the user documentation is available in the tool's help pull-down menu or can be downloaded electronically from the vendor's website.

Portability
Is the tool portable? Can it be used on multiple platforms and operating systems? From a business perspective, your software team will be supporting a broad user market occupying various platforms, including Windows, Mac OS, or some flavor of UNIX. Your tool should be compatible on any of these platforms, as each release will simultaneously need a separate version to support each platform of your user base.

Multi-site vs. Single Site
Is your team located at one location site, or is your team globally distributed across the nation and across different time zones throughout the world? A "single site" constitutes one physical location such as a single building or office. A "multisite" constitutes an organization in more than one office or location in a single time zone, in multiple time zones within one country or in multiple countries. If your organization is spread out over various time zones or even across international borders, your tool should support a multi-site rather than a single-site function. A multi-site project established as a set of several individual independent single-site systems would be prone to added costs and risks associated with the manual management and distribution of the project's dependencies. Life for a multisite organization would be a lot easier to maintain a single multisite system with access to one shared repository. A single-site organization would be wise to select a single-site system over the additional costs of a multi-site system

Cost
What are the costs and terms of licensing of the tool? Is it something your organization can afford? Generally, a tool designed for a large organization will have a much larger cost than one designed for a smaller organization. No one should assume paying a higher cost for your tool will solve all of your problems. Even a high cost tool may fall sort of satisfying your organization's needs. Your decision should consider overall cost and your organization's needs. Supporting your organization's needs should never be underfunded.

Ease of Use
How easy is it to install and deploy the system? Will the tool be dependent on other tools to conduct software builds, or are some of these capabilities already an integral part of the tool? Is this a tool that is easy to use from the first day of installation throughout the entire development lifecycle? Will training and customer support be available? Will the tool require training an in-house administrator dedicated to the administration of the tool? If you are not able to immediately pick up a source code management system and start building your site, odds are it is not entirely user friendly. Ultimately, the key to a successful deployment of a source code management system is reliability and ease-of-use.  A tool that is difficult to use will likely conceal the functional benefits that it would otherwise provide. If training is an affordable option for your organization, consider whether it is available through the vendor or through an unbiased third party. For a lower-cost approach in the long term, consider sending a representative from your organization to a vendor training event who will later write up a training program for your own company-based organization.

Branching
Does the tool accommodate branch creation?  The capability to create a branch should allow duplication of an object under revision control. Thus, code modifications can happen securely in parallel along both branches at the same time whether the change involves adding a new requirement or attempting to resolve an issue from an earlier release.

The tool you select should support your particular choice of branching strategy, be it by revision or release via a simple copybranch or by creating adelta branch off of the main branch or trunk.  Or the tool may go a step further by creating streams that include supporting metadata and workflow automation as an enhancement in managing multiple variants in the code. Branching is one of the most important features to consider in your choice of a good source control management system as it allows you to easily support at the same time the same source code and a parallel subset of the same code being modified securely to support either a new requirement or a bugfix from an earlier release.

Merging
Does the tool allow merges of changes and assists in resolving conflicts between different edits to the same file? Can a merge be done via a graphical user interface or on a command line? Take into consideration that merging concurrent changes made by different developers can increase the amount of effort to resolve conflicts and achieve a merge safely. The best advice in such cases is to merge little and merge often.

File Locking
Does the system have a means of preventing concurrent access to the same file? Does it prevent more than one user at a time from writing to the file until the current user either checks in the file or cancels the checkout?

History of Changes
Does the tool maintain a log of the history of changes? Can the tool display the history of changes graphically, as in a version tree? Does the tool easily identify the current baselined version and list previous baselined versions?  A history change log that maintains accurate records facilitates traceability through the code's lifecycle, from its beginning to its eventual release and beyond. A change history log can trace a change back its origins to who made the change and to the authority who authorized the change. It plays a vital role in baselining the code. This is a basic requirement of any organization wishing to maintain proper controls and compliance.

Baselining
Baselining, also known as setting a control point for your code, lets you know the exact versions of all source code and other configuration items that were included in a release. Does the tool have a way of baselining the code (be it via labeling, tagging, or snapshots) to a particular version that would allow us to back out and return to the previous baselined version in the event of a problem? Is the baseline immutable? If the tool allows changes to the previously released baseline, it jeopardizes the integrity of the software. A baseline must be locked down to prevent modifications. Any subsequent release should be based on a previously release baseline.

Conclusion
No one software version control tool can possibly fit every organization's needs. There is no one size fits all. The right tool should help you safeguard your code and help your process improve productivity and quality. Remember that thorough evaluation and selection of the right tool will require funding, but this vetting must stay within your organization's budget. Careful selection of the appropriate version control tool will help your firm improve productivity and quality and ensure that you are adhering to industry standards regarding configuration management best practices.

About the author

CMCrossroads is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.