Quick disclaimer: I don't use TFS, and don't care for integrated solutions - not just MS, but any of them.
> ...using TFS was the first time I realized how much an integrated source control, team collaboration
> site, project management integrated solution makes sense.
In some scenarios. I know any number of companies where the MS integrated solution you use would fail utterly to be useful, because the people would not use the tools properly. Not just developers, but project managers, users, etc.
The *nix/open source advocates generally don't favor all-in-one packaged systems. The vast majority of the time, the system has specific, glaring deficiencies, While it often works well for a specific group, it fails to support others adequately.
This condemnation has been levied against Eclipse regularly, and from personal experience, I can tell you that the Visual Studio IDE alone, while it is absolutely adored by many, is in many ways a useless tinkertoy for others. MS (and other all-in-one solution providers) don't provide the perfect experience. They target a specific group, and often their "solutions" actively undercut the work of others. Some specifics:
> * Integrated work items with specialized and extensible work item types for tasks, bugs, issues etc.
Working with a system now at one assignment that is remarkably poor. It works beautifully...for on-call help desk support. It actively -impedes- tracking of bugs and tasks for development. I actually use a full external tool and update the approved system at the end. This is awfully inefficient: only 10 times more productive than trying to use the approved tool.
> * Work items, tasks, issues etc. editable through a web interface, but also right from inside the IDE.
That's handy - if everyone uses it. Where I'm on assignment, no one can be bothered to update information. I track things in my a web-enabled system, as I said. Several times a week, someone asks me to print out information in that system. It's become the system of record for a lot of this information, and anyone can use it; but I'm the only one who does. Everyone else's data is in little silos.
> * Work items, tasks, issues etc. editable through Excel or some other spreadsheet (regrettably project
> managers favorite tool is *still* Excel - but having it integrated so the rest of us don't have to
> mock around inside columns and rows to update status is a big relief).
Again, handy -- if anyone uses it. Not so handy when people actively break it by mucking around with the Excel sheets.
Just kill Excel use.
> * Source control without quirks when e.g. renaming files or removing files and adding files back with the
> same names (I've had bad experience with subversion)
Others have complained about similar issues, but they aren't universal. Chances are you're not managing the files properly in subversion. But subversion isn't the be-all and the end-all of open source revision control. It was never intended to be, just a better CVS.
Git is very nice, and there are -many- others to look at. Check Wikipedia.
> * Shelving - storage of not-completed changes on the server without checking in. We use it to share
> suggestions and if we cannot make the daily deadline on consistent check-ins.
Never used it. Frankly sounds like a hack; why not use a branch?
> * Configurable policy which can be set to reject commits/check-ins if a build has not been completed
> locally and/or if too many tests fails and/or if test coverage is too low and/or if there are too
> many/certain warnings (e.g. security related).
> * Dashboard with project manager-friendly roll-ups and graphs with speed, test coverage, test
> completions, tasks, status etc.
Tons of options and tools. Again, not an "integrated" one I can recommend, as I don't care for integrated.
> * Branching based on metadata - not on actual directory copying and separate repositories/directories
> on the server (goes to performance).
Hmmm. Sounds like a hack on top of a hack. Git's management of revisions sounds like it would meet your needs, although not the way you're describing the implementation aspect. I'm always wary of cases where someone asks for a tool that accomplishes "this goal", and mandates that "the underlying implementation should do that". It often ignores better implementations.
I liken it to someone who asks how to improve sort performance in C using X method. where you discover later he wants to sort database results that could be selected using order by and bypass the entire problem.
Actually had that one happen. over 14K lines of hand-optimized C++ code, and the programmer who wrote it responded to "why didn't you use an ORDER BY clause in the query" with "what's ORDER BY?"