<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Adam Salvo (z) - Technology|WheelJack</title>
    <link>http://blog.salvoz.com/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Adam Salvo</copyright>
    <lastBuildDate>Sun, 07 Jun 2009 07:07:00 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>adam@salvoz.com</managingEditor>
    <webMaster>adam@salvoz.com</webMaster>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=584be101-cc82-4cb6-b79a-382cd616fd89</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=584be101-cc82-4cb6-b79a-382cd616fd89</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve recently decided to wrap up my previous at home project and start a new project
code named WheelJack. I will be posting sometime in the future what WheelJack actually
is, but for now you’ll just have to guess based on what I’m writing about. 
</p>
        <p>
I will be using Team Foundation Server to manage the project, source code, work items,
builds, etc. While we have TFS where I work, we do not utilize all of it’s functionality,
and part of this new project is an attempt to better understand what TFS can bring
to the table. 
</p>
        <p>
I will have to admit that it’s a complete overkill for a single developer scenario,
and I face a very real risk of loosing precious time dealing with TFS, but in the
end I think it’s worth it. If it becomes to much of a burden, I can always switch
over to subversion and re-task the SharePoint site with project management.
</p>
        <p>
Before I sit down and start writing code, I need to setup a new team project, determine
my branching strategy, and get Team Build running for nightly and continuous integration
builds. For this project I will be using the <a href="http://scrumforteamsystem.com/en/default.aspx">Scrum
Template for Team System</a> created by <a href="http://www.conchango.com">Conchango</a>.
</p>
        <p>
Detailed instructions for installing a new template into TFS and creating a new Team
project are outside the scope of this post. Provided that you have full administrative
rights to the TFS box, the MSI installer does all the heavy lifting, and creating
a new project is a 5 step wizard process. 
</p>
        <p>
With my new project created I can begin adding work items to the product backlog,
define sprints, and areas. I’ve also created a Wiki on the project SharePoint site
to various information, including feature description, architecture, design and implementation
details. The wiki is a great tool to use when working on a project because it is so
easy to create content and organize content.
</p>
        <p>
With all of that out of the way for now, I can move onto creating my source tree,
which involves the selection of a branching strategy. The branching strategy used
for WheelJack is the Single Team Branching Strategy as defined in <a href="http://tfsbranchingguideii.codeplex.com/">TFS
Branching Guide version 2.0</a>. 
</p>
        <p>
          <strong>Single Team Branching Strategy</strong>
        </p>
        <p>
The single team branching strategy requires 3 branches, MAIN, DEV and RELEASE, where
DEV and RELEASE are branched from MAIN. While I say 3, there will in fact be more
then 3 actual branches. Whenever a new release is created, it gets it’s own branch.
This strategy also allows for concurrent DEV branches.
</p>
        <p>
          <u>Working in DEV</u>
        </p>
        <p>
After each successful nightly build, code should be merged from MAIN to DEV. In this
project, with only one dev branch, and only one developer, there will usually be nothing
to merge. The following situations are examples of when there will actually be code
in MAIN that needs to be merged to DEV. 
</p>
        <ul>
          <li>
Once we create a release branch, if a show stopping bug is discovered and fixed in
a release  branch, that change is merged to MAIN, and then merged from MAIN to
all dev branches. 
</li>
          <li>
If we have multiple dev branches, changes in one DEV branch could be merged to MAIN,
and then from MAIN to all other dev branches.</li>
        </ul>
        <p>
Key features of working in DEV (taken from TFS Branching Guide) 
</p>
        <ul>
          <li>
Focus on wide, flat branches to enable steady code flow to MAIN and then back to peer
DEV branches 
</li>
          <li>
Work in DEV branches can be segregated by feature, organization, or temporary collaboration. 
</li>
          <li>
Each DEV branch should be a full branch of MAIN. 
</li>
          <li>
DEV branches should build and run Build Verification Tests (BVT’s) the same way as
MAIN. 
</li>
          <li>
Forward Integrate (FI) with each successful build of MAIN 
</li>
          <li>
Reverse Integrate (RI) based on some objective team criteria (e.g. internal quality
gates, end of sprint, etc.). 
</li>
        </ul>
        <p>
          <u>Working in MAIN</u>
        </p>
        <p>
Aside from the initial solution and build creation, no work should be done in Main.
</p>
        <p>
          <u>Working in a Release Branch</u>
        </p>
        <p>
Work in production should be limited to show stopping bugs. Changes should be merged
into Main once completed. The following list was taken from the branching guide. 
</p>
        <p>
  
</p>
        <p>
Key features of working with Release Branches (taken from TFS Branching Guide) 
</p>
        <ul>
          <li>
Each RELEASE is a child branch of MAIN. 
</li>
          <li>
