To put it simply, version control systems should be taught in every Professional & Technical Writing curriculum available. These systems, long the province of programmers, system admins, and guys who hang out in their mother’s basement but aren’t bloggers, have a variety of very useful tools for writers.
Now, to be fair, all of the features that are available in a version control system aren’t going to be used by every writer. A lot of us, unlike our programmatic brethren, don’t work in plaintext files. Rather, our domain is in the binary mysteries of
The downside, of course, is the learning curve for a version control system, and the added overhead of operating within that system. The overhead for the binary file writer is fairly consistent, however, and doesn’t actually change regardless if you’re working with 1 or 100 other writers: You need to remember to lock (check out, reserve, whatever) your file before you make changes. The learning curve problem is also mitigated by earlier introduction: It’s far easier to learn about how version control works and why version control works on a (sorry, the pun was unavoidable) controlled system, as opposed to the sprawling, gigantic, lumbering systems that most corporate implementations transform into. If you’ve learned the basics on that small (here it comes again!) controlled system, you’ll be able to handle the large system with ease.
What benefits does version control provide for the writer? Instead of just producing a laundry list, I’m going to point out the advantages I got from using Subversion for version control on my novel. Many, if not all, of these can be applied to other forms of professional writing, and I’m sure there are other items that can be added to the list.
- Multiple Points of Access: This really was the main reason I started using Subversion, believe it or not. I recognized that there would be nights that I’d want to work on the novel at home on the desktop, and there would be nights when I wanted to work from a coffee shop on the laptop. And that there may be nights where I wanted to work from home but use the laptop.
Positional flexibility: It’s the hallmark of a good novelist. Not like that; stop thinking that.
I wanted to do this, but I didn’t want to have to hassle with carrying around a flash drive of files, wondering if I remembered to roll last night’s changes onto the file system before I dashed off to work. (Yeah, ironically, Nano fell on a rare “I’m employed” month.) Did I forget to bring changes back to the desktop? Did I forget my flash drive? Why is Windows giving me a file copy error?
With Subversion, the process became simple. When I was done for the night, I committed changes to the version control system. Before I began a writing session, I updated my working copy (the local version of the files) from the version control system, ensuring I had the most up-to-date files. Easy.
- Backups and Security: I chose to use FrameMaker for my writing program, and I don’t regret it one bit. Why it was a great choice is probably worthy of another blog post, as I gently stroke and coo toward the program, and tell it that I care for it.
Despite all of the advantages, however, FrameMaker still has one annoying quirk: It has this habit of occasionally crashing in catastrophic fashion, dragging whatever document you might have been working on into its own version of large document management hell, leaving you shaking your fist and sputtering at the now locked-up computer. Add in the fact that I spent a good deal of time on a laptop, in a coffee shop, where one wrong step could have met with latte disaster, and you’ve got a compelling reason to backup your work.
Aside from my usual backup routines (imaging the laptop every week, etc.), Subversion gave an additional layer of protection. At any given time, there were 2 or 3 clones of my work out in the wild. They might have been slightly out of date, but they weren’t days and weeks behind. Had the laptop met with an unfortunate latte incident, the working copy on the desktop was only a day older, and not that much progress was lost.
- Back to the Future: It was easily one of the most useful features during the first write, and it’s become a valuable as gold in the rewrite phase. One of the greatest features of version control is the ability to “go back in time” and see a snapshot of a file from a previous checkin.
How does this help you as a writer? I’ll share an exact example: You’re working on a new chapter in the middle of the book, pounding out words, and you get to the introduction of a character. You know that you reference some details about this character later in the book, but the initial description you wrote of him was deleted last week, since you decided to not introduce the character until right now. With version control, you can pull up the old version of the chapter that used to contain his introduction, look at what you read, and incorporate it into the new chapter. Totally awesome.
- Progress Notation: Check in comments, which are attached to each commit to the database, are almost universally reviled. They’re just extra work, and “…” is usually a good enough comment. After all, you made the changes, you’ll never forget, right?
Wrong. One of the great uses I used for check in comments, combined with the fact that Subversion doesn’t increment every file in the repository when a check in is made (it only increments those files that are changed), was to keep progress notes. It was really handy to look at the last change for a chapter file, and be reminded of what work I had accomplished last session and what I still needed to accomplish on it.
As a corollary to this, there’s also the ability to attach “meta data” to the files, and Subversion allowed me to create custom fields. It’s not so incredibly useful since I’m not juggling hundreds of files, but it’s nice to be able to add tags to chapters that indicate which characters show up and which plotlines are advanced. In a bigger environment, such metadata ordering can become a powerful way to view your files, without having to resort to massive and unwieldy folder or reporting structures.
- Let Me Tag That For You: One of the handiest features after I finished the first draft. Tags and branches are ways to create offshoots of your main development line, and changes to those are independent of the main line. In Subversion, there’s not really a difference between tags and branches, other than the fact that tags are supposed to be immutable, should you choose to enforce that.
What I did with the novel will be immediately familiar to anyone who has ever worked in software development. When I finished the first draft, all 65k words worth, I created a tag called
draft_1and added it to the repository. It’s sat there, untouched, unmodified by the ongoing changes to create what will eventually bedraft_2. And should I need my original draft (as I did need for a project just last night!), I can check out that tag, and have a directory structure that is absolutely identical to the way the book looked when I called it “done.”