<?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>Accentient - Best Practice</title>
    <link>http://blog.accentient.com/</link>
    <description>Visual Studio ALM Experts</description>
    <language>en-us</language>
    <copyright>Richard Hundhausen</copyright>
    <lastBuildDate>Wed, 05 May 2010 20:47:35 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>richard@accentient.com</managingEditor>
    <webMaster>richard@accentient.com</webMaster>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=6d0a2a3b-28c0-49d7-9d2e-9066880dafb9</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,6d0a2a3b-28c0-49d7-9d2e-9066880dafb9.aspx</pingback:target>
      <dc:creator>Simon Reindl</dc:creator>
      <wfw:comment>http://blog.accentient.com/CommentView,guid,6d0a2a3b-28c0-49d7-9d2e-9066880dafb9.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6d0a2a3b-28c0-49d7-9d2e-9066880dafb9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Rangers have published an update to the quick reference stack, and one of my favourites
is the Scrum chart. Download the full pack <a title="VS ALM Rangers Quick Ref" href="http://vs2010quickref.codeplex.com/" target="_blank">here</a>.
</p>
        <p>
The pack is broken down by headings
</p>
        <p>
0. Start Here<br />
1. Planning<br />
2. Design<br />
3. Dev Debug<br />
4. Database<br />
5. Testing<br />
6. Build<br />
7. General 
</p>
        <p>
 
</p>
        <p>
The Scrum quick reference is in 7. General.
</p>
        <img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=6d0a2a3b-28c0-49d7-9d2e-9066880dafb9" />
      </body>
      <title>New Scrum one pager by the VS ALM Rangers</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,6d0a2a3b-28c0-49d7-9d2e-9066880dafb9.aspx</guid>
      <link>http://blog.accentient.com/2010/05/05/NewScrumOnePagerByTheVSALMRangers.aspx</link>
      <pubDate>Wed, 05 May 2010 20:47:35 GMT</pubDate>
      <description>&lt;p&gt;
The Rangers have published an update to the quick reference stack, and one of my favourites
is the Scrum chart. Download the full pack &lt;a title="VS ALM Rangers Quick Ref" href="http://vs2010quickref.codeplex.com/" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The pack is broken down by headings
&lt;/p&gt;
&lt;p&gt;
0. Start Here&lt;br&gt;
1. Planning&lt;br&gt;
2. Design&lt;br&gt;
3. Dev Debug&lt;br&gt;
4. Database&lt;br&gt;
5. Testing&lt;br&gt;
6. Build&lt;br&gt;
7. General 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The Scrum quick reference is in 7. General.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=6d0a2a3b-28c0-49d7-9d2e-9066880dafb9" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,6d0a2a3b-28c0-49d7-9d2e-9066880dafb9.aspx</comments>
      <category>Architecture</category>
      <category>Best Practice</category>
      <category>Scrum</category>
      <category>Simon Reindl</category>
      <category>Visual Studio 2010</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=36b7a8f6-faca-41b0-b9ee-f250ed0ef587</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,36b7a8f6-faca-41b0-b9ee-f250ed0ef587.aspx</pingback:target>
      <dc:creator>Simon Reindl</dc:creator>
      <wfw:comment>http://blog.accentient.com/CommentView,guid,36b7a8f6-faca-41b0-b9ee-f250ed0ef587.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=36b7a8f6-faca-41b0-b9ee-f250ed0ef587</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the most critical aspects of any project is when have you got to done. This
is one of the central principles of Scrum, as it is the contract between the team
that is going to produce something, and the Product Owner who is going to take delivery
of it. In waterfall projects, it is just as critical. Due to the focus on the Big
Design Up Front, it is costly in terms of time and effort to revisit a phase once
it is “done”.
</p>
        <p>
The thing is that there as many definitions of done as there are folk on the project,
so it is vital to get the agreed definition visible – so everyone knows what they
are committed to delivering.
</p>
        <p>
          <em>A designer knows he has achieved perfection not when there is nothing left to
add, but when there is nothing left to take away.<br /></em>Antoine de Saint-Exupery
</p>
        <p>
At the highest level, any software solution should consist of:
</p>
        <ol>
          <li>
Design 
</li>
          <li>
Coding 
</li>
          <li>
Testing 
</li>
          <li>
Build 
</li>
          <li>
Documentation</li>
        </ol>
        <p>
OK, so nothing profound there – however what is the benchmark standard for each of
these, and how can I use VS to let the team now when we are done? 
</p>
        <p>
  
</p>
        <h4>Design
</h4>
        <p>
The great thing about VS2010 is that it speaks UML. When this is tied in with the
slick WPF interface, being able to move through many different views, zooming in and
out allows you to get a solid understanding of your app quickly. A great summary is
at <a title="Architecture tools overview" href="http://blogs.msdn.com/somasegar/archive/2009/08/29/architecture-tools-in-vsts-2010.aspx" target="_blank">Somasegar’s
weblog</a>. All of these are great, and the bonus is that the gated check in is here
with Team Build. The purpose of a gated check in is to prevent code that is going
to break either the build or the design. In this way the integrity of the design is
maintained. The code that is checked in is automatically turned in to a shelve set,
and depending on the what level of validation you want (where you set the bar) controls
what gets fully checked in. The neat feature is that if your architecture says that
the UI talks to the business tier, and not directly to the database, code that doesn’t
comply never gets in to the branch. That will save a heap of rewriting! 
</p>
        <h4>Coding
</h4>
        <p>
2010 is better than the previous version by a long way. The killer feature - Multi-Screen
support, followed on by: 
</p>
        <ul>
          <li>
enhanced refactoring 
</li>
          <li>
intellitrace (oh wow … unfortunately only in Ultimate edition) 
</li>
          <li>
support for the all the Dubs (WCF, WPF, WF) 
</li>
          <li>
enhanced intellisense in XAML 
</li>
          <li>
all the Database GDR2 magic 
</li>
          <li>
SharePoint templates 
</li>
          <li>
Multi Framework targeting 
</li>
          <li>
Code Analysis 
</li>
          <li>
Code Metrics</li>
        </ul>
        <p>
All these features makes it a more straight forward proposition to write, compile,
fix and refactor the code base. The guidance from the code analysis and metrics should
be included in the done definition – what is the minimum level that you will accept
in to promoting up the stack to live?
</p>
        <h4>Testing
</h4>
        <p>
The major addition in 2010 is the Test and Lab manager. There is a much improved web
testing that can be used to create performance and load tests. The key thing in my
view is the lab management to help manage the VM estate so that the range of tests
can be run against a known server state.
</p>
        <p>
The testing tiers should be cumulative:
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="525">
          <tbody>
            <tr>
              <td valign="top" width="200">
                <strong>Level</strong>
              </td>
              <td valign="top" width="323">
                <strong>Testing</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="200">
One</td>
              <td valign="top" width="323">
Integration Tests<br />
Functional Tests<br />
Build Verification Test / Smoke Test</td>
            </tr>
            <tr>
              <td valign="top" width="200">
Two</td>
              <td valign="top" width="323">
all of the above and<br />
Unit Tests<br />
Regression Tests</td>
            </tr>
            <tr>
              <td valign="top" width="200">
Three</td>
              <td valign="top" width="323">
All of the above and 
<br />
Performance Tests<br />
Security Tests<br />
Documentation Tests</td>
            </tr>
          </tbody>
        </table>
        <p>
As many of these as possible should be automated so that they can be included in the
build cycle. The sooner you know it is broke – the sooner you can fix it
</p>
        <h4>Build
</h4>
        <p>
The big change in the build for 2010 is that it is now based on Windows Workflow.
MSBuild can still be used, however the default templates are WF. The best practice
is to create a custom build process template and share it across your projects.
</p>
        <p>
