Version Control is a Solved Problem

There are a lot of really interesting open problems in software but there’s one problem that I keep seeing professionals walk into that deserves a mention. Not because it’s an unsolved problem but because it has actually been solved. Many. Times. Repeatedly.

Let me cut to the chase. If you write software, you need to use version control. If your team has more than zero developers developing code, then you need to be using version control. If you write scripts, or C, or VHDL, or MATLAB, or IDL, or R, or HTML, or Python, or CSS or … really anything that is captured in a text editor, you really need to be using version control.

For many, this may not sound like a big revelation. Version Control is one of the “solved problems” of our day. But it may amaze you to discover that there are lot of people out there who are failing to use these tools.

Over the last few years, I seem to have run across a surprising number of fringe groups that have held on to the notion that they do not need to use formal version control tools. They’re the “Senior Scientists”, the “Test Engineers”, the “Software Prototypers”, the “Electrical Engineers”, the “System Administrators”, the “Meteorologists”, and the “hobbyists” that have often accidentally stumbled into the world of software development or think that their little application is just a proof-of-concept.

Please don’t confuse my soap-box-preaching as a condemnation of the amazing work that most of these people do. They are heroes for figuring out smart new ways to solve their problems. Writing software is not and should not be an elitist activity left only to the cubicle-dwelling software engineers. Everyone should be learning how to get computers to do their bidding. The point I am trying to make is that hacking away at a problem is only getting you to first base when you could instead be getting a home run.

The good news is that Version Control can be FUN and once you learn how to use it effectively, your software-centric life is going to improve in countless ways. Some of the benefits include:

  • Inherent backups of previous work, allowing retrieval of “dead code”
  • Supports seeing what has changed between versions.
  • Facilitates collaboration with others.
    • Syncing code changes among other developers (bug fixes, new features)
    • Allows for meta conversations about the codebase (what is changing?)
  • Supports Finding/Fixing Bugs in a repeatable fashion
  • Provides an “Undo Button” to go back to previous checkpoints

Some accidental software engineers eventually adopt “manual version control systems” that revolve around date-stamped copies of directories. While this is a generally poor way to do it, it is better than nothing.

If you are a person writing software in the “shadows” and failing to use version control, please do not be ashamed. — I am just asking that you strongly consider adopting a tool and learning how to use it. If you’re looking for a relatively easy place to start, take a look at Mercurial. There’s a really great introduction available at

Version control is one of the solved problems of our universe. There are some really great tools available and a surprising number of them are free (examples: Mercurial, Git, Subversion) with great tutorials available to learn and use them. It is definitely worth investing the time to improve your workflow and learn how to use a formal Version Control System.

If your development team has more than zero people on it, you need version control. Please explore the opportunities.