Friday, June 25, 2010

Team Foundation Server vs. Subversion – An Objective Comparison

I was asked by my client to write up a comparison of Microsoft Team Foundation Server (TFS) and one other SCM (Software Configuration Management) system, so they could evaluate whether TFS was a goof solution or not. I picked Subversion as the other one to compare to, because it is one of the most popular systems out there. I tried to stay away from most of the “religious wars” about TFS vs. Subversion and tried to look at it objectively in several key areas.

Ease of Use and Learning Curve

TFS: For developers with a background in using Visual SourceSafe and Microsoft development tools, TFS is much more familiar.

Subversion: This requires more of a learning curve for developers familiar with Microsoft environments. Instead of the more familiar check-in/check-out paradigm, Subversion uses the edit/merge/commit concept.

IDE Integration

TFS: By far the best integration into the Visual Studio IDE, and the best choice for programming in .NET languages. Not the best choice if you’re not developing in Visual Studio.



Subversion: Fairly good integration into Visual Studio, especially with additional third-party tools and plug-ins, but not as good as TFS. This is probably the better choice if you’re not programming in a .NET language, though, especially if you’re not using Visual Studio.



Scope and Productivity

TFS: In addition to source control, TFS also has features that help with project management, especially Agile development, test driven development (TDD), managing test scripts, and defect tracking. TFS is not marketed as a pure source control product, it is an application lifecycle management product.

Subversion: Subversion is only a source control tool, and doesn’t include any project management, testing, or defect tracking functionality.



Management

TFS: TFS is integrated with Active Directory, and users are Active Directory users. Has a nice GUI interface for management. TFS also has better support for implementing overall corporate or project check-in policies, and better support for measuring metrics.

Subversion: Subversion can be made to work with Active Directory, but it can be tricky to set up.



Features Unique to Each System:

TFS (not available on Subversion):
  • Shelving – Shelving is a way of saving all of the changes from your local development workstation to the TFS server without actually checking in. At a later time you, or anyone else, can “un-shelve” them to a workstation. This can be useful in a variety of situations:
    • Allowing others to review your code on their own machine
    • Switching tasks, for example to fix a defect, before you’re done with the code you have checked out.
    • Saving your progress onto a server, which is backed up.

  • Work Item Integration – associating a check-in to a work item, such as a defect or task. That code can then be tracked along with that work item.
  • Merge History Tracking – stores history of all merges and allows you to query it. This is great for collaborative team environments.

Subversion (not available on TFS):
  • Anonymous Access – Anyone can grab a read-only copy of the code to look at it. This is a bigger advantage for open source development environments than it is for the typical corporate IT environment.
  • Patch Submission – Subversion can compare two completely different builds of the code and generate a patch to update one version to the other. While TFS can do something like this, it is much easier to do in Subversion.
  • Offline Support – Subversion allows for offline work, when the user is not connected to the network or is not on-site. Again, this isn’t a big deal for most corporate IT environments but can be important for open source development.



Web Server

TFS: TFS requires IIS as a web server.

Subversion: Subversion is designed to work with Apache, not IIS. It can be made to work with IIS, but most of those solutions still require Apache to be installed and proxies to be created between the two.



Software Requirements

TFS: Windows Server 2003 or 2008, IIS, Active Directory, SQL Server.

Subversion: Apache, MySQL

Cost

TFS:
  • Visual Studio 2010 Ultimate (7 licenses) – retail is $6900/license, but the price varies greatly on volume of licenses and contracts or agreements previously existing with Microsoft. It also depends if you have an MSDN Subscription or not (or if you buy one along with Visual Studio). Other editions of Visual Studio 2010 will have more limited functionality with TFS, but will also cost less.

  • Team Foundation Server 2010 - $500

  • TFS Client Access License - $500 for first 5 developers, plus $500/developer after that.

Subversion: Free (open source)

All in all, I think both systems are quite capable. Currently we use Visual SourceSafe 2005, so pretty much anything would be an improvement. However, TFS is a better choice for us overall because:
  1. We’re exclusively in a .NET development environment.
  2. We’re working at a large government agency, so the cost isn’t a huge obstacle.
  3. The client likes the support that comes with TFS.
  4. The client already has contracts in place with Microsoft, thus lowering their initial cost of adoption for TFS.