The bad news is that the WiX integration was dropped, more on that in a later post.
</p>
        <p>
Aaron has a great summary of the way build works: <a title="http://blogs.msdn.com/aaronhallberg/" href="http://blogs.msdn.com/aaronhallberg/">http://blogs.msdn.com/aaronhallberg/</a></p>
        <h4>Documentation
</h4>
        <p>
Sandcastle is a great tool for generating well formatted documentation based on the
xml comments in the code. It can be integrated in to the build, you just have to write
decent comments! There is a <a title="Sandcastle Help File Builder" href="http://shfb.codeplex.com/" target="_blank">codeplex
project</a> to help get the best out of sandcastle. 
</p>
        <h4>Suggested “Done”
</h4>
        <p>
A basic definition of Done would be:
</p>
        <ul>
          <li>
User Stories in as work items 
</li>
          <li>
Design completed 
<ul><li>
Class diagrams 
</li><li>
Sequence diagrams</li></ul></li>
          <li>
Code written 
</li>
          <li>
Code Compiles 
</li>
          <li>
Code passes code analysis (agreed exceptions) 
</li>
          <li>
Code passes metric gates 
</li>
          <li>
All tests that have been written pass 
</li>
          <li>
Code coverage meets agreed level (this is an “it depends” answer, if you have inherited
a huge code base, it is a big ask to get to 80% coverage!) 
</li>
          <li>
Smoke Test passes 
</li>
          <li>
Build and packing completed (you are going to ship this, aren’t you) 
</li>
          <li>
Documentation written</li>
        </ul>
        <p>
This is a very basic definition of done, the more detailed the definition will depend
on where your team is at.
</p>
        <p>
Martin Kulov has compiled this <a title="VS2010 feature links" href="http://www.kulov.net/blogs/martin/2010/04/visual-studio-2010-features.html" target="_blank">list
of links to features in VS2010</a>,  along with the <a title="http://www.teamsystemwidgets.com/" href="http://www.teamsystemwidgets.com/">http://www.teamsystemwidgets.com/</a> for
the collection of extensions for TFS.
</p>
        <img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=36b7a8f6-faca-41b0-b9ee-f250ed0ef587" />
      </body>
      <title>Getting to Done with VS2010</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,36b7a8f6-faca-41b0-b9ee-f250ed0ef587.aspx</guid>
      <link>http://blog.accentient.com/2010/04/23/GettingToDoneWithVS2010.aspx</link>
      <pubDate>Fri, 23 Apr 2010 00:01:28 GMT</pubDate>
      <description>&lt;p&gt;
One of the most critical aspects of any project is when have you got to done. This
is one of the central principles of Scrum, as it is the contract between the team
that is going to produce something, and the Product Owner who is going to take delivery
of it. In waterfall projects, it is just as critical. Due to the focus on the Big
Design Up Front, it is costly in terms of time and effort to revisit a phase once
it is “done”.
&lt;/p&gt;
&lt;p&gt;
The thing is that there as many definitions of done as there are folk on the project,
so it is vital to get the agreed definition visible – so everyone knows what they
are committed to delivering.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;A designer knows he has achieved perfection not when there is nothing left to
add, but when there is nothing left to take away.&lt;br&gt;
&lt;/em&gt;Antoine de Saint-Exupery
&lt;/p&gt;
&lt;p&gt;
At the highest level, any software solution should consist of:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Design 
&lt;li&gt;
Coding 
&lt;li&gt;
Testing 
&lt;li&gt;
Build 
&lt;li&gt;
Documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
OK, so nothing profound there – however what is the benchmark standard for each of
these, and how can I use VS to let the team now when we are done? 
&lt;p&gt;
&amp;nbsp; 
&lt;h4&gt;Design
&lt;/h4&gt;
&lt;p&gt;
The great thing about VS2010 is that it speaks UML. When this is tied in with the
slick WPF interface, being able to move through many different views, zooming in and
out allows you to get a solid understanding of your app quickly. A great summary is
at &lt;a title="Architecture tools overview" href="http://blogs.msdn.com/somasegar/archive/2009/08/29/architecture-tools-in-vsts-2010.aspx" target="_blank"&gt;Somasegar’s
weblog&lt;/a&gt;. All of these are great, and the bonus is that the gated check in is here
with Team Build. The purpose of a gated check in is to prevent code that is going
to break either the build or the design. In this way the integrity of the design is
maintained. The code that is checked in is automatically turned in to a shelve set,
and depending on the what level of validation you want (where you set the bar) controls
what gets fully checked in. The neat feature is that if your architecture says that
the UI talks to the business tier, and not directly to the database, code that doesn’t
comply never gets in to the branch. That will save a heap of rewriting! 
&lt;h4&gt;Coding
&lt;/h4&gt;
&lt;p&gt;
2010 is better than the previous version by a long way. The killer feature - Multi-Screen
support, followed on by: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
enhanced refactoring 
&lt;li&gt;
intellitrace (oh wow … unfortunately only in Ultimate edition) 
&lt;li&gt;
support for the all the Dubs (WCF, WPF, WF) 
&lt;li&gt;
enhanced intellisense in XAML 
&lt;li&gt;
all the Database GDR2 magic 
&lt;li&gt;
SharePoint templates 
&lt;li&gt;
Multi Framework targeting 
&lt;li&gt;
Code Analysis 
&lt;li&gt;
Code Metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
All these features makes it a more straight forward proposition to write, compile,
fix and refactor the code base. The guidance from the code analysis and metrics should
be included in the done definition – what is the minimum level that you will accept
in to promoting up the stack to live?
&lt;/p&gt;
&lt;h4&gt;Testing
&lt;/h4&gt;
&lt;p&gt;
The major addition in 2010 is the Test and Lab manager. There is a much improved web
testing that can be used to create performance and load tests. The key thing in my
view is the lab management to help manage the VM estate so that the range of tests
can be run against a known server state.
&lt;/p&gt;
&lt;p&gt;
The testing tiers should be cumulative:
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="525"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;Level&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="323"&gt;
&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
One&lt;/td&gt;
&lt;td valign="top" width="323"&gt;
Integration Tests&lt;br&gt;
Functional Tests&lt;br&gt;
Build Verification Test / Smoke Test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
Two&lt;/td&gt;
&lt;td valign="top" width="323"&gt;
all of the above and&lt;br&gt;
Unit Tests&lt;br&gt;
Regression Tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
Three&lt;/td&gt;
&lt;td valign="top" width="323"&gt;
All of the above and 
&lt;br&gt;
Performance Tests&lt;br&gt;
Security Tests&lt;br&gt;
Documentation Tests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
As many of these as possible should be automated so that they can be included in the
build cycle. The sooner you know it is broke – the sooner you can fix it
&lt;/p&gt;
&lt;h4&gt;Build
&lt;/h4&gt;
&lt;p&gt;
The big change in the build for 2010 is that it is now based on Windows Workflow.
MSBuild can still be used, however the default templates are WF. The best practice
is to create a custom build process template and share it across your projects.
&lt;/p&gt;
&lt;p&gt;
The bad news is that the WiX integration was dropped, more on that in a later post.
&lt;/p&gt;
&lt;p&gt;
Aaron has a great summary of the way build works: &lt;a title="http://blogs.msdn.com/aaronhallberg/" href="http://blogs.msdn.com/aaronhallberg/"&gt;http://blogs.msdn.com/aaronhallberg/&lt;/a&gt;
&lt;/p&gt;
&lt;h4&gt;Documentation
&lt;/h4&gt;
&lt;p&gt;
Sandcastle is a great tool for generating well formatted documentation based on the
xml comments in the code. It can be integrated in to the build, you just have to write
decent comments! There is a &lt;a title="Sandcastle Help File Builder" href="http://shfb.codeplex.com/" target="_blank"&gt;codeplex
project&lt;/a&gt; to help get the best out of sandcastle. 
&lt;/p&gt;
&lt;h4&gt;Suggested “Done”
&lt;/h4&gt;
&lt;p&gt;
A basic definition of Done would be:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
User Stories in as work items 
&lt;li&gt;
Design completed 
&lt;ul&gt;
&lt;li&gt;
Class diagrams 
&lt;li&gt;
Sequence diagrams&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Code written 
&lt;li&gt;
Code Compiles 
&lt;li&gt;
Code passes code analysis (agreed exceptions) 
&lt;li&gt;
Code passes metric gates 
&lt;li&gt;
All tests that have been written pass 
&lt;li&gt;
Code coverage meets agreed level (this is an “it depends” answer, if you have inherited
a huge code base, it is a big ask to get to 80% coverage!) 
&lt;li&gt;
Smoke Test passes 
&lt;li&gt;
Build and packing completed (you are going to ship this, aren’t you) 
&lt;li&gt;
Documentation written&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This is a very basic definition of done, the more detailed the definition will depend
on where your team is at.
&lt;/p&gt;
&lt;p&gt;
Martin Kulov has compiled this &lt;a title="VS2010 feature links" href="http://www.kulov.net/blogs/martin/2010/04/visual-studio-2010-features.html" target="_blank"&gt;list
of links to features in VS2010&lt;/a&gt;,&amp;nbsp; along with the &lt;a title="http://www.teamsystemwidgets.com/" href="http://www.teamsystemwidgets.com/"&gt;http://www.teamsystemwidgets.com/&lt;/a&gt; for
the collection of extensions for TFS.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=36b7a8f6-faca-41b0-b9ee-f250ed0ef587" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,36b7a8f6-faca-41b0-b9ee-f250ed0ef587.aspx</comments>
      <category>Best Practice</category>
      <category>Scrum</category>
      <category>Simon Reindl</category>
      <category>Visual Studio 2010</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=9052ff3b-929a-458d-ba42-71a65c7fffcf</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,9052ff3b-929a-458d-ba42-71a65c7fffcf.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,9052ff3b-929a-458d-ba42-71a65c7fffcf.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9052ff3b-929a-458d-ba42-71a65c7fffcf</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
