These are just a few of the things I learned from using TFS in Visual Studio.

  • Never name a project with a space, it surprisingly mangles TFS integration.
  • Ensure auto-generated settings are public (in Settings.designer.cs). Or you’ll see values in the debugger, but not in the running application.
  • Don’t move a TFS branch without syncing with the parent first, every item moved is considered changed in the next merge and you can’t separate the move from other changes.

And some of the best overheard criticisms of TFS:

  • It uses a check-out/check-in model
  • It’s unusable if you are disconnected from the server
  • It has no native rollback function (it may be able to issue a compensating changeset)
  • Shelvesets will burn you if you aren’t careful
  • Branching is slow and painful
  • TeamBuild is a joke compared to TeamCity
  • Installation and configuration is a nightmare
  • We had to hire a TFS consultant to restore our TFS instance for a disaster recovery simulation
  • TFS cannot be considered a serious code repository when it does NOT adequately support rollback/revert to a previous version
  • Merging. TFS merging is stupid, literally. It cannot adequately resolve merging issues that other products resolve seamlessly.
  • TFS is NOT a DVCS
  • TFS demands a network connection. What little offline support it provides creates a tremendous amount of friction: long wait periods when loading a solution in offline mode, weird behavior when switching back to online mode
  • VS TFS addin, TF commands, TFPT commands… how many tools do I need? Which ones should I use when?
  • Workspaces! The concept of a workspace is ridiculous.