Coding Horror

programming and human factors

Source Control: Anything But SourceSafe

Everyone agrees that source control is fundamental to the practice of modern software development. However, there are dozens of source control options to choose from. VSoft, the makers of FinalBuilder, just published the results of their annual customer survey. One of the questions it asked was which version control systems do you currently use, or plan to use, in the next 12 months?

Source control adoption graph, May 2005 to August 2006

The top 9 responses are reprinted here. I'm disheartened to see that Visual SourceSafe is still at the top of the list. If you are serious about the practice of software development, you should not be using SourceSafe. This isn't a new idea; plenty of other developers have been warning us away from SourceSafe for years:

There's simply no reason to use SourceSafe when there are so many inexpensive (and even free) alternatives that are vastly superior. The more customers I visit, and the more developers I talk to, the more I believe that SourceSafe poisons the minds of software developers. Note that I include our own shop, Vertigo Software, in this list.

  • SourceSafe gives you the illusion of safety and control, while exposing your project to risk.
  • SourceSafe teaches developers bad habits: avoid branching, exclusive locks, easy permanent deletions.

SourceSafe was a perfectly adequate source control system in the late 90's. Unfortunately, SourceSafe was never updated architecturally to reflect modern source control practices. Even the latest version, SourceSafe 2005, absolutely reeks of 1999. And, to be fair, some of the same criticisms apply to CVS. CVS is no longer a modern source control system, either; it doesn't even support the concept of atomic checkins.

One of my biggest hurdles has been unlearning all the bad things SourceSafe taught me about source control. Source control is the absolute bedrock of software engineering. It's as fundamental as it gets. If my knowledge in this area isn't deep, wide, and fundamentally sound, can I really call myself a software engineer?

So, how do we learn modern source control?

  1. Start with Eric Sink's Source Control HOWTO. Eric is self-admittedly biased because his company created SourceGear Vault, but he's up front about this. He has truly lived and breathed the topic of source control, and it shines through in his excellent writing.
  2. The online Subversion manual is well worth your time. The first few introductory chapters, starting with Chapter 2: Basic Concepts, are wonderful primers.
  3. Chris Birmele's paper on Branching and Merging is the best introduction I've found to this essential source control task. There are dozens of ways to branch, and no one correct way to do it. Get familar with your options so you know what the tradeoffs are with each one.

Visual SourceSafe was most Microsoft developers' first introduction to any kind of source control at all. That's great. But holding on to SourceSafe's archaic source control conventions is doing more damage than good these days. Make the switch to Team System, Subversion, or any other modern source control system of your choice.

But whatever you do, please don't use Visual SourceSafe. Think of the children.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Exchange and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: http://twitter.com/codinghorror