Creating Custom Process Templates


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.

Conchango Scrum Process Template

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">.

Classification

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> 

Groups and Permissions

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> 

SQL Server Reporting Services

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> 

Team Foundation Version Control

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"/> 

Windows SharePoint Services

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> 

Work Item Tracking

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> 

image from book
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] &lt;&gt; 'Deleted' ORDER BY [Conchango.VSTS.Scrum.SprintNumber], [Conchango.VSTS.Scrum.SprintStart] </Wiql> </WorkItemQuery> 



Professional Team Foundation Server
Professional Team Foundation Server
ISBN: 0471919306
EAN: 2147483647
Year: 2004
Pages: 168

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net