Good is the enemy of great, but ‘great’ is not universal

I have lots of great discussions with Simon Harris, James Ross and Perryn Fowler.  Mostly because we’re all passionate about doing the best possible job we can.  Also because we like to poke fun at our own little pet loves and fanboi’isms.

Our latest set of shelling of each other has been about source code control systems.  Now, the actual item is pretty irrelevant, but it serves as a vehicle for concrete discussion of a more abstract topic.

Essentially for any particular problem, there is a solution which is “good enough”.   Now, for this particular case, I’ll posit that ‘SVN’ is good enough.  A great solution for a very competent team, which is distributed may be ‘Git’.  A great solution for a not so experienced team may be ‘SVN’. 

What?  How can you say that?  Well, it’s pretty simple really. 

Good covers all the basic requirements of the solution.  For source code control, let’s say that’s ‘saving various versions of my code and letting my peers share it in a reliable way’ (you can tell I’m not putting too much effort into this, but deal with it).  SVN covers this, and you really can’t go below this level of functionality – because then you’re not covering all your bases.

Next, we look at great, but ‘great’ for Simon and Perryn is very different to ‘great’ for me, and many of the teams I work with.  ‘Great’ is all about making that next step, and being as productive as possible.  Git (or whatever tool-de-jour) is going to be more productive for Simon, but it’s going to be an unmitigated disaster in the hands of inexperienced and software developers who really just don’t care that much.  So, moving ‘up’ to Git, will be a productivity decline for development teams who don’t have the capacity to deal with it.

I blogged a few years ago about similar problems with languages here and here