TFS 2010 has two “container” levels to separate instances of source control, work items and build: Project Collections and Team Projects.
I think “Project Collection” and “Team Project” are both quite confusing terms, bordering on misleading. If you jump right into TFS without spending time on the books, blogs and ALM Rangers material you would naturally set up one Team Project for each of your, well, projects, and maybe use Project Collections to group together handfuls of related projects. My advice: that’s the last thing you should do.
Instead of taking the names at face value, look at them like this:
Project Collection = Organisation
Project Collections cannot see each other at all. They are a way of having complete separation without needing multiple installations of TFS (as you did prior to the 2010 version). Each Project Collection has its own SQL Server database and there are very few reasons to have more than one, namely:
- Portability: You can quite easily detach a Project Collection and move it to a different TFS instance
- Performance: If SQL Server starts creaking you can split Project Collections for performance reasons (but explore all other performance improvements first)
- Law: If there is some regulatory reason why your data must be kept completely separate, multiple Project Collections will do that for you.
If in doubt, remember: you can split a Project Collection with no loss of data but you can’t join them together again. (OK, you can use the TFS Integration Platform to migrate them together but you use fidelity, as it “replays” the source and work item history into the new database, and there are elements that can’t be migrated at all).
Summary: Unless you have a very good reason not to, have one Project Collection per organisation.
Team Project = Team
Team Projects live together in a Project Collection, and can see each other transparently. However, each Team Project has entirely its own configuration in security, source control and work items. If you have a team that works on different projects, with team members moving regularly between projects or even working concurrently on multiple projects, the administrative burden of having a separate Team Project for every real project is likely to make your head spin.
Team Projects are good for separating teams or processes, which are hopefully the same thing – you don’t want one team following more than one process, do you? Sure, if you have a large project with a distinct team and it’s own way of working then a new Team Project is what you need – everything can be configured and customised just how that project needs. Otherwise, go with the “Project of Projects” approach outlined expertly by Martin Hinshelwood.
Summary: Have one Team Project per team, not per project.
