One of the most frequently asked questions I get from enterprises is “What is the difference between version control system and a Metadata Repository? Is it necessary to have both of these components?”
Version control systems such as CVS, SVN and more recently GIT are tools that track the history of changes that occur during the development of software, and allow users to access any version of the software. They manage problems that occur from multiple developers working simultaneously on the same code. They allow developers to “check out/check in” the code that they are working on and they enable consistent and repeatable builds. A version control system manages software “work in process”.
The role of a Metadata Repository is two-fold. A Metadata Repository is an inventory of completed software or “finished goods inventory”, and should serve as the channel of distribution. The inventory in the Metadata Repository should have passed the QA process, and should be packaged for final distribution. This means that the compiled and/or source code, documentation, test results, etc., are complete and can be consumed by other developers and stakeholders. The Metadata Repository manages the macro-version of these composite assets.
The Metadata Repository should work in conjunction with the organization’s version control systems. Organizations should be able to store their reusable assets in a version control system, on a file server, ftp server, web server, or any other “warehouse” or storage system of their choice but still be able to link to them from the Metadata Repository.
In order to effectively consume the organization’s “finished goods” software inventory, developers must be able to:
- Easily find what they are looking for
- Quickly determine the relevance to their needs
- Effectively evaluate technical compliance
- Obtain a copy of the asset or the relevant endpoint information
The Metadata Repository serves this purpose. As with any channel of distribution, there should be a customer relationship management mechanism that tracks information about the consumer. The Metadata Repository should track information such as the projects that are using the company’s software assets. The system should automatically notify consumers of new versions.
Finally, the system should be able to track the “revenues” or savings realized through the consumption of the organization’s software assets.
Version control systems are robust tools, but alone, they provide an ineffective means of tracking and distributing finished goods software inventory for the following reasons:
- Version control systems are not easily searchable
- Version control systems lack robust metadata that allows developers to determine relevance
- Each development group typically has their own version control system(s), which makes enterprise-level reuse virtually impossible.
- Version control systems don’t provide the level of consumer tracking and reporting necessary to support software reuse.
Version control systems and Metadata Repositories are robust tools that serve very different purposes. While they may work in conjunction with each other, each manages different portions of the organization’s overall software inventory.