Memi.Reflection

Private members of memi's thoughts

VSS - where are we going?

A recently published article on MSDN talks about the planned roadmap for VSS. I've read through it eagerly, looking for a feature I missed long ago, but to no avail.

The feature I'm talking about is the (as called in ClearCase terminology) “Streaming” concept.

Imagine the following situation (which I believe you are all familiar with): Two developers working on the same project. One of them assigned a feature request that should take 4 days. At the end of day 1, the feature is not ready yet, and the application cannot be built with what was written already. Well, our developer want to go home, he Checks-In all the files he has been working on, and leave.

The next day, the second developer comes, and get the latest version from VSS. But then - SURPRISE! - the application cannot be built!

So what should the first developer do? Should he not check in the file? but then he might lose it, since it's stored only on his local machine. Should he check in the file? He will then break the whole application!

The “Streaming” concept says that the application does not have only single version, as in VSS, but as many versions as needed. For example - the first developer will check in the file, but not to the main app version, but to a sub version called “Developer Stream”. This stream holds the version of this developer only. This version will be promoted to the master stream when the whole feature is ready for action.

This actually raise another question - how are we suppose to treat the source control apps? Should we use them as versioning  AND backup apps, or only versioning? If we'll think of them as versioning products only, then the problem is not even raised. Developer one should not check in the files at all, until he has finished working on them and they can be part of a version. And about the backup issue - there are a lot of 3rd party products that can handle that, regardless of the VSS.

So, how do you utilize the VSS? Versioning only, or Backup & Versioning? How do you solve the situation described above?

Posted: Jun 16 2004, 11:08 PM by memi | with 5 comment(s)
Filed under:

Comments

Darrell said:

The problem you are talking about can be solved by branching (is usually called branching by most CM tools). However, VSS's support for branching sucks.
# June 16, 2004 4:11 PM

Adam Weigert said:

Actually, if you have any experience with the Interwoven product TeamSite (our content manager of choice) you will know about the concept of a WORKAREA.

Though we do not implement it correctly here, this is how it goes.

A project is a branch. Each branch has a STAGING area that is the CURRENT VERSION of the application.

Each editor or developer in this case has their own workarea in the branch (project).

They make their changes, keep them all local to their workarea while not affecting anyone else.

When they need the file locally it is downloaded to their PC, when they are done they upload it to their workarea.

Once they are complet and want to integrate it into the VERSIONED copy, they submit it to the STAGING area.

Great concept and implementation that works well if you use it right.

Another concept is a EDITION which is a snap shot of the STAGING area at a given point in time. Basically the same thing as labeling.

The workarea method works great for seperating work developers are doing so they can blow away their workarea and not affect their co-developers doing their work.

They can, however, still submit bad code from their WORKAREA. But since the WORKAREA is part of the server piece, it gets a daily backup and shouldn't crash that often.
# June 16, 2004 4:27 PM

Greg said:

I've seen this happen and our solution was a policy that only code that compiles is checked in.
The given function or feature doesn't have to work, but it DOES have to compile...

As for Version vs Backup, I use it for both.

My primary dev workstation is a notebook... and have lost HD's with a good bit of work on them. So we use SS to protect our intellectual property and sanity by checking in often (as long as it compiles).

There are few things worse than loosing weeks+ of effort (and trying to remember exactly WHAT code changes you made in the period).

As for using other backup solutions, in our company, it's just not viable (heck our file servers don't seem to be reliably backed up... but that's another rant).

# June 16, 2004 8:07 PM

Eddie Garmon said:

VSS6 can currently supports this, with an automation tool and the use of labels. When code is ready to be integrated label it 'ready'. When you need to get code for a build, get 'ready' not the tip.

I've seen that VSS 2k5 will support, this and that it is known as shelving.
# June 16, 2004 11:51 PM

Memi Lavi said:

Adam - looks like the "Workarea" concept is the same as "Streaming" in ClearCase terminology. Is that so?

Eddie - The Shelving feature is new to me. It is not reminded in the mentioned article, and I could find only one article (blog, actually) that mention it. Could you elaborate on this? Where can I find info on it?
# June 17, 2004 12:50 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)