Sysadmin versus developer uses of version control systems

December 13, 2009

Here is a thesis: sysadmins use modern version control systems differently than developers. Specifically, sysadmins generally use VCSes for documentation, while developers use them for development. By this I mean that when sysadmins make a commit, it's for something that is already in use; for example, you change a file in /etc and then commit in order to document when and why you made the change.

(This is certainly our local sysadmin usage of version control, but I think it is more than just us, especially given things like etckeeper.)

There are a number of important features of modern VCSes that are basically irrelevant if you are only using them for post-facto documentation. One obvious example is cherry-picking only some changes to commit; because all of the changes are already live, committing only some of them means that you are not documenting some active changes.

(There is some point to the ability, but needing to do it generally means that either someone forgot to commit several changes or that there was a crisis in a mixed directory.)

Sysadmins can use VCSes in a more development mode, but I think that it is somewhat foreign and is certainly going to take not insignificant amounts of work. (Consider the problem of testing your changes before you deploy them into the live version of the repository, for example.)

(Also, sometimes sysadmins do development work, both on code and on configuration files, and so use VCSes in the conventional 'developer' mode.)

I think that another way of putting this is that for sysadmins, the checked out files are the real thing and the repository is only their shadow copy. For developers, it is the reverse; the checked out tree is the shadow and the real thing is the repository.

(This entry was sparked by Aristotle Pagaltzis's comment on my previous entry.)


Comments on this page:

From 78.35.25.18 at 2009-12-14 02:32:38:

I think that another way of putting this is that for sysadmins, the checked out files are the real thing and the repository is only their shadow copy. For developers, it is the reverse; the checked out tree is the shadow and the real thing is the repository.

That’s a good point.

Aristotle Pagaltzis

From 92.236.78.43 at 2009-12-14 08:25:54:

How complex do config files have to get before it counts as development, would you say? I'm sure that there are sufficiently complicated configurations which need multiple changes and testing before you get to a fully-working set-up, and so you'd have to have a separate development machine; when that happens is a bit fuzzy to me.

By cks at 2009-12-16 12:44:02:

I don't think it's a matter of config file complexity; it's in how you work with the files. My personal boundary is that you are in 'development' mode if you aren't working with the live files; instead, you're working in a separate area (and testing somehow), and when you're done you commit the working bits and push them to the live area.

System complexity does come into it; generally it is the more complex and fragile systems that you need to actually develop and can no longer make live changes to. For a concrete example of each, our DNS zone files are live and so we maintain them in 'sysadmin' mode, but I work with our Exim mail configurations in an area that is nowhere near close to live, so I handle them in 'development' mode.

(Indeed, I have a cloned Mercurial repository of the mailer configuration sitting around with some experiments that I'm thinking about.)

Written on 13 December 2009.
« Mercurial versus git for sysadmins, or why we picked Mercurial
The high costs of true security paranoia in the face of compromises »

Page tools: View Source, View Normal, Add Comment.
Search:
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Sun Dec 13 23:42:57 2009
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.