I've always used SVN in my past, and now that we have moved past the initial phase of a project we need to figure out our branching process for future enhancements.
In reading up on this, we see that TFS has Shelving.
How do they compare? What are the big gotcha's on each?
In general, which is preferred and why?
Shelvesets are per-user and differently stored in the source control - it is not possible to merge shelvesets, there's no history etc. The only action possible is unshelving; you cannot even merge files while doing so. So, we only use it as a temporary storage for things that are not finished yet and thus cannot be checked into a branch.
So, you should use branches ;-) maybe a Main branch and different development branches for features & bugfixing.