January 27, 2007
Release Management versus Development: The Case for ClearCase
Like many of my collegues, I don't like ClearCase. After 18 gruelling months in it's embrace, I've found it to be an extremely poor version control system (VCS) for software development. So how it's become so entrenched within large IT shops was a source of ongoing bewilderment and concern to me. My main belief was that the decision over which version control tool to purchase is rarely-if-ever made by the people who will be actually using the tool and I suspect IBM sales people are well versed in mounting a fairly convincing argument for ClearCase when speaking to senior management.
However, I think I may have found a potentially valid reason why ClearCase is the installed VCS in so many shops - and it's all down to the value system of the customer...
I recently managed to escape the clutches of ClearCase and found myself in the relative nirvana of software development using Subversion. Yet no sooner had I arrived than whispers started abounding of a corporate move to ClearCase. With possibly less forethought than desirable I started reeling off my pet hates about ClearCase and before I know it I was attending a meeting with the people championing the CC agenda and presenting my perspectives from the trenches.
The meeting was somewhat unusual in that whereas I was suspecting it to degenerate into a scrap between the two sides over relative merits, it ended up being very civil and with little/no rebuttal of any of the points I had made. Also interesting was the realization that I don't think anything I said made a scrap of difference as none of the people I was talking to were developers, they were all release engineers.
Release engineering is another task that I believe should be incorporated into the development team rather than separated into a specialty profession. If the development team has no responsibility over releasing their software, there is no driver to produce software which is easy to release. I'm from the "eat your own dog food" school of thought and prefer to have the development team share the pain of software that is difficult to release.
However, in environments with specialized release engineers, I can see the attraction of a VCS which makes constructing a software package from a variety of disparate code branches and labels relatively straightforward. ClearCase certainly seems to provide a lot of inbuilt support for this phase of software engineering, certainly in comparison to the CVS/Subversion family of VCS which state openly that they don't wish to play in this area.
So in places where the voices of the release engineers are louder and/or more influential than those of the developers, it probably is no surprise that ClearCase has been successful in establishing a beachhead... and even more of a reason to combine the release engineer/software developer roles to ensure the best tool is chosen to satisfy the two main parts of software engineering which depend most on the VCS.
Searching for knowledge: a personal metric
Over the last few weeks, I've been in the interesting position of having to come up to speed with a somewhat infamously alien codebase, without the benefit of any experienced senior technical people to answer any key questions regarding the artifact. Thankfully, through a combination of patience from my customer and sharing the learning experience with another collegue, I think I've progressed along the admittedly steep learning curve quite well, although the trip has not been without the occasional stumble.
Thinking back over this period and my own behaviour, I've noted a couple of work habits which I began using in a fury and then have dropped off quite substantially of late: debugging and IDE-based global string searches across the entire codebase. On reflection, I think both of these techniques are strong indicators that a developer has a poor mental model of the overall shape of the codebase as there should be no need to resort to using these very blunt instruments in an ongoing fashion when there are far superior alternatives which should make the need for debugging and global searching almost disappear.
Unfortunately, I didn't have the foresight to actually measure the number of times I fell back on debugging and/or global searches to answer particular questions, but I think it would make interesting reading as I know the number have dropped off markedly of late. Perhaps on the next new project...