Some processes are extremely elaborate - you could write an entire book on how to customize a single process. The goal here is to get a big picture view of a process and look at how you can roll out the process into Team System.
Scrum is an Agile process; developed by Ken Schwaber and Jeff Sutherland, it is focused on project management. It is a systematic approach to built-in predictability in your development process. If you want to learn the intricacies of Scrum, the best site to visit is www.controlchaos.com.
Conchango (conchango.com) has developed a Team System process template that allows any organization to implement Scrum on the Team System platform. In this section, we look at the different parts of the process template and explain the customizations that have been made to incorporate Scrum functionality and principles into Team System. You can download the template in question at the following link: scrumforteamsystem.com.
Important | The easiest way to now modify a process template is the Process Template Editor. It was used to create portions of the Scrum process template. How do we know this? The work item definition for the Sprint work item contains the following line of code: <WITD application=" Work item type editor" version="1.0">. |
The Scrum programming process uses typical one-month iteration cycles called Sprints. Here is the structure of the Classification.xml file. The ProjectLifecycle structure type specifically defines iterations. (For example, you could easily change Iteration 0 to Sprint 0.)
<?xml version="1.0" encoding=" utf-8" ?> <tasks> <task name=" Creating project structure" plugin=" Microsoft.ProjectCreationWizard.Classification" completionMessage=" Portfolio project structure created."> <taskXml> <Nodes> <Node StructureType=" ProjectLifecycle" Name=" Iteration" xmlns=""> <Children> <Node StructureType=" ProjectLifecycle" Name=" Iteration 0"></Node> <Node StructureType=" ProjectLifecycle" Name=" Iteration 1"></Node> <Node StructureType=" ProjectLifecycle" Name=" Iteration 2"></Node> </Children> </Node>
The Scrum template does not define any areas; however, you can define a list of predefined subcategories within each iteration. The ProjectModelHierarchy structure type applies to areas. The MSPROJ property points to a file called FileMapping.xml, which maps the fields from Microsoft Project and Team Foundation Server work items.
<Node StructureType=" ProjectModelHierarchy" Name=" Area" xmlns=""></Node> </Nodes> <properties> <property name="MSPROJ" value="Classification\FileMapping.xml" isFile="true" /> </properties> </taskXml> </task> </tasks>
MSF for Agile Software Development includes three predefined security roles within the template. One of the modifications you can do to align it with Scrum is add additional roles. Scrum defines three primary roles: The Product Owner (such as a project manager or business analyst), the Team, and the Scrum Master. Here is the standard predefinition of the Reader, Contributor, and Build Services.
<?xml version="1.0" encoding=" utf-8" ?> <tasks> <task name="Create Groups and Permissions" plugin="Microsoft.ProjectCreationWizard.Groups" completionMessage="Groups and Permissions created."> <taskXml> <groups> <group name="Readers" description="A group for those with read access across the project"> <permissions> <permission name="GENERIC_READ" allow="true" /> <permission name="SUBSCRIBE_BUILD" allow="true" /> <permission name="GENERIC_READ" allow="true" /> <permission name="WORK_ITEM_READ" allow="true" /> </permissions> </group> <group name="Contributors" description="A group for those with general read/write permissions across the project"> <permissions> <permission name="GENERIC_READ" allow="true" /> <permission name="PUBLISH_TEST_RESULTS" allow="true" /> <permission name="SUBSCRIBE_BUILD" allow="true" /> <permission name="GENERIC_READ" allow="true" /> <permission name="WORK_ITEM_READ" allow="true" /> <permission name="WORK_ITEM_WRITE" allow="true" /> <permission name="START_BUILD" allow="true" /> </permissions> </group> <group name="Build Services" description="Users in this group get permissions to run MSBuild for the sources in the Team project"> <permissions> <permission name="GENERIC_READ" allow="true" /> <permission name="PUBLISH_TEST_RESULTS" allow="true" /> <permission name="GENERIC_READ" allow="true" /> <permission name="WORK_ITEM_READ" allow="true" /> <permission name="WORK_ITEM_WRITE" allow="true" /> <permission name="START_BUILD" allow="true" /> <permission name="UPDATE_BUILD" allow="true" /> <permission name="EDIT_BUILD_STATUS" allow="true" /> </permissions> </group>
You can then add one of the Scrum roles, such as the Product Owner, within the template. Note that this role is not included in the Conchango template. We include it here for illustration:
<group name="Product Owner" description="The Product Owner role within the Scrum methodology."> <permissions> <permission name="GENERIC_READ" allow="true" /> <permission name="PUBLISH_TEST_RESULTS" allow="true" /> <permission name="SUBSCRIBE_BUILD" allow="true" /> <permission name="GENERIC_READ" allow="true" /> <permission name="WORK_ITEM_READ" allow="true" /> <permission name="WORK_ITEM_WRITE" allow="true" /> <permission name="START_BUILD" allow="true" /> </permissions> </group> </groups> </taskXml> </task> </tasks>
The Scrum process has unique metrics to track. These include the Product Backlog, Sprint Backlog, Bug Count, Bug History, Priority, Delta Report, Retrospective Report, and the Sprint Burndown Chart (among others). Adding the Scrum report (and other reports) into the template requires that you created a custom .rdl file that has been designed using the Report Designer, Report Builder, and the Business Intelligence Development Studio (BIDS). The following highlighted code shows how to add a Scrum report into the process template.
<?xml version="1.0" encoding="utf-8" ?> <tasks> <task plugin="Microsoft.ProjectCreationWizard.Reporting" completionMessage="Project Reporting site created."> <dependencies/> <taskXml> <ReportingServices> <site /> </ReportingServices> </taskXml> </task> <task plugin="Microsoft.ProjectCreationWizard.Reporting" completionMessage="Project site created."> <dependencies> <dependency task/> </dependencies> <taskXml> <ReportingServices> <reports> <report name="Product Burndown Chart" filename="Reports\Product Burndown Chart.rd1" folder="" cacheExpiration="30"> <datasources> <reference name="/TfsReportDS" dsname="TfsReportDS"/> </datasources> </report> </ReportingServices> </taskXml> </task> </tasks>
Many elements of functionality can be controlled in VersionControl.xml, including security permissions with regards to access to the version control system. In Scrum, all members of the team are regarded as equals and there is inherent trust and transparency in the process. Here is an example of the Product Owner role added to Team Foundation Version Control (again, not included by default in the Conchango process template but shown here for illustration).
<?xml version="1.0" encoding="utf-8" ?> <tasks> <task name="Create Version Control area" plugin="Microsoft.ProjectCreationWizard.VersionControl" completionMessage="Version control Task completed."> <dependencies/> <taskXml> <permission allow="Read, PendChange, Checkin, Label, Lock, ReviseOther, UnlockOther, UndoOther, LabelOther, AdminProjectRights, CheckinOther" identity="[$$PROJECTNAME$$]\Project Administrators"/> <permission allow="Read, PendChange, Checkin, Label, Lock" identity="[$$PROJECTNAME$$]\Contributors"/> <permission allow="Read" identity="[$$PROJECTNAME$$]\Readers"/> <permission allow="Read, PendChange, Checkin, Label, Lock" identity="[$$PROJECTNAME$$]\Build Services"/> <permission allow="Read, PendChange, Checkin, Label, Lock, ReviseOther, UnlockOther, UndoOther, LabelOther, AdminProjectRights, CheckinOther" identity="[$$PROJECTNAME$$]\Product Owner"/>
Here are the steps to modify our team portal. The first thing we can do is add a custom SharePoint template to change the look and feel and add the Scrum logo to the site.
<tasks> <task name="Create Sharepoint Portal" plugin="Microsoft.ProjectCreationWizard.Portal" completionMessage="Project site created."> <dependencies /> <taskXml> <Portal> <site template="Agile Software Development with Scrum" language="1033" />
You can then add libraries that incorporate documents that support the Scrum process. Instead of adding documentation to the team portal, Conchango opted to add two files (ProcessGuidance.html and AboutWorkItems.htm) that serve as redirectors to the VSTSforTeamSystem.com Web site.
<documentLibraries> <documentLibrary name="Process Guidance" description="Process Guidance for the team documents" /> </documentLibraries> <folders> <folder documentLibrary="Process Guidance" name="Supporting Files" /> </folders> <files> <file source="Wss\Process Guidance\ProcessGuidance.html" documentLibrary="Process Guidance" target="ProcessGuidance.html" /> <file source="Wss\Process Guidance\Supporting Files\AboutWorkItems.htm" documentLibrary="Process Guidance" target="Supporting Files/AboutWorkItems.htm" /> </files> </Portal> </taskXml> </task> </tasks>
Here is the structure of workitems.xml. You'll find in this example a listing of the code defining the Sprint work item (Sprint.xml). You can find all the work items within your template in the folder called WorkItemTracking/TypeDefinitions. First, we need to give the work item a name and description:
<?xml version="1.0" encoding="utf-8" ?> <WITD application="Work item type editor" version="1.0"> <WORKITEMTYPE name="Sprint"> <DESCRIPTION>Includes information about a particular Sprint</DESCRIPTION>
Next, we have to define a series of fields. Conchango has added customized fields such as Sprint Number to help track sprints. Notice that the field has been marked as reportable.
<FIELD name="Sprint Number" refname="Conchango.VSTS.Scrum.SprintNumber" type="Integer" reportable="detail"> <HELPTEXT>The Sprint (iteration) number</HELPTEXT> <REQUIRED/> <CANNOTLOSEVALUE/> </FIELD>
Conchango has also defined custom transitions for their work items. In the following example, they have defined a transition from "In Progress" to "Deleted." (The Deleted state is one of the ways you can eliminate work items without physically deleting them; see Chapter 17 for more details.) Conchango.VSTS.Scrum.Audit is a custom field that helps you track all changes happening to the work item.
<TRANSITION from="In Progress" to="Deleted"> <REASONS> <DEFAULTREASON value="Item has been marked for deletion"/> </REASONS> <FIELDS> <FIELD refname="Conchango.VSTS.Scrum.Audit"> <DEFAULT from="value" value="0" /> </FIELD> </FIELDS> </TRANSITION>
Once the fields and state transitions have been defined, you have to lay out the fields within a work item form. In the example below, the Sprint Number, Capacity, and Is Release Sprint are positioned under the title. Figure 16-13 shows the completed work item based on this code.
<FORM> <Layout> <Group> <Column PercentWidth="100"> <Control Type="FieldControl" FieldName="System.Title" Label="Title" LabelPosition="Left"/> </Column> </Group> <Group> <Column PercentWidth="50"> <Group Label="Planning"> <Column PercentWidth="100"> <Control Type="FieldControl" FieldName="Conchango.VSTS.Scrum.SprintNumber" Label="Sprint Number" LabelPosition="Left"/> <Control Type="FieldControl" FieldName="Conchango.VSTS.Scrum.Capacity" Label="Capacity" LabelPosition="Left"/> <Control Type="FieldControl" FieldName="Conchango.VSTS.Scrum.IsReleaseSprint" Label="Is Release Sprint?" LabelPosition="Left"/> </Column> </Group>
Figure 6-13
Once you have created your new type to represent a Sprint, you will need a new query to be able to retrieve them all from the work item database. Here is the structure of the AllSprints.wiq query; notice the inclusion of the Conchango custom fields (Conchango.VSTS.Scrum.SprintNumber, for example).
<?xml version="1.0" encoding="utf-8"?> <WorkItemQuery Version="1"> <Wiql> SELECT [Conchango.VSTS.Scrum.SprintNumber], [System.Title], [Conchango.VSTS.Scrum.Capacity], [System.State], [Conchango.VSTS.Scrum.SprintStart], [Conchango.VSTS.Scrum.SprintEnd] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Sprint' AND [System.State] <> 'Deleted' ORDER BY [Conchango.VSTS.Scrum.SprintNumber], [Conchango.VSTS.Scrum.SprintStart] </Wiql> </WorkItemQuery>