Shelving was a heavily touted feature for TFS when it was first released in early 2006. Microsoft seemed to try to sell it as a new concept, but I argued it was simply an adjustment to an old concept
: branching. I will say it's probably a good thing Microsoft put so much into selling the idea. Without it, I don't think most developers would know about such a capability. Then again, there seem to be a lot of developers who still don't know about it. Anyway, back to my point... After playing with shelving in TFS, I'm getting mildly annoyed with it. I guess the reason I say that is because I want it to be treated more like a branch. I believe in the concept of committing logical changesets, meaning I make small changes and commit them individually. Perhaps I take this to an extreme, but I want each change to be tracked independent of any others. When I shelf code, it's usually a sizable change. I'd like to be able to shelf the first change and then incrementally update the shelf with my changes as I go along. I'd also like the ability for others to commit to my shelves, which speaks to the collaborative nature of shelves. This is all a given when you use Svn shelving (aka branching); I just wish TFS was up to it.