I recently answered a post in the MSDN Forums asking about best practices for organizing team projects (Organization of Team Projects). For my own benefit, I’m going to post it (and update it) here so I can find it more easily.
We've asked our patterns & practices team to develop content that addresses Team System best practices, but that will take some time to create as they need to evaluate many practices before they can promote one or more as best practices. In the interim, here are some things to consider, which shouldn't be misconstrued as representing official guidance.
Of course, you can only consider something to be a best practice within a given context. Below are some context variables that could sway a decision one way, or another.
- Security - If you need to restrict access to the sub-projects within the overall development team, you may want to consider using separate team projects with one umbrella team project; however, the hierarchy is artificial since team projects exist as peers on the server.
- Reuse - If a sub-project represents some piece of functionality you may use across multiple projects (a library, such as the enterprise library patterns & practices built), you may want to consider using separate team projects and use binary reuse of that common functionality across multiple projects.
- Geography - If the independent development teams are working on sub-projects in relative autonomy, and they are geographically separated, you may want to consider separate Team Foundation Servers (despite the Team Foundation Server Proxy) to simplify the required infrastructure.
- Process - If each sub-project is using a different process methodology, you may want to consider using separate team projects to allow each team to use a team project created from their chosen process template.
- Size & Complexity - If your team is not comfortable working in the same team project due to the combined size or complexity of the various sub-projects, you may want to consider separate team projects.
That said, we built Team System using a single team project with a large development team dispersed around the world. Was that the best choice? Maybe, maybe not.