<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Where Technology Meets Teamwork &#187; Jeff Levinson</title>
	<atom:link href="http://blog.nwcadence.com/author/jefflevinson/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nwcadence.com</link>
	<description>Thoughts on VSTS, Sharepoint and other collaborative technologies</description>
	<lastBuildDate>Thu, 04 Feb 2010 22:30:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Installing MOSS on Windows Server 2008 R2</title>
		<link>http://blog.nwcadence.com/2009/10/installing-moss-on-windows-server-2008-r2/</link>
		<comments>http://blog.nwcadence.com/2009/10/installing-moss-on-windows-server-2008-r2/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 18:39:31 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[TFS]]></category>
		<category><![CDATA[VS2010]]></category>
		<category><![CDATA[extendvs]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[TFS 2010]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=226</guid>
		<description><![CDATA[You may be playing with the new TFS 2010 Beta 2 bits. You may also be playing with MOSS 2007. And you may be doing it all on Windows Server 2008 R2 which is a rocking operating system. However, you may also be running into a small problem with the install guide (Microsoft is already [...]]]></description>
			<content:encoded><![CDATA[<p>You may be playing with the new TFS 2010 Beta 2 bits. You may also be playing with MOSS 2007. And you may be doing it all on Windows Server 2008 R2 which is a rocking operating system. However, you may also be running into a small problem with the install guide (Microsoft is already aware of this and it&#8217;s being fixed for the RTM documentation). Once you install MOSS 2007 the install guide has you run two stsadm -o extendvs commands for SharePoint. However, they won&#8217;t work. The problem has nothing to do with the commands itself, but rather with how MOSS is installed. In IIS MOSS is installed under the DefaultAppPool but this app pool has the identity DefaultAppPoolIdentity rather than Network Service as it did in prior versions of Windows Server. To fix this problem, simplyy change the identity of the DefaultAppPool to Network Service and then run the extendvs commands!</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=226&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2009/10/installing-moss-on-windows-server-2008-r2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We&#8217;re Speaking At Tech Ed!</title>
		<link>http://blog.nwcadence.com/2009/03/were-speaking-at-tech-ed/</link>
		<comments>http://blog.nwcadence.com/2009/03/were-speaking-at-tech-ed/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 18:56:56 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2009/03/16/were-speaking-at-tech-ed/</guid>
		<description><![CDATA[ Both Steven Borg and I will be speaking for a combined total of 4 sessions and 1 pre-con. The pre-con session is PRC05: Improve Your Software Development: Real World Solutions with Team System 2008. We’ll be discussing solutions that our customers have found helpful in improving their software development efficiencies, quality and other measurable [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.msteched.com" target="_blank"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="TENA_blgr2_speaking" src="http://blog.nwcadence.com/wp-content/uploads/2009/03/tena-blgr2-speaking.gif" border="0" alt="TENA_blgr2_speaking" width="184" height="204" /></a> Both Steven Borg and I will be speaking for a combined total of 4 sessions and 1 pre-con. The pre-con session is PRC05: Improve Your Software Development: Real World Solutions with Team System 2008. We’ll be discussing solutions that our customers have found helpful in improving their software development efficiencies, quality and other measurable units of success. Whether you work with an agile process or a formal process, this session will provide you valuable tips for helping take your development organization to the next level!</p>
<p>Click the image for a link to Tech Ed! And be sure to drop by and visit us at the Team System booth!</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=202&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2009/03/were-speaking-at-tech-ed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Issues with Alerts in TFS</title>
		<link>http://blog.nwcadence.com/2009/03/issues-with-alerts-in-tfs/</link>
		<comments>http://blog.nwcadence.com/2009/03/issues-with-alerts-in-tfs/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 19:30:54 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2009/03/02/issues-with-alerts-in-tfs/</guid>
		<description><![CDATA[Every once in a while we get customers who note issues with alerts. In some cases alerts are being duplicated, items don’t show up in the alerts editor, by default you can only see alerts for yourself, etc. This makes managing alerts difficult in some cases. There’s an easy way to identify and remove unwanted [...]]]></description>
			<content:encoded><![CDATA[<p>Every once in a while we get customers who note issues with alerts. In some cases alerts are being duplicated, items don’t show up in the alerts editor, by default you can only see alerts for yourself, etc. This makes managing alerts difficult in some cases. There’s an easy way to identify and remove unwanted alerts.</p>
<p>CAUTION – THIS INVOLVES GOING INTO THE TFS DATABASE – DANGER WILL ROBINSON, DANGER</p>
<p>Okay, having given you that warning, here’s what you want to do:</p>
<p>Look in the database server for the TfsIntegration database. Run the following selects:</p>
<p>select * from tbl_subscription</p>
<p>select * from tbl_security_identity_cache</p>
<p>The first table gives you the list of subscriptions. However, the users aren’t displayed in the table, only the SID’s. Look in the second table for the SIDS. You can delete rows out of the tbl_subscription table without harm which will remove the alert.</p>
<p>Do NOT delete the first four alerts (which are not assigned to a user and don’t have a filter).</p>
<p>TAKE A BACKUP FIRST.</p>
<p>It never hurts <img src='http://blog.nwcadence.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=200&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2009/03/issues-with-alerts-in-tfs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Practical Process Improvement (Part 5)</title>
		<link>http://blog.nwcadence.com/2008/12/practical-process-improvement-part-5/</link>
		<comments>http://blog.nwcadence.com/2008/12/practical-process-improvement-part-5/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 02:20:15 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Test Cases]]></category>
		<category><![CDATA[Testing Requirements]]></category>
		<category><![CDATA[Use Cases]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=165</guid>
		<description><![CDATA[The first four posts (Part 1, Part 2, Part 3, Part 4) dealt with working through a process for handling bugs and improving that process. But what about preventing bugs to begin with? In this part I&#8217;ll talk about some preventative measures to help eliminate bugs at the requirements and development phase.
Let’s start with functional [...]]]></description>
			<content:encoded><![CDATA[<p>The first four posts (<a href="http://blog.nwcadence.com/2008/10/01/practical-process-improvement-part-1/">Part 1</a>, <a href="http://blog.nwcadence.com/2008/10/23/practical-process-improvement-part-2/">Part 2</a>, <a href="http://blog.nwcadence.com/2008/10/31/practical-process-improvement-part-3/">Part 3</a>, <a href="http://blog.nwcadence.com/2008/11/14/practical-process-improvement-part-4/">Part 4</a>) dealt with working through a process for handling bugs and improving that process. But what about preventing bugs to begin with? In this part I&#8217;ll talk about some preventative measures to help eliminate bugs at the requirements and development phase.</p>
<p>Let’s start with functional bugs. These are the bugs that really shouldn’t be in applications. Now, I am a realist and I understand that it is impractical to try to eliminate all bugs (you can do it but at what cost?) in most applications. This does not hold true for life-critical applications in which there is no margin for error. However, how do you eliminate all of the functional bugs? Testers are not the way to eliminate bugs. If a bug gets to the testing stage you’ve already introduced waste. You want to ensure that before the software gets to the testers, that there are no bugs.</p>
<p><strong>Note: In Lean theory, there would be no testers (or “inspectors”) because all they would be doing is finding a problem that shouldn’t have been introduced in the first place. But in software development I believe this is impractical in most cases.</strong></p>
<p>Let me pose this question to you (this is more applicable if you are a developer but if you aren’t, put yourself in the developers’ shoes): How does a developer know when they are done writing code?</p>
<p>Seems like a simple question, right? I commonly get five answers when I ask this question:</p>
<ol>
<li>You’re never done coding a requirement, it’s an ongoing, evolving process with no end in sight.</li>
<li>When my code does what the requirement says it should do.</li>
<li>You’re done when the analyst says you’re done.</li>
<li>You’re done when all of the unit tests pass.</li>
<li>You&#8217;re done on the day the code is due.</li>
</ol>
<p>The fourth answer is usually from groups doing Test Driven Development or heavy unit testing in a true agile process such as Extreme Programming (XP). I’ll address questions about methodology later in this book.</p>
<p>Looking at answers 1, 2, 3 and 5 you can almost feel the depression. Certainly answer number 1 is depressing – essentially you never finish and you can never know when you’re finished. Answer 5 means that the developer feels that maybe they don&#8217;t get the time to finish the way they would like to &#8211; again, depressing. Answers 2 and 3 are essentially the same (you hope anyway) but there is a major problem. As I’ve noted already, requirements are subjective which means that while you think you’re done you probably aren’t done.</p>
<h4>Test Cases <em>before Code</em></h4>
<p>A better answer is: “I’m done when all of the test cases for this requirement pass.” Now this presents some problems. First, most organizations do <em>not</em> create test cases at the same time as they create requirements. Second, those organizations that do create test cases at this stage do not create repeatable test cases (a.k.a. flimsy test cases). Finally, I have not worked with any organizations that require the users to sign off on test cases the same way they have to sign off on requirements. It kind of doesn’t make sense does it? To have customers sign off on documents which are mostly vague but not have the customers sign off on documents that provide definitive proof that a requirement has been met.</p>
<p>So then, the solution to this problem is simple, assign testers to work with analysts and write test cases for requirements before the requirements are handed to developers. Sounds simple, right? This is where a cost justification comes in. You need additional resources earlier in the process which will save costs later in the process. It’s hard to prove a negative to management and get the appropriate resources and funding.</p>
<p>Another issue with this simple solution is that depending on the type of methodology you are using, it may be difficult to break people of old habits. The manners in which requirements are documented make a huge difference in the ease of creating related test cases. For instance, the best format (let me qualify this &#8211; in my opinion) for requirements in relationship to test cases are <em>use cases</em>. A sample use case is shown in the table below.</p>
<table border="1" cellspacing="0" cellpadding="2" width="993">
<tbody>
<tr>
<td width="206" valign="top">ID:</td>
<td width="785" valign="top">UC-POS-01</td>
</tr>
<tr>
<td width="210" valign="top">Title:</td>
<td width="782" valign="top">Enter Merchandise</td>
</tr>
<tr>
<td width="213" valign="top">Created By:</td>
<td width="779" valign="top">Jeff Levinson</td>
</tr>
<tr>
<td width="216" valign="top">Date Created:</td>
<td width="777" valign="top">7/19/2007</td>
</tr>
<tr>
<td width="218" valign="top">Last Updated By:</td>
<td width="775" valign="top"></td>
</tr>
<tr>
<td width="220" valign="top">Date Last Updated:</td>
<td width="773" valign="top"></td>
</tr>
<tr>
<td width="222" valign="top">Actors:</td>
<td width="772" valign="top">Salesperson</td>
</tr>
<tr>
<td width="223" valign="top">Description:</td>
<td width="771" valign="top">The salesperson enters items into the POS system</td>
</tr>
<tr>
<td width="224" valign="top">Trigger:</td>
<td width="770" valign="top">Customer wants to check out</td>
</tr>
<tr>
<td width="225" valign="top">Preconditions:</td>
<td width="769" valign="top">None</td>
</tr>
<tr>
<td width="226" valign="top">Postconditions:</td>
<td width="768" valign="top">The POS system has a list of items for purchase by the customer and displays the total that the customer owes.</td>
</tr>
<tr>
<td width="227" valign="top">Normal Path:</td>
<td width="767" valign="top">
<ol>
<li>Salesperson logs onto the system</li>
<li>System verifies identity</li>
<li>Salesperson elects to ring up a new purchase</li>
<li>System displays the new purchase screen</li>
<li>Salesperson scans the item barcode</li>
<li>System displays the items
<ol>
<li>Title</li>
<li>Description</li>
<li>Price</li>
</ol>
</li>
<li>[Repeat steps 5 and 6 until order is complete]</li>
<li>Salesperson completes the order</li>
<li>System displays the total cost of all items, including sales tax</li>
</ol>
</td>
</tr>
<tr>
<td width="228" valign="top">Alternative Path:</td>
<td width="767" valign="top">A1: Invalid logon<br />
[Branch at Step 1]</p>
<ol>
<li>System notifies user that the logon attempt failed</li>
<li>User retries to log onto the system</li>
</ol>
<p>[After three tries the user is logged out and needs a manager to re-enable their logon]<br />
[Resume at Step 2 if logon successful]</p>
<p>A2: The item does not have a barcode<br />
[Branch at Step 5]</p>
<ol>
<li>Salesperson manually enters the UPC code into the system</li>
</ol>
<p>[Resume at Step 5]</p>
<p>A3: The item is not found<br />
[Branch at Step 5]</p>
<ol>
<li>Salesperson enters the UPC code</li>
<li>System prompts the Salesperson for the following:
<ol>
<li>Actual UPC code of the item</li>
<li>Item title</li>
<li>Item price</li>
</ol>
</li>
<li>Salesperson enters the appropriate information</li>
</ol>
<p>[Resume at Step 7]</td>
</tr>
<tr>
<td width="228" valign="top">Exceptions:</td>
<td width="767" valign="top">None</td>
</tr>
<tr>
<td width="228" valign="top">Frequency of Use:</td>
<td width="767" valign="top">Approx. 100 times per day.</td>
</tr>
<tr>
<td width="228" valign="top">Notes:</td>
<td width="767" valign="top">None</td>
</tr>
</tbody>
</table>
<p>While you can probably find lots of other situations, alternate paths and exception paths, this serves as a good example for entering items you may find at any retail store.</p>
<p>The reason why use cases are the best starting point for test cases is because they already describe the interaction between the user and the system so you know what the user is supposed to be providing and you know what information the system is supposed to be responding with.</p>
<p>If you are using a methodology such as Scrum which advocates <em>user stories</em> there may be some difficulties. Not because there is anything inherently wrong with user stories, but you can’t write code from a user story. User stories are designed to note a high level requirement and describe the users’ use of the functionality to provide perspective and context for the developers. What many forget to do is to provide more detailed requirements (which can be in the form of use cases) which can form the basis of test cases (if you are going to write use cases based off of user stories, then the description would be the user story). In other circumstances there is no formal method for writing requirements documents which means the structure of each document is entirely up to the analyst who writes the requirements.</p>
<p>Let’s look at a sample test case which tests the use case in the table above.</p>
<table border="1" cellspacing="0" cellpadding="2" width="988">
<tbody>
<tr>
<td width="70" valign="top"><strong>Step #</strong></td>
<td width="353" valign="top"><strong>Action</strong></td>
<td width="555" valign="top"><strong>Expected Result</strong></td>
</tr>
<tr>
<td width="75" valign="top">1</td>
<td width="353" valign="top">Log onto the system</td>
<td width="555" valign="top">System displays the main menu screen</td>
</tr>
<tr>
<td width="79" valign="top">2</td>
<td width="353" valign="top">Select the new sale menu item</td>
<td width="555" valign="top">System displays the new purchase screen</td>
</tr>
<tr>
<td width="83" valign="top">3</td>
<td width="353" valign="top">Scan an item barcode</td>
<td width="555" valign="top">System displays the item information</td>
</tr>
</tbody>
</table>
<p>HOLD EVERYTHING! What’s wrong with this test case (besides that it isn’t complete)? This is the typical test case that I see when I work with customers all of the time. If you are a professional tester reading this you know the answer to this: <em>This test case is not repeatable</em>. Believe it or not, I have had to disabuse people of the notion that this type of test case is a good test case. But let’s see what the problem is here. In step 1 I log on as the user. Well, what user? It assumes that the logon was successful so that means I need to log on with a valid user. What user though? This is a test system and will hopefully not have production values in it. In step 3 I’m supposed to scan a barcode for the test. What barcode? Can I use the paperback book I’m reading at lunch for this purpose or maybe the barcode from the candy bar that I bought for lunch? Again, the system is supposed to display the appropriate information which assumes I’ve picked an item actually in the inventory. This makes for a poor testing and a poor coding experience. Let’s try this test case again.</p>
<table border="1" cellspacing="0" cellpadding="2" width="983">
<tbody>
<tr>
<td width="83" valign="top"><strong>Step #</strong></td>
<td width="356" valign="top"><strong>Action</strong></td>
<td width="539" valign="top"><strong>Expected Result</strong></td>
</tr>
<tr>
<td width="83" valign="top">1</td>
<td width="356" valign="top">Log onto the system with username: Jeff and password: <a href="mailto:P@ssw0rd">P@ssw0rd</a></td>
<td width="538" valign="top">System displays the main menu screen</td>
</tr>
<tr>
<td width="83" valign="top">2</td>
<td width="356" valign="top">Select the New Purchase menu item by pressing &#8220;A&#8221;</td>
<td width="537" valign="top">System displays the new purchase screen</td>
</tr>
<tr>
<td width="83" valign="top">3</td>
<td width="356" valign="top">Scan the book barcode &#8220;Gone with the Wind&#8221; (ISBN: 1416548890)</td>
<td width="536" valign="top">System displays:<br />
- Gone With The Wind<br />
- A southern love story<br />
- 11.55</td>
</tr>
<tr>
<td width="83" valign="top">4</td>
<td width="356" valign="top">Press the Total button</td>
<td width="535" valign="top">System displays the subtotal as 11.55, Sales Tax as 8.25% and the total as 12.50</td>
</tr>
</tbody>
</table>
<p>Now this is almost a repeatable test case. What’s missing? There really is only one thing missing here (there are a few minor things but I’m sticking with the major issues) – the setup. How does the system know the tax amount is 8.25%? It can be different depending on where the machine is located. Test cases need to included necessary infrastructure setup and in this case the test would have to be run with different sales tax amounts (or no sales tax amount if we want to assume that maybe this is being used for internet sales in some cases).</p>
<p>In order to have a complete battery of tests this test case would have to be repeated with numerous different values. How many different scenarios do you test? What are the likelihood of the different scenarios occurring and what is the cost if they do occur and the software fails. In the above example, one may assume that you could simply ignore the situation in which the item isn’t found in inventory. After all, if the item is on the store shelf it had to have been received and if it was received it was scanned into inventory. Maybe the chance of this occurring is very, very low but what if it does occur? Without being able to manually enter the item you would not be able to sell the item to the customer. So the cost of this mistake is the amount of the item plus some of the stores reputation. This may be too high a price. It is critical to understand the importance of each of the scenarios when making the decision of what to test.</p>
<p>Well, why don’t we just test everything? The short answer is that it isn’t feasible (again, this does not apply to life-critical applications but it does apply to virtually everything else). The cost in time, resources and equipment to test everything has to be balanced against the ROI. I believe it is possible to make error free applications but at what cost? If it costs 10,000 to test every aspect of the alternate paths but those only become a reality once every 5,000 sales for low dollar amounts, does it provide a benefit? The answer is probably not. As with almost everything else, use the 80/20 rule. That is, 80% of the usage of your application is going to involve 20% of the code (we write an enormous amount of code to handle exception paths and alternate situations). Test that 20% of the code 100%. The other 80% of the code can be tested as problems are discovered or as time permits.</p>
<p>Now that you have a series of good test cases which concretely detail what the system must do, a developer can now answer the question, “When do you know you are done coding?” The answer is, “When the functional test cases I was provided pass.” This is the <em>only</em> right answer (but not usually the one the developers can use).</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=165&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/12/practical-process-improvement-part-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Practical Process Improvement (Part 4)</title>
		<link>http://blog.nwcadence.com/2008/11/practical-process-improvement-part-4/</link>
		<comments>http://blog.nwcadence.com/2008/11/practical-process-improvement-part-4/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 17:37:12 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Lean Software Development]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Roles & Responsibilities]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=153</guid>
		<description><![CDATA[In the previous two posts (Part 2 and Part 3) I covered an ideal bug process and the metrics you gather from the process. In this post I&#8217;ll start talking about how to use those metrics to really improve the process. I&#8217;ll also talk a bit more about who&#8217;s responsible for what. The main goal [...]]]></description>
			<content:encoded><![CDATA[<p>In the previous two posts (<a href="http://blog.nwcadence.com/2008/10/23/practical-process-improvement-part-2/" target="_blank">Part 2</a> and <a href="http://blog.nwcadence.com/2008/10/31/practical-process-improvement-part-3/" target="_blank">Part 3</a>) I covered an ideal bug process and the metrics you gather from the process. In this post I&#8217;ll start talking about how to use those metrics to really improve the process. I&#8217;ll also talk a bit more about who&#8217;s responsible for what. The main goal here is to show that it is not a major impact on the development team (if you&#8217;re using Team System &#8211; if you&#8217;re doing this manually it may require more time).</p>
<h3>Roles &amp; Responsibilities</h3>
<p>The figure below shows who is responsible for transitioning items between states in a perfect world.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2008/11/roles-and-responsibilities.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://blog.nwcadence.com/wp-content/uploads/2008/11/roles-and-responsibilities-thumb.png" border="0" alt="Roles_and_Responsibilities" width="244" height="163" /></a></p>
<p>This figure very succinctly states the following:</p>
<ol>
<li>A user, analyst, developer or tester can file a bug report.</li>
<li>A project manager must assign the bug report to someone to investigate. The person they will assign it to is an analyst.</li>
<li>An analyst can determine if the investigation is complete. They can also close a bug for the reasons noted in the previous section.</li>
<li>A project manager assigns the bug to a developer (or not if the bug is being fixed in a later release).</li>
<li>A developer will set the bug to Active when they start working on it.</li>
<li>A developer determines when the bug is fixed.</li>
<li>Depending on the release process, either a Release Manager or QA Manager will note when the bug is ready for testing (and assign it to a tester). This is because there may be a configuration management (i.e. branching structure) which the code fix needs to be promoted through so that the testers can actually get it in a good build.</li>
<li>A tester will note that the bug is being tested.</li>
<li>A tester will note that the bug fix has been verified. If the bug has not been fixed, a tester can also re-assign the bug to a developer.</li>
<li>A release manager will determine which release the bug fix will be deployed in and prepare the appropriate documentation.</li>
<li>Upon successful release, the project manager will close the bug.</li>
</ol>
<h3>Reports</h3>
<p>So, you have this great bug tracking process now and you know what information you can get from each step. How do you get it easily? What reports are most important? Where do you cut down on waste?</p>
<h4>Waste</h4>
<p>Let’s start with looking at a report showing waste and determine how it might be eliminated. The next figure shows a chart of the average flow time for bugs in a system using the above process.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2008/11/bug-throughput.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://blog.nwcadence.com/wp-content/uploads/2008/11/bug-throughput-thumb.png" border="0" alt="Bug throughput" width="244" height="160" /></a></p>
<p>This chart is based on the following data:</p>
<p><strong></strong></p>
<table border="1" cellspacing="0" cellpadding="1" width="400">
<tbody>
<tr>
<td width="183" valign="top">State</td>
<td width="110" valign="top">Updated Time</td>
<td width="104" valign="top">Time (in hours)</td>
</tr>
<tr>
<td width="183" valign="top">Proposed</td>
<td width="110" valign="top">8/25/2008 9:30</td>
<td width="104" valign="top"></td>
</tr>
<tr>
<td width="183" valign="top">Under Investigation</td>
<td width="110" valign="top">8/25/2008 10:30</td>
<td width="104" valign="top">1</td>
</tr>
<tr>
<td width="183" valign="top">Investigation Complete</td>
<td width="110" valign="top">8/26/2008 11:00</td>
<td width="104" valign="top">8.5</td>
</tr>
<tr>
<td width="183" valign="top">Assigned</td>
<td width="110" valign="top">8/27/2008 10:00</td>
<td width="104" valign="top">7</td>
</tr>
<tr>
<td width="183" valign="top">Active</td>
<td width="110" valign="top">8/27/2008 10:15</td>
<td width="104" valign="top">.25</td>
</tr>
<tr>
<td width="183" valign="top">Fixed, unverified</td>
<td width="110" valign="top">8/27/2008 16:30</td>
<td width="104" valign="top">6.25</td>
</tr>
<tr>
<td width="183" valign="top">Ready for Testing</td>
<td width="110" valign="top">8/29/2008 17:00</td>
<td width="104" valign="top">16.5</td>
</tr>
<tr>
<td width="183" valign="top">In Testing</td>
<td width="110" valign="top">9/1/2008 11:00</td>
<td width="104" valign="top">2</td>
</tr>
<tr>
<td width="183" valign="top">Fixed, verified</td>
<td width="110" valign="top">9/1/2008 11:30</td>
<td width="104" valign="top">.5</td>
</tr>
<tr>
<td width="183" valign="top">Scheduled for Deployment</td>
<td width="110" valign="top">9/2/2008 15:00</td>
<td width="104" valign="top">11.5</td>
</tr>
<tr>
<td width="183" valign="top">Closed</td>
<td width="110" valign="top">9/4/2008 13:00</td>
<td width="104" valign="top">14</td>
</tr>
<tr>
<td width="183" valign="top">Total</td>
<td width="110" valign="top"></td>
<td width="104" valign="top">67.5</td>
</tr>
</tbody>
</table>
<p>Note that I have included only working hours – no weekends or after hours. While this would normally be an average of these values, I wanted to demonstrate how time is determined. Still, if this were an average, you would note that the average time to fix bugs and deploy them is 67.5 hours or almost three days on average. Where can you reduce the amount of time wasted?</p>
<p><strong><em><span style="text-decoration: underline;">Note</span></em></strong></p>
<p><em>In Lean, batching is considered a bad process. The reason for this is that when you batch it means that someone is waiting to receive all of the times that make up that batch and therefore time is wasted. However, in software development, and specifically when dealing with change and release configuration management there really is no other way because fixes almost always must go in together. Promoting them one at a time would take more time than it would save and is also a major configuration headache.</em></p>
<p>Looking at the chart and table, the actual time spent working on the bug is 15.25 hours (the hours spent investigating, fixing and testing). The time wasted is 50.25 hours (the hours spent waiting while the bug was waiting to be investigated, between the investigation being completed and the bug being assigned, between the bug being assigned and the bug being worked, between the bug being fixed and it being tested and finally between the time the bug was tested until the time the bug was deployed). Again, going back to the principle of waste in Lean theory, the 50.25 hours is complete waste. Now having said that, let’s take a reality check since not all of Lean can apply to software development. Where can you reasonably shave hours?</p>
<p>The first thing to do is to understand <em>why</em> an item may be in a given state for an extended period of time. Let’s look at a hypothetical process and see what may happen in some of these states where waste is occurring.</p>
<p>The next post in this series will cover the hypothetical process. We&#8217;ll also start covering different scenarios and organization size when dealing with issues because this is <strong>NOT </strong>a one-size fits all process.</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=153&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/11/practical-process-improvement-part-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Practical Process Improvement (Part 3)</title>
		<link>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-3/</link>
		<comments>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-3/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 19:53:19 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Bug States]]></category>
		<category><![CDATA[Practical Process Improvement]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[VSTS]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=136</guid>
		<description><![CDATA[In the last post in this series I discussed the process involved around the first part of the ideal bug process. In this post I will finish up the rest of the process and metrics for handling bugs.
Fixed, unverified
This state indicates the bug has been fixed according to the developer.
This means that the developer has [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://blog.nwcadence.com/2008/10/23/practical-process-improvement-part-2/" target="_blank">last</a> post in this series I discussed the process involved around the first part of the ideal bug process. In this post I will finish up the rest of the process and metrics for handling bugs.</p>
<h4><span style="text-decoration: underline;">Fixed, unverified</span></h4>
<p>This state indicates the bug has been fixed according to the developer.</p>
<p>This means that the developer has fixed the code, checked it in and associated it with the appropriate bug work item. They have run the test case provided by the analyst in the Under Investigation state. In addition, the time between the bug being in the Active state and the Fixed, unverified state is the time it took the developer to fix the bug. In other words, we now have an approximation of the developer effort to fix the bug. It doesn’t provide an exact time but it provides an overall throughput time.</p>
<h4><span style="text-decoration: underline;">Ready for Testing</span></h4>
<p>This state indicates the bug has been assigned to a tester but the testing has not yet started.</p>
<p>There are a number of reasons for this state. The first is that your branching model is such that a tester does not have access immediately after the code has been finished (i.e. you are waiting to promote code to the QA branch). The second is that there is simply other work going on and that the tester just can’t get to it right now. The transition between Fixed, unverified and Ready for Testing should be made by a Test Manager to acknowledge that the bug has been assigned to a tester (or to the testing group in general) and that it is on the right code branch for testing. The transition to this state does not provide any other meaningful information.</p>
<h4><span style="text-decoration: underline;">In Testing</span></h4>
<p>This state indicates that the bug is actively being tested.</p>
<p>The other important information provided by this state is the amount of time between the bug being ready for testing and when the testing started. This again shows <em>waste</em>.</p>
<h4><span style="text-decoration: underline;">Fixed, verified</span></h4>
<p>This state indicates that the bug has been fixed according to independent testers.</p>
<p>The time between this state and the In Testing state provides the amount of time spent testing this bug and is considered work time.</p>
<p><strong>Note: For those familiar with Lean theory, this work would be classified as <em>waste</em>. The reason is because work should never pass a station with defects – it means the process for building the code needs to be fixed. However, as I have mentioned before, I believe this is mostly impractical in software development.</strong></p>
<h4><span style="text-decoration: underline;">Scheduled for Deployment</span></h4>
<p>This state simply indicates that the fix is scheduled to be released.</p>
<p>An important piece of information to capture at this state is the release that the fix is being deployed in. This helps create a Release Notes document to provide the user explaining the changes in the upcoming release.</p>
<h4><span style="text-decoration: underline;">Closed</span></h4>
<p>The bug is closed after the release that it is included in has been deployed.</p>
<p>The time between the bug report being Proposed and the bug being Closed provides the entire throughput for the bug being fixed. This information is a good metric of whether or not your process is improving (if reducing the amount of time to accept and fix bugs is one of your goals). While removing individual pieces of waste is important, you have to keep your eye on the overall goal.</p>
<p><em><strong><span style="text-decoration: underline;">A note about UAT</span></strong></em></p>
<p>You may be wondering about the lack of inclusion of User Acceptance testing steps to track users’ acceptance of the bug. There are two reasons why this isn’t included. The first is, does it provide you any additional information? Sure, it lets you know the users accepted it, but you can do that as part of the QA process. Second, by doing UAT separately it means that you have to have separate UAT environments from QA which many organizations can’t afford. Is the cost worth it? This may be something you need to take into account as you think through your process.</p>
<p>This finished the process and description of each step in the process. The next post in this series will cover Roles &amp; Responsibilities and Reports and how to track improvements in the process.</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=136&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Practical Process Improvement (Part 2)</title>
		<link>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-2/</link>
		<comments>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-2/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 18:49:11 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Team System]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=123</guid>
		<description><![CDATA[In my last post I talked about why metrics are important and what the goals are in using metrics. In this post I&#8217;ll talk about the bug process. How does your team handle bugs, how can you gather metrics on it and which metrics are important? This post covers the process itself. So let&#8217;s take [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://blog.nwcadence.com/2008/10/01/practical-process-improvement-part-1/">last</a> post I talked about why metrics are important and what the goals are in using metrics. In this post I&#8217;ll talk about the bug process. How does your team handle bugs, how can you gather metrics on it and which metrics are important? This post covers the process itself. So let&#8217;s take a look at an &#8220;ideal&#8221; bug handling process:</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2008/10/bug-process.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://blog.nwcadence.com/wp-content/uploads/2008/10/bug-process-thumb.png" border="0" alt="Bug Process" width="164" height="244" /></a></p>
<p>Let&#8217;s look at each of the states so we understand what the state represents. And if this looks like the start of a new methodology, well, it is and it isn&#8217;t. It is because I&#8217;m going to detail out of this series of posts how to handle numerous items and there is a lot of methodology and process displayed here. But it isn&#8217;t because much of this is just common sense. Also, note that you do not need to implement every step. This process that I&#8217;m describing here can be scaled based on your needs.</p>
<p>The states and their descriptions are these:</p>
<h4><span style="text-decoration: underline;">Proposed</span></h4>
<p>This state indicates that a reported bug has been received. It does not indicate that any action has been taken with regard to working on the reported bug.</p>
<p>The key item to note is the reason which in this case tells us what group filed the bug. This is important because as has already been noted, it costs more to fix a bug the later it is found in the process. This allows you to note where the bugs are found and determine where certain weaknesses lie.</p>
<h4><span style="text-decoration: underline;">Under Investigation</span></h4>
<p>This state provides status to the end user to indicate that the bug report is currently being triaged.</p>
<p>The state transition provides us one very useful piece of information – the time it takes from the bug being received until someone starts working on it. This is the first of the areas where we find <em>waste</em>.</p>
<p>This state requires some work though – no free rides here. Several things need to happen:</p>
<p>1. A duplicate bug must be checked for. If a duplicate is found, then this bug needs to be closed and linked to the original bug report.</p>
<p>2. Find the test case that relates to the functionality at issue.</p>
<p>3. The analyst needs to determine what the correct functionality is supposed to be. If it works correctly (as designed) then what the user is actually reporting is a change request and a change request needs to be created. This bug can be closed and linked to the change request.</p>
<p>4. The bug needs to be reproduced. If it can’t be then it is closed.</p>
<p>5. If the bug can be reproduced, then the test case needs to be modified (or created).</p>
<p>What does this information provide us?</p>
<p>If the bug is a duplicate it means at least one thing and maybe two. First it means that this bug occurs in a commonly used piece of code and is therefore a cause for concern. Secondly, depending on the lag time between the original bug report being filed and the duplicate bug being filed may indicate that the bugs aren’t being fixed in a reasonable period of time.</p>
<p>If you cannot find the associated test case(s) then there is another issue. First, why was no test case created? Was it because this is in a less frequently used part of the system? If so, that may be acceptable (maybe it isn’t part of the normal path and so minimal testing was done on it), but it means that this part of the system is being used and additional test cases may need to be created to proactively identify any additional, related bugs. If you do find the test case, what about the test case missed the bug? Is there a gap in the test case? Are all paths not tested? Can you go back and review the code coverage report to see if there is a path through the code that was missed? These questions and their answers will help you proactively identify other areas in this particular area of code so you can take mitigating steps.</p>
<p>What if the functionality is as designed? The user is then requesting a change to the functionality – maybe. They may not understand how the functionality is supposed to work. But what does this tell you? Were the users trained in the correct use of the application? Is there online help for the application and is it effective? If the users haven’t been trained and you receive a high number of these items then maybe it’s time for a training class. If they have been trained and there is online help, then maybe the help isn’t effective or effectively integrated into the application. This may indicate that changes in those areas are needed – but only if you know what to look for.</p>
<p>If the bug can’t be reproduced, it must be closed. However, it must <em>not</em> drop off of the radar. When duplicate bugs are found you need to remember to check the closed bugs as well. If you find a number of non-reproducible bugs being duplicated, it may be time to activate the bug and try to have the developers spend some time investigating the situation.</p>
<p>Finally, if the bug is validated, that isn’t good enough. There needs to be a test case which shows what the correct behavior of the system is supposed to be so that the developers know when they are done fixing the bug and they have a way to verify that fix. If there is an existing test case and it is incorrect, then you need to look back at the requirements to determine if the test case was incorrect or whether the requirements were incorrect and make the appropriate changes (each of these points to a different area that needs to be looked at for improvement).</p>
<h4><span style="text-decoration: underline;">Investigation Complete</span></h4>
<p>This state indicates that the bug report has been verified and is now an actual bug. And again, it provides a solid indication to the end user of the status of their bug report.</p>
<p>The transition from Under Investigation to Investigation Complete provides the first piece of information on work performed in order to fix the bug (after all, you can’t fix the bug until you have verified it).</p>
<p>At this point the assignment of work can commence. However, there may be a high number of work items to assign so it may be up to a Change Control Board (CCB) to accept and validate work for a release. If that is the case then the list of Investigation Complete items will make up part of the agenda. This however can present problems. See the section entitled “Waste” later in this chapter for the problems related to this and some ideas on how to fix them.</p>
<h4><span style="text-decoration: underline;">Assigned</span></h4>
<p>This state is an indicator that the bug has been assigned to a developer for work.</p>
<p>This is called a buffer state. The transition between Investigation Complete and Assigned is basically unimportant. What is important is that this transition says is that you are planning to fix the bug. Now, what it doesn’t tell you is what release you are planning on fixing it in. Using TFS you can simply re-assign the bug to an appropriate future iteration. The assigned state also tells users that no one has <em>started</em> working on the bug yet. Additionally this state provides feedback to the CCB about what work is scheduled to be done but hasn’t started yet so the CCB doesn’t accept more bugs than can be reasonably fixed.</p>
<h4><span style="text-decoration: underline;">Active</span></h4>
<p>This state indicates that the bug is actually being fixed. No bug must ever move to this state without having an accompanying test case.</p>
<p>This state isn’t as important as the transition to this state. The time between the bug being assigned and the bug being active is lag time and is therefore <em>waste</em>.</p>
<p>One of the activities that <em>should</em> be performed during this phase is the creation of a unit test to verify the existence of the bug in code. This will help create a large library of unit tests which target previous bugs which makes regression tests easier to run.</p>
<p> </p>
<p>In this part I&#8217;ve started to describe what happens in each state and what information you can gather from each state. In the next post I will round out the steps in this particular process and then I&#8217;ll move on to discussing the benefits of the metrics. Note that this process covers virtually every type of metric you may need (there are a few it doesn&#8217;t cover but I&#8217;ll talk about that in the next post). Note also that you can pick and choose which states you want. For example, if you&#8217;re reasonably confident that you don&#8217;t have bugs sitting around for a long period of time, then maybe the early buffer states aren&#8217;t needed. Or if you aren&#8217;t sure where the problem is occurring, use broad categories and introduce additional steps to pinpoint a problem as needed.</p>
<p>Stay tuned for the next post!</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=123&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Seattle Code Camp &#8211; Nov. 15 &amp; 16 &#8211; Still time left!</title>
		<link>http://blog.nwcadence.com/2008/10/seattle-code-camp-nov-15-16-still-time-left/</link>
		<comments>http://blog.nwcadence.com/2008/10/seattle-code-camp-nov-15-16-still-time-left/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:40:16 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Code Camp]]></category>
		<category><![CDATA[Seattle]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=98</guid>
		<description><![CDATA[If you have ever wanted to speak but were afraid or you have something cool to show but didn&#8217;t know what to do, this is the time to present! We don&#8217;t judge the presenter &#8211; only the content! Register for the Seattle Code Camp here (http://seattle.codecamp.us/default.aspx) and submit a session. We&#8217;re leaving the submissions open [...]]]></description>
			<content:encoded><![CDATA[<p>If you have ever wanted to speak but were afraid or you have something cool to show but didn&#8217;t know what to do, this is the time to present! We don&#8217;t judge the presenter &#8211; only the content! Register for the Seattle Code Camp here (<a href="http://seattle.codecamp.us/default.aspx">http://seattle.codecamp.us/default.aspx</a>) and submit a session. We&#8217;re leaving the submissions open so come join us and present or just attend and learn something new!</p>
<p>I&#8217;ll be giving three talks on the new Team System 2010, Architecture and Test editions.</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=98&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/seattle-code-camp-nov-15-16-still-time-left/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft combines Development and Database Editions of Team System</title>
		<link>http://blog.nwcadence.com/2008/10/microsoft-combines-development-and-database-editions-of-team-system/</link>
		<comments>http://blog.nwcadence.com/2008/10/microsoft-combines-development-and-database-editions-of-team-system/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 16:29:06 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Team System]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[Database Professionals]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=97</guid>
		<description><![CDATA[Microsoft announced that if you own Team System Development Edition, you will automatically be able to download the Database Edition and vice versa. This is in preparation for there being only a Development version with the just announced Visual Studio Team System 2010 (this will include the Database features).
Take advantage of this offer &#8211; especially [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft announced that if you own Team System Development Edition, you will automatically be able to download the Database Edition and vice versa. This is in preparation for there being only a Development version with the just announced Visual Studio Team System 2010 (this will include the Database features).</p>
<p>Take advantage of this offer &#8211; especially if you own the Development Edition as the Database Edition provides numerous advantages.</p>
<p> </p>
<p>Enjoy!</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=97&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/microsoft-combines-development-and-database-editions-of-team-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical Process Improvement (Part 1)</title>
		<link>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-1/</link>
		<comments>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-1/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 14:46:12 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Practical Process Improvement]]></category>
		<category><![CDATA[Process Improvement]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=96</guid>
		<description><![CDATA[So, its been a while since I regularly posted but starting every week or two weeks I&#8217;ll be posting a bit on the topic of Process Improvement. Not from a  high on the pulpit position but from the &#8220;how do I figure out what my problem is and, and more importantly, how do I solve [...]]]></description>
			<content:encoded><![CDATA[<p>So, its been a while since I regularly posted but starting every week or two weeks I&#8217;ll be posting a bit on the topic of Process Improvement. Not from a  high on the pulpit position but from the &#8220;how do I figure out what my problem is and, and more importantly, how do I solve it.&#8221; This will be a practical series of steps covering everything from handling bugs to managing change and will incorporate the why as well as the what.</p>
<p>Any and all comments are appreciated &#8211; especially if you think I got something wrong.</p>
<p>This part lays the groundwork for practical process improvement.</p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">At this point you’ve made one of two decisions – you are going to implement process for the first time (your current process is referred to as <em style="mso-bidi-font-style: normal;">chaos</em>) or you are going to improve your existing process. Process for process improvements sake is a poor reason to change or implement a process. So, what are you trying to improve (a.k.a. where are you now)? Before you know where you want to go you have to have some type of baseline to measure your progress against. Implementing a process is all about small, measured steps – try to do everything at once and you are guaranteed to fail. </span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">You want to work in small iterations in order to improve your process &#8211; even if you are working on a formal (or waterfall) based project. Why small iterations? Did I just tell you to change to an agile development process? Well, no, not exactly. Short iterations allow for rapid feedback and the ability to measure and introduce change quickly and at well defined points. This does not mean you have to start using XP or Crystal or Scrum or any of a dozen other agile methodologies. And these methodologies don&#8217;t work particularly well in every situation &#8211; especially if you are working on a much more structured project such as a life-critical system.</span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">The goal here is not so much to measure velocity (although that in itself is highly useful), unless that&#8217;s an area you want to improve on which I&#8217;ll talk about in a much later part of the series, as to be able to introduce a change and gauge its effectiveness.</span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">The other thing that is critical is metrics. If you&#8217;re making changes because you think you need to make a change (aka &#8220;the gut feeling reason&#8221;) then you aren&#8217;t going to be able to prove whether the change helped you or not except annecdotally. While we as developers don&#8217;t mind this, management really does. They don&#8217;t want to plow money into process changes without knowing the benefit they are getting for their dime. So let&#8217;s give them what they want and also help ourselves in the process. Don&#8217;t make any changes without having a baseline &#8211; ever. In addition, when you are doing a retrospective on whether the change worked or not, do it by comparing metrics (as well as gut feeling) to determine the effectiveness.</span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">Next, pick and choose what you want to change (aka get the low hanging fruit first). Choose items that are more simple to change and are easier to measure. In light of this, I&#8217;m going to start off this series with simple areas (or at least, in what our experiences with customers have taught us are simple areas) and move to more difficult areas later on.</span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">In preparation for the next part of this series, the first area I&#8217;m going to walk you through improving is the bug handling process. This doesn&#8217;t cover how to reduce the number of bugs you get initially (well, it does in part but that isn&#8217;t the focus) but how you handle the bugs in your process. As I mentioned before, you need baseline metrics to determine the effectiveness of the changes. To begin with, spend the next week or two and measure how long it takes from when you receive the bug (the date and time &#8211; to the hour) to when the bug fix is released into production.</span></p>
<p><span style="font-size: 11pt; line-height: 115%; font-family: ">In the next part I&#8217;ll talk about how to reduce that time frame (obviously this fix will only be important if you feel that it takes a large period of time to implement the fix and that your customers are unhappy) and what you should be doing at each stage.</span></p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=96&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/practical-process-improvement-part-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
