Version control

I’m a fan of version-control systems (VCSs). I’ve used git since around 2010, when I got back into coding.[1] Much more recently, I started using jujutsu.

When I was a software developer, and subsequently a manager of dev teams, I used git for the typical use cases in those settings: collaboration across developers, code review, software-lifecycle management, etc.

These days I’m responsible for teams of sales engineers (yes, that’s a thing). We don’t maintain codebases. So now, I use version control purely for my personal projects.

My primary use cases

These are the key reasons I like to use a VCS:

Sync across machines. The best example of this is my dotfiles repo: I want to keep it in sync across my several computers.

Preventing data loss. I can easily recover any data that I accidentally delete (as long as it’s been committed).

Experimentation sandboxing. If I want to make a big mess trying out a wild idea, I can do so safely in a separate branch.

Backup. Keeping a repo in sync across several machines is a form of backup. And if I push to a service like GitHub, my data’s backed up in the cloud as well.

Secondary use cases

I could live without these perks, but they can be very nice to have:

Historical spelunking. I can trace any line of text from its inception and across every edit I’ve made. And if my commit messages are half decent, they’ll give me a sense of why I made each change.

Keeping track of my work. A quick look at my recent commit history reminds me what I’ve been working on.


  1. I intended to major in Computer Science in college in 1998, ended up minoring in it, was too clueless and passive to convert that into a career when I graduated, and more or less stopped coding from 2004ish to 2010ish. ↩︎