Your major product releases from the RELEASE branch and then RELEASE branch access
permissions are set to read only. 
</li>
          <li>
Changes from the RELEASE branch RI to main.  This merge is one way.  Once
the release branch is created MAIN may be taking changes for next version work not
approved for the release branch  
</li>
          <li>
Duplicate RELEASE branch plan for subsequent major releases. This means there will
be one branch per major release.</li>
        </ul>
        <p>
          <strong>Source Code Repository Directory Structure</strong>
        </p>
        <ul>
          <li>
WheelJack$ 
<ul><li>
DEV 
<ul><li>
1.0 (Version or Feature) 
<ul><li><em>Identical to Main</em></li></ul></li><li>
1.1 (Version or Feature) 
<ul><li>
Identical to Main</li></ul></li></ul></li><li>
MAIN 
<ul><li>
Source 
<ul><li>
Project1 
</li><li>
Project1.Tests 
</li><li>
Project2 
</li><li>
Project2.Tests 
</li><li>
References</li></ul></li><li>
BuildTypes</li></ul></li><li>
Releases 
<ul><li>
Release 1.0 
<ul><li>
Identical to Main</li></ul></li><li>
Release 1.1 
<ul><li>
Identical to Main</li></ul></li><li>
Release 2.0 
<ul><li>
Identical to Main</li></ul></li><li>
Release 2.1 
<ul><li>
Identical to Main</li></ul></li></ul></li></ul></li>
        </ul>
        <p>
  
</p>
        <p>
Every branch from Main contains everything that is in the Main branch, including the
Source and BuildTypes folder (BuildTypes contain the Team Build files that define
a build). 
</p>
        <p>
  
</p>
        <p>
I started out by creating a new folder on my hard drive that corresponds to the root
folder TFS (WheelJack$), and working my way down the hierarchy for Main, creating
Source and BuildTypes folders. My project contains a server piece and a client piece,
so starting with the server side, I created a folder named MessagingServer, and then
created 4 projects under that folder. I also created a _Solutions folder under WheelJack
which is where I store all of my Visual Studio Solution files (*.sln). The solution
files are not checked into source control. 
</p>
        <p>
  
</p>
        <p>
Below you can see what my folder structure looks like in Windows Explorer, and in
Solution Explorer. 
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="800">
          <tbody>
            <tr>
              <td valign="top" width="400">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_6.png">
                  <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_2.png" width="244" height="220" />
                </a>
              </td>
              <td valign="top" width="400">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_4.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_1.png" width="244" height="149" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
After cleaning up the project names, namespaces, and adding the correct project references,
I was able to begin looking at setting up the automated builds. I’ll pick up here
next time.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=584be101-cc82-4cb6-b79a-382cd616fd89" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>WheelJack – New at-home learning project</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</guid>
      <link>http://blog.salvoz.com/2009/06/07/WheelJackNewAthomeLearningProject.aspx</link>
      <pubDate>Sun, 07 Jun 2009 07:07:00 GMT</pubDate>
      <description>&lt;p&gt;