OK, let’s say you’re on a Scrum team that’s planning its next iteration. You pull
a story to implement <strong>Feature X</strong> for the next release of <strong>Application
Y</strong>. You review the specs, maybe have a conversation or two with the product
owner to clarify a few details, and discuss implementation details with your team
lead. Cool. Now, you design the feature, code it up, build it and tweak it until its
working to your satisfaction. 
</p>
        <p>
Then you check it into the source control system and move on to the next feature.
Done, right? Not necessarily so! Sure, you can stand in front of the users at Sprint
Review and watch them salivate as you demonstrate <strong>Feature X</strong> in action.
But, can they walk out of the review and begin using it right away? Most likely not.
If not, is it really done?
</p>
        <p>
“Code complete” is just one milestone on the yellow brick road to Emerald City, where
users are happily whistling away while using your excellent <strong>Feature X</strong> in
their <strong>Application Y</strong>. There is so much more to consider. What about
unit testing? Integration testing? Acceptance testing? Documentation? Packaging? Deployment? 
</p>
        <p>
Getting an application successfully delivered involves much more than working code.
Failure to take this into account, and considering “code complete” to mean the same
thing as “done”, inevitably causes a development team to fall behind schedule as they
scramble to deliver what was already considered done. This is a form of <strong>technical
debt</strong>, a topic I’ll explore in a future post.
</p>
        <p>
For more information on the meaning of “done”, check out this excellent podcast on
HanselMinutes.com:
</p>
        <p>
          <a href="http://hanselminutes.com/default.aspx?showID=137" target="_blank">What is
Done? – A Conversation with Scrum Co-Creater Ken Schwaber</a>
        </p>
        <img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9052ff3b-929a-458d-ba42-71a65c7fffcf" />
      </body>
      <title>What does &amp;ldquo;Done&amp;rdquo; mean?</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,9052ff3b-929a-458d-ba42-71a65c7fffcf.aspx</guid>
      <link>http://blog.accentient.com/2008/07/14/WhatDoesLdquoDonerdquoMean.aspx</link>
      <pubDate>Mon, 14 Jul 2008 15:40:43 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
OK, let’s say you’re on a Scrum team that’s planning its next iteration. You pull
a story to implement &lt;strong&gt;Feature X&lt;/strong&gt; for the next release of &lt;strong&gt;Application
Y&lt;/strong&gt;. You review the specs, maybe have a conversation or two with the product
owner to clarify a few details, and discuss implementation details with your team
lead. Cool. Now, you design the feature, code it up, build it and tweak it until its
working to your satisfaction. 
&lt;/p&gt;
&lt;p&gt;
Then you check it into the source control system and move on to the next feature.
Done, right? Not necessarily so! Sure, you can stand in front of the users at Sprint
Review and watch them salivate as you demonstrate &lt;strong&gt;Feature X&lt;/strong&gt; in action.
But, can they walk out of the review and begin using it right away? Most likely not.
If not, is it really done?
&lt;/p&gt;
&lt;p&gt;
“Code complete” is just one milestone on the yellow brick road to Emerald City, where
users are happily whistling away while using your excellent &lt;strong&gt;Feature X&lt;/strong&gt; in
their &lt;strong&gt;Application Y&lt;/strong&gt;. There is so much more to consider. What about
unit testing? Integration testing? Acceptance testing? Documentation? Packaging? Deployment? 
&lt;/p&gt;
&lt;p&gt;
Getting an application successfully delivered involves much more than working code.
Failure to take this into account, and considering “code complete” to mean the same
thing as “done”, inevitably causes a development team to fall behind schedule as they
scramble to deliver what was already considered done. This is a form of &lt;strong&gt;technical
debt&lt;/strong&gt;, a topic I’ll explore in a future post.
&lt;/p&gt;
&lt;p&gt;
For more information on the meaning of “done”, check out this excellent podcast on
HanselMinutes.com:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://hanselminutes.com/default.aspx?showID=137" target="_blank"&gt;What is
Done? – A Conversation with Scrum Co-Creater Ken Schwaber&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9052ff3b-929a-458d-ba42-71a65c7fffcf" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,9052ff3b-929a-458d-ba42-71a65c7fffcf.aspx</comments>
      <category>Best Practice</category>
      <category>Martin Danner</category>
      <category>Scrum</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=40e33833-8d60-4ed1-a0fe-b66273a2f9e5</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,40e33833-8d60-4ed1-a0fe-b66273a2f9e5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,40e33833-8d60-4ed1-a0fe-b66273a2f9e5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=40e33833-8d60-4ed1-a0fe-b66273a2f9e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A bug is a bug is a bug, right? Not so!
</p>
        <p>
Most development shops treat a bug as a task. That seems reasonable - it's a bit of
work that needs to be done. Unfortunately, it's not so easy. If a bug is discovered
in a feature that is currently under development, and it will be fixed in the current
Sprint (iteration), then the bug can and should be treated as a task. It would be
considered a new Sprint Backlog Item that must be closed before the feature can be
considered "Done". However, if the bug is not fixed before the feature is considered
"Done" (yes this really happens), or the bug is discovered after the feature has be
deemed "Done", then the bug becomes a bit of work to be scheduled into a future Sprint.
In other words, the bug should be treated as a Product Backlog Item.
</p>
        <p>
