This blog has been moved to

Saturday, May 12, 2007

Team Foundation Server is Cool, but a Bit Underwhelming

I had the opportunity to evaluate Microsoft Team Foundation Server (TFS from here on) over the last week and I have to say, I'm not as excited about it as I was before. Don't get me wrong, I think TFS is compelling, it's got a lot of great features and they seem to be very well integrated with one another and with Visual Studio. However, it seems to be suffering from an acute case of versiononeitus (though I don't think it's terminal).

My main object was to evaluate the Team Foundation Build (TB from here on) for our product. TB is based on MSBuild. Anything you can do in MSBuild you can do in TB. As far as I can tell, TB is just a way to start a remote MSBuild process and report the results. It is well integrated into the IDE which makes it easy to know the status of the build at any given time.

Unfortunately, because it is based on MSBuild, it is very difficult to configure. MSBuild is a very powerful build system, however, it is not exactly simple to understand. For companies that have a full time, dedicated build engineer, MSBuild is probably great, otherwise, it is difficult to learn and it's easy to forget if you don't use it often (we tend to update the build process about once a year or so). I was not able to find a tool that would allow me to configure an MSBuild project, hopefully somebody is building one.

I have a love/hate relationship with the version control (VC from here on) in TFS as well. It has some very nice, advanced features that are missing from VSS. One of my favorites are shelves. A shelf is a place to put code before it is actually checked in. Other developers can access the shelf if they want (which is great for buddy testing).

Unfortunately, it is lacking in some basic usability features. For instance, depending on context, there are many different menu options that can be disabled and it's not always obvious why they are disabled. If you are used to VSS, trying to figure out how to create a directory in source control can be very frustrating. I think you have to map a workspace (which is similar to working directories in VSS, but slightly different), but it took me a few days to figure that out (and I'm still not sure if that's it or not). If this is the case, why do they have the menu option disabled? Why can't I just map a workspace when I'm creating the directory?

One of the nice things about VSS is that the directory structure in VSS does not have to match your directory structure on your local machine. Our VSS structure at work tends to be a bit deep for the local machine, so we map a couple of different VSS directories to the same directory on the local machine. When I tried to do that with VC, it refused to allow me to do that.

I did not evaluate the issue tracking, but I did glance at it. It certainly seems to be a much better issue tracking system then the one we're using at work now (it's a home-grown system).

If my company was more willing to spend a lot more time and money on TFS, I'm sure I would be able to get it working to suit our needs very well, however, they're not. I had about a week to evaluate it and put something together that would be functional.

Overall, I really like TFS. There are many products on the market that do similar things and are well integrated, however, none of them seem to do everything (most of them miss the build aspect). I am really looking forward for version 3 (the magic number in software) of Team Foundation Server.


Anonymous said...

Hi Brian,

Can I suggest you have a look at FinalBuilder. It is much easier to learn as it has a GUI to configure the build process. It also supports hundreds of tools and integrates with Team Foundation.

Anonymous said...

It is a first generation product after all. Some of the collaboration features for a Windows-based shop are still worthy of review, and you can always integrate best-of-breed source control from Accurev or issue tracking from Jira for example, although I think the issue-tracking is manageable.