In the course of working with non-software-developer business owners, the arcane nature of software development often impedes understanding about what makes software hard, complex, and costly to develop. One of the topics that comes up is the process of making hot fixes and releases; specifically, why they are more time-consuming and riskier than you would expect, even for “trivial” changes. This brief primer attempts to explain.
Software is built using many files, sometimes hundreds if not thousands of individual files; some of them rarely change, others quite often. What’s in the files is usually called code. The code files of any sizable project (especially where multiple people work on it) are usually stored in something called a code repository — a kind of Google Docs for code. Popular services are GitHub or BitBucket, but there are many others.
A code repository works a bit like Google Docs, with automatically generated history or versioning, so you can look back on the lineage of a file to tell who changed what and when.
To implement a new feature, we often make something called a code branch (or fork), where we take what is in the code mainline and copy it. Then, we begin in earnest to make changes to the branch (i.e., the magical process of software development). Since a branch encompasses all the work of a release…