I would only recommend TFS if you were using the 2013 version and using the Git based repository. I've encountered too many issues with the previous versions to consider them stable.
- It's impossible to send multiple files to your diff tool at once. This is ridiculously useful when you want to review your changes before a merge and isn't available.
- Inconsistent availability of functionality. Some functionality is available from only within the IDE while other pieces are only available from Windows Explorer, while still others are only available from the command line.
- Adding files to version control is not available from the IDE and only available from Windows Explorer integration.
- Accessing shelf sets is only available from within the IDE and not available through Windows Explorer integration.
- Lack of a single unified installer. It's not enough just to install TFS, you also have to install team tools and power tools to get basic functionality.
- Shelf set functionality does not merge. What could have been a cool way of doing private branches, essentially guarantees your code will go out of date and stop working.
- You have to manually unlock text files before you edit them if you need to use an editor other than Visual Studio.
- Sometimes Visual Studio forgets to unlock files that it itself is managing and throws an error.
- The check in and shelving UIs base available files for commit on what has already been added to TFS and not what is actually present within the file system. This makes it extremely easy to miss files. (This is actually a problem with the way Visual Studio handles project files, but that in itself is another rant).
- It is unnecessarily difficult to use non Microsoft tools for editing your source due to the previously mentioned issues.
- TFS configuration is committed with your source. This means that if you change your TFS server the configuration for all your history is now incorrect. There is a default configuration you can use which overrides this behavior but it is not obvious.
- No support for ignore filters at anything but the base level.
- Inability to handle paths of greater than 249 characters.
- Files that have been unlocked, but not edited show show up as changed, even though they haven't been. Differentiating between changed and unlocked would make it a lot easier for diffs, or better yet doing away with the entire broken unlocking system entirely.
- Windows Explorer icon overlays don't clearly show whether a file has been edited. All file in TFS have a green corner while modified files add a pencil to the bottom of the icon. Switching to red corner for modified would be a lot easier to see or using the tortoise system of icons.
- Older versions of Visual Studio have problems integrating within newer versions of TFS. This means we now have an IDE version dependency in source control.
- Includes the user solution files by default when they aren't needed. Of course I'll admit this one might be a matter of preference.
- Bad caching makes it possible that differences between your local copy and the server aren't accurately reflected. It's extremely frustrating to Get Latest and find that you don't actually have latest.