I’ve recently decided to wrap up my previous at home project and start a new project
code named WheelJack. I will be posting sometime in the future what WheelJack actually
is, but for now you’ll just have to guess based on what I’m writing about. 
&lt;/p&gt;
&lt;p&gt;
I will be using Team Foundation Server to manage the project, source code, work items,
builds, etc. While we have TFS where I work, we do not utilize all of it’s functionality,
and part of this new project is an attempt to better understand what TFS can bring
to the table. 
&lt;/p&gt;
&lt;p&gt;
I will have to admit that it’s a complete overkill for a single developer scenario,
and I face a very real risk of loosing precious time dealing with TFS, but in the
end I think it’s worth it. If it becomes to much of a burden, I can always switch
over to subversion and re-task the SharePoint site with project management.
&lt;/p&gt;
&lt;p&gt;
Before I sit down and start writing code, I need to setup a new team project, determine
my branching strategy, and get Team Build running for nightly and continuous integration
builds. For this project I will be using the &lt;a href="http://scrumforteamsystem.com/en/default.aspx"&gt;Scrum
Template for Team System&lt;/a&gt; created by &lt;a href="http://www.conchango.com"&gt;Conchango&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Detailed instructions for installing a new template into TFS and creating a new Team
project are outside the scope of this post. Provided that you have full administrative
rights to the TFS box, the MSI installer does all the heavy lifting, and creating
a new project is a 5 step wizard process. 
&lt;/p&gt;
&lt;p&gt;
With my new project created I can begin adding work items to the product backlog,
define sprints, and areas. I’ve also created a Wiki on the project SharePoint site
to various information, including feature description, architecture, design and implementation
details. The wiki is a great tool to use when working on a project because it is so
easy to create content and organize content.
&lt;/p&gt;
&lt;p&gt;
With all of that out of the way for now, I can move onto creating my source tree,
which involves the selection of a branching strategy. The branching strategy used
for WheelJack is the Single Team Branching Strategy as defined in &lt;a href="http://tfsbranchingguideii.codeplex.com/"&gt;TFS
Branching Guide version 2.0&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Single Team Branching Strategy&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The single team branching strategy requires 3 branches, MAIN, DEV and RELEASE, where
DEV and RELEASE are branched from MAIN. While I say 3, there will in fact be more
then 3 actual branches. Whenever a new release is created, it gets it’s own branch.
This strategy also allows for concurrent DEV branches.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Working in DEV&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
After each successful nightly build, code should be merged from MAIN to DEV. In this
project, with only one dev branch, and only one developer, there will usually be nothing
to merge. The following situations are examples of when there will actually be code
in MAIN that needs to be merged to DEV. 
&lt;ul&gt;
&lt;li&gt;
Once we create a release branch, if a show stopping bug is discovered and fixed in
a release&amp;nbsp; branch, that change is merged to MAIN, and then merged from MAIN to
all dev branches. 
&lt;li&gt;
If we have multiple dev branches, changes in one DEV branch could be merged to MAIN,
and then from MAIN to all other dev branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Key features of working in DEV (taken from TFS Branching Guide) 
&lt;ul&gt;
&lt;li&gt;
Focus on wide, flat branches to enable steady code flow to MAIN and then back to peer
DEV branches 
&lt;li&gt;
Work in DEV branches can be segregated by feature, organization, or temporary collaboration. 
&lt;li&gt;
Each DEV branch should be a full branch of MAIN. 
&lt;li&gt;
DEV branches should build and run Build Verification Tests (BVT’s) the same way as
MAIN. 
&lt;li&gt;
Forward Integrate (FI) with each successful build of MAIN 
&lt;li&gt;
Reverse Integrate (RI) based on some objective team criteria (e.g. internal quality
gates, end of sprint, etc.). 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;u&gt;Working in MAIN&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
Aside from the initial solution and build creation, no work should be done in Main.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Working in a Release Branch&lt;/u&gt; 
&lt;p&gt;
Work in production should be limited to show stopping bugs. Changes should be merged
into Main once completed. The following list was taken from the branching guide. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Key features of working with Release Branches (taken from TFS Branching Guide) 
&lt;ul&gt;
&lt;li&gt;
Each RELEASE is a child branch of MAIN. 
&lt;li&gt;
Your major product releases from the RELEASE branch and then RELEASE branch access
permissions are set to read only. 
&lt;li&gt;
Changes from the RELEASE branch RI to main.&amp;nbsp; This merge is one way.&amp;nbsp; Once
the release branch is created MAIN may be taking changes for next version work not
approved for the release branch&amp;nbsp; 
&lt;li&gt;
Duplicate RELEASE branch plan for subsequent major releases. This means there will
be one branch per major release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Source Code Repository Directory Structure&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WheelJack$ 
&lt;ul&gt;
&lt;li&gt;
DEV 
&lt;ul&gt;
&lt;li&gt;
1.0 (Version or Feature) 
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Identical to Main&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
1.1 (Version or Feature) 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
MAIN 
&lt;ul&gt;
&lt;li&gt;
Source 
&lt;ul&gt;
&lt;li&gt;
Project1 
&lt;li&gt;
Project1.Tests 
&lt;li&gt;
Project2 
&lt;li&gt;
Project2.Tests 
&lt;li&gt;
References&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
BuildTypes&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Releases 
&lt;ul&gt;
&lt;li&gt;
Release 1.0 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 1.1 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 2.0 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 2.1 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Every branch from Main contains everything that is in the Main branch, including the
Source and BuildTypes folder (BuildTypes contain the Team Build files that define
a build). 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
I started out by creating a new folder on my hard drive that corresponds to the root
folder TFS (WheelJack$), and working my way down the hierarchy for Main, creating
Source and BuildTypes folders. My project contains a server piece and a client piece,
so starting with the server side, I created a folder named MessagingServer, and then
created 4 projects under that folder. I also created a _Solutions folder under WheelJack
which is where I store all of my Visual Studio Solution files (*.sln). The solution
files are not checked into source control. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Below you can see what my folder structure looks like in Windows Explorer, and in
Solution Explorer. 
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="800"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="400"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_2.png" width="244" height="220"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="400"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_1.png" width="244" height="149"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
After cleaning up the project names, namespaces, and adding the correct project references,
I was able to begin looking at setting up the automated builds. I’ll pick up here
next time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=584be101-cc82-4cb6-b79a-382cd616fd89" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</comments>
      <category>Technology/Team Foundation Server</category>
      <category>Technology/WheelJack</category>
    </item>
  </channel>
</rss>