Version Control for Non-Developers

There have been a number of occasions in the last few weeks where I’ve been explaining to non-developers the benefit of using a version control system. Unfortunately, many of them don’t understand what a version control system does, or how they can be useful.

I think that the time is ripe for version control systems to become more widespread outside of traditional development areas. The main enabler for this transition is the availability of free, robust and simple to use version control software. My favourite (by a long margin) is Subversion.

Subversion wins hands-down on the free and robust facets, but fails miserably on simple to use. Most end users will balk at using the command line client svn. Actually, as a developer I tend to prefer the command line interface for many use cases, but I fall within a narrow minority of the general population.

Where Subversion fails, TortoiseSVN does a fantastic job of providing a user friendly face to Subversion. Thanks to the well thought out layered design of Subversion, TortoiseSVN is able to seamlessly leverage the client library to provide a minimal and elegant UI within Windows Explorer.

What should be under version control? (you ask). I’d argue that pretty much everything should be committed. Any company deals in a large number of files and documents that form the basis of employees work. Word documents, spreadsheets, images, Visio diagrams, text files, emails are all relevent. Martin Fowler has written about the same subject in his note about More Version Control, and I have to agree with him.

I’ve had experience in a large company where large numbers of requirements, architecture and design documents were “version controlled” by copying and renaming the said documents periodically. This lead to a huge number of documents lying about the directory structure, all with slightly different names indicating their status (such as “archived/UseCaseXXX-0.1.doc”, “baselined/UseCaseXXX-1.0.doc”, “drafts/UseCaseXXX-1.1.doc”, etc). This whole scheme could have been simplified enormously if they had used a real version control system, and using tags to signify various status.

Recently, I’ve started work for a client developing a simple website. As usual, I immediatly started checking in my work into Subversion. Sections of the website will contain content provided by the client. Rather than asking the client to send me the content via email so that I can check it in for them, I think that it’s well within reason to show the client how to check their work directly into the repository using TortoiseSVN.

In the next few days, I might get around to writing a short tutorial for non-technical users describing how work with TortoiseSVN (I didn’t have luck finding an existing tutorial).

Moving Swiftly Onwards

After working nearly three years at Legal and General, I finish my notice period there tomorrow, and will be moving swiftly onwards.

It’s been a fun few years, and I think I’ve managed to meet a lot of interesting people and extend my skills in many useful areas. For those (soon to be ex-) colleagues who are reading this, let me just say that I don’t know half of you as well as I should like; and I like less than half of you half as well as you deserve. Either way, I don’t live far away, and I’ll make sure I make an effort to keep in touch.

For the short term, I’m planning to offer my services as a contract software engineer slash architect, though I think that there is certainly scope for me to seek out opportunities using some of my wider skill sets, such as standards based web design, human computer interaction, automated build systems or even configuration management. Perhaps I might even try and publish the odd technical article. I’m still uncertain about the marketing strategy for such a skill set, though, as it sounds too unfocused. Maybe I should market myself as Renaissance Developer for Hire. 🙂

Renaissance Developer

I’ve read a couple of articles in the last couple of months that have resonated with my beliefs and aims with regards to development. One of these is Renaissance Developer, a blog entry by Charles Cook. The gist of his post is the following:

If you only concentrate on what satisfies your immediate career needs, you’ll be living in a box with tinted windows. You’ll not only see everything in the box in a single shade of colour but worse than that you’ll be missing out on a world of other interesting and intellectually entertaining software ideas. So spend your evenings and weekends on something different from how you earn a living. It will be much more fun and you’ll incidentally end up a better developer, a Renaissance developer instead of an MSCE.

The second article is an essay by Scott Ambler, which builds upon this concept and introduces the term Generalizing Specialists. The main points can be summarised from the following quotes:

A generalizing specialist is someone with one or more technical specialities who actively seeks to gain new skills in both their existing specialities as well as in other areas, including both technical and domain areas.


A generalizing specialist is more than just a generalist. A generalist is a jack-of-all-trades but a master of none, whereas a generalizing specialist is a jack-of-all-trades and master of a few.

Both of these concepts are ideals to which I aspire, to such a degree that I’ve just changed the name of my blog to “Renaissance Developer”.


I came across the My Favourite Word website while I was browsing, and I had to submit an entry for sesquipedalian:

This word makes me laugh, because it can be used to describe itself, as well as anyone who uses the word. It’s like a self referential joke.

This has been my favourite word for years, after a friend at work first told me about it. Anyway, back to the haphazardly scheduled technical blog content…

When to Change Jobs

On the subject of changing jobs, here’s a few points I’ve been considering:

  • I’m in a stress free but relatively low-paid job as a software engineer in an insurance company. Three miles from home to the office is very handy, especially considering I often have to pick up children from nursery. However…
  • I’m generally frustrated with the heavy weight and bureaucratic, yet rather ad-hoc nature of the development processes. Although this is not a major issue for me, there are other considerations…
  • I’ve been transferred to a project that could be described as “morale sapping” by applying a generous dose of optimism.
  • This new project is based in Redhill, about ten miles away. This is no longer that convenient for me.
  • The IT job market has been steadily improving over the last year, and agents are calling me out of the blue asking for availability.
  • I’ve been meaning to try my hand at the contract market for a long time now, where I’m certain I could very easily double my income.
  • My kids are now at the stage where I should be able to venture further afield without neglecting them too much

On Friday, I came to the point where I had a chance to think these issues over, came to the obvious conclusion, and handed in my resignation. It looks like I’m about to go back onto the job market. Time to update my CV.

(BTW, if anyone knows about job opportunities opening up around late September, let me know).