This has been sitting in my drafts folder for way too long, it’s a bit dated, but still good to mention…
It’s no secret that I’m a TFS skeptic. I don’t really like the tool, and feel that it adds more friction than value. Of course that’s just my opinion, and it’s easy to just dismiss my comments and go about your day (if you don’t agree with me).
Jason Barile has always been friendly and eager to help address some of the issues I’ve had with 2.5 years working with TFS. Recently he offered to have a conference call with himself and a few other members of his team (they work on TFS). I have to hand it to Jason for being so open & patient with us opinionated loud-mouths.
Anyway, here is a brain-dump of the things we talked about. It’s really raw, but shows most of the pain points that I have (and I believe others do as well).
While I still don’t like TFS, I’m encouraged to find that there are people like Jason listening to the community and making sure that the feedback makes it to the rest of the team. What happens after that is anybody’s guess, but at least they aren’t oblivous.
(I should also mention that I’m only talking about the source control here. I realize TFS is more than that, but this is the piece we use most)
Without further ado…
File locking
- I don’t always use VS to edit files. Opening VS just to check out a file is silly. tf.exe works, but pales in comparison to other CLIs
- hinders command line automation (migration framework)
- just about any work I do with build automation has to do something with TFS. I recall pain in generating migrations automatically (get the latest in a folder, check out the project, create a file, add the reference to the project file, add the file to TFS, check in changes, check them out again) this is largely unnecessary with Git or SVN
- takes longer to refactor (explicit check-out EACH file)
- if I do a rename in Resharper, it’s as simple as F2. If this touches 30 files I shouldn’t even notice the delay. With TFS, even connected to the local LAN, it’s dog slow.
Server keeps track of state, not client
- files get out of sync, TFS said "Nothing to check in"
- produces bad builds
- merge gets confused : “Nothing to merge” O’rly? Beyond compare tells me the files are different there, buddy.
Check-in notifications/emails
- Don’t include much details. It’s almost completely useless
- Can’t click to view file/diff (should have a web based viewer for this)
- It’s clear that this is just simply to put a checkbox on a feature matrix and not really strive to be a useful part of the dev process.
Merging
- Seems to frequently conflict for no reason. Need to reproduce this.
- Deleted files
- don’t show them
- should be able to navigate back in history to show deleted items
- Get NullReferenceExceptions regularly, on normal merge scenarios. This is repeatable.
Branch per feature impossible?
- branching is too costly
- guidance therefore says “use it sparingly”
- can’t do it offline
- merging is painful
- BeyondCompare is a MUST. The built-in merge tool is so bad it might as well not be included.
UI
- Viewing / Querying work items ==> YUCK
- TFSWA is just a start, not a good user experience
- Needs to be accessible standalone (dual monitor)
- Dropdown fields that span the width of the monitor (WTF!)
- Hides my code
- Compared to Unfuddle, Basecamp, Fogbugz, Lighthouse, it’s clear that little thought to UI & general look & feel was considered a priority. Even Rally & VersionOne look better than this, and I’m generally harsh on them for UI as well.
- Needs to be optimized for pure-keyboard use. We’re talking about programmers here!
Reports
- Remaining work report is completely useless
- # of Work Items is a measure of progress? What about 100 hour work items or 15 minute work items? The agile process template is a joke.
- Most companies I’ve seen do little to NO CUSTOMIZATION AT ALL here. This leaves them with mediocre project templates that do more to hinder the process than help it.
- Reports have that ugly SSRS “chrome” – feels clunky (yes I realize this is nitpicky, but this is my blog!)
Workspaces are overcomplicated
- can get corrupted, need to rebuild
- this has happened when I got pissed & unchecked read-only & write to files directly (like editing a README.txt file)
- why do I need a workspace again?
- why the heck does the server need to know where my local working copy is?
Command Line Interface
- should be directory-context-aware
- “tf checkin” wants to check in every file in every workspace on my machine. WTFF!
- should be optimized for alpha geeks like me
- get inspired by git
- no need for a fancy GUI
- if you were to use git for 1 day you’d realize why they don’t need GUI tooling. Their CLI is pretty friendly and intuitive. tf.exe is powerful, sure, but it’s usually the last resort. I haven’t met anyone who uses just the CLI.
Again, these are just my opinions. The team was very receptive to my criticisms. They also had a couple of good explanations / retorts.