<?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>auberger.com &#187; agile</title>
	<atom:link href="http://auberger.com/archives/category/agile/feed" rel="self" type="application/rss+xml" />
	<link>http://auberger.com</link>
	<description>Epicurean, cyclist and geek extraordinaire.</description>
	<lastBuildDate>Fri, 16 Apr 2010 02:29:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Inside Job</title>
		<link>http://auberger.com/archives/2010/03/inside-job</link>
		<comments>http://auberger.com/archives/2010/03/inside-job#comments</comments>
		<pubDate>Fri, 19 Mar 2010 18:35:19 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[songbird]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=838</guid>
		<description><![CDATA[
Over the years, we&#8217;ve taken pride in making our tools, product and development process, as open and transparent as possible. Our tools (Bugzilla, Litmus, Wiki) are publicly accessible, our source code open (svn) and we&#8217;ve blogged on many occasions about our Agile practices.
Today we&#8217;re taking a step further by publishing our Development Survival Guide. This [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://auberger.com/wp-content/uploads/2010/03/ruby-bird.png" rel="lightbox[838]"><img src="http://auberger.com/wp-content/uploads/2010/03/ruby-bird-239x300.png" alt="" title="ruby-bird" width="150"  class="alignleft size-medium wp-image-842" /></a></p>
<p>Over the years, we&#8217;ve taken pride in making our tools, product and development process, as open and transparent as possible. Our tools (<a href="http://bugzilla.songbirdnest.com/">Bugzilla</a>, <a href="http://litmus.songbirdnest.com/">Litmus</a>, <a href="http://wiki.songbirdnest.com">Wiki</a>) are publicly accessible, our source code open (<a href="http://publicsvn.songbirdnest.com/">svn</a>) and we&#8217;ve <a href="http://auberger.com/archives/category/agile">blogged</a> on many occasions about our Agile practices.</p>
<p>Today we&#8217;re taking a step further by publishing our Development Survival Guide. This presentation is an internal step-by-step guide that we take new engineers thru during their orientation. It&#8217;s a good summary of what to expect on a day-to-day basis as an engineer working at Songbird (other than daily Fussball tournament and unfettered access to the beer stocked mini-fridge). It&#8217;s your opportunity to take a peek from within. </p>
<p>Want get even closer? <a href="http://getsongbird.com/jobs/">Apply for one of our openings</a>.</p>
<div style="width:425px" id="__ss_3469649">
<strong style="display:block;margin:4px 0 4px"></p>
<p><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=songbird-dev-survival-guide-100318133538-phpapp02&#038;rel=0&#038;stripped_title=songbird-devsurvivalguide" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=songbird-dev-survival-guide-100318133538-phpapp02&#038;rel=0&#038;stripped_title=songbird-devsurvivalguide" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><br />
</strong></div>
<p><a href='http://auberger.com/wp-content/uploads/2010/03/songbird-dev-survival-guide.pdf' onClick="javascript: pageTracker._trackPageview('/downloads/songbird-dev-survival-guide.pdf');">Download</a> Songbird Development Survival Guide 1.2 in pdf.</p>
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2010%2F03%2Finside-job&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2010/03/inside-job/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Make long term planning possible in an Agile environment</title>
		<link>http://auberger.com/archives/2010/02/make-long-term-planning-possible-in-an-agile-environment</link>
		<comments>http://auberger.com/archives/2010/02/make-long-term-planning-possible-in-an-agile-environment#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:30:28 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[songbird]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=768</guid>
		<description><![CDATA[Agile development methods are well suited to plan and execute near term release cycle. For instance, the tools we developed and processes we&#8217;ve adopted help us plan and steer a release to completion with a good level of accuracy and repeatability. However, there are instances when the time horizon needs to be further out than [...]]]></description>
			<content:encoded><![CDATA[<p>Agile development methods are well suited to plan and execute near term release cycle. For instance, the <a href="http://auberger.com/archives/tag/sdpbot">tools</a> we developed and <a href="http://auberger.com/archives/category/agile">processes</a> we&#8217;ve adopted help us plan and steer a release to completion with a good level of accuracy and repeatability. However, there are instances when the time horizon needs to be further out than the current cycle. The need to create a budget, synchronize a roadmap with a partner or determine future hiring needs, make it necessary to have an effective mechanism for long term planning.</p>
<p>Fortunately, the metrics gathered during each Agile release cycle can be very helpful for that purpose. Once we gain a good understanding on what is being worked on, for how long and by how many people, we should be able to extrapolate this to forecast future releases.</p>
<p>Let&#8217;s take a look at what activities take place during a typical release cycle:</p>
<p>1) Plan release<br />
2) Write code<br />
3) Test<br />
4) Fix bugs</p>
<p>Then repeat ad nauseam.</p>
<p><span id="more-768"></span></p>
<p>In that context, the programming tasks can be categorized as follow:</p>
<h3>1. Planned work</h3>
<p>This is the body of work identified during the planning stage. This is the <em>raison d&#8217;être</em> of the release. For the most part, this covers new features or less tangible things such as performance improvements. This is what we&#8217;ll want to talk about when the product gets released. It&#8217;s an easy planning trap to think that this is the only work required.</p>
<h3>2. Unplanned work</h3>
<p>As the name implies, this is work that was unforeseen at the beginning of the release but is required to be completed before the product can ship. It can be further refined as follow:</p>
<p>a) Change in requirements<br />
This should not be unexpected. In fact, any Agile methodology assumes that there will be changes down the road. This is not a problem per se as long as there is a mechanism to trade features, extend duration or increase resources.</p>
<p>b) Omissions in planning<br />
Because the planning period is relatively short, it is assumed that not everything is fully specified or researched upfront. As development proceeds, new pieces are discovered and introduced into the plan.</p>
<h3>3. Bugs</h3>
<p>Defects can be considered a side effect of software development. They can affect the product in different ways:</p>
<p>a) Regression<br />
These are defects introduced when working on new code. They usually impact unrelated functionality that used to work before.</p>
<p>b) Defect in new feature<br />
These are problems in a newly coded feature. The feature does not work quite as expected.</p>
<p>c) Existing bug<br />
These are bugs present in the previous version of the software. They are either known or newly discovered during the course of the release and prioritized to be fixed now because they affect existing users.</p>
<h3>Learning from the past to project in the future</h3>
<p>A believable long term plan needs to layout new features on a timeframe against a set of resources. Because there is only a limited amount of time and people allocated to thinking through the issues upfront, the initial estimates are always very rough. It is then very difficult to predict how much time certain things will take or how many people will be required. To increase accuracy, you&#8217;d have to invest more time and resources, which is not practical, mostly because these are the very same resources that are critical to deliver against the current release plan.</p>
<p>You need a model to help forecast based on imperfect data. You could decide to simply pad all the current estimates, but you&#8217;d still need to figure out a factor that&#8217;s sufficient.</p>
<p>A better model is to find a way to anticipate the additional work that will be generated by the introduction of a brand new feature. With that model, we can layout a plan that should allow sufficient room in every release to accommodate for all the work, planned, unplanned and bugs.</p>
<p>Let&#8217;s take a look at historical data from previous Songbird releases:</p>
<style>
table td, table th { border: solid 1px #ffffff; } table th { background-color: #999999; } table th, table td { padding: 5px; } table td { background-color: #DDDDDD; }
</style>
<table>
<thead>
<tr>
<th></th>
<th>Fugazi</th>
<th>Genesis</th>
<th>Hendrix</th>
<th>Isan</th>
<th>Jackson 5</th>
<th>Kanye</th>
<th>Led Zeppelin</th>
</tr>
</thead>
<tbody>
<tr>
<th>Planned Features [pts]</th>
<td>198</td>
<td>300</td>
<td>145</td>
<td>100</td>
<td>160</td>
<td>153</td>
<td>86</td>
</tr>
<tr></tr>
<tr>
<th>Actual Completed [pts]</th>
<td>696</td>
<td>946</td>
<td>527</td>
<td>419</td>
<td>432</td>
<td>694</td>
<td>303</td>
</tr>
<tr>
<th>Actual Completed Features [pts]</th>
<td>290</td>
<td>304</td>
<td>183</td>
<td>151</td>
<td>214</td>
<td>284</td>
<td>145</td>
</tr>
<tr>
<th>Planned/Completed Features ratio</th>
<td>146%</td>
<td>101%</td>
<td>126%</td>
<td>151%</td>
<td>134%</td>
<td>186%</td>
<td>169%</td>
</tr>
<tr>
<th>Actual duration [days]</th>
<td>39</td>
<td>55</td>
<td>56</td>
<td>50</td>
<td>50</td>
<td>55</td>
<td>30</td>
</tr>
</tbody>
</table>
<p>The first row in the table contains the budgeted points for each release. That number represents the sum of all planned work as determined at the end of the planning phase for that release. The release schedule was set based on that number and the historical team velocity.</p>
<p>The second row represents the total actual points completed during the release, including features and bugs. This represents that amount of effort to get the release out.</p>
<p>The third row represents the actual completed feature points only. Next row computes ratio of planned vs. actual work.</p>
<p>It&#8217;s very tempting to compute a velocity based on total completed points and use it as a predictor for how much work the team can accomplish. While it&#8217;s true that it is a measure of total effort, it can&#8217;t be used against planned work only.</p>
<p>What we want to determine is that given 1 point of planned feature work, how much unplanned work and bugs will be generated and thus how long will it take to complete. Then normalize this for team size and you get a factor that can be used for long term planning.</p>
<p>To get there, I&#8217;ve computed a velocity for each release based on planned work divided by actual release duration (in days) and number of engineers. I then use the median value across release as a factor to turn estimated planned points into calendar days. With that in hand, I created a simple model where scope, duration and resources are linked. Set two values and the third one gets computed automatically. This model becomes very handy to run through what-if scenario during roadmap sessions. It provides answers to business questions such as: &#8220;How long would it take to do feature X?&#8221;, &#8220;Can you meet deadline Y?&#8221;, &#8220;How many more engineers would it take to do Z in Y time frame?&#8221;.</p>
<p>Hope you enjoyed learning more about our approach to the difficult task of long term planning. I&#8217;d be interested to hear about how you&#8217;ve approached the problem, so feel free to share your story.</p>
<p>Lastly, let&#8217;s remember the words of the famous Danish physicist <a href="http://en.wikipedia.org/wiki/Niels_Bohr">Niels Bohr</a>:</p>
<blockquote><p>“Prediction is very difficult, especially if it’s about the future.”</p></blockquote>
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2010%2F02%2Fmake-long-term-planning-possible-in-an-agile-environment&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2010/02/make-long-term-planning-possible-in-an-agile-environment/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dashboard for Agile project tracking</title>
		<link>http://auberger.com/archives/2010/01/dashboard-for-agile-project-tracking</link>
		<comments>http://auberger.com/archives/2010/01/dashboard-for-agile-project-tracking#comments</comments>
		<pubDate>Thu, 14 Jan 2010 22:53:39 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[sdpbot]]></category>
		<category><![CDATA[songbird]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=710</guid>
		<description><![CDATA[This is a following post to the series on Agile development at Songbird. As covered previously, we&#8217;ve created in-house tools to help with the planning and tracking of our release trains. The tool works off of Bugzilla and extracts meaningful information for project tracking. As it was originally meant to periodically generate an email status, [...]]]></description>
			<content:encoded><![CDATA[<p>This is a following post to the series on <a href="http://auberger.com/archives/category/agile">Agile development</a> at <a href="http://getsongbird.com">Songbird</a>. As <a href="http://auberger.com/archives/2008/12/songbird-path-to-agility-part-iii">covered previously</a>, we&#8217;ve created in-house tools to help with the planning and tracking of our release trains. The tool works off of <a href="http://www.bugzilla.org/">Bugzilla</a> and extracts meaningful information for project tracking. As it was originally meant to periodically generate an email status, it became apparent that it was too static for daily project tracking needs.</p>
<div id="attachment_725" class="wp-caption aligncenter" style="width: 310px"><a href="http://auberger.com/wp-content/uploads/2010/01/Songbird-Release-Trains-200911201.png" rel="lightbox[710]"><img class="size-medium wp-image-725" title="Songbird Release Trains" src="http://auberger.com/wp-content/uploads/2010/01/Songbird-Release-Trains-200911201-300x251.png" alt="" width="300" height="251" /></a><p class="wp-caption-text">Songbird Release Trains</p></div>
<p>We concluded that a dashboard that was more dynamic and worked in real time with Bugzilla would provide a more accurate picture of development progress. This is an overview of the couple of extensions we added to the tool.</p>
<p><span id="more-710"></span></p>
<h3>Dashboard</h3>
<p>The dashboard focuses on the current iteration (all P1 stories/tasks/bugs for a release target milestone). It provides a transparent and dynamic view of what&#8217;s under active development for the week.</p>
<p>Items are grouped by developer so we can easily review what each person is working on in this iteration. There are few additions that make it more useful than a plain Bugzilla query. When an item is carried over from a previous iteration, it gets highlighted, providing visibility on something that may require more work than anticipated or might be blocked by some dependencies. That kind of view was lacking before and it made it difficult to figure out what was happening when tasks got carried over. Similarly, when a new task gets added to the plan mid-iteration, it&#8217;s identified as such, making the tracking of intake very easy.</p>
<p>Because of our code review system, often time tasks are completed from a programmer standpoint but can&#8217;t be checked in until a positive review (R+) is performed by someone else. Additionally, some code requires the re-compilation of large amounts of 3rd party libraries before the patch is available. This kind of information is now bubbled up on the tracking page so the exact status of a particular issue is visible at a quick glance.</p>
<div id="attachment_714" class="wp-caption aligncenter" style="width: 559px"><a href="http://auberger.com/wp-content/uploads/2010/01/tracking.png" rel="lightbox[710]"><img class="size-full wp-image-714 " title="Dashboard" src="http://auberger.com/wp-content/uploads/2010/01/tracking.png" alt="" width="549" height="472" /></a><p class="wp-caption-text">Iteration Dashboard</p></div>
<p>This dashboard is helping us to know what everyone is doing at any given time. It fosters a sense of accountability and ownership of the issues and provides a sense of accomplishment when the work is completed.</p>
<p>Below is a view of the legend for the Dashboard. Most attributes for an item are extracted from Bugzilla and represented via an icon.</p>
<div id="attachment_715" class="wp-caption aligncenter" style="width: 165px"><a href="http://auberger.com/wp-content/uploads/2010/01/tracking-legend.png" rel="lightbox[710]"><img class="size-full wp-image-715" title="Legend" src="http://auberger.com/wp-content/uploads/2010/01/tracking-legend.png" alt="" width="155" height="360" /></a><p class="wp-caption-text">Dashboard Legend</p></div>
<h3>Punchlist</h3>
<p>Once a release reaches QA, a release branch is cut and the focus of the team switches from working on planned features to fixing bugs. We found that this period is best managed by using a punch list which contains all the issues remaining to be resolved before the release can ship as opposed to a weekly plan of what gets accomplished for the period. It keeps the team focused on the entirety of what&#8217;s on our collective plate. During that period, issues are being promoted to Blocker status to represent what is blocking the next milestone (e.g. Beta, RC, Final). It also signals what can be landed on the branch automatically and what needs further clearance. This allows us to throttle the rate of change being introduced into the source tree so that QA can be ensured stable builds.</p>
<div id="attachment_721" class="wp-caption aligncenter" style="width: 570px"><a href="http://auberger.com/wp-content/uploads/2010/01/Release-Madonna-Punchlist-All-remaining-P1-20100112.png" rel="lightbox[710]"><img class="size-full wp-image-721 " title="Punchlist" src="http://auberger.com/wp-content/uploads/2010/01/Release-Madonna-Punchlist-All-remaining-P1-20100112.png" alt="" width="560" height="515" /></a><p class="wp-caption-text">Release Punchlist</p></div>
<p>When in punchlist mode, it&#8217;s critical that all issues are being assigned. The list reflects that by highlighting items that have no owner yet.</p>
<h3>Pretty Graphs</h3>
<p>Two frequently tracked Agile metrics are Burndown and Velocity. Those are now being graphed automatically for each release. The Burndown helps forecast when the work will be completed. The Velocity gives us a historical perspective on what the team was able to accomplish and thus helps us plan better.</p>
<p>The Burndown graph breaks down tasks (what we refer to as &#8220;planned work&#8221;) from bugs (unplanned consequences of software development). When the Burndown line cross the horizontal axis, we&#8217;re done. Notice in the graph below the bug points going up during the QA period.</p>
<div id="attachment_713" class="wp-caption aligncenter" style="width: 670px"><a href="http://auberger.com/wp-content/uploads/2010/01/Picture-1.png" rel="lightbox[710]"><img class="size-full wp-image-713 " title="Burndown Graph" src="http://auberger.com/wp-content/uploads/2010/01/Picture-1.png" alt="" width="660" height="334" /></a><p class="wp-caption-text">Burndown Graph</p></div>
<p>The Velocity graph plots the team velocity, normalized per day. Actual Velocity is computed at the end of each iteration and plotted along side the Planned Velocity for easy comparison.</p>
<div id="attachment_720" class="wp-caption aligncenter" style="width: 633px"><a href="http://auberger.com/wp-content/uploads/2010/01/velocity.png" rel="lightbox[710]"><img class="size-full wp-image-720 " title="Velocity" src="http://auberger.com/wp-content/uploads/2010/01/velocity.png" alt="" width="623" height="379" /></a><p class="wp-caption-text">Velocity Graph</p></div>
<p>These new tools provide a dynamic view of the state of the release. They bring transparency into the development process for everyone involved.</p>
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2010%2F01%2Fdashboard-for-agile-project-tracking&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2010/01/dashboard-for-agile-project-tracking/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Songbird path to Agility &#8211; Part III</title>
		<link>http://auberger.com/archives/2008/12/songbird-path-to-agility-part-iii</link>
		<comments>http://auberger.com/archives/2008/12/songbird-path-to-agility-part-iii#comments</comments>
		<pubDate>Mon, 15 Dec 2008 23:57:09 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[bugzilla]]></category>
		<category><![CDATA[sdpbot]]></category>
		<category><![CDATA[songbird]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=568</guid>
		<description><![CDATA[
This is a repost of a series of article I originally published on Songbird&#8217;s blog
In the previous two installments of this series on Agile development at Songbird, I&#8217;ve covered our move from waterfall to Agile and provided an in-depth look at some actual release cycles. In this last post, I&#8217;m going to introduce a tool [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://files.songbirdnest.com/tracking.png" alt="Tracking" /></p>
<p><em>This is a repost of a series of article I originally published on <a href="http://blog.songbirdnest.com/author/georges/" target="_blank">Songbird&#8217;s blog</a></em></p>
<p>In the previous two installments of this series on Agile development at Songbird, I&#8217;ve covered our move from <a href="http://auberger.com/archives/2008/06/songbird-path-to-agility-part-i-2">waterfall to Agile</a> and provided an in-depth look at some <a href="http://auberger.com/archives/2008/09/songbird-path-to-agility-part-ii-2">actual release cycles</a>. In this last post, I&#8217;m going to introduce a tool &#8211; which I gave the uninspiring name sdpbot &#8211; built internally to help facilitate the tracking of our releases.</p>
<h3>Wrestling Bugzilla into shape</h3>
<p>Because so much of our existing workflow occurred in <a href="http://www.bugzilla.org/">Bugzilla</a>, we&#8217;ve decided to use it as a central database to drive our process. Every actionable project artifact lives in Bugzilla, a Feature, Story, Task or Bug. From a release standpoint, the only actionable items are Story, Tasks or Bug and hence, we only track these. Here is how we&#8217;ve organized our <a href="http://bugzilla.songbirdnest.com">bugzilla.songbirdnest.com</a> to help us track each release.</p>
<h4>Release train</h4>
<p>Every release train has a name and is used to create a <a href="http://bugzilla.songbirdnest.com/page.cgi?id=fields.html#target_milestone">target milestone</a> in Bugzilla. This allows us to put items in release buckets. See some examples of what was included in the <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;target_milestone=Fugazi&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">Fugazi</a> and <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;target_milestone=Genesis&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">Genesis</a> releases.</p>
<p><span id="more-568"></span></p>
<h4>Priority field</h4>
<p>As we create stories, tasks and bugs we assign them to the release milestone and place them in a <a href="http://bugzilla.songbirdnest.com/page.cgi?id=fields.html#priority">priority</a> bucket. Each priority level indicates how the item is being treated during the release:</p>
<ul>
<li><strong>P2</strong> &#8211; must have for the release, next candidates for promotion to P1</li>
<li><strong>P3</strong> &#8211; nice to have for the release, we may ship without it</li>
<li><strong>P4 </strong>-<strong> </strong>nice to have and low risk. This represent the kind of work that we probably will undertake during the QA phase as it is low risk and won&#8217;t likely cause a regression.</li>
<li><strong>P1</strong> has a special meaning. It is used as a flag to represent what is being committed by the team for the current weekly iteration. Everything in P1 signals our tool that this is our &#8220;plan&#8221; for the week and is under active development (We are considering changing this in the future to use the assigned bug functionality since Bugzilla 3.2 will now allow you to accept and assign a bug in one operation).</li>
</ul>
<div>From an overall release tracking standpoint, the tool includes P1, P2 and P3. P4 are not considered part of the plan. If we get to them during QA, they are freebies.</div>
<h4>Costing</h4>
<div>We would not be able to track anything without costing. Every item is being assigned a cost of 1, 2 or 3 based on complexity, scope and past experience. We also use 0 when an artifact exists but is not actionable by itself. For instance, we often start creating stories and cost them. Then, as we refine our plan, we may create one or several tasks to represent the particular engineering implementation of that story. When this occurs, each tasks has a cost, and the story cost field is zeroed out so we don&#8217;t double count. Also, the story to task relationship is being identified with the blocks/depend on field of Bugzilla. See story <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=12066">12066</a> for an example of that.</div>
<h3>Weekly iterations</h3>
<p>Every Monday, we plan our work for the week. Every member of the team elects items to P1 status. We then tally up the total points and determine if the plan is sound. Once we are all in agreement, the plan gets locked. This simply means that the tool takes a snapshot of all the items marked as P1 and saves their ids.</p>
<h3>Daily reports</h3>
<p>The main function of the bot is to compute delta and generate a daily report. Let&#8217;s take a look at every sections of the report.</p>
<h6>Iteration</h6>
<p>A simple number to represent the iteration (week)</p>
<h6>Plan</h6>
<p>This section represent the plan of records as snapshot at the beginning of each iteration. Once the plan is locked, it becomes immutable.</p>
<h6>Duration</h6>
<p>Duration of the iteration. Usually 5 working days, but it automatically adjusts for holidays.</p>
<h6>Remaining</h6>
<p>Total points for P1, P2 and P3 items which status is open (e.g. UNCONFIRMED, NEW, ASSIGNED or REOPENED)</p>
<h6>Planned</h6>
<p>Total points for P1 items that are opened.</p>
<h6>Planned Velocity</h6>
<p>Normalized points per work day.</p>
<h6>Actual</h6>
<p>This section represent the actual metrics computed at the end of each iteration. The iteration ends on Sunday at midnight.</p>
<h6>Intake</h6>
<p>Represent everything that was either added or removed to the P1 list (the plan) during the iteration.</p>
<h6>Intake Velocity</h6>
<p>Normalized intake points per work day.</p>
<h6>Completed</h6>
<p>Total point of everything that was marked fixed during that iteration.</p>
<h6>Team Velocity</h6>
<p>Normalized completed points per work day.</p>
<h6>Carried over</h6>
<p>Everything planned at the beginning or added during the week and not completed by the end of the iteration.</p>
<h6>Environment</h6>
<p>Originally, this was introduce to track distractions outside of the core release that could impact the team velocity. The idea being that it would give us a gauge of what the &#8220;environment&#8221; was like during that period. This columns would capture everything open or closed in the special ASAP Bugzilla milestone. We used this classification to track urgent issues, infrastructure work, etc. As our process matured, the need for this diminished and we no longer use this.</p>
<p>Here is a sample of such report for Fugazi</p>
<p style="text-align: center;"><a href="http://files.songbirdnest.com/fugazi-tracking.png" rel="lightbox[568]"><img class="s3-img aligncenter" style="border: 0px initial initial;" src="http://files.songbirdnest.com/fugazi-tracking.png" border="0" alt="fugazi-tracking.png" width="100%" /></a></p>
<p style="text-align: center;">
<h3>What to look for</h3>
<p>Every day an email report is being generated allowing us to track progress to date. For every column described above, a link is provided. The link points back to Bugzilla and contains a list of ids for the items included in the list. Every item can then be reviwed independently.</p>
<p>At our weekly planning meeting, we usually start by reviewing what was carried over from last week. Ideally, we want this to be a null set, but the reality is that it often contains a fair amount of items. It&#8217;s primarily due to intake during the iteration. Items are being added because of regression introduced and discovered, new tasks being identified or slight adjustment to the plan. This is definitely an area we need to improve on.</p>
<p>The next view is the planned items for the new iteration. This allows us to make some tweak to our plan before we commit.</p>
<p>The intake views are very useful to analyze what is being added or removed during the cycle.</p>
<p>The team velocity gives us a measure on how well we are doing and how much load we think we can carry during the next iteration.</p>
<p>Finally, the remaining points tally gives us our burn down number. This is how much work is left and by dividing this with our historical velocity gives us a sense of how long it will be until we are done.</p>
<h2>Open source library</h2>
<p style="text-align: left;">SDPBOT is built as a Ruby library. The source code has been open sourced under the MIT license. You can download it here: <a href="http://code.google.com/p/sdpbot/">http://code.google.com/p/sdpbot/</a></p>
<p style="text-align: left;">We have made no attempt to make it generic, so do expect to do some work to customize it for your own needs. If you&#8217;re using Bugzilla and want to generate some type of reports you will hopefully find the library to scrape and instantiate objects from Bugzilla very valuable. Enjoy!</p>
<p style="text-align: left;">
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2008%2F12%2Fsongbird-path-to-agility-part-iii&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2008/12/songbird-path-to-agility-part-iii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Songbird path to Agility &#8211; Part II</title>
		<link>http://auberger.com/archives/2008/09/songbird-path-to-agility-part-ii-2</link>
		<comments>http://auberger.com/archives/2008/09/songbird-path-to-agility-part-ii-2#comments</comments>
		<pubDate>Thu, 04 Sep 2008 23:56:10 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[burndown]]></category>
		<category><![CDATA[intake]]></category>
		<category><![CDATA[songbird]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=566</guid>
		<description><![CDATA[
This is a repost of a series of article I originally published on Songbird&#8217;s blog
Previously, we&#8217;ve examined the new development practices that the Songbird team adopted to plan and track a release. Everyone on the team was very eager to put them to the test. Unfortunately, at the time, we were still in the middle [...]]]></description>
			<content:encoded><![CDATA[<p><img style="vertical-align: top;" src="http://files.songbirdnest.com/twister-coaster.png" alt="Twister Coaster" height="420" /></p>
<p><em>This is a repost of a series of article I originally published on <a href="http://blog.songbirdnest.com/author/georges/" target="_blank">Songbird&#8217;s blog</a></em></p>
<p><a href="http://auberger.com/archives/2008/06/songbird-path-to-agility-part-i-2">Previously</a>, we&#8217;ve examined the new development practices that the Songbird team adopted to plan and track a release. Everyone on the team was very eager to put them to the test. Unfortunately, at the time, we were still in the middle of the <a href="http://blog.songbirdnest.com/2007/10/30/songbird-03-is-launched/">0.3 release cycle</a> and new work could only be started once that release was completed. During the 0.3 release, everything was still treated as a bug, but in fact, many bugs were <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=5472">stories</a> and <a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=3215">tasks</a> in disguise. We decided to apply some of the newly defined tracking principle to help us guide and finish the cycle, so we could start fresh with our next release as soon as possible.</p>
<h4>Cuánto es?</h4>
<p>The first step was to add cost to everything. We introduced a new <strong>cost</strong> field in <a href="http://bugzilla.songbirdnest.com">Bugzilla</a> and put a cost value on everything according to our new scale of 1, 2 and 3 points. With costing in place, we were in a position to compute how much points the team was able to complete in a typical work week. That total, normalized per work day became our <strong>team velocity</strong>.</p>
<p><span id="more-566"></span></p>
<p>Below is a chart representing our velocity over many — one week — iterations during the 0.3 release (code name Bowie). The blue line is the number of points the engineering team completed, averaged per work day. The red line tracks the cost of new things being introduced, normalized per work day. The green line tracks the net velocity.</p>
<p>It quickly became apparent that as the team took things off the pile, new work was being identified and added. We had to keep track and take this into account. We named this <strong>intake</strong> to globally represent new functionality, regressions and newly discovered bugs.</p>
<p>The net velocity gave us an indication on how well we were doing overall. When it gets in negative territory, we are losing ground.</p>
<p>You can see below 3 events that had clear impact on intake, namely scope creep (some features were not well defined upfront), and bug intake due to public feedback from a blessed build and a release candidate.</p>
<p>Also noticeable is a week when the team was not as productive as usual. With that information in hand, we were able to have open conversations about the state of progress and try to determine the cause for it. Sometimes, a low velocity is simply because work gets accumulated in a week and does not get checked in until the next. We call this <strong>carry over</strong>. Other time, there are some inevitable distractions such as a move, interviews, equipment failure, etc. In other cases, the team is just having a bad week.</p>
<p><a href="http://files.songbirdnest.com/bowie.001.png" rel="lightbox[566]"><img class="s3-img" src="http://files.songbirdnest.com/bowie.001.png" border="0" alt="bowie.001.png" width="100%" /></a></p>
<p>With this in place, we were able to understand the rate at which the team was completing work. We created a burn down chart that tracked the total points of known work left. Using the team velocity, we could forecast an expected release date with a simple best fit projection. When the line crosses the X-axis, you are done and can ship.</p>
<p><a href="http://files.songbirdnest.com/bowie.002.png" rel="lightbox[566]"> <img class="s3-img" src="http://files.songbirdnest.com/bowie.002.png" border="0" alt="bowie.002.png" width="100%" /></a></p>
<p>If you compare the two charts, you can see how much influence intake had on the release. This became a key component to take into account in our planning. By budgeting points towards intake, it allowed us to reserve some engineering capacity to take change into account upfront and have a more realistic schedule.</p>
<h4>Where does intake come from?</h4>
<p>By formally tracking our intake, we were able to better characterize the nature of change. Most of our intake comes from change introduced when features start to materialize in the product and can be tested. This is a desirable effect of adopting an Agile practice. Other contributors are defects being reported by existing users, which is a benefit of early releases. Less desirable intake come from regressions or new tasks that resulted from bad assumptions or misunderstandings. Those can usually be mitigated by increasing unit tests coverage and more upfront detailed planning.</p>
<h4>Full Agile cycle</h4>
<p>Let&#8217;s take a look at another release cycle. <a href="http://blog.songbirdnest.com/2008/03/26/songbird-05-final-released-all-aboard/">Dokken</a> was our second release in which we used the new process from inception. The charts below represents velocity and burn down respectively. Note that the scale on the velocity has increased. There is more dynamic range. Because the release started from day 0, we noticed a ramp up in the velocity. We learnt not to be necessarly alarmed by this. In a new release cycle, the team needs some time to &#8220;prime the pump&#8221; of development. As the release progressed and we got better visibility of the team progress, we decided that we should defer feature work that was identified as nice-to-have. This is another thing we did during planning. We prioritized work in must have for the release, hope to have for the release and nice to have &#8211; mainly cosmetic changes, low risk bugs &#8211; buckets. This gave us a pre-negotiated way to easily shift features as the release progressed.</p>
<p>By actively tracking and managing the intake, we were able to <strong>steer</strong> the release and deliver within weeks of the projected date. Not great, but better than our previous releases. Dokken was a particular difficult release as we undertook a lot of device support work, which can lead to <a href="http://tinyurl.com/62y7ew">nasty device compatibility problems</a>.</p>
<p><a href="http://files.songbirdnest.com/dokken.004.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/dokken.004.png" alt="" width="100%" /><br />
</a></p>
<p><a href="http://files.songbirdnest.com/dokken.003.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/dokken.003.png" alt="" width="100%" /><br />
</a></p>
<h5>Embracing change</h5>
<p>The next release, named <a href="http://blog.songbirdnest.com/2008/06/13/songbird-06-final-released-harder-better-faster-stronger/">Eno</a> presented some interresting characteristics. The <strong>intake</strong> was relatively high thru the release but the team was also maintaining a higher velocity. This is a good example of the team achieving a good level of agility. Change is being introduced throughout the release and the team is well prepared to tackle it. Also notice that the spike in intake due to feedback from release candidate has a corresponding level of increase in team velocity. This is due to the shortening of feedback loop. With proper ownership, the developers are able to respond in real time to issues being discovered.</p>
<p><a href="http://files.songbirdnest.com/eno.005.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/eno.005.png" alt="" width="100%" /><br />
</a></p>
<p>Notice how the burn down trend is converging almost linearly. This means that the team is achieving a sustainable pace, leading to more predictable ship date.</p>
<p><a href="http://files.songbirdnest.com/eno.006.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/eno.006.png" alt="" width="100%" /><br />
</a></p>
<h5>Achieving high velocity</h5>
<p>Our latest release, <a href="http://blog.songbirdnest.com/2008/08/20/songbird-beta-is-released/">Fugazi</a> is another example of a successful cycle. This was the shortest release cycle the team ever undertook, with only 4 weeks of planned development work and 3 weeks of QA. In order to maintain our original release date, we had to defer some lower priority work in iteration 3. Despite the shorter release period, the team actually completed more points per iteration than any other release. We maintained an unprecedented high velocity, which in turn allowed for a high level on intake to be absorbed, so all the planned must have featured could be kept in the release and still hit our original target date.</p>
<p><a href="http://files.songbirdnest.com/fugazi.007.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/fugazi.007.png" alt="" width="100%" /><br />
</a></p>
<p><a href="http://files.songbirdnest.com/fugazi.008.png" rel="lightbox[566]"><br />
<img src="http://files.songbirdnest.com/fugazi.008.png" alt="" width="100%" /><br />
</a></p>
<h4>DIY tools</h4>
<p>In the last part of the series, we&#8217;ll cover the tools we created to make the tracking easier and how they are being used on a daily basis to help us steer the release. Stay tuned.</p>
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2008%2F09%2Fsongbird-path-to-agility-part-ii-2&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2008/09/songbird-path-to-agility-part-ii-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Songbird path to Agility &#8211; Part I</title>
		<link>http://auberger.com/archives/2008/06/songbird-path-to-agility-part-i-2</link>
		<comments>http://auberger.com/archives/2008/06/songbird-path-to-agility-part-i-2#comments</comments>
		<pubDate>Wed, 25 Jun 2008 23:54:43 +0000</pubDate>
		<dc:creator>Georges</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[songbird]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://auberger.com/?p=564</guid>
		<description><![CDATA[
This is a repost of a series of article I originally published on Songbird&#8217;s blog.
This is the first post of a 3 part series presenting our experience moving Songbird development to an Agile process.
Drowning in the waterfall
Up until version 0.3, Songbird development had been following a fairly traditional waterfall model. Realizing the ambitious vision of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://files.songbirdnest.com/over-the-falls.png" alt="" /></p>
<p><em>This is a repost of a series of article I originally published on <a href="http://blog.songbirdnest.com/author/georges/" target="_blank">Songbird&#8217;s blog</a>.</em></p>
<p>This is the first post of a 3 part series presenting our experience moving Songbird development to an Agile process.</p>
<h4>Drowning in the waterfall</h4>
<p>Up until <a href="http://blog.songbirdnest.com/2007/10/30/songbird-03-is-launched/">version 0.3</a>, Songbird development had been following a fairly traditional <a href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall model</a>. Realizing the ambitious vision of building both a platform <strong>and</strong> a desktop media player has presented many challenges. A lot of plumbing infrastructure is needed before any features can be created. Faced with that challenge, the engineering team did what engineers do best, they designed a very comprehensive system, planned for it very carefully and started cranking code.</p>
<p>During the planning phase, the team estimated the work to the best of their abilities and a <a href="http://en.wikipedia.org/wiki/Gantt_chart">Gantt chart</a> was created to reflect identified dependencies and track progress. Unfortunately, this approach led to lengthy release cycles (10-12 months) with lots of room for scope creep. When the release finally got completed, lots of good work was accomplished (over <a href="http://snipurl.com/25mhe">1200 issues</a> where addressed in 0.3 alone) but the lack of visibility was problematic and the slow pace of releases was too demoralizing.</p>
<p>We recognized that the schedule was build on assumption that we knew everything upfront. There was a sentiment that the whole Gantt thing was a little removed from the actual work and that overall &#8220;things were going ok, because we were kind of tracking it&#8221; was not an acceptable way to run our project. We had to accept that our planning and scheduling practices were broken.</p>
<p><span id="more-564"></span></p>
<p>Besides the effect on morale, a long development cycle presented the following problems:</p>
<ul>
<li> Nothing can be released until everything is completed and put back together.</li>
<li> Difficulty to bring visibility on real progress (i.e. when can we ship?).</li>
<li> Last stable release branch and trunk drift apart significantly. Especially problematic to support commercial partners.</li>
</ul>
<p>We also felt that our task estimates were not granular enough and the built-in slack was not taking into account other work. Unfrequent build also meant a lack of visibility on product quality.</p>
<p>That kind of development approach also fosters poor engineering and product development habits, such as:</p>
<ul>
<li> Reduced sense of urgency to release code. Discipline drops, unit test failures increase, bugs pile up. &#8220;We have enough time to fix this&#8221; mentality develops.</li>
<li> Ultimate release becomes a huge effort as the routine around releasing code does not form.</li>
<li> No continuity in QA, bugs accumulate in a backlog.</li>
<li> No context for new work, so there is a tendency to add more things to existing release, also known as feature creep.</li>
</ul>
<h4>Becoming more Agile</h4>
<p>We decided to adopt a new approach to development that would address those issues. These are the objectives we tried to fulfill:</p>
<ol>
<li> Satisfy our customers (end-users, developers, partners) through early and continuous delivery of valuable and innovative software.</li>
<li> Provide ability to react quickly to business changes.</li>
<li> Reduce product defects and security exposures.</li>
<li> Ensure team and product sustainability. Focus on ease of product maintenance, allow the team to maintain a constant pace indefinitely and be resilient to turn over.</li>
<li> Provide good visibility into progress and release date.</li>
</ol>
<p>We felt that we had a good foundation of existing practices we could build upon. <a href="http://en.wikipedia.org/wiki/Build_automation">Build automation</a>, <a href="http://martinfowler.com/articles/continuousIntegration.html">continuous integration</a>, <a href="http://en.wikipedia.org/wiki/Unit_test">unit testing</a>, <a href="http://en.wikipedia.org/wiki/Code_review">peer review process</a> for code commits, <a href="http://developer.songbirdnest.com/add-on-api/docs/">automated api documentation</a> and the use of <a href="http://bugzilla.songbirdnest.com">Bugzilla</a> were already well established within the team. We needed to augment those with a few others borrowed from <a href="http://agilemanifesto.org/">Agile methodologies</a>.</p>
<p>We added the following set of guiding principles:</p>
<ul>
<li> Reduce release length and maintain a releasable product at all time.</li>
<li> Working software is delivered frequently (weeks rather than months) and is the principal measure of progress.</li>
<li> Provide rapid feedback loop to QA and Product Manager.</li>
<li> Develop a system for better estimation and tracking.</li>
</ul>
<h6>Reduce release length</h6>
<p>At a high level, we&#8217;ve committed to release a major update of Songbird every other month. We opted for calendar driven releases with a short development cycle of 4 to 6 weeks of coding maximum. We adopted a naming scheme for each release train drawn from a music artists theme. Alphabetically sequencing those release trains makes it easy to see the order of releases (<a href="http://wiki.songbirdnest.com/Releases/Eno">Eno</a> release comes after Dokken for instance).</p>
<h6>Measure progress against working code</h6>
<p>Within a release cycle, we introduced the notion of <strong>iterations</strong> of 1 week length that we used for planning and measuring progress against. This gave us the context to improve our estimation and tracking system.</p>
<h6>Develop a system for better estimation and tracking</h6>
<p>Estimating how long software development takes is one of the most difficult thing to do.</p>
<p>We created a <a href="http://wiki.songbirdnest.com/Roadmap">High Level Roadmap</a> that captures the scope and sequencing of each release.</p>
<p>We came up with a set of lightweight artifacts that would help us represent and track what needs to be done.</p>
<ul>
<li> <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;deadlinefrom=&amp;deadlineto=&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=cf_type_&amp;type0-0-0=equals&amp;value0-0-0=Feature">Feature</a> &#8211; High level product feature (bullet point on product box, if we had one)</li>
<li> <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;deadlinefrom=&amp;deadlineto=&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=cf_type_&amp;type0-0-0=equals&amp;value0-0-0=Story">Story</a> &#8211; Smallest increment of implementable end-user value</li>
<li> <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;deadlinefrom=&amp;deadlineto=&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=cf_type_&amp;type0-0-0=equals&amp;value0-0-0=Task">Task</a> &#8211; Engineering implementation detail, chore, etc.</li>
<li> <a href="http://bugzilla.songbirdnest.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Songbird&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;deadlinefrom=&amp;deadlineto=&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=cf_type_&amp;type0-0-0=equals&amp;value0-0-0=Bug">Bug</a> &#8211; Defect in existing functionality</li>
</ul>
<p>In support of that, we also created on our wiki <strong>design docs</strong> that represent wireframe and accompanying notes to explain each feature. You can see an <a href="http://wiki.songbirdnest.com/Releases/Eno/Clean_Up_View_Menus">example of such document</a> for the view menus clean up in Eno release.</p>
<p>For each <strong>story</strong>, <strong>task</strong> and <strong>bug</strong>, we&#8217;ve introduced a costing system based on <strong>points</strong>. The scale starts as at 1 point, for something easy that an engineer can do in a day. Two points means it will take some time to think about it and write the code. 3 pointers are reserved for the most difficult issues, requiring research or lots of code. The idea is to come up with a normalized unit of work across the team that we can measure ourselves against. Moving from a time based estimate to point base is not easy. For one, the scale is not linear (e.g. 3 pointers don&#8217;t take 3 times as long as 1 pointers). However, the basis for this is to simplify and reduce cost estimate process to a good enough level that we can measure and forecast. While it may be a blunt instrument, there is diminish return in spending more time refining and tracking estimate at a much more precise level.</p>
<p>The key benefit from developing a consistent costing practice is the ability to measure progress and use it to forecast future work. Entering <strong>Velocity</strong>. By computing how many points get completed by the team over an iteration, we were able to normalize the output in the form of a velocity metric. This gives us a sense of how much stuff we can accomplish in a typical cycle.</p>
<p>To track our progress, we setup 2 iteration meeting, one to review and plan the iteration and the other to steer the iteration at mid-point.</p>
<p>All the artifacts and measurements are tied together on a <strong>Release Plan</strong> published on our internal wiki.</p>
<h6>Feedback loops</h6>
<p>Another important factor is the acceptance and validation of work. In order for points to be counted in an iteration, there needs to be an agreement on when things are &#8220;done&#8221;. <a href="http://wiki.songbirdnest.com/Developer/Articles/Builds/Nightly_Builds">Nightly builds</a> are being used for verification every day. On the bug front, QA validates engineering fixes and mark them validated. Similarly, Product Manager accept stories as completed when they are satisfied with the implementation of a feature.</p>
<h4>Putting it to practice</h4>
<p>With all these new practices in place, we were eager to tackle our first Agile release known as &#8220;Cher&#8221;. Our next post will take a look at the roller coaster of real life release cycle.</p>
<div id="facebook_like"><iframe 
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fauberger.com%2Farchives%2F2008%2F06%2Fsongbird-path-to-agility-part-i-2&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=dark" 
scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:auto;"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://auberger.com/archives/2008/06/songbird-path-to-agility-part-i-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