The rule of thumb is rather easy really. If the bug is going to be fixed in the current
iteration, then treat it as a task. If not, then the bug needs to go on the product
backlog and be prioritized right along with all the other Product Backlog Items.
</p>
        <p>
Of course, this raises the question: What does "Done" mean exactly? Many dev teams
grapple with this deceptively simple question. I'll explore this question in a future
post.
</p>
        <img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=40e33833-8d60-4ed1-a0fe-b66273a2f9e5" />
      </body>
      <title>Two Types of Bugs</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,40e33833-8d60-4ed1-a0fe-b66273a2f9e5.aspx</guid>
      <link>http://blog.accentient.com/2008/06/27/TwoTypesOfBugs.aspx</link>
      <pubDate>Fri, 27 Jun 2008 10:24:25 GMT</pubDate>
      <description>&lt;p&gt;
A bug is a bug is a bug, right? Not so!
&lt;/p&gt;
&lt;p&gt;
Most development shops treat a bug as a task. That seems reasonable - it's a bit of
work that needs to be done. Unfortunately, it's not so easy. If a bug is discovered
in a feature that is currently under development, and it will be fixed in the current
Sprint (iteration), then the bug can and should be treated as a task. It would be
considered a new Sprint Backlog Item that must be closed before the feature can be
considered "Done". However, if the bug is not fixed before the feature is considered
"Done" (yes this really happens), or the bug is discovered after the feature has be
deemed "Done", then the bug becomes a bit of work to be scheduled into a future Sprint.
In other words, the bug should be treated as a Product Backlog Item.
&lt;/p&gt;
&lt;p&gt;
The rule of thumb is rather easy really. If the bug is going to be fixed in the current
iteration, then treat it as a task. If not, then the bug needs to go on the product
backlog and be prioritized right along with all the other Product Backlog Items.
&lt;/p&gt;
&lt;p&gt;
Of course, this raises the question: What does "Done" mean exactly? Many dev teams
grapple with this deceptively simple question. I'll explore this question in a future
post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=40e33833-8d60-4ed1-a0fe-b66273a2f9e5" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,40e33833-8d60-4ed1-a0fe-b66273a2f9e5.aspx</comments>
      <category>Best Practice</category>
      <category>Development</category>
      <category>Martin Danner</category>
      <category>Scrum</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=e14d6c6a-503f-4957-a373-ea8c38a0e6bd</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,e14d6c6a-503f-4957-a373-ea8c38a0e6bd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,e14d6c6a-503f-4957-a373-ea8c38a0e6bd.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e14d6c6a-503f-4957-a373-ea8c38a0e6bd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">In the process improvement goal setting
post a few days back, I stressed the importance of making your goals specific (and
thus measurable).  Randy Eppinger made a good comment, and I felt to make it
a bit more public, I'd copy that comment to a new post.<br /><br /><blockquote>That's good advice. I find it helpful to do both. We create high-level
objectives of the sort you listed like, "Reduce the number of bugs being released",
"Assimilate new team members more easily". Then we create a list of milestones related
to one or more high-level objectives. One or more team members takes ownership of
achieving milestones which are more specific like, "Research and purchase a good book
on unit testing techniques", "Create a Continuous Integration build for all code branches",
"Create the Visual Studio 2005 section of the coding conventions document".<br /><br /></blockquote>His comment reveals something that I missed.  It's definitely possible
to have both types of goal statements!  In fact, setting concise, specific milestones
is an excellent approach.  As long as there is a visible, specific, MOTIVATING
goal to move toward, you'll have more success in your process improvement.  Thanks,
Randy!<br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=e14d6c6a-503f-4957-a373-ea8c38a0e6bd" /></body>
      <title>Process improvement comment by Randy Eppinger</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,e14d6c6a-503f-4957-a373-ea8c38a0e6bd.aspx</guid>
      <link>http://blog.accentient.com/2007/06/03/ProcessImprovementCommentByRandyEppinger.aspx</link>
      <pubDate>Sun, 03 Jun 2007 04:26:31 GMT</pubDate>
      <description>In the process improvement goal setting post a few days back, I stressed the importance of making your goals specific (and thus measurable).&amp;nbsp; Randy Eppinger made a good comment, and I felt to make it a bit more public, I'd copy that comment to a new post.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;That's good advice. I find it helpful to do both. We create high-level
objectives of the sort you listed like, "Reduce the number of bugs being released",
"Assimilate new team members more easily". Then we create a list of milestones related
to one or more high-level objectives. One or more team members takes ownership of
achieving milestones which are more specific like, "Research and purchase a good book
on unit testing techniques", "Create a Continuous Integration build for all code branches",
"Create the Visual Studio 2005 section of the coding conventions document".&lt;br&gt;
&lt;br&gt;
&lt;/blockquote&gt;His comment reveals something that I missed.&amp;nbsp; It's definitely possible
to have both types of goal statements!&amp;nbsp; In fact, setting concise, specific milestones
is an excellent approach.&amp;nbsp; As long as there is a visible, specific, MOTIVATING
goal to move toward, you'll have more success in your process improvement.&amp;nbsp; Thanks,
Randy!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=e14d6c6a-503f-4957-a373-ea8c38a0e6bd" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,e14d6c6a-503f-4957-a373-ea8c38a0e6bd.aspx</comments>
      <category>Best Practice</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=9325b440-39c9-4e6a-be7d-1a25e427ada4</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,9325b440-39c9-4e6a-be7d-1a25e427ada4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,9325b440-39c9-4e6a-be7d-1a25e427ada4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9325b440-39c9-4e6a-be7d-1a25e427ada4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">"Reduce rework", "Hit scheduled release
dates", "Improve developer productivity"...<br /><br />
We see these all the time as we work with companies on their process improvement initiatives. 
Unfortunately, they all lack specificity and measurability.  Thus, they're both
difficult to measure, and make lousy motivators.<br /><br />
Instead, make your goals specific.  TFS can help make the measurement of those
goals easier or possible.  For instance, replace "Reduce rework" to "Reduce time
spent on bug fixes to 25% of total effort.".  You could also use something such
as "Reduce bug count to 15 per Scenario".  Now, even though some scenarios are
larger than others, you have an average target you can hit.<br /><br />
Specific values are also motivating.  When you are trying to limit the number
of bugs to 15 per scenario, as the number of bugs increases, there is psychological
pressure (and motivation) to ensure that further scenario development is conducted
more carefully (possibly with the introduction of unit testing).<br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9325b440-39c9-4e6a-be7d-1a25e427ada4" /></body>
      <title>Be specific when writing TFS and process improvement goals!</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,9325b440-39c9-4e6a-be7d-1a25e427ada4.aspx</guid>
      <link>http://blog.accentient.com/2007/05/30/BeSpecificWhenWritingTFSAndProcessImprovementGoals.aspx</link>
      <pubDate>Wed, 30 May 2007 23:35:42 GMT</pubDate>
      <description>"Reduce rework", "Hit scheduled release dates", "Improve developer productivity"...&lt;br&gt;
