Wednesday, December 09, 2009

Why the hell do vendors not use version control properly

This is an appeal to everyone out there who is writing a product that is meant for an enterprise customer, you know the people with budgets and it applies to companies big and small.

When doing a project you normally have a lot of things to control
  • Word docs
  • Powerpoints
  • Visio
  • Requirements
  • Code
  • Test Cases
  • Data models
  • etc
The point is that its a lot of different things. What makes it easier to control things is a version control system. What makes it easier is if we can use one version control system to manage all these elements. What this means is that your tool needs to
  • Store things in lots of different files, every object or important piece of information should have its own file
  • Delegate version control to an external tool

There are two very very simple principles that I'm fed up seeing people screw up. Having one massive XML file that your tool "helpfully" manages is just rubbish. Not only does this mean that people can't share sections of this but it also means that structurally I can't set up my version control structures so one area has all of the requirements, docs and interface specifications all managed together. This is a very bad thing and it means your product isn't helping my programme.

The worst thing about this is that its much easier for a tool vendor to just say "version control is done by another tool, if you want a free one then subversion is great otherwise we integrate with most of the major providers". Having this elementary dumb decisions of single files is just a very very bad design decision and completely ignores how enterprises need to manage and adopt technologies.

I really don't understand people who pitch up with a tool that fails on this basic test of
"see that individual important element in your tool, can I manage that as an individual element and do a release of that without dragging other crap in"
If I'm creating a Use Case I want to version at the Use Case level, not at the repository level. If I'm creating at the Process level I want to version at the individual process level, not at the repository level. If I'm modelling a database I'd like to be able to version at the entity level not the whole schema level.

Code works like this, it would be mental to have a code versioning system that worked on every file as a clump. Yet this is what lots of packages and other tools do.

Its 2009 folks and it appears people are still building tools that can't match the capabilities of RCS let alone CVS or heaven forbid something from this millenia. So a quick summary
  1. Expose your things as files at the lowest level of sensible granularity, this is normally the blobs or icons in your tool
  2. Delegate versioning to an external product that does this stuff better. If you feel you have to include it then ship a copy of subversion.
That is all. Its that simple.

Technorati Tags: ,


Steve said...

All true of course.

But imagine a programme in which every dev team in a very large media co uses a different version control repository. No, not just different repos in the same tool... some of that of course... but also different repos in a mixture of Clearcase, SVN and I daren't ask what else.

And then imagine a world in which the SVN repo is, ahem, 'upgraded' the day before a critical release. A world in which the team that's so keen on upgrading can't be bothered to tell all the users that their code is about to move to yet another repo.

Oh the fun we had with that release! :-)

So I suppose my question is a bit broader than yours: it's 'why the hell do so few people use version control properly?'

Steve Jones said...

Indeed another nightmare. Its not exactly rocket science and yet people screw it up. Project people have little excuse but vendors should have ZERO excuse. Unless this major, major vendor is managing their code as a single clump its trully mental what they've done.

They've actually made a DECISION to do it this way.