The Software Purist |



The Important of SCMs vs. Being a Versioning Geek

Recently, one of my colleagues at a previous job mentioned to me something to the effect of, “I’m less of a versioning geek that I feel I’m supposed to be as a Software Developer”. This comment sparked an interesting discussion.

First, I’ll start with some background. My former colleague used to work with me at the gaming company I worked at and tends to work on small projects and with artists. For him: the main features of an SCM he finds useful are commit, check out and the ability to tag a set of code.

As you might expect, my perspective is quite a bit different. I’ve worked on some small projects, for sure. But, my specialty is larger systems working with teams that have been as large as 50 people or more. In these cases, obviously an SCM has to be quite a bit more. When we talked further, he talked about “a normal case” being that one person owns a particular file, so why make it so complicated? This brought up the fact that for large projects, someone owning a file is not a normal case and tends to be a bottleneck. This is why locking-style SCMs are rarely used at most companies I work for—the overhead is too immense and it requires the file owner to be available 24/7 and instantly responsive, which is certainly an unrealistic expectation.

The killer features for large teams are the ability to commit often without conflict and be able to merge at critical points smoothly and efficiently. Distributed SCMs like Mercurial and Git are prime examples of systems that handle this well. For developers that work on smaller projects, like my friend, the main reason use to SCMs is to be able to go back to an old revision. Of course, this is useful for everyone, especially when you’re trying to understand a system, but I still find the case of merging to happen far more frequently for me.

The other interesting point of this discussion was specific to Git, since I didn’t realize his complaint was specific to Git at the time. Git has a lot of commands, but only a small subset are actually useful to most users. Furthermore, the vast number of commands can make things complicated to non-technical people. In his company, game artists were also using Git as a versioning mechanism for their artwork. I would debate whether this is a good approach for asset management for a variety of reasons (maybe this can be a future post). It definitely seems very complex for an artist.

Overall, I found the discussion very interesting from the perspective of someone working on different-style project than I tend to work on. What are some of the interesting ways you use source control? Do you find patterns that tend to ease things more for large projects vs. small projects?

No tags

No comments yet.

Leave a Reply



Theme Design by