Requirements gathering

Before starting selecting tools, one should start with identifying what the tool should do. How is your development process, do you have big teams or a single developer. Do you plan to put source code only, documents, releases … etc in source control.

Are you using source control tools to manage different sites. To make collaboration possible, or do you use it as a back-up means.

Are you integrating source control with change management, release management, issue tracking?

Source control is often mixed with other things that closely correlate. The most obvious is Software Life Cycle management. It is also mixed with project management, release management and deployment. Please make sure you understand the differences before going any further.

Divide following requirements into absolutely required, nice to have and do not need:

Description Comment
Source control for individual changes Keep changes in source control, how much per day?
Keep source for certain release Be able to retrieve the exact source of a version in production
Concurrent development Be able to work with multiple people on the same project or on multiple changes at once
Platform support Allow to access repository from all platforms that are used in the development process
Delta generation Generate report with all changes in between 2 arbitrary versions or in between 2 dates
Work with sets Be able to link different changes together so they get reported together (eg. java refactoring, change spawning hundreds of files)
2 phase commit Be able to prepare for commit, review and revert.
Gatekeeper Allow a multi-level review of the changes so some changes get reviewed
Unplanned work Allow to use all parts of the native IDE, such as search/replace, refactor, without prior planning.
Planned work Force named check-out and attach to change-set or release
Chaos development support Allow development lead to decide on branching, tagging, views, merging.
Binary support Allow to store documents and release binaries in source control.
Metadata support Keep additional information on versions in the repository
Integration/Stand alone Integration in bug-tracking, change management, release management, project management, browser, time tracking, …
Reporting Advanced reporting and filtering on changes for release-note generation, analysis, audit, …
Distributed/Central Support for either distributed deployment, or centrally managed deployment. Be able to work off-line
Access control Define what level of access control each person should have, guest support, local admins, …
Adoption Learning curve, enforce rules, speed of operation, import old history

Once you filled in above list to mark your requirements, you can start selecting the right tool for your needs.

Leave a Reply