Last week I decided to help what I think is a very good idea (more on that, I’m sure, in the future) try and get itself off the ground. In my mental preparations for this task, I began to wonder what we were going to need at the very beginning stages that would allow our work to proceed. I came up with this list:

Collaborative Software

Version Control System

Document Repository (with versioning abilities)

Issue Tracking Software

Why is it needed when you start a project?

Even though you may not be producing a lot of code in /trunk in the early days of a project, having that platform ready is really a no-brainer. Different types of version control have different hurdles to get them set up and ready for use. While we won’t go into that here, I will say that just about any new project I start working on uses github , a distributed version control system (DVCS). While it may be empty at the beginning, having your Version Control System set up from the outset will help your development team be prepared quickly as well as have your repository ready to roll as soon as the first line of code is ready to be checked in.

The Primary Options

There are a TON of options out there for Version Control, and growing all the time. For the purposes of this post, I’m dodging anything that’s not open source and/or very Windows Centric (usually they’re mutually inclusive).

CVS (Concurrent Versions System)

CVS is the granddaddy of all version control. It’s got a pretty basic feature set, and is not really used for new projects by anyone that I know (although that doesn’t mean it’s not, it just means that I’m not all-knowing). I have only ever run into it as a legacy system.

SVN (Subversion)

SVN, started in 2000, is an Apache organization project sponsored by Collabnet . It was designed to be a mostly-compatible replacement for CVS. It’s userbase is massive, and it is the prototype for a centralized version control application

Thousands of huge projects use and/or support it, and it’s easily installable (both the client and the server) from any Linux distribution I’ve ever seen.

I’m not going to get into the years-long debate of centralized vs. distributed version control systems. Google has millions of opinions on it already . What I will say is that:

centralized version control has less of a learning curve and is easier for more casual users to grasp and operate most of my experience is in Subversion any new project I spin up will use a distributed version control application (Git, primarily)

Git (distributed version control)

Git has been around for some time now, as well as it’s largest online presence GitHub . Git actually goes way beyond being only a version control system. It’s really a pretty amazing framework for a lot of things. On top of that, it’s FAST. Like, crazy fast.

Github currently has ~1,000,000 users and ~2,000,000 repositories. One of the biggest contributors to the Git framework itself is Linus Torvalds , of Linux fame.

Bazaar (distributed version control)

Bazaar is sponsored by Canonical, aka Mark Shuttleworth’s hobby. I’ve never actually used or admin’d an installation of Bazaar, but it’s always in the conversation when picking a distributed VCS. If someone wanted to offer up some opinions on it I’d love hear them / put them up on here.

Mercurial (“Hg” – distributed version control)

Mercurial is an open source project that is apparently sponsored by lots of known organizations (Google, Atlassian, among others) and is actually used as the version control for Firefox. I’ve only ever seen a poor installation of Hg that attempted to be configuration management for a pretty awful collection of servers, but it was pretty speedy, and a stable application even when being woefully mis-used.

That gives at least a gloss coat of version control options out there. Of the tools needed to start a project, it’s the least needed “on Day 0”, but you really can’t start a project without knowing what you’re using to hold the source code so I feel compelled to include it in this list.

Next up: Document Repositories (ugh)