&lt;br&gt;
We see these all the time as we work with companies on their process improvement initiatives.&amp;nbsp;
Unfortunately, they all lack specificity and measurability.&amp;nbsp; Thus, they're both
difficult to measure, and make lousy motivators.&lt;br&gt;
&lt;br&gt;
Instead, make your goals specific.&amp;nbsp; TFS can help make the measurement of those
goals easier or possible.&amp;nbsp; For instance, replace "Reduce rework" to "Reduce time
spent on bug fixes to 25% of total effort.".&amp;nbsp; You could also use something such
as "Reduce bug count to 15 per Scenario".&amp;nbsp; Now, even though some scenarios are
larger than others, you have an average target you can hit.&lt;br&gt;
&lt;br&gt;
Specific values are also motivating.&amp;nbsp; When you are trying to limit the number
of bugs to 15 per scenario, as the number of bugs increases, there is psychological
pressure (and motivation) to ensure that further scenario development is conducted
more carefully (possibly with the introduction of unit testing).&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9325b440-39c9-4e6a-be7d-1a25e427ada4" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,9325b440-39c9-4e6a-be7d-1a25e427ada4.aspx</comments>
      <category>Best Practice</category>
      <category>Personal Thoughts</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=9b592e02-cee3-4919-a01a-f616c107a8c3</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,9b592e02-cee3-4919-a01a-f616c107a8c3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,9b592e02-cee3-4919-a01a-f616c107a8c3.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9b592e02-cee3-4919-a01a-f616c107a8c3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I've posted about this before, however,
it's so important I'll repost.  If you're trying to create a listener web service
for TFS events, don't start from scratch!  Use <a href="http://blogs.conchango.com/howardvanrooijen/default.aspx">Howard
van Rooijen</a>'s <a href="http://blogs.conchango.com/howardvanrooijen/archive/2006/04/29/3894.aspx">VS2005
template</a>.  It will create the web services, along with the appropriate signatures,
as well as convert the events to an object, so that you can effectively use it.  
<br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9b592e02-cee3-4919-a01a-f616c107a8c3" /></body>
      <title>VS2005 Template for listening to TFS Events</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,9b592e02-cee3-4919-a01a-f616c107a8c3.aspx</guid>
      <link>http://blog.accentient.com/2007/04/24/VS2005TemplateForListeningToTFSEvents.aspx</link>
      <pubDate>Tue, 24 Apr 2007 20:06:42 GMT</pubDate>
      <description>I've posted about this before, however, it's so important I'll repost.&amp;nbsp; If you're trying to create a listener web service for TFS events, don't start from scratch!&amp;nbsp; Use &lt;a href="http://blogs.conchango.com/howardvanrooijen/default.aspx"&gt;Howard
van Rooijen&lt;/a&gt;'s &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2006/04/29/3894.aspx"&gt;VS2005
template&lt;/a&gt;.&amp;nbsp; It will create the web services, along with the appropriate signatures,
as well as convert the events to an object, so that you can effectively use it.&amp;nbsp; 
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=9b592e02-cee3-4919-a01a-f616c107a8c3" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,9b592e02-cee3-4919-a01a-f616c107a8c3.aspx</comments>
      <category>Best Practice</category>
      <category>Software Tools</category>
      <category>Team System</category>
      <category>Visual Studio 2005</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=84e15cf7-e61d-4dd7-b180-7e937fe83c35</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,84e15cf7-e61d-4dd7-b180-7e937fe83c35.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,84e15cf7-e61d-4dd7-b180-7e937fe83c35.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=84e15cf7-e61d-4dd7-b180-7e937fe83c35</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">One of the best things software development
shops can do to improve productivity is to set Outlook to only check email once every
hour (or 30 minutes at least).  This is because people tend to take quite a bit
of time to get back to difficult tasks.  Email, and IMs, are difficult to ignore
when that little "pellet dispenser" pops up on the lower left hand side of your screen. 
And once your mind strays it's hard to get back on task.<br /><br />
A recent research project reported in the New York Times (<a href="http://www.nytimes.com/2007/03/25/business/25multi.html">link</a> -
free registration required), bears this out.  Here's the money quote:<br /><blockquote><blockquote><i>In a recent study, a group of Microsoft workers took,
on average, 15 minutes to return to serious mental tasks, like writing reports or
computer code, after responding to incoming e-mail or instant messages. They strayed
off to reply to other messages or browse news, sports or entertainment Web sites. 
<br /><br />
“I was surprised by how easily people were distracted and how long it took them to
get back to the task,” said Eric Horvitz, a Microsoft research scientist and co-author,
with Shamsi Iqbal of the University of Illinois, of a paper on the study that will
be presented next month.<br /><br />
“If it’s this bad at Microsoft,” Mr. Horvitz added, “it has to be bad at other companies,
too.”</i><br /></blockquote></blockquote>So, turn off that email while you're coding!  (And
driving!)<br /><br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=84e15cf7-e61d-4dd7-b180-7e937fe83c35" /></body>
      <title>Productivity Best Practice</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,84e15cf7-e61d-4dd7-b180-7e937fe83c35.aspx</guid>
      <link>http://blog.accentient.com/2007/04/14/ProductivityBestPractice.aspx</link>
      <pubDate>Sat, 14 Apr 2007 00:03:28 GMT</pubDate>
      <description>One of the best things software development shops can do to improve productivity is to set Outlook to only check email once every hour (or 30 minutes at least).&amp;nbsp; This is because people tend to take quite a bit of time to get back to difficult tasks.&amp;nbsp; Email, and IMs, are difficult to ignore when that little "pellet dispenser" pops up on the lower left hand side of your screen.&amp;nbsp; And once your mind strays it's hard to get back on task.&lt;br&gt;
&lt;br&gt;
A recent research project reported in the New York Times (&lt;a href="http://www.nytimes.com/2007/03/25/business/25multi.html"&gt;link&lt;/a&gt; -
free registration required), bears this out.&amp;nbsp; Here's the money quote:&lt;br&gt;
&lt;blockquote&gt; &lt;blockquote&gt;&lt;i&gt;In a recent study, a group of Microsoft workers took,
on average, 15 minutes to return to serious mental tasks, like writing reports or
computer code, after responding to incoming e-mail or instant messages. They strayed
off to reply to other messages or browse news, sports or entertainment Web sites. 
&lt;br&gt;
&lt;br&gt;
“I was surprised by how easily people were distracted and how long it took them to
get back to the task,” said Eric Horvitz, a Microsoft research scientist and co-author,
with Shamsi Iqbal of the University of Illinois, of a paper on the study that will
be presented next month.&lt;br&gt;
&lt;br&gt;
“If it’s this bad at Microsoft,” Mr. Horvitz added, “it has to be bad at other companies,
too.”&lt;/i&gt;
&lt;br&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;So, turn off that email while you're coding!&amp;nbsp; (And
driving!)&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=84e15cf7-e61d-4dd7-b180-7e937fe83c35" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,84e15cf7-e61d-4dd7-b180-7e937fe83c35.aspx</comments>
      <category>Best Practice</category>
      <category>Misc</category>
      <category>Personal Thoughts</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=850430ef-690c-423b-bd8c-7fdb9a9006da</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,850430ef-690c-423b-bd8c-7fdb9a9006da.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,850430ef-690c-423b-bd8c-7fdb9a9006da.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=850430ef-690c-423b-bd8c-7fdb9a9006da</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Last year, at PDC, I sat down with <a href="http://www.ssw.com.au/ssw/employees/employeesprofile.aspx?EmpID=AC">Adam