For open source projects, or small projects either at home or at start-ups, I think Subversion would be an excellent alternative.

23 comments:

  1. this is absolutely rubbish! git is the best! also you forgot to mention how many days took you to get the stupid TFS installed/configured properly... ha...

    ReplyDelete
  2. I've never used Git, but for those that are interested you can read about it at http://en.wikipedia.org/wiki/Git_(software). This post was just meant as a comparison between TFS and Subversion, not a comparison of all version control systems.

    You do have a good point about installation time. TFS does take significantly more time to install. But it could be considered "simpler" (in a very loose sense) if the IT department you're working with is very familiar with Microsoft technologies and not so much with open-source technologies like Apache or MySQL. Plus in my specific case, I'd pretty much never be able to convince a government agency to change their IT policies away from Microsoft.

    ReplyDelete
  3. This is a very one sided comparison if you ask me. I have used both, and our team abandoned TFS for the complexity it introduced in what should be a simple tool. It looks good on paper though.

    Get Redmine, SVN (or GIT), and TortoiseSVN (or TortoiseGit) - all free - and you can replicate the good parts of TFS with no cost and less complexity. Plus, you can use it for none Microsoft work that doesn't require Visual Studio in the middle of things.

    ReplyDelete
  4. Or what about http://unfuddle.com/

    ReplyDelete
  5. Not familiar with that one, but I'll check it out.

    ReplyDelete
  6. Not sure how it's one sided, I said both were good for their respective purposes. They don't provide the same functionality, so it depends what you need.

    ReplyDelete
  7. After working 3 years with tfs about 70% of the time and 30% with git and git-svn I wouldn't recommend tfs at all. but our customer (also a large government agency) spent a ton of money on the tfs system, so we have to use it.

    Martin Fowler sums it up: http://martinfowler.com/bliki/VersionControlTools.html
    Linus Torvalds about git: http://www.youtube.com/watch?v=4XpnKHJAok8

    ReplyDelete
  8. That's an interesting comparison. One thing people seem to forget is TFS's other features, like project management (especially for Agile projects), defect tracking, work item integration, and unit tests. If you actually need those features, most of the other tools won't qualify at all. However, if all you need is source control and nothing else, then I would absolutely recommend something else over TFS. TFS would be overkill for someone that purely needs source control.

    ReplyDelete
  9. "For developers with a background in using Visual SourceSafe and Microsoft development tools, TFS is much more familiar."

    probably so as vss would have to be up there for candidate as worst sc ever.

    for people used to cvs, pvcs or svn then probably like me you find the time stamp file organising just pure rubbish.

    what i love - integated tickets / tracking without a program integration (svn -> bugz or such).

    what i hate - its source control. I cant seem to just be able to easily work with it, have multiple copies of things checked out, like all MS products it likes to do strange and magical things in the background without telling you.

    Was trying to fix someone's bindings yesterday, gave up after 20 minutes with a shrug, as soon as you reboot their machine their entire solution goes offline and seemingly cant be fixed without rebinding each time.

    Lost 2 days of work the other day when i tried to change my bindings to a new directory and check out the solution. Somehow it remembered the old directory and nicely "undid" my changes.

    (not really blaming tfs entirely for this, it has been setup by someone else and i am still on a learning curve.)

    I've been using cvs (1995-1998), pvcs (setup for whole business 1998-2001) and svn since then, installing setting up repos and training other devs for years, tfs is just too rigid compared to what i'm used to.

    ReplyDelete
  10. Nice comparison.
    Thank you :)

    ReplyDelete
  11. A correction: Subversion requires neither Apache nor MySQL, if you run it with the svnserve protocol (included) and the FSFS repository method (the default and preferred type).

    For the sake of balance it might also be worth mentioning that branching in Subversion can emulate shelving in most respects, although it isn't as simple. (Similar to how the article describes TFS in the Patch Submission section.)

    ReplyDelete
  12. Hello all

    IMHO TFS has the same issues that make VS useless.

    1) You can not depend on only working while connected to the network. Any team requires work at home or whatever. One letter typed at home breaks the locking strategy, which is the main problem and you can loose code.

    2) CVS has demostrated after more than 30 years that locking unlocking is unproductive. A well managed and designed system, even big, rarely has developers writting to the same file, and in many cases its unavoidable needing to merge. Again, loosing code in cases like that. So...

    A versioning system based on locking / unlocking is, in most cases, not usable. ... except for real small teams in closed conditions. Which are not real in practice.

    ReplyDelete
  13. Hey,
    Source code control on TFS has nothing to do with VSS at all.
    - TFS supports both modes: checkout-lock/checkin-unlock and edit/merge and the second works like a charm.
    - For corporate networks, it works (getting versions, branching, merging) very fast and reliable.
    - The administration is very intuitive and Active Directory integrated.
    - etc...
    So, your comparation with VSS is what is completely baseless.
    I worked with VSS 2005 and now I work with both Subversion and TFS 2010
    Subversionn works fine but I can assure you TFS on .NET projects works wonders

    ReplyDelete
  14. You don't need Visual Studio on the middle. You can use the lower level Team Foundation Explorer.

    ReplyDelete
  15. Great comparison, thanks a lot ! It saved me some time.

    ReplyDelete
  16. Thanks for the comparison, but curious on the pricing. Retail for Visual Studio Ultimate is $11,899 retail, but with volume licensing a three year price (which you divide into three payments) is $16,250. As you point out, discounts quickly reduce this substantially.

    On the Team Foundation Server side, however, the cost of the server if you have Visual Studio + MSDN (any flavor--Ultimate is the most expensive but isn't required as this will even work with Visual Studio Professional + MSDN) is free. You get a license included with the Visual Studio + MSDN subscription, as well as the client access license necessary to hook yourself to a TFS instance provided by another user.

    Other than the pricing, which seems a bit off for this sort of comparison, I like how you broke things down.

    ReplyDelete
  17. I agree mostly with your comparison>.i would say though that the cost for subversion is in most cases not free. Its not expensive but its not free. Most companies are not going to trust their entire source library without support. That being said VisualSVN is anywhere from $950 per server so its definitely a very reasonable cost and you don't need a license for windows if you don't want. Runs perfectly fine on linux (again if you don't mind giving up support).

    Also TFS is kind of a pain in the butt to backup/restore in dealing with table-marking/Marked Transactions. If you go with TFS make sure you at least have somewhat of a descent DBA or they will screw it up and when something happens good luck. There might be other parts of TFS that are the same that i haven't got into. Administration of Subversion is a piece of cake especially if you have any command line experience.

    If you want continuous integration/work item tracking/reporting/ect.... go with TFS. If you just want a solid SCM i'd opt for subversion.

    ReplyDelete
  18. It seems that the author never used SVN at all. Otherwise he would never said that "SVN requires Apache or mySQL". It can be integrated with Apache, but this is it.

    The author never mentioned "commit" hooks which are essential parts of SVN. So, the only real reason to choose TFS over SVN was that "the client like the support provided by TFS". Mate, you'd better start and finish with it.

    ReplyDelete
  19. You can also use Team Explorer Everywhere to integrate with Eclipse and there are command line only tools. TFS is completely cross platform. :)

    ReplyDelete
  20. I guess you may be doing something wrong them... Took me 3 minutes to install TFS and around 12 minutes to configure it...

    - http://blog.hinshelwood.com/installing-visual-studio-2010-team-foundation-server-on-windows-vista-in-3-minutes/
    - http://blog.hinshelwood.com/configuring-visual-studio-2010-team-foundation-server-on-vista-in-12-minutes/

    Try installing SVN in that time :)

    ReplyDelete
  21. Correct, he did not ever use Subversion. We are a Microsoft house and started using TFS after upgrading from SourceSafe. However we are considering moving over to Subversion, because managing TFS is a little bit too much for us. Plus, one more thing to mention is that TFS is a lot slower on checkouts than SVN.
    If we needed the Build manager, we would probably stay with TFS... However we don't.

    ReplyDelete
  22. No peoples mention TFS Express and Team foundation service is free?

    ReplyDelete