How Areas and Iterations Are Synchronized
TeamPulse does not try to keep the area and iteration trees in both systems completely in sync, but rather the area path and iteration path are synced only in conjunction with an associated work item (story, bug, etc). This may at first seem unusual, but there are a number of reasons for doing this, including:
- It is possible to manage multiple development efforts out of a single TFS Team Project and then sync that TFS Team Project to multiple separate TeamPulse projects (one for each specific development effort). In these scenarios the most common way to segregate the work in each project in TFS is to use areas and/or iterations. If TeamPulse kept the entire tree in sync, then all TeamPulse projects would get all the areas and iterations from the all-encompassing TFS project, despite most of the areas and iterations not being applicable.
- Determining when an area or iteration has been renamed or moved within TFS is not supported within the TFS API's, and would instead require TeamPulse to manage a full snapshot of each tree since the last sync. TeamPulse would then need to attempt to understand which items were moved and which were renamed, a task that is not only resource intensive but also error prone without human intervention.
Our solution to these problems is to keep the area and iteration path syncing very straightforward. What TeamPulse does when syncing these fields is verify that the path exists in the target system before setting a work item’s area or iteration to that path. This is done when syncing area/iteration path changes from TeamPulse to TFS or TFS to TeamPulse.
For example, suppose the area of Story 1 is changed to All\Documentation\Installation. When a sync is initiated, the sync engine will ensure that the area path All\Documentation\Installation exists in the target TFS project before modifying the target work item's area path.
With this in mind, when an area or iteration is renamed or moved within either system, it is important to make the same change manually in the other system.