Version Control and Plumbing

Version control is essential for any software development (see #1 on the seminal Joel Test), but I can understand why those who come to coding from other fields may not understand how vital it is. I've worked with many brilliant people -- including scientists, engineers, and astronomers -- that started writing software not because they wanted to be professional developers, but because they had some tools on hand and a problem to solve. It reminds me of how I approach home repairs. The washing machine is broken? The dishwasher won't drain? I've got a toolbox, I'll take care of this! Sometimes this works. Other times, I call my neighbor and apologize for making a simple problem ten time worse with my amateur efforts while asking him to please fit me into his work schedule.

Why can my neighbor fix things around the house that regularly defeat me? He happens to be a professional plumber. He has a truck full of specialized tools and parts. But that's not why he succeeds where I fail. My neighbor could give me his entire stock of tools and parts, and I'd still end up swearing at some leaky faucet or stopped drain. No, the reason his jobs succeed where mine fail is that, unlike me, he knows what to do -- and what not to do -- with all of those tools and pipes and fittings. He knows the names of all the bits and pieces, knows what each of them is supposed to do, understands why they are one way instead of another.

Having the tools without the understanding will eventually lead to wasted time, effort, and money, in plumbing or software. (And in many other areas of life, come to think of it.) Sure, you can write software without version control; you might even be able to successfully collaborate with someone by copying files back and forth. But sooner or later, not following best practices will burn you. At best, you'll waste days chasing down some bug or issue introduced because your collaborator accidentally changed something you didn't catch; at worst, you may be forced to abandon the work entirely.

My neighbor has thousands of dollars in tools and inventory, and has spent years in training and apprenticeships before starting his own successful business. Thankfully, unlike plumbing, both the tools and the knowledge needed to build software are free and readily obtainable; they cost only time.

If you want to build software well, either for work or just as a hobby, you must understand version control. Git is one of the most widely used, and The Git Parable by Tom Preston-Werner is the best description I've yet seen about how -- and more importantly, why -- it works. I highly recommend it.