Share via


Scrum Definition of Done and Visual Studio Team Foundation Server

1. Introduction

The article provides information and instructions to use Scrum Definition of Done artifact with TFS.

1.1 Purpose

Definition of Done is an important artifact of Scrum which improves transparency amongst teams and the quality of product.

TFS out of the box does not have support for Definition of Done at Product/Release/Sprint level however it is flexible and customizable. We can extend the TFS Scrum template, introduce Definition of Done as a new Work Item Type (WIT) and use it as an artifact for Scrum process within TFS.

1.2 References

For details about Definition of Done, please refer to the latest official Scrum Guide:

http://www.scrumguides.org/

1.3 Audience

Can be used by the following:

1)      TFS on-premise users only
2)      Scrum methodology/template users

1.4 Definitions, Acronyms, and Abbreviations

Abbreviation

Description

DoD

Definition of Done

2. Import/Install the Definition of Done (DoD) work item type (WIT)

Create a new xml file as DoD.xml. Copy/replace the entire code below in the file DoD.xml which you created:

<?xml version="1.0" encoding="utf-8"?>
<Witd:WITD application="Work item type editor" version="1.0" xmlns:Witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef">
      <WORKITEMTYPE name="Definition of Done">
            <DESCRIPTION>Definition of Done.</DESCRIPTION>
            <FIELDS>
                  <FIELD name="Area Path" refname="System.AreaPath" type="TreePath" reportable="dimension" />
                  <FIELD name="Iteration Path" refname="System.IterationPath" type="TreePath" reportable="dimension" />
                  <FIELD name="Title" refname="System.Title" type="String" reportable="dimension">
                        <DEFAULT from="value" value="Definition of Done" />
                        <REQUIRED />
                  </FIELD>
                  <FIELD name="State" refname="System.State" type="String" reportable="dimension" />
                  <FIELD name="Acceptance Criteria" refname="Microsoft.VSTS.Common.AcceptanceCriteria" type="HTML" />
                  <FIELD name="Description" refname="System.Description" type="HTML" />
                  <FIELD name="History" refname="System.History" type="History" />
            </FIELDS>
            <WORKFLOW>
                  <STATES>
                        <STATE value="New" />
                        <STATE value="Done" />
                        <STATE value="Removed" />
                  </STATES>
                  <TRANSITIONS>
                        <TRANSITION from="" to="New">
                              <REASONS>
                                    <DEFAULTREASON value="New Definition of Done" />
                   </REASONS>
                        </TRANSITION>
                        <TRANSITION from="New" to="Done">
                             <REASONS>
                                    <DEFAULTREASON value="Definition of Done completed" />
                              </REASONS>
                        </TRANSITION>
                        <TRANSITION from="New" to="Removed">
                              <REASONS>
                                    <DEFAULTREASON value="Removed the Definition of Done" />
                              </REASONS>
                        </TRANSITION>
                        <TRANSITION from="Done" to="New">
                              <REASONS>
                                    <DEFAULTREASON value="Made Definition of Done active" />
                              </REASONS>
                        </TRANSITION>
                        <TRANSITION from="Removed" to="New">
                              <REASONS>
                                    <DEFAULTREASON value="Reconsidering the Definition of Done" />
                              </REASONS>
                        </TRANSITION>
                  </TRANSITIONS>
            </WORKFLOW>
            <FORM>
                  <Layout HideReadOnlyEmptyFields="true" HideControlBorders="true">
                       <Group Margin="(4,0,0,0)">
                              <Column PercentWidth="100">
                                    <Control FieldName="System.Title" Type="FieldControl" ControlFontSize="large" EmptyText="<Enter title here>" LabelPosition="Top" />
                              </Column>
                        </Group>
                        <Group Margin="(10,0,0,0)">
                              <Column PercentWidth="100">
                                    <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Ite&ration" LabelPosition="Left" />                            
