Home / Managing Delivery Plans with Team Foundation Server


It takes several teams to develop large software projects. Very large projects require multiple autonomous teams that can manage their own backlog and priority while contributing to a unified direction for that project. Regular reviews of the project schedule with these teams help ensure that the teams are working toward common goals. Delivery Plans provide the needed multi-team view of your project schedule.


In order to complete this lab you will need the Visual Studio 2017 virtual machine provided by Microsoft. Click the button below to launch the virtual machine on the Microsoft Hands-on-Labs portal.

Launch the virtual machine

Alternatively, you can download the virtual machine from here

Exercise 1: Managing Delivery Plans with Team Foundation Server 2018

Task 1: Demo setup

  1. Log in as Sachin Raj (VSALM\Sachin). All user passwords are P2ssw0rd.

  2. Launch Internet Explorer from the taskbar.

  3. Click the TFS PU Portal shortcut to navigate to the PartsUnlimited TFS portal.

  4. From the Settings navigation dropdown, select Work.

  5. The project has been configured to have an extremely long Iteration 2 for the purposes of many of the labs. However, this lab requires the iterations to be configured relative to the current date, so a few tweaks will be required. Select Edit from the Iteration 2 dropdown.

  6. Change the Start date to today’s date. For the purposes of this lab, we’ll assume that we are at the very beginning of iteration 2. Set the End date to the second Friday from now (less than two weeks). Click Save and close.

  7. Edit Iteration 3 in the same manner, but set its start date to the Monday after Iteration 2’s End Date. Iteration 3 should end on the Friday eleven days later.

Task 2: Installing the Delivery Plans extension

  1. Delivery Plans is provided as an optional extension to TFS. From the Marketplace navigation dropdown, select Manage extensions.

  2. Click Browse local extensions.

  3. Select the Delivery Plans extension.

  4. Click Install.

  5. Select the PartsUnlimitedCollection and click Continue.

  6. Click Confirm to confirm the installation.

  7. Close the browser tab.

Task 3: Creating a delivery plan

  1. Click the TFS PU Portal shortcut to navigate to the project’s landing page.

  2. From the Work dropdown, select Plans.

  3. Click New plan.

  4. Since you may want to have multiple delivery plans for different aspects of your project, provide the specific name “Web delivery”. It should default to the only team in the project at this time (PartsUnlimited Team), so select Stories and click Create. Note that you could also organize your deliveries by Features if you used that model instead. There is also the option to add additional teams and criteria to filter stories/features by, but we’ll revisit those later.

  5. Due to the iteration reconfiguration performed earlier, the “Today” marker is right at the beginning of Iteration 2. We have a number of stories listed for delivery in this iteration, and we can also see an empty Iteration 3. Note that one of the stories shown is “Closed”. Although it’s useful to see the progress of work, we’ll use that as an example by which to filter items out in a moment.

  6. Click the Configure plan settings button.

  7. Select the Field criteria tab and click Add criteria.

  8. Set the new criteria to filter down to items where State does not equal (<>) Closed.

  9. We can also add a custom marker to keep track of significant dates. Select the Markers tab and click Add marker.

  10. Select the third Friday from today (it will be the Friday in the middle of Iteration 3) and set the Label to “Team offsite”. Select magenta as the Color and click Save.

  11. The first thing to notice is that the “Closed” story is no longer visible on the delivery plan due to the criteria set in the configuration. In addition, there is now a magenta marker in the middle of Iteration 3 that says “Team offsite” when clicked.

  12. Another neat feature of the delivery plan extension is the ability to easily scale the calendar. Drag the Scale slider all the way to the left to view multiple months at once.

  13. Slide it all the way to the right to zoom in to a much more precise view.

Task 4: Adding a second team to the project

  1. Our delivery plan has been pretty simple so far because we only have the one team. However, the real power of delivery planning comes into play when orchestrating multiple autonomous teams across their efforts. From the Settings navigation dropdown, select Overview.

  2. Click New team.

  3. This new team will be responsible for the efforts that involve integrating with external services, such as 3rd party services for things like weather forecasts and payment processing. Set the Team name to “External integration team” and click Create team.

  4. Select the Work tab.

  5. Note the dates of Iteration 2 and Iteration 3. We’re going to add two new iterations for the external services team that do not align exactly with the main team’s schedule.

  6. With the root PartsUnlimited node select, click New child.

  7. Set the Iteration name to “Sprint 50”. Use today as the Start date and set the End date to three Fridays from today. This will also happen to be the day of the team offsite. Click Save and close.

  8. Use the same process to add a Sprint 51 that starts the Monday after Sprint 50 ends and has an end date three Fridays later.

  9. The last thing we need to do to configure the new team is to specify that it uses those new project sprints as its iterations. Select the Overviewtab and click External integration team.

  10. Select the Work tab and then the Iterations child tab.

  11. Click Select iterations and use the + Iteration button to select Sprint 50 and Sprint 51. Click Save and close.

Task 5: Making delivery decisions

  1. From the Work dropdown, select Plans.

  2. Click the Web delivery plan created earlier.

  3. Click the Configure plan settings button.

  4. Select the Teams tab and click Add team.

  5. Select the External integration team and Stories. Click Save.

  6. Use the Scale slider to fit the width of Sprint 50 and Sprint 51.

  7. The new team doesn’t have any stories added yet. Fortunately, you can add them directly to their team and iteration using the inline functionality. Select the Sprint 50 iteration. Click the New item button that appears.

  8. Enter “Integrate with weather service” and press Enter. That item is now in the backlog with its area and iteration configured.

  9. Follow the same process to add an item for integrating with a credit card service to Sprint 51.

  10. Now we can step back to see how these two teams are working toward our common goals. Upon closer examination, it appears that the main team is planning to expose some credit card functionality during the current iteration that will not be available until well after it’s over. It’s a good thing we have this view to catch these sort of potential problems early on.

  11. The first thing we should do is to move the credit card integration work to an earlier iteration. Drag and drop the credit card story onto Sprint 50. In order to free up the bandwidth, drag the weather service story onto Sprint 51.

  12. Next, drag the end user credit card story from Iteration 2 to Iteration 3 so that there’s a chance the dependencies will be available in time for this team to be unblocked.

  13. Now we can review the delivery plan again. It should be more feasible now.

  14. There are a lot of ways to quickly customize the view of the delivery plan. For example, pressing the ‘t’ key will toggle between showing all configured fields and showing just the title. Try that now.

  15. You can also collapse all teams (or specific teams) using the toggle buttons next to their names.