Tuesday, May 20, 2008

YakShaver.NET = UCM+ for TFS

I've been quiet recently. Mainly because I've been flipping my house. No, not to sell, but because I want to enjoy it that way. We moved in just about 2 years ago, and never really touched a thing. After August I had little motivation until recently, in which case I had more than I could imagine (perhaps quitting smoking helped).

That isn't what this entry is about however (I'll post pics at a later time). Well sort of. My reason for taking the break was both because of the house and because I wasn't exactly sure what I wanted of YakShaver.

I should rephrase that, I knew what I wanted, however I didn't really have a method to my madness. It was going in a number of different directions with no solid foundation to any of it. Or for that matter, what was my starting point?

At work, we use Rational ClearCase UCM (Unified Change Management). This is slightly different than Base ClearCase (which is really just a glorified version of SubVersion from what some have told me) in the sense that it provides an overlay to the SCM tool. Unfortunately at work, our ClearCase admins do not necessarily explain all the intricacies of what UCM and how its terminology applies to more commonly known terms (such as Stream == Branch, View == Workspace, Deliver == Copy + Merge).

Because there is very little explanation, most people seem to have a bad taste in their mouth about CC UCM, when in fact, it's rather brilliant. ClearCase is still slow and kludgy and I'm more of a fan of TFS with the direct work item integration (rather than Rational's other products such as RequisitePro and ClearQuest which integrate into CC+UCM).

Brilliant? IBM product? Isn't this blasphemy from a .NET programmer and MS lover? C'mon, we're all coders, whether that is Java or .NET, Ruby or Python. IBM has good idea, MS has good ideas, Avanade comes up with good ideas and gives them to MS, the cycle goes on and on. But I digress.

So what exactly is the 50,000 foot view of UCM? Let's look at what I consider to be the fundamental part, which is UCM's branching strategy. Again, UCM isn't anything special other than the fact it does some tasks for you. So when you create a Stream, your creating a branch that can be isolated for the developer, they can check in their work without affecting anyone elses code.

We are all *supposed* to follow a branching strategy, however many times we get lazy and forget, UCM kind of prevents this, creating your private development stream and those changes get merged into an Integration Stream (aka Trunk. though I should be careful, it doesn't necessarily mean trunk, especially if you have feature integration streams).

When the developer has completed their activities (another term in UCM world, aka Work Items) and all works well, they deliver this to the integration stream, where all developers deliver work and do merging between elements to get a finalized product.

The nice thing about Rational is they have a decent Merge/Diff tool that can handle most merging on it's own. TFS offers the same feature, though I haven't truly seen how well its merging capabilities are. My previous experience on TFS was in a 3 person team that rarely every collided. My current environment has 75+ developers, all doing their own thing and colliding quite often, UCM helps filter some of that.

Now that I've said all that, to the point of the blog. As I started to understand UCM more and more (especially during a CC upgrade recently) I realized this was exactly what I wanted out of YakShaver.NET. A UCM like tool (that provided automatic branching strategy and merging, while taking advantage of other TFS tools), but provides a bit more. This is where the idea of "Sandboxing" comes into play.

If I could take an integration stream/branch and deploy that version to a sandbox environment (isolated much like my development environment is) then I can accomplish the goal of working with Testers/QA/Clients in an isolated environment and keeping congruency between all of it using a friendly application. This is where the UCM+ comes in (UCM plus a little more).

I'm not sure if I can use this name or not, I'll have to find out, but it is the goal to turn YakShaver.NET into a UCM type front end for TFS.

I'm glad I can finally put that in a single sentence. Now that I know what I want to build, time to actually do it. ;)