Moving from Louis Armstrong to Thelonious Monk….

This blog entry deals with some of the smart people that I meet during my travels, and the subject of getting the benefits of RTC in a ClearCase based environment.    We have a lot of customers that have a HUGE investment (in terms of time, effort and money) in IBM/Rational technologies, like ClearCase, ClearQuest, RequisitePro and others.  Many of them wonder about the best way to leverage the new Jazz based infrastructure in that existing environment.  You want to get the best of both worlds, and you want to have the flexibility to use the best tool for the job at hand.  So how do we move forward in a nice orderly manner?  More specifically, how do we coordinate our SCM systems (RTC and ClearCase)?

That was a question put to me by one of our customers.  So I asked some smart people to come along with me to discuss the issue.  Geoff Clemm and Carol Yutkowicz from the Jazz development team graciously accepted my invitation.  Working for a big company like IBM has it’s drawbacks, but one of the big advantages is that there is ALWAYS someone smarter than you in the organization that you can learn from.  I learned a lot from Geoff and Carol today.

The basic documentation and perception in the Jazz customer community is that there are two ways to link in your ClearCase assets to RTC.  The first is by using the ClearCase Synchronizer, which synchronizes the artifacts associated with an RTC stream, to a particular ClearCase branch/stream.  The second is to utilize the newer ClearCase Bridge, which essentially replaces the Jazz SCM capability with ClearCase.  In the first case, you have some of your teams use RTC for SCM, and other teams keep using ClearCase for SCM.  In the second case, all teams keep using ClearCase for SCM, but use RTC for functions like work item tracking and agile planning.  Most of the customers that I talk to like the first method (utilizing the ClearCase Synchronizer), because they may have multiple teams working on some shared components, and because they like using ClearCase for builds due to it’s build auditing capabilities and the investments that they have already made in build automation with ClearCase.  Some use plain scripts for this automation, some use BuildForge, and some use other non-IBM tools (like Maven, Hudson, and so on).  The important piece is that they have invested a lot of sweat and thought in setting up a sophisticated automation of their build and release process, and the thought of rewriting all of that in a Jazz environment makes them cringe.  I can’t blame them.  BuildForge and those other tools will all work with Jazz just as well as they do with ClearCase, but it has taken years to develop their existing automation’s, and rewriting all of them can be costly and time consuming.

So that is the issue.  My problem was that I was looking at the technology to synchronize a single project’s work, and I wasn’t thinking of the entire Enterprise.  I was picturing a scenario like the following picture, where I have corresponding streams in both RTC and ClearCase.

The issue with this approach is that when you have an organization with hundreds (or thousands) of projects, you have to pay the cost of having hundreds (or thousands) of ClearCase Synchronization jobs copying versions back and forth between the two repositories.  This would thrash your VOB servers and limit your ability to take advantage of a lot of the cool SCM features in RTC to manage complex hierarchies of projects.  It could also be a challenge to monitor and manage all of these synchronization tasks.  So I was I thinking of things in terms of a lot of little individual projects, each (potentially) with it’s own custom setup for synchronizing the RTC repository with their ClearCase VOBs.  Luckily, I brought along people smarter than I am.

Geoff pointed out that Jazz uses streams in a similar way to ClearCase.  I can have multiple RTC projects, that utilize multiple Jazz components, but in each of those components I can establish an RTC stream called “CC_Sync”.  It would then be possible to create a stream in all of the impacted ClearCase VOBs called “Sync”.  Now I would be able to synchronize ALL of my RTC work with all of my ClearCase repositories with a single ClearCase Synchronizer task, set up to synchronize these two streams between all of these RTC components and ClearCase VOBs, as shown below.

So there we go, administrative and performance nightmares solved.  Geoff further pointed out that we could do this in a series of streams, to support multiple build targets.  So you might have a synchronization stream pair for release candidates, quality test candidates, and performance test.  The number of ClearCase Synchronizer tasks is still kept to an easily manageable number, regardless of how many projects you are supporting.

I would still STRONGLY suggest that you not work on both sides of the divide for work on a particular piece of software, since you will need someone to manage and resolve any collisions or merge conflicts.  If you do have to have some team members working in RTC, and other team members in ClearCase, then I would STRONGLY suggest that you keep the synchronization streams “quiet”, and only attempt to share work that is ready for delivery/integration.

If you are interested in some of the details of this approach, comment on this and let me know what your particular challenges are.  The best way to see this in action is to try it out in a test environment.  Let me know what you see in your environment.