Cogan</a>, of <a href="http://www.ssw.com.au/ssw/">SSW</a>, during an MSDN magazine
party.  Feeling the guilty pleasure of totally geeking out while a decent party
was going on, Adam led a group of geeks through some of his very cool software tools. 
Somewhere during the discussion, he mentioned that he deploys his unit test, along
with a test runner, with his shrinkwrapped application.  That got my attention,
since I'd never thought of them like that.  I called him on it, and he explained. 
Now, there seems to be a visceral reaction from folks against the idea.  Here's
WHY it makes sense to deploy unit tests and a test runner with you application:<br /><ol><li><i>Customer - "Your stupid app lost all my contact data!"</i></li><li><i>Help Desk - "Maybe I can help.  Go to Help -&gt; Analyze"</i></li><li><i>Customer - "OK.  I see this list of green and red dots with text."</i></li><li><i>Help Desk - "Can you read me the line next to the first red dot?"</i></li><li><i>Customer - "It says 'Can't find database at C:\myapp\contacts.mdb'"</i></li><li><i>Help Desk - "Hmm...  Can you browse to that directory?"</i></li><li><i>Customer - "No, I deleted it to have room for more mp3's"</i></li><li><i>Help Desk - "Oh...  That's a file required for our app to run.  Did you
subscribe to our backup service?"</i></li><li><i>Customer - "Yes."</i></li><li><i>Help Desk "Good, go to Tools -&gt; Options -&gt; Restore Contact..."</i></li></ol><p>
You get the idea.  It rocks for troubleshooting those pesky support calls from
customers.  For a lot more information, and a very nice screenshot, see Adam
Cogan's original posting on this topic!  You can find the specific recommendation
in his <a href="http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterUnitTests.aspx#MenuUnitTests">menu
unit tests</a> best practice. (While you're there, check out the rest of his <a href="http://www.ssw.com.au/ssw/Standards/default.aspx">best
practices</a>, he has a huge number of great ideas.)
</p><p>
Unfortunately, you cannot ship your Team System unit tests with your application. 
I know there's an NUnit to VSTS Unit Test converter.  Does anyone know if VSTS
Unit Tests can be converted to <a href="http://www.nunit.org">NUnit</a> or <a href="http://mbunit.com/">MbUnit</a> unit
tests, so that all of us using VSTS Unit Tests can implement this best practice?<br /><br />
UPDATE:  <strike>Adam Cogan claims he got the idea from James Newkirk (of NUnit
fame).</strike>  <strike>That may be the case, but I'll have to credit Adam. 
:-) He's got so many best practices on his site (see this rule that covers </strike><a href="http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterUnitTests.aspx#MenuUnitTests"><strike>shipping unit
tests</strike></a><strike> for an example) that if he didn't get the idea
from Newkirk, he likely would have thought of it himself!</strike></p><p>
UPDATE TWO:  This IS Adam's idea!  James simply wanted a distributable
test harness for developers to use!  I misunderstood his first comment to me! 
(By the way, if you have comments on this post, or any other, please send email to
steve+comments[at]accentient.com.  We've had to disable comments until we find
a way to more effectively eliminate comment spam.)<br /><br /><br /></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=850430ef-690c-423b-bd8c-7fdb9a9006da" /></body>
      <title>Shipping unit tests with your shrinkwrapped software</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,850430ef-690c-423b-bd8c-7fdb9a9006da.aspx</guid>
      <link>http://blog.accentient.com/2007/04/12/ShippingUnitTestsWithYourShrinkwrappedSoftware.aspx</link>
      <pubDate>Thu, 12 Apr 2007 22:35:16 GMT</pubDate>
      <description>Last year, at PDC, I sat down with &lt;a href="http://www.ssw.com.au/ssw/employees/employeesprofile.aspx?EmpID=AC"&gt;Adam
Cogan&lt;/a&gt;, of &lt;a href="http://www.ssw.com.au/ssw/"&gt;SSW&lt;/a&gt;, during an MSDN magazine
party.&amp;nbsp; Feeling the guilty pleasure of totally geeking out while a decent party
was going on, Adam led a group of geeks through some of his very cool software tools.&amp;nbsp;
Somewhere during the discussion, he mentioned that he deploys his unit test, along
with a test runner, with his shrinkwrapped application.&amp;nbsp; That got my attention,
since I'd never thought of them like that.&amp;nbsp; I called him on it, and he explained.&amp;nbsp;
Now, there seems to be a visceral reaction from folks against the idea.&amp;nbsp; Here's
WHY it makes sense to deploy unit tests and a test runner with you application:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;i&gt;Customer - "Your stupid app lost all my contact data!"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Help Desk - "Maybe I can help.&amp;nbsp; Go to Help -&amp;gt; Analyze"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Customer - "OK.&amp;nbsp; I see this list of green and red dots with text."&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Help Desk - "Can you read me the line next to the first red dot?"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Customer - "It says 'Can't find database at C:\myapp\contacts.mdb'"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Help Desk - "Hmm...&amp;nbsp; Can you browse to that directory?"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Customer - "No, I deleted it to have room for more mp3's"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Help Desk - "Oh...&amp;nbsp; That's a file required for our app to run.&amp;nbsp; Did you
subscribe to our backup service?"&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Customer - "Yes."&lt;/i&gt; 
&lt;li&gt;
&lt;i&gt;Help Desk "Good, go to Tools -&amp;gt; Options -&amp;gt; Restore Contact..."&lt;/i&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
You get the idea.&amp;nbsp; It rocks for troubleshooting those pesky support calls from
customers.&amp;nbsp; For a lot more information, and a very nice screenshot, see Adam
Cogan's original posting on this topic!&amp;nbsp; You can find the specific recommendation
in his &lt;a href="http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterUnitTests.aspx#MenuUnitTests"&gt;menu
unit tests&lt;/a&gt; best practice.&amp;nbsp;(While you're there, check out the rest of his &lt;a href="http://www.ssw.com.au/ssw/Standards/default.aspx"&gt;best
practices&lt;/a&gt;, he has a huge number of great ideas.)
&lt;/p&gt;
&lt;p&gt;
Unfortunately, you cannot ship your Team System unit tests with your application.&amp;nbsp;
I know there's an NUnit to VSTS Unit Test converter.&amp;nbsp; Does anyone know if VSTS
Unit Tests can be converted to &lt;a href="http://www.nunit.org"&gt;NUnit&lt;/a&gt; or &lt;a href="http://mbunit.com/"&gt;MbUnit&lt;/a&gt; unit
tests, so that all of us using VSTS Unit Tests can implement this best practice?&lt;br&gt;
&lt;br&gt;
UPDATE:&amp;nbsp; &lt;strike&gt;Adam Cogan claims he got the idea from James Newkirk (of NUnit
fame).&lt;/strike&gt;&amp;nbsp; &lt;strike&gt;That may be the case, but I'll have to credit Adam.&amp;nbsp;
:-) He's got so many best practices on his site (see this rule&amp;nbsp;that covers &lt;/strike&gt;&lt;a href="http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterUnitTests.aspx#MenuUnitTests"&gt;&lt;strike&gt;shipping&amp;nbsp;unit
tests&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt;&amp;nbsp;for an example)&amp;nbsp;that if he didn't get the idea
from Newkirk, he likely would have thought of it himself!&lt;/strike&gt;
&lt;/p&gt;
&lt;p&gt;
UPDATE TWO:&amp;nbsp;&amp;nbsp;This IS Adam's idea!&amp;nbsp; James simply&amp;nbsp;wanted a&amp;nbsp;distributable
test harness for developers to use!&amp;nbsp; I misunderstood his first comment to me!&amp;nbsp;
(By the way, if you have comments on this post, or any other, please send email to
steve+comments[at]accentient.com.&amp;nbsp; We've had to disable comments until we find
a way to more effectively eliminate comment spam.)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=850430ef-690c-423b-bd8c-7fdb9a9006da" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,850430ef-690c-423b-bd8c-7fdb9a9006da.aspx</comments>
      <category>Best Practice</category>
      <category>Software Tools</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=3ea630f9-5c50-414d-948b-2dff2ea72d02</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,3ea630f9-5c50-414d-948b-2dff2ea72d02.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,3ea630f9-5c50-414d-948b-2dff2ea72d02.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3ea630f9-5c50-414d-948b-2dff2ea72d02</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here's a great tool for agile development that was mentioned in a blog post below.  Go
