Version Control and You

When I was at the Library of Congress, I worked with a team lead – Duane Gran, one of my three readers – who hammered us when he joined the team. Our build process was lacking, our version control was non-existant, and our overall architecture… needed some work. But in no time he turned things around and it was smooth sailing through the end of the project. I thought this was the norm and have generally worked for companies and teams with the right pieces in place.

Later I worked in an environment where although there was version control (SourceSafe), almost no one used it. There were three of us out of the team of 10 that used it with any frequency… and one person who would do two checkins. Once at the beginning of her project, once at the end. I thought this was the exception.

As I work with different people, projects, teams, etc, it turns out, I was wrong in both cases:

I believe that few developers know how to use version control at all, let alone effectively.

In the past month or so (including ZendCon and DCPHP), I've talked with numerous developers who don't use any form of version control. Some believe that since they're the lone developer, they don't need it. Some believe that their team is smart enough not to need it. Some believe that version control is too complicated or limiting. Finally others believe it's only for "those enterprise projects".

My response is quite simple: Arg.

First of all, Subversion is relatively easy to get and use. Okay, okay, maybe you don't know the arcane commands to get it all working smoothly. Personally, I have to look them up everytime and I'm running out of chickens to sacrifice. So no problem, there are dozens of hosting companies that will handle it for you. I use Dreamhost (coupon code: caseysoftware) and don't need to know the intracies. For $20/month, there's no reason to not have it. On the other side, there are systems such as TortoiseSVN that integrate directly into Windows and numerous IDE plugins that allow commits/updates to happen with a simple right-click.

Next, if your project didn't have some importance, odds are you wouldn't be doing it. Yes, most people in fulltime jobs get busywork once in a while… but that should be rare. Having a backup of what your doing will never hurt. Knowing how you did things last time or fixed that one bug or what changes you made last Tuesday will never hurt either.

Finally, stop and think about your development team. There is someone who is the best and there is someone who is the worst. The best person can be trusted with things that cross major functional pieces of the system and you have complete confidence in that person touching anything and doing anything. The worst person… well, sometimes you wonder how he still has a job and he's broken so many things, you can't keep track. Those two roles exist no matter what your project is, no matter what your technology is… and no matter how big your team is. In a team of one, you're both the most and the least competent person.

Version control seems over-complicated. Sometimes it even seems worthless. Both are wrong. The basics are simple and the value is definite and tangible almost immediately. It serves as a level of protection against mistakes by everyone on your team and can protect you from the dead harddrive scenario because you always have a backup. More importantly, it provides a complete history of your application and what you've done and what you've resolved.

There is no reason to avoid version control.

Update:  A follow up is now online.