</Column>
                        </Group>
                        <Group Margin="(10,0,0,0)">
                              <Column PercentWidth="50">
                                    <Group>
                                          <Column PercentWidth="100">
                                                <Control FieldName="System.State" Type="FieldControl" Label="Stat&e" LabelPosition="Left" />
                                          </Column>
                                    </Group>
                              </Column>
                              <Column PercentWidth="50">
                                    <Group>
                                          <Column PercentWidth="100">
                                                <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="&Area" LabelPosition="Left" />
                                          </Column>
                                    </Group>
                              </Column>
                        </Group>
                        <Group>
                              <Column PercentWidth="50">
                                    <TabGroup>
                                          <Tab Label="Details">
                                                <Control FieldName="Microsoft.VSTS.Common.AcceptanceCriteria" Type="HtmlFieldControl" Label="" LabelPosition="Top" Dock="Fill" />                                          </Tab> 

                                    </TabGroup>
                              </Column>
                              <Column PercentWidth="50">
                                    <TabGroup Margin="(5,0,0,0)">
                                          <Tab Label="Comments">                                                <Control FieldName="System.Description" Type="HtmlFieldControl" Label="" LabelPosition="Top" Dock="Fill" />
                                          </Tab>
                                          <Tab Label="History">                                                <Control FieldName="System.History" Type="WorkItemLogControl" Label="" LabelPosition="Top" Dock="Fill" />
                                          </Tab>
                                          <Tab Label="Links">                                                <Control Type="LinksControl" Name="GeneralLinks" LabelPosition="Top">
                                                      <LinksControlOptions>
                                                            <LinkColumns>
                                                                  <LinkColumn RefName="System.Id" />
                                                                  <LinkColumn RefName="System.WorkItemType" />
                                                                  <LinkColumn RefName="System.Title" />
                                                                  <LinkColumn RefName="System.AssignedTo" />
                                                                  <LinkColumn RefName="System.State" />
                                                                  <LinkColumn LinkAttribute="System.Links.Comment" /> 

                                                            </LinkColumns>
                                                            <WorkItemLinkFilters FilterType="includeAll" />
                                                            <ExternalLinkFilters FilterType="includeAll" />                                                           
<WorkItemTypeFilters FilterType="includeAll" />                                                      </LinksControlOptions>
                                                </Control>
                                          </Tab> 
                                         <Tab Label="Attachments">                                                <Control Type="AttachmentsControl" Label="" LabelPosition="Top" />                                          </Tab>
                              </TabGroup>
                              </Column>
                        </Group>
                  </Layout>
            </FORM>
      </WORKITEMTYPE>
</Witd:WITD>

Run the following command to import DoD.xml in your TFS project:

witadmin importwitd /f:DoD.xml /collection:"http://[Your server]:8080/tfs/DefaultCollection" /p:"[Your project]"

For details on importing custom WIT to project please visit:

http://msdn.microsoft.com/en-us/library/dd312129.aspx

3. Usage

3.1 Create/Modify the DoD during Sprint Planning meeting

For the first time create the DoD and populate the Details/List section as per your company or product’s definition of done. In later Sprint planning meetings you can modify the DoD after review of points from Sprint Retrospective meetings.

3.2 Use DoD during Sprint Review meeting

Open and use DoD while Sprint Review to ensure that all Done are met for the Sprint.

3.3 In Sprint Retrospective meeting

During or after Sprint Retrospective meeting, points can be added in Comments section:

 

It can be later reviewed in next Sprint planning meeting to be a part of DoD Details/List:
 

 
For changes in DoD, History tab can also be used:

4. DoD as ‘Team favorites’ and ‘Pin to homepage’

Create a new query as ‘Definition of Done’ and make it shared, add to team favorites and pin to homepage for increased transparency and quick access:

 

 

5. DoD usage in Scaled Agile Framework (SAFe) for TFS

For detail on SAFe for TFS please visit:

http://msdn.microsoft.com/en-us/library/dn798712.aspx

Use default Acceptance Criteria field for PBI, Feature and Epic: 

 

Separate DoD at Sprint, PI, Release/Product levels can be created using the Iteration field of DoD WIT: 

 

 

  
Different DoD for teams can be created using the Area field of DoD WIT: 

 

6. Use Charts and ‘Pin to homepage’

You can also create charts for DoD and pin to homepage:

 

Feel free to further customize it as per your needs. Please leave a comment for feedback or any questions.

Sumiran