get a stack of these!  Shuffle them, pass them around, put your use stories on
them, and slap them up on the board when you're ready!  Here's one more link.
</p>
        <p>
          <table cellspacing="10" cellpadding="10" width="100%">
            <tbody>
              <tr>
                <td align="middle" width="90">
                  <img height="119" alt="Post-it Sortable Cards" src="http://www.3m.com/us/office/postit/images/products/cards_sort_lg.jpg" width="170" />
                </td>
                <td class="clr666666txt">
                  <img height="19" alt="Post-it Sortable Cards" src="http://www.3m.com/us/office/postit/images/products/cards_sort_hdr_txt.gif" width="216" />
                  <br />
                  <a href="http://www.3m.com/us/office/postit/products/prod_cards_sort.html">Post-it®
Sortable Cards</a> only stick when you want them to! Now you have the flexibility
to visualize and organize when and how you want on many different surfaces. Cards
also easily sort, shuffle and stack together so you can use them again, or store them
for later.</td>
              </tr>
            </tbody>
          </table>
        </p>
        <img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=3ea630f9-5c50-414d-948b-2dff2ea72d02" />
      </body>
      <title>Agile Tool - 3x5 Cards that both shuffle and stick</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,3ea630f9-5c50-414d-948b-2dff2ea72d02.aspx</guid>
      <link>http://blog.accentient.com/2007/03/14/AgileTool3x5CardsThatBothShuffleAndStick.aspx</link>
      <pubDate>Wed, 14 Mar 2007 23:40:15 GMT</pubDate>
      <description>&lt;p&gt;
Here's a great tool for agile development that was mentioned in a blog post below.&amp;nbsp;&amp;nbsp;Go
get a stack of these!&amp;nbsp; Shuffle them, pass them around, put your use stories on
them, and slap them up on the board when you're ready!&amp;nbsp; Here's one more link.
&lt;/p&gt;
&lt;p&gt;
&lt;table cellspacing=10 cellpadding=10 width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=middle width=90&gt;
&lt;img height=119 alt="Post-it Sortable Cards" src="http://www.3m.com/us/office/postit/images/products/cards_sort_lg.jpg" width=170&gt;&lt;/td&gt;
&lt;td class=clr666666txt&gt;
&lt;img height=19 alt="Post-it Sortable Cards" src="http://www.3m.com/us/office/postit/images/products/cards_sort_hdr_txt.gif" width=216&gt; 
&lt;br&gt;
&lt;a href="http://www.3m.com/us/office/postit/products/prod_cards_sort.html"&gt;Post-it®
Sortable Cards&lt;/a&gt; only stick when you want them to! Now you have the flexibility
to visualize and organize when and how you want on many different surfaces. Cards
also easily sort, shuffle and stack together so you can use them again, or store them
for later.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=3ea630f9-5c50-414d-948b-2dff2ea72d02" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,3ea630f9-5c50-414d-948b-2dff2ea72d02.aspx</comments>
      <category>Best Practice</category>
      <category>Personal Thoughts</category>
      <category>Software Tools</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=b7549d4b-23d6-41df-bb4d-3010ed889119</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,b7549d4b-23d6-41df-bb4d-3010ed889119.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,b7549d4b-23d6-41df-bb4d-3010ed889119.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b7549d4b-23d6-41df-bb4d-3010ed889119</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>Bottom line up front:  Create a
'root' branch directly under the source control branch associated with a new Team
Project.</b>
        <br />
        <br />
I see this all the time...  Someone creates a new source control branch in TFS
and starts creating solutions underneath the default project branch.  In other
words, they end up with this:<br /><br />
$/ProjectName<br />
    /SolutionName1<br />
        /ProjectName1<br />
        /ProjectName2<br />
    /SolutionName2<br />
        /ProjectName3<br />
        /ProjectName4<br /><br />
Now, the difficult comes when the shop needs to create a second version of the application. 
Code branches directly under the root (i.e., $/ProjectName) can only be created when
a new Team Project is created.  If, in the above example, SolutionName1 and SolutionName2
both belong to the current version of the application, then creating a new version
of the application will require either the creation of a new team project (with a
branch from the $/ProjectName), or a wildly unweildly structure where each solution
is branched, resulting in something like:<br /><br />
$/ProjectName<br />
    /SolutionName1<br />
        /ProjectName1<br />
        /ProjectName2<br />
    /SolutionName2<br />
        /ProjectName3<br />
        /ProjectName4<br />
    /SolutionName1_v2<br />
        /ProjectName1<br />
        /ProjectName2<br />
    /SolutionName2_v2<br />
        /ProjectName3<br />
        /ProjectName4<br /><br />
