Believe it or not, there is a difference between extensibility and customization.
Customization involves modifying your environment, such as Visual Studio 2005 or Team Foundation Server, using the tools that are provided by that environment. There is no coding involved. Rather, by utilizing different user interfaces, you are able to adjust the environment to your needs. Customization can be performed by almost anyone, from end users to developers to project managers.
Extensibility, on the other hand, is concerned with adding new functionality to your environment. Coding is most definitely involved in this. By extending the platform, you are able to create new tools that meet your needs and use built-in aspects of the platform in new and different ways. Such extensions are usually created by internal IT departments or third-party independent software vendors.
Here are some examples of how you can customize Team Foundation Server:
Modifying a process template
Creating a new work item type
Turning check-in policies on/off
Modifying the project portal template
These are just a few of the ways you could customize Team Foundation Server. By using provided tools and modifying a few XML files, you can quickly and easily customize the server to work in the manner in which you want.
Some examples of how you can extend Team Foundation Server include the following:
Raise and subscribe to events
Add pages to the project creation wizard
Utilize the object model to create applications that access Team Foundation Server functionality
Create new check-in policies
Create new Team Foundation Build tasks
By using the Team Foundation Server Object Model and the Team Foundation Core Services, you can easily extend Team Foundation Server in a variety of ways.