A MUCH cleaner approach is so simple, yet requires a bit of forethought.  Immediately
after creating the Team Project, simply go in an create a new directory called 'root'
(or 'edge' or whatever you'd like).  You can then create a full branch of the
V1 off the application by simply branching 'root'.  This allows This resulting
in the following structure, even after creating a v2 of the project.<br /><br />
$/ProjectName<br /><b>    /root              
            </b><i>&lt;-- Create this branch!</i><br />
        /SolutionName1<br />
            /ProjectName1<br />
            /ProjectName2<br />
        /SolutionName2<br />
            /ProjectName3<br />
            /ProjectName4<br /><b>    /ProjectName_v2      </b><i>&lt;-- This
is the branch of 'root'</i><br />
        /SolutionName1<br />
            /ProjectName1<br />
            /ProjectName2<br />
        /SolutionName2<br />
            /ProjectName3<br />
            /ProjectName4<br /><br />
Now, whether you should have your projects under your solution directories... 
that's for another post...<br /><br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=b7549d4b-23d6-41df-bb4d-3010ed889119" /></body>
      <title>Version Control Structure - Best Practice</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,b7549d4b-23d6-41df-bb4d-3010ed889119.aspx</guid>
      <link>http://blog.accentient.com/2007/01/16/VersionControlStructureBestPractice.aspx</link>
      <pubDate>Tue, 16 Jan 2007 01:11:08 GMT</pubDate>
      <description>&lt;b&gt;Bottom line up front:&amp;nbsp; Create a 'root' branch directly under the source control
branch associated with a new Team Project.&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
I see this all the time...&amp;nbsp; Someone creates a new source control branch in TFS
and starts creating solutions underneath the default project branch.&amp;nbsp; In other
words, they end up with this:&lt;br&gt;
&lt;br&gt;
$/ProjectName&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName4&lt;br&gt;
&lt;br&gt;
Now, the difficult comes when the shop needs to create a second version of the application.&amp;nbsp;
Code branches directly under the root (i.e., $/ProjectName) can only be created when
a new Team Project is created.&amp;nbsp; If, in the above example, SolutionName1 and SolutionName2
both belong to the current version of the application, then creating a new version
of the application will require either the creation of a new team project (with a
branch from the $/ProjectName), or a wildly unweildly structure where each solution
is branched, resulting in something like:&lt;br&gt;
&lt;br&gt;
$/ProjectName&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName1_v2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName2_v2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName4&lt;br&gt;
&lt;br&gt;
A MUCH cleaner approach is so simple, yet requires a bit of forethought.&amp;nbsp; Immediately
after creating the Team Project, simply go in an create a new directory called 'root'
(or 'edge' or whatever you'd like).&amp;nbsp; You can then create a full branch of the
V1 off the application by simply branching 'root'.&amp;nbsp; This allows This resulting
in the following structure, even after creating a v2 of the project.&lt;br&gt;
&lt;br&gt;
$/ProjectName&lt;br&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /root&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;i&gt;&amp;lt;-- Create this branch!&lt;/i&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; /ProjectName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; /ProjectName3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName4&lt;br&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName_v2&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;i&gt;&amp;lt;-- This
is the branch of 'root'&lt;/i&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; /ProjectName1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /SolutionName2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; /ProjectName3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /ProjectName4&lt;br&gt;
&lt;br&gt;
Now, whether you should have your projects under your solution directories...&amp;nbsp;
that's for another post...&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=b7549d4b-23d6-41df-bb4d-3010ed889119" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,b7549d4b-23d6-41df-bb4d-3010ed889119.aspx</comments>
      <category>Best Practice</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://blog.accentient.com/Trackback.aspx?guid=47a24f6c-3f69-4301-8c31-cbfda316e780</trackback:ping>
      <pingback:server>http://blog.accentient.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.accentient.com/PermaLink,guid,47a24f6c-3f69-4301-8c31-cbfda316e780.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.accentient.com/CommentView,guid,47a24f6c-3f69-4301-8c31-cbfda316e780.aspx</wfw:comment>
      <wfw:commentRss>http://blog.accentient.com/SyndicationService.asmx/GetEntryCommentsRss?guid=47a24f6c-3f69-4301-8c31-cbfda316e780</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">How many build scripts do you need? 
There seems to be some massive confusion around TFS Build Scripts, namely, how many
a single project needs.  If your answer is one, you too have a misunderstanding! 
:-)  In my experience, one build script is not nearly enough, in fact, I encourage
several.  Here's the why and how.<br /><br /><b>Why</b>:  Visual Studio Team System (VSTS) and Team Foundation Server (TFS)
is absolutely brilliant at tracking information related to a series of builds. 
That information is archived, analyzed and reported in a very useful fashion. 
BUT, it it reported by the NAME of the build.  Thus, if you only have one build
type, you can only have one set of reports!  And that's no good!  You need
more. The primary reason for having more than one build type is to get good, easily
understandable, accurate metrics.<br /><ol><li>
First, you need a build script for your continuous integration builds.  This
script runs every time someone checks in code (with certain restrictions).  You
likely won't want an aggregate report on these builds, except for rare cases -- there
are just too many of them.  This build is optional.  I'm a fan of CI, but
if it's a bridge too far, don't worry.  The critical build is the nightly build...<br /></li><li>
A TFS Build for your daily / nightly builds.  This build runs every night at
a set time.  This build shows you what was accomplished during that entire day,
including quality metrics, code churn, etc.  This is one of the most valuable
builds, since its reporting is clearly segmented by time -- one build per day. 
This allows a team to see what is being accomplished on a day to day basis. 
</li><li>
A TFS Build for weekly builds.  This runs every weekend.  Like the daily
build, it will allow the reporting engine to show you what was accomplished that week,
and how quality changes from week to week.  This allows you to see aggregate
changes over a chunkier time sequence, namely weeks.  
<br /></li><li>
An end-of-iteration build.  I've found you don't need to go any longer than weeks
this for most projects, as far as reporting is concerned.  However, you may choose
to create a build that runs at the end of every iteration.  This gives you metrics
on what was accomplished during the entire iteration. 
</li><li>
An on-demand build.  This one is used for folks who just need to trigger a build
whenever.  Unless it's necessary or useful, you may choose to have this build
not report anything back to the data warehouse.</li></ol><b>How</b>:  It's easy!  The reason for all these builds was stricktly for
the reporting.  That means that each of these builds is likely going to be nearly
identical!  So, all you need to do is create the first build (the hard part),
and copy it several times, giving it a different name each time.  That's all
there is to it!  
<br /><br />
So, go forth and replicate those builds!  
<br /><br /><br /><br /><br /><p></p><img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=47a24f6c-3f69-4301-8c31-cbfda316e780" /></body>
      <title>TFS Build Scripts - Best Practice</title>
      <guid isPermaLink="false">http://blog.accentient.com/PermaLink,guid,47a24f6c-3f69-4301-8c31-cbfda316e780.aspx</guid>
      <link>http://blog.accentient.com/2007/01/05/TFSBuildScriptsBestPractice.aspx</link>
      <pubDate>Fri, 05 Jan 2007 17:06:12 GMT</pubDate>
      <description>How many build scripts do you need?&amp;nbsp; There seems to be some massive confusion around TFS Build Scripts, namely, how many a single project needs.&amp;nbsp; If your answer is one, you too have a misunderstanding!&amp;nbsp; :-)&amp;nbsp; In my experience, one build script is not nearly enough, in fact, I encourage several.&amp;nbsp; Here's the why and how.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Why&lt;/b&gt;:&amp;nbsp; Visual Studio Team System (VSTS) and Team Foundation Server (TFS)
is absolutely brilliant at tracking information related to a series of builds.&amp;nbsp;
That information is archived, analyzed and reported in a very useful fashion.&amp;nbsp;
BUT, it it reported by the NAME of the build.&amp;nbsp; Thus, if you only have one build
type, you can only have one set of reports!&amp;nbsp; And that's no good!&amp;nbsp; You need
more. The primary reason for having more than one build type is to get good, easily
understandable, accurate metrics.&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
First, you need a build script for your continuous integration builds.&amp;nbsp; This
script runs every time someone checks in code (with certain restrictions).&amp;nbsp; You
likely won't want an aggregate report on these builds, except for rare cases -- there
are just too many of them.&amp;nbsp; This build is optional.&amp;nbsp; I'm a fan of CI, but
if it's a bridge too far, don't worry.&amp;nbsp; The critical build is the nightly build...&lt;br&gt;
&lt;li&gt;
A TFS Build for your daily / nightly builds.&amp;nbsp; This build runs every night at
a set time.&amp;nbsp; This build shows you what was accomplished during that entire day,
including quality metrics, code churn, etc.&amp;nbsp; This is one of the most valuable
builds, since its reporting is clearly segmented by time -- one build per day.&amp;nbsp;
This allows a team to see what is being accomplished on a day to day basis. 
&lt;li&gt;
A TFS Build for weekly builds.&amp;nbsp; This runs every weekend.&amp;nbsp; Like the daily
build, it will allow the reporting engine to show you what was accomplished that week,
and how quality changes from week to week.&amp;nbsp; This allows you to see aggregate
changes over a chunkier time sequence, namely weeks.&amp;nbsp; 
&lt;br&gt;
&lt;li&gt;
An end-of-iteration build.&amp;nbsp; I've found you don't need to go any longer than weeks
this for most projects, as far as reporting is concerned.&amp;nbsp; However, you may choose
to create a build that runs at the end of every iteration.&amp;nbsp; This gives you metrics
on what was accomplished during the entire iteration. 
&lt;li&gt;
An on-demand build.&amp;nbsp; This one is used for folks who just need to trigger a build
whenever.&amp;nbsp; Unless it's necessary or useful, you may choose to have this build
not report anything back to the data warehouse.&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;How&lt;/b&gt;:&amp;nbsp; It's easy!&amp;nbsp; The reason for all these builds was stricktly for
the reporting.&amp;nbsp; That means that each of these builds is likely going to be nearly
identical!&amp;nbsp; So, all you need to do is create the first build (the hard part),
and copy it several times, giving it a different name each time.&amp;nbsp; That's all
there is to it!&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
So, go forth and replicate those builds!&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.accentient.com/aggbug.ashx?id=47a24f6c-3f69-4301-8c31-cbfda316e780" /&gt;</description>
      <comments>http://blog.accentient.com/CommentView,guid,47a24f6c-3f69-4301-8c31-cbfda316e780.aspx</comments>
      <category>Best Practice</category>
      <category>Team System</category>
      <category>Visual Studio 2005</category>
    </item>
  </channel>
</rss>