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

<channel>
	<title>Chris Sterling's Blog</title>
	<atom:link href="http://chrissterling.gettingagile.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://chrissterling.gettingagile.com</link>
	<description>Harmony with Agile and Architecture</description>
	<pubDate>Tue, 26 Aug 2008 21:52:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>The IT Manager&#8217;s Dilemma with Software Debt</title>
		<link>http://chrissterling.gettingagile.com/2008/08/25/the-it-managers-dilemma-with-software-debt/</link>
		<comments>http://chrissterling.gettingagile.com/2008/08/25/the-it-managers-dilemma-with-software-debt/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 16:27:13 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=104</guid>
		<description><![CDATA[&#8220;The team continues to complain about working with that legacy codebase because it has so much software debt. That software debt slows them down in feature delivery and they are wondering if we can push for priority to be put into paying it back some?&#8221; asked the ScrumMaster. The IT Development Manager looked distraught about [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;The team continues to complain about working with that legacy codebase because it has so much <a href="http://chrissterling.gettingagile.com/2007/04/08/clean-up-clean-up-everybody-do-your-share/" target="_blank">software debt</a>. That software debt slows them down in feature delivery and they are wondering if we can push for priority to be put into paying it back some?&#8221; asked the ScrumMaster. The IT Development Manager looked distraught about the request. She knew that paying back some of the software debt would be a valuable effort but what would the business say about the priorities? &#8220;Tell the team that we&#8217;ll start paying back some of the software debt starting in the next release. We must get the current release out the door and a change in priorities won&#8217;t allow us to get there.&#8221; the IT Development Manager said.</p>
<p>Considering the circumstances I cannot tell an IT manager that this approach is not the right way to go. In many cases the IT manager is not in a position to push for technical priorities even when they will provide value to the business. As teams continue to develop on a system without managing the software debt effectively feature delivery throughput decreases. The following picture shows a team&#8217;s feature delivery throughput versus time spent stabilizing each release over time:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/perctimespent-featdel-vs-stabilizing.png"><img class="aligncenter size-medium wp-image-106" title="perctimespent-featdel-vs-stabilizing" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/perctimespent-featdel-vs-stabilizing-300x180.png" alt="" width="300" height="180" /></a></p>
<p>There are many reasons for this software debt accrual:</p>
<ul>
<li>Pressure of the deadline</li>
<li>Inexperienced team members</li>
<li>Specialization</li>
<li>Over-complication</li>
<li>Bad design</li>
<li>etc&#8230;</li>
</ul>
<p>IT management has looked for ways to minimize the effects of software debt. We introduce processes that in theory will reduce software debt but in reality seem not to lessen the effects at all. Tools are introduced that will ease the software development process but we still see similar or potentially new mistakes made by team members. Individual team members are asked to specialize in particular software development disciplines such as Database Administrator (DBA), Quality Assurance (QA), or Business Analysis (BA). Although we do each of these specialized roles more efficiently it seems that the product delivered still is accruing software debt. So what do we do?</p>
<p>It is my experience that teams that adopt agile test and engineering practices within an organization that supports collaboration between business units and development teams are more successful in the containment of software debt. These teams tend to minimize software debt and will at the very least deliver with consistent throughput release after release. In some cases I have seen teams accelerate the velocity of their feature delivery throughput over time.  The following figure represents the problem IT managers have in deciding to manage software debt effectively on existing legacy software:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/itmgrdilemma-swdebt-gap.png"><img class="aligncenter size-medium wp-image-107" title="itmgrdilemma-swdebt-gap" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/itmgrdilemma-swdebt-gap-300x151.png" alt="" width="300" height="151" /></a></p>
<p>A team will have to slow their current feature delivery significantly in order to get consistent throughput over time. I would suggest that managing the software debt effectively would be the best decision for a business relying on this software. Software is a valuable asset for businesses that can:</p>
<ul>
<li>Reduce costs for business processes by automating significant portions</li>
<li>Provide information to business quickly so they can make better strategic decisions</li>
<li>Attain market share providing shrink-wrapped software to meet the market&#8217;s needs</li>
<li>Reduce system decay on existing software assets so they can be used into the future</li>
<li>and much, much more&#8230;</li>
</ul>
<p>Still, given all of these reasons it is difficult to take on software debt in the wild. We must understand that a typical IT manager has many influences on their decision making, as well:</p>
<ul>
<li>Business pressures for a set of features on a certain date for a set cost (The Iron Triangle)</li>
<li>Expectations of feature delivery based on past software releases</li>
<li>Unreasonable deadlines due to business issues such as lapsing support contracts and executive management promises</li>
<li>Perception of their organization and how that reflects on their capabilities</li>
<li>A compensation plan that does not reward managing software assets for future capability</li>
<li>etc&#8230;</li>
</ul>
<p>Given all of these circumstances I believe that IT managers are making the best decisions possible. How can we help IT management support our organizational software assets effectively and minimize the effects of software debt? What approaches will allow the software delivery teams to manage software debt while delivering essential features? How can business get more involved and increase understanding of this dilemma that will affect the organization&#8217;s capabilities over time? I am interested to hear from anybody who reads this. What are your suggestions?</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/08/25/the-it-managers-dilemma-with-software-debt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beat Cross-site Scripting Issue with StoryTestIQ</title>
		<link>http://chrissterling.gettingagile.com/2008/08/25/beat-cross-site-scripting-issue-with-storytestiq/</link>
		<comments>http://chrissterling.gettingagile.com/2008/08/25/beat-cross-site-scripting-issue-with-storytestiq/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 06:20:32 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Acceptance Testing]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[DotNet]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[TDD]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=105</guid>
		<description><![CDATA[A few years ago I was privileged to be on a team with some excellent developers where I currently work, SolutionsIQ. One of whom saw the need to stabilize development on an incredibly unstable codebase with no tests. He came to the team with a proposed tool that he slapped together in his free time. [...]]]></description>
			<content:encoded><![CDATA[<p>A few years ago I was privileged to be on a team with some excellent developers where I currently work, <a href="http://www.solutionsiq.com/" target="_blank">SolutionsIQ</a>. One of whom saw the need to stabilize development on an incredibly unstable codebase with no tests. He came to the team with a proposed tool that he slapped together in his free time. It was a mashup of Selenium and FitNesse along with some modifications to support some special needs we had on the project. His name was Paul Dupuy and the entire team, including Mickey Phoenix, Rand Huso, Jonathon Golden, and Charles Liu, spent some time working on enhancing the tool, now called <a href="http://storytestiq.sf.net/" target="_blank">StoryTestIQ (aka &#8216;STIQ&#8217;)</a>, to make it what it is today. Other teams at SolutionsIQ have been using StoryTestIQ, as well, and helping to enhance its capabilities from time to time.</p>
<p>One issue that we have had is that the visual testing portion of StoryTestIQ runs inside a web browser. The security models for each browser is a little bit different but for the most part they <a href="http://www.mozilla.org/projects/security/components/same-origin.html" target="_blank">restrict cross-site scripting</a>. For most of the projects we have used StoryTestIQ on the customer&#8217;s browser was always Microsoft Internet Explorer (IE). Given this constraint we were able to run in a special non-secured mode of IE called <a href="http://msdn.microsoft.com/en-us/library/ms536496(VS.85).aspx" target="_blank">HTML Applications (HTA)</a>. This mode of IE also has a problem. The browser history is not retained while in HTA mode therefore some JavaScript functions will not work if used in your application.</p>
<p>Recently I have been working on a project that must work in multiple browsers. Also, I have a Mac so the constraint of using IE is not necessarily reasonable without some coaxing. Instead I decided to take on a quick Apache2 with mod_proxy experiment to see if I could serve both StoryTestIQ, which serves its pages from the FitNesse server inside, and the project&#8217;s web application server. It worked and so now I will share it with you.</p>
<p>I will assume that you are already <a href="http://storytestiq.solutionsiq.com/wiki/Getting_Started" target="_blank">using StoryTestIQ</a> and have <a href="http://httpd.apache.org/" target="_blank">Apache2</a> installed already. If not, please make sure each of these run within your environment before moving on. In my first configuration the project I was developing is running on the <a href="http://www.mortbay.org/jetty-6/" target="_blank">Jetty web application server</a> on port 8080. I started up StoryTestIQ on port 9999 and left my project&#8217;s web application up and running while I configured Apache2. I used MacPorts to install apache2 in the /opt/local/apache2 directory. In my environment the httpd.conf, Apache2 main configuration file, was located at /opt/local/apache2/conf/httpd.conf. In your own Apache2 installation find the default httpd.conf file for configuring the server. Inside the httpd.conf configuration file make sure that mod_proxy is installed and loaded by searching for a line similar to this:</p>
<p><em>LoadModule proxy_module modules/mod_proxy.so</em></p>
<p>If you are not currently using mod_proxy then please review their web site to install and configure mod_proxy for your environment. If mod_proxy is successfully installed then you can add the following lines to the httpd.conf file below all of the LoadModule entries:</p>
<p><em>#<br />
# Proxy configuration for STIQ and local Jetty application<br />
#<br />
ProxyPass         /stiq  http://localhost:9999/stiq<br />
ProxyPassReverse  /stiq  http://localhost:9999/stiq<br />
ProxyPass         /files  http://localhost:9999/files<br />
ProxyPassReverse  /files  http://localhost:9999/files<br />
ProxyPass         /STIQResults  http://localhost:9999/STIQResults<br />
ProxyPassReverse  /STIQResults  http://localhost:9999/STIQResults<br />
ProxyPass         /myapp  http://localhost:8080/myapp<br />
ProxyPassReverse  /myapp  http://localhost:8080/myapp<br />
</em></p>
<p><em>#<br />
# Rewrite ProjectRoot, STIQ repository main content page, to STIQ server<br />
#<br />
</em><em>RewriteEngine On<br />
RewriteLog &#8220;/opt/local/apache2/logs/rewrite.log&#8221;<br />
RewriteRule ^/ProjectRoot(.*) http://localhost:9999/ProjectRoot$1 [P]</em></p>
<p>There are multiple directories which can be easily proxied using basic ProxyPass and ProxyPassReverse directives. These are /stiq, /files, and /STIQResults. Due to the wiki page URL construction the main content page within the STIQ repository cannot use these basic directives. Instead you must use the RewriteEngine with a rule to map any URL starting with /ProjectRoot* to the STIQ Server. The problem was that the wiki page would ask for a URL such as http://localhost:9999/ProjectRoot.StoryTests and the basic proxy directives would see this as a new URL compared to basic /ProjectRoot. The use of the RewriteRule allows anything that starts with /ProjectRoot to get proxied across.</p>
<p>Once you have these configurations added to the httpd.conf you can restart the Apache2 server. In my environment the command was:</p>
<p><em>/opt/local/apache2/bin/httpd -k restart</em></p>
<p>After the web server is restarted you can launch StoryTestIQ inside your browser using a URL similar to this one:</p>
<p><em>http://localhost/stiq/runner.html?startPage=/ProjectRoot&amp;suite=StoryTests</em></p>
<p>You&#8217;ll notice that this is going through the default HTTP port 80 instead of STIQ&#8217;s port 9999. We are now proxied on port 80 to port 9999 for STIQ related URL. You can write automated acceptance tests opening  a URL starting with <em>http://localhost/myapp </em>and it will proxy to port 8080 where your web application is running. Make sure to have all of the port numbers correct in your configurations if your environment differs from mine.</p>
<p>I have also configured a <a href="http://www.rubyonrails.org/" target="_blank">Ruby on Rails</a> application for automated acceptance tests against with STIQ. In that case I had to configure mod_proxy with the following directive adding an application name to the Apache2 URL to proxy:</p>
<p><em>ProxyPass         /myapp  http://localhost:3000<br />
ProxyPassReverse  /myapp  http://localhost:3000</em></p>
<p>You can see the welcome page for your application using this basic configuration but once you have any URL locations identified in your web pages that start with &#8216;/&#8217; they will not be found. In order to support URL which start with &#8216;/&#8217; you must modify the appropriate environment configuration inside your Ruby on Rails application. The environment configuration are found in the <em>${project_root}/config/environments </em>directory by default. I added the following to my development.rb environment configuration file which is what I use with STIQ:</p>
<p><em># This allows me to run using mod_proxy on Apache2<br />
# Using StoryTestIQ for automated acceptance testing<br />
# It runs in a browser and therefore cross-site scripting is not allowed<br />
# which the mod_proxy allows me to get around by passing both the StoryTestIQ<br />
# server and the application under test through the same root URL<br />
ActionController::AbstractRequest.relative_url_root = &#8220;/myapp&#8221; </em></p>
<p>This will cause all requests for URL starting with a &#8216;/&#8217; to become &#8216;/myapp/&#8217;. This allows them to be found through the Apache2 proxy.</p>
<p>If you are interested in beating the cross-site scripting restrictions of most major browsers for use with <a href="http://storytestiq.sf.net/" target="_blank">StoryTestIQ</a> I hope this blog entry will help you out. This same mechanism could help with other tools out there who have browser restriction issues. Let me know through your comments if this worked for you or if you have any suggestions on modifications that could make this easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/08/25/beat-cross-site-scripting-issue-with-storytestiq/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Technical Debt Workshop - A Perspective</title>
		<link>http://chrissterling.gettingagile.com/2008/08/21/technical-debt-workshop-a-perspective/</link>
		<comments>http://chrissterling.gettingagile.com/2008/08/21/technical-debt-workshop-a-perspective/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 14:26:52 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Acceptance Testing]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[DotNet]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[TDD]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=98</guid>
		<description><![CDATA[Last week I was invited to participate in a LAWST-style workshop on Technical Debt. I was honored to be there with such a great group of people from diverse industries and experiences.
Preface: I am writing this blog entry for myself and therefore it may not be as useful to those reading. Also, the perspective on [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I was invited to participate in a <a href="http://www.lawst.com/" target="_blank">LAWST</a>-style workshop on <a href="http://cs.calvin.edu/activities/technical-debt/" target="_blank">Technical Debt</a>. I was honored to be there with such a great group of people from diverse industries and experiences.</p>
<p><em>Preface: </em>I am writing this blog entry for myself and therefore it may not be as useful to those reading. Also, the perspective on discussion points are from my own understanding. I will link to other portrayals, blogs, and articles on technical debt in the future to round out these understandings. I do have positions on this topic that I have talked about in earlier posts, conference presentations, and in articles that I will continue to build upon in the future with influence from people in the workshop and outside, as well.</p>
<p>On the night before the workshop began, a large group of the participants went out to a Grand Rapids, MI watering hole to get introduced and start lively discussions. I learned some interesting nuggets such as how some roads in Texas are paved cow runs. We also discussed more of the philosophical and metaphorical underpinnings of the term debt in relation to technology artifacts. One item I took away from this was around <a href="http://en.wikipedia.org/wiki/Discretionary_income" target="_blank">discretionary income</a>. Some technology shops either do not have discretionary income or choose to use it developing new capabilities rather than investing it to minimize their current technical debt.</p>
<p><a href="http://www.agilerules.com/aboutus.phtml" target="_blank">Nancy Van Schooenderwoert</a> provided me with many good pieces of information. While discussing our agile coaching experiences with teams she said:</p>
<p><em>&#8220;The only question that matters at the end of an iteration is &#8216;Did you build more or less trust with the customer?&#8217;&#8221;</em></p>
<p>Some people who read this may find this difficult to find true but I have found this question is important to ask each iteration. Scrum and other agile frameworks attempt to build trust between parties that may have played the blame-game with each other in past projects. As a team and customer build trust the motivation of the team and willingness of a customer to collaborate grows stronger. These characteristics enable faster product development with higher quality.</p>
<p>Now for the play-by-play of the workshop itself.</p>
<p><em>Rick Hower: 10 Warning Signs of Technical Debt</em></p>
<p>Rick facilitated a brainstorming session to gather warning signs of technical debt in your code. We brainstormed way more than 10 warning signs that I did not write down. Rick and potentially other participants will be writing an article to choose the top 10 warning signs that I will link to once it comes out.</p>
<p><em>Matt Heusser: Root Causes of Technical Debt</em></p>
<p>Here are some of the notes I took on Matt&#8217;s topic:</p>
<p>Typical training in computer science tends to not entail testing, maintenance of your own code beyond an assignment, or team interaction.</p>
<p>Technical people tend to take a victim position when developing code too fast creating technical debt. For instance &#8220;those mean business people pushed me around and I have no power to change their mind&#8221;. Non-technical people don&#8217;t always understand what they are asking for when making decisions on feature delivery. If they knew the impact of these decisions they may decide to pay off some of the technical debt before investing in new features.</p>
<p>North American businesses tend to look for short-term versus long-term results. This could impact planning and delivery since the short-term goals may be hacks while long-term results show decay of software can be costly.</p>
<p>Engineers have observable physical reasons for qualifying assessments (ie. &#8220;This bridge will take traffic going 40 mph&#8221;). Software development organizations do not seem to have these types of qualifying assessment tools fully figured out yet. Matt used mechanical engineering in the 1800&#8217;s versus electrical engineering during the same time period to support this idea. Mechanical engineering was well established in the late 1800&#8217;s yet electrical engineering was still in its infancy. Useful units to measure were known for mechanical engineering yet the electrical engineering folks did not have similar units of measure. Over time the electrical engineering discipline gained new knowledge and developed useful units of measure that we use today. Maybe we as the software industry are still trying to find our useful units of measure.</p>
<p><em>David Walker: False Starts</em></p>
<p>Misuse and bad deployment of practices hurts an organization.</p>
<p>David mentioned an organization that may be of interest: <a href="http://www.asq.org/" target="_blank">ACQ (American Society for Quality)</a>. They have a topic on their site called <a href="http://www.asq.org/communities/economic-case/faq.html" target="_blank">ECQ (Economic Case for Quality)</a> that may be a helpful talking point.</p>
<p><em>Chris McMahon asked the question &#8220;Why would you not do excellent work?&#8221; in a discussion on technical people asking for permission to work on technical debt in their software development efforts. I thought this was a great question so I wrote it down.</em></p>
<p><em>Steve Poling: Technical Debt is Fascism</em></p>
<p>Steve got our attention with the name of this topic. Steve wanted us to come up with formulas we could use to calculate technical debt. I thought he had some good ideas and I hope he is able to develop formulas that actually work for particular instances of technical debt.</p>
<p>Steve brought up <a href="http://en.wikipedia.org/wiki/Godwin%27s_law" target="_blank">Godwin&#8217;s Law</a>: <em>&#8220;As a Usenet discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches one.&#8221; </em>I thought this was interesting since the term technical debt could be dilluted in its usage if it covers too much of a spectrum and is not able to be pinned down.</p>
<p>I thought Steve brought up a fairly good metaphor for technical debt revolving around his trailer hitch. He had noticed the need to paint his trailer hitch for some time in order to protect it from the elements. The problem was that other pressing items of business came up and he did not paint the hitch. Over time he went to paint the trailer hitch and now it had rust on it. This meant that the total effort to protect the trailer hitch from the elements had grown exponentially. He now had to clean the hitch and make sure the rust was gone and then he could paint it.</p>
<p><a href="http://www.xprogramming.com/" target="_blank"><em>Ron Jeffries</em></a> asked to draw a picture on the black board to discuss technical debt and he came up with what I thought was an amazing representation of the issue. Here is my attempt at recreating his phenomenal chalk talk in a tool:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/effecttechdebt-codingspeed.gif"><img class="aligncenter size-medium wp-image-99" title="Effect of Technical Debt on Coding Speed" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/effecttechdebt-codingspeed-300x229.gif" alt="" width="300" height="229" /></a></p>
<p>We can make incremental progress on a large feature area within a system adding value with each addition. In order to make incremental progress we should keep code clean and easy to change so the addition of more features on top of existing functionality does not slow down. In fact we should be able to deliver features faster on top of each capability already built into system. This does not always (or even usually for that matter) happen in projects and instead we end up with a “big ball of mud” to work with. As a team is working on this system they begin an effort to add a new feature and get caught in a quagmire of old crusty code that is difficult to work with. What is even worse is when there are external dependencies to this big ball of mud that makes changes even more risky than it would be on its own.</p>
<p><em><a href="http://www.techdarkside.com/" target="_blank">David Christiansen</a>: Where did all this $@#% come from?</em></p>
<p>David was entertaining and provided some instances of what he constituted as technical debt. Here are the sources he listed in the presentation:</p>
<ul>
<li>Taking shortcuts (experienced)</li>
<li>Hacks (beginner)</li>
<li>Geniuses (overcomplicated)</li>
<li>Living in the now</li>
<li>Futurists</li>
<li>Time</li>
<li>The Iron Triangle</li>
<li>Anticipating reuse</li>
<li>Documentation</li>
<li>Innovation</li>
<li>Trying to avoid technical debt</li>
</ul>
<p>Some people in the room thought this list went well beyond what technical debt should be. This list seems to cover almost anything that causes software to become difficult to work with. It was a great list of issues and David went on to say he wasn&#8217;t as interested in defining technical so much as help to create tools and practices that would minimize bad software.</p>
<p>David also discussed how documentation is a gamble:</p>
<p><em>&#8220;Like a slot machine the house always wins. Sometimes you get a winner but most of the time it is a loss.&#8221;</em></p>
<p>I will probably use this quote in the future with proper acknowledgements so thank you David.</p>
<p><a href="http://www.exampler.com/" target="_blank">Brian Marick</a> said the following during the questions and answers portion of the presentation:</p>
<p><em>&#8220;Debt is a property between the people and the code.&#8221;</em></p>
<p>I thought this was interesting and already have multiple thoughts on how this can be applied. I am not sure what is the best way to view this statement yet I found it important enough to write down so I will think about it some more. Also, I hope to ask Brian more about this point in the future.</p>
<p><a href="http://www.michaelfeathers.com/" target="_blank">Michael Feathers</a> also brought to the group a point about the tradeoffs made in terms of &#8220;navigability versus changeability in the code&#8221;. Some technical folks like code navigation to be explicit and therefore have difficulty reading strongly object-oriented code that separates implementation from interfaces to support change.</p>
<p><em>Nancy Van Schooenderwoert</em>: A Garden of Metaphors</p>
<p>Nancy proposed that we could start to explain technical debt more succinctly if given a combination of a metaphor and metrics. The metaphor can help people who are non-technical understand the impact of their decisions on technical artifacts. For instance the use of the word debt helps people visualize the problems with just making it work versus craftsmanship (word brought up by Matt Heusser that I thought was useful). She mentioned that technical debt is about expectation setting.</p>
<p><em>NOTE: Nancy wrote to me and added the following comment - &#8220;Metrics and Metaphor have opposite weaknesses so they support each other well. People can be suspicious of metrics, because there is an infinite choice of things to measure and how to measure them. Metaphor, on the other hand rings true because of familiar experiences the listener has had. The only problem is that it depends on tech debt *truly* being like the thing in the metaphor. We have to check back with reality to know if that&#8217;s the case. That implies we measure something to see whether and how the behavior of tech debt is different from the behavior of financial debt (or whatever else we used as metaphor).</p>
<p>I think some of the most useful metrics to start with are<br />
* value stream mapping<br />
* bug metrics<br />
* story points delivered, and remaining to be done</em>&#8221;</p>
<p>Nancy also brought a great alternative metaphor to debt based on <a href="http://www.geraldmweinberg.com/" target="_blank">Gerald Weinberg&#8217;s</a> &#8220;Addiction&#8221; trigger responses. Sometimes decisions are made for short-term results without understanding their long-term effects such as in alcohol, smoking, and other drug addictions. To enable better responses to the addiction we must setup a more appropriate environment that allows proper responses to made within. Here is my portrayal of the &#8220;Addiction&#8221; metaphor drawing Nancy put up:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/addictionmetaphor.gif"><img class="aligncenter size-medium wp-image-100" title="Addiction as Metaphor - originally from Gerald Weinberg" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/addictionmetaphor-300x132.gif" alt="" width="300" height="132" /></a></p>
<p>The &#8220;Environmentalist&#8221; as a metaphor was also brought up by Nancy. In life nobody has to pay for the air we are dirtying up. Economic systems poorly reflect environmental quality and this has helped lead to issues we are now faced with in global warming.</p>
<p><em>David Christiansen: You&#8217;ve got a lot of Technical Debt, Now What?</em></p>
<p>I don&#8217;t have any notes about David&#8217;s talk but <a href="http://chrismcmahonsblog.blogspot.com/" target="_blank">Chris McMahon</a> mentioned something I thought was wonderful:</p>
<p><em>JFDI - Just #%$ Do It</em></p>
<p>We got to this point when people started asking why wouldn&#8217;t a technical person just fix the issues when they seem them. Chris discussed an example of how they decided to use Bugzilla. One of the developers got tired of the old bug tracking system, and he JFDI by installing Bugzilla. It was pointed out that there are also examples of JFDI backfiring and I can think of a situation that impacted a team for multiple days because of JFDI.</p>
<p>The visibility into each task that a person takes on in some organizations makes this approach difficult to follow. How can we help people decide to make the right choices while developing software in these environments?</p>
<p><em>Matt Heusser: Debt Securities</em></p>
<p>Matt brought up the term <a href="http://en.wikipedia.org/wiki/Moral_hazard" target="_blank">&#8220;moral hazard&#8221;</a> to describe how technical people act based on their insulation from the long-term effects. For instance, a person may take a shortcut in developing a feature since they are not going to be working on the code 1 year from now when it must be modified to support a new feature. Matt pointed out two practices that may help minimize this effect:</p>
<ul>
<li>Customer close to the Team</li>
<li>Agreement on how to work together</li>
</ul>
<p><a href="http://www.hendricksonxp.com/" target="_blank">Chet Hendrickson</a> pointed out that a good way to minimize the problem with moral hazard is by:</p>
<p><em>&#8220;Lowering the threshold of pain&#8221;</em></p>
<p>For instance, Chet brought up doing our taxes. Yes he could incrementally update his taxes 2 hours each month. Instead he waits until 2 weeks prior to get his tax forms completed because the potential headache of tax evasion is strong enough that it crosses a threshold.</p>
<p><em>Brian Marick: Market World</em></p>
<p>Brian defined the term market world as:</p>
<p><em>&#8220;Get as much for as little&#8221;</em></p>
<p>He then described the term social world as:</p>
<p><em>&#8220;Transactions are not accounted for&#8221;</em></p>
<p>Brian discussed that use of the term &#8220;debt&#8221; as a talking point may push us into a &#8220;market world&#8221;. This could be problematic since it leads to the creation of technical debt by only doing enough now to get it out the door. Maybe we could do more to introduce social aspects into the talking points for removing what we now call technical debt.</p>
<p>Brian is a tremendous thinker, IMHO. He brings creative and profound discussion points to the table. Here is one such point he made:</p>
<p><em>&#8220;Agile teams care deeply about business value&#8230;the problem with agile teams is they care more about business value than the business does.&#8221;</em></p>
<p>Being an agile coach has lead me to believe this is true many times over. I wonder if this is something we can work on as an industry and should we move more towards social world ideas to identify the right vision for our software delivery focus.</p>
<p><em>Rob V.S.: Developer in a Non-agile Environment</em></p>
<p>Rob pointed out some points about development in a non-agile environment. Here are some of those:</p>
<ul>
<li>Many developers, for some reason, want to appease customers with their time estimates</li>
<li>Rob saw this appeasement was causing problems for him and others in the code</li>
<li>Rob decided he would start buffering estimates to incorporate refactoring into his processes</li>
<li>A problem occurred when refactoring was causing implementation times to shorten and making his estimate buffers unnecessary</li>
<li>Rob was finding that he was able to implement features in about 1/2 the time of others now that he was refactoring code</li>
<li>To his amazement the refactoring worked every time even though it felt like a risk each time he thought about it in his estimates</li>
</ul>
<p>I thought Rob&#8217;s story was a great addition to the group. Not everybody, maybe not even a majority, of the people who participated were involved in projects that were using an agile framework.</p>
<p><em>Michael Feathers: Recovery</em></p>
<p>Michael explained that he saw that the industry was talking about people issues more often today then before. This seemed like a good thing yet he wondered when we would get back to discussing technology issues. Chris McMahon said the following that I thought was a good principle to follow:</p>
<p><em>&#8220;Make the easy things easy and the hard things possible&#8221;</em></p>
<p>I am not sure where I heard something similar before but Chris brought it up so quickly that I attribute it to him until further notice. <img src='http://chrissterling.gettingagile.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> (NOTE: Chris said “as far as I know originated as a design principle in the early days of Perl development. I was quoting Larry Wall.”)</p>
<p><em>David Andersen: Business Models</em></p>
<p>David pointed out something that I discuss often in training courses on Scrum:</p>
<p><em>&#8220;IT as a cost center versus a profit center&#8221;</em></p>
<p>I was quite interested in this topic and see this as potentially the most important software development environment problem to be solved. Yet the problem may be so large that finding a solution may be near impossible. Therefore I have found discussing the issue one organization at a time sometimes helps.</p>
<p>David expressed that companies who work in a time and materials approach tend to be cost centers. The idea is that we employ a warm body to take on the work. Those companies whose approach is a service for a fee tend to think like a profit center. The right people will emerge and deliver the services based on setting up the proper relationship.</p>
<p>Brian Marick brought up a reference to the <a href="http://www.winchestermysteryhouse.com/" target="_blank">Winchester Mystery House</a> that is filled with all kinds of oddities. I can&#8217;t remember why he brought this up in terms of business models but it could be something to think about when discussing technical debt and its potential ramifications.</p>
<p><em>Matt Heusser: Clean Code and the Weaker Brother</em></p>
<p>Matt presented the idea of the weaker brother and it caused me to take another perspective look at team composition. At least it gave a strong analogy to draw from for conversation about it. One thing that I thought was interesting about Socialtext, where a few of the folks including Matt work, is they are truly distributed as team members. They have communication tools that help them minimize the potential issues with fully distributed team. One of the tools and processes they use is every commit message to source control goes to the development email list. Something that happens in response to this from time to time is other people on the team can challenge the implementation and a healthy, respectful banter goes on that improves quality of the overall software. I will take this away as a talking point on distributed teams and may even use it on one of our projects in the near future to see how it works for us.</p>
<p>Chris McMahon discussed a policy they had at a previous employer that said everyone must work on a team at least 1 week per month, even the iteration leader (similar to a ScrumMaster role). I will have to think about this policy and its ramifications but I truly believe that I must work on a team every once in a while to keep my practices up to snuff.</p>
<p><em>Michael Feathers: Topic of Unknown Origin but Greatly Appreciated (my own words)</em></p>
<p>Michael had a question that I thought was interesting:</p>
<p><em>&#8220;Would the world be better if all your code was gone in 3 months?&#8221;</em></p>
<p>The answer to this question for your particular project context may help the team decide what the effect of technical debt is today. I had a couple of comments on the subsequent discussion points but never got them out because there were so many passionate people with great points, ideas, and questions. Here are the points around taking an incremental improvement to these codebases from my own experience with some horrible situations:</p>
<p><a href="http://chrissterling.gettingagile.com/2007/09/16/develop-architectural-needs-through-abuse-user-stories/" target="_blank">Abuse Stories</a> - Mike Cohn brought this up during a presentation and they were not in his slide materials.  He has since added them and I believe them to be greatly important and easy to implement types of stories to describe the cost of not addressing what are usually technical debt or more likely architectural features. You can follow the link to an old blog entry I posted on this subject.</p>
<p>&#8220;Finding a common enemy&#8221; - I find teams are not usually motivated until they have a common purpose. One way to find a common purpose quickly is to find a common enemy. This may be a competitor&#8217;s product or another team (I hope not but hey?). This can bring a team together and focus their efforts to defeat the competitor. I have heard of companies who developed this focus and cornered their marketplace in a fairly short timeframe. This could also help to address technical debt since those issues will be fixed in order to continue on the path to defeating the common enemy.</p>
<p>Michael did a great job of describing how companies may not consider the value of their existing software enough. Code has value and organizations who understand this can make better decisions about how they treat their software assets. The idea is to prevent devaluation of a software asset when appropriate.</p>
<p><em>Ron Jeffries &amp; Chet Hendrickson</em></p>
<p>OK, now this was fun. Ron and Chet put on a artistic show that put technical debt into a perspective easily understood, IMHO. I will attempt to recreate their drawings and the reasoning behind each one but I hope they write an article on this soon since they are incredibly apt to delivering a message succinctly.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/velocityoptions.gif"><img class="aligncenter size-medium wp-image-101" title="Velocity Potentials" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/velocityoptions-300x157.gif" alt="" width="300" height="157" /></a></p>
<p>As a team is building a system their velocity will either stay fairly consistent, decelerate, or accelerate.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/creatingsysfeatimpl.gif"><img class="aligncenter size-medium wp-image-102" title="Creating System Feature Implementation" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/creatingsysfeatimpl-300x231.gif" alt="" width="300" height="231" /></a></p>
<p>Each feature implementation is developed using a combination of available system capabilities and newly developed capabilities.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/choiceis-ratsnest-welldesigned.gif"><img class="aligncenter size-medium wp-image-103" title="Choice is Rats Nest or Well-designed" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/08/choiceis-ratsnest-welldesigned-300x215.gif" alt="" width="300" height="215" /></a></p>
<p>A team can choose within their current envioronmental context to build a rats nest that is hard to work with later or a well-designed system that more easily changes with new business needs.</p>
<p>The punch line, from what I could gather, was the use of a negative term &#8220;debt&#8221; may be problematic from an emotional point of view. Rather than using a negative to discuss the topic it may be better to discuss how we can build upon what we have. Thus we can call technical debt something like <a href="http://missourifamilies.org/quick/financeqa/finqa14.htm" target="_blank">&#8220;liquid assets&#8221;</a>. We can use our existing code to develop new capabilities for our business quickly and with lower cost then doing so from scratch. I am not sure if this term will stick but I like the building upon what we have already developed point of view.</p>
<p>Chet and Ron also brought up the 4 basic principles of simplicity in code by Kent Beck:</p>
<ol>
<li>Tests all run</li>
<li>No duplication</li>
<li>Expresses all design ideas</li>
<li>Minimize code</li>
</ol>
<p>* These are in order of importance since each of last 3 are potentially in conflict with each other.</p>
<p><strong>Wrap Up</strong></p>
<p>There is so much more that I didn&#8217;t take down, remember, potentially understood the importance of, and whatever else that stopped me from recording it. The above content may seem somewhat haphazard since I did not create a coherent overview but rather just recorded what I heard from my perspective. I hope it is still something that others can get some ideas from and use effectively. Lets start reducing technical debt for the good of our organizations and customers and the morale of our team.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/08/21/technical-debt-workshop-a-perspective/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Reflections on Agile 2008</title>
		<link>http://chrissterling.gettingagile.com/2008/08/19/reflections-on-agile-2008/</link>
		<comments>http://chrissterling.gettingagile.com/2008/08/19/reflections-on-agile-2008/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 12:39:03 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=97</guid>
		<description><![CDATA[Agile 2008 was an interesting experience for me. It was the first time that I went to a conference and felt like I knew a large portion of the participants. I am not sure what this means but I had fun meeting up with friends and acquaintances.
Bas Vodde, a Certified Scrum Trainer from Singapore, had [...]]]></description>
			<content:encoded><![CDATA[<p>Agile 2008 was an interesting experience for me. It was the first time that I went to a conference and felt like I knew a large portion of the participants. I am not sure what this means but I had fun meeting up with friends and acquaintances.</p>
<p>Bas Vodde, a Certified Scrum Trainer from Singapore, had mentioned an automated acceptance test framework being developed at Nokia Siemens Networks called Robot during a course we taught together in Los Angeles, CA. He told me this framework would be made available soon as an open source project. I kept my eyes open and not very long after our March 2008 course it was available <a href="http://code.google.com/p/robotframework/" target="_blank">here</a>. Bas introduced me to Pekka Laukkanen, creator of the Robot framework, and it was a pleasure discussing his vision of where the framework is going in the future. I am testing the tool out for potential use in our organization along with <a href="http://storytestiq.sf.net/" target="_blank">StoryTestIQ</a>, an open source tool put together at <a href="http://www.solutionsiq.com/" target="_blank">SolutionsIQ</a>.</p>
<p>A colleague of mine use the phrase <a href="http://blogs.msdn.com/nihitk/pages/185836.aspx" target="_blank">&#8220;Pesticide Paradox&#8221;</a> to support his point about automating tests. Mickey is a dynamic speaker, great developer, and all around nice guy who presented twice at Agile 2008 on <a href="http://www.solutionsiq.com/agile2008/agile-2008-tdd.php" target="_blank">&#8220;Narrative Testing: Tools for Story-Test-Driven Development&#8221;</a> and <a href="http://www.solutionsiq.com/agile2008/agile-2008-domain.php">&#8220;Domain-Specific Testing Languages&#8221;</a>.</p>
<p>I presented on <a href="http://www.solutionsiq.com/agile2008/agile-2008-architecture.php" target="_blank">&#8220;Architecture in an Agile Organization&#8221;</a> and a few folks showed up to participate. I thoroughly enjoy discussing architecture and decision-making surrounding it in an agile context. After putting so much emphasis on <a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front" target="_blank">big design up front (BDUF)</a> it is difficult to understand how we can make incremental steps from an architecture perspective. Also, the <a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a> has a principle:</p>
<p><em>The best architectures, requirements, and designs emerge from self-organizing teams.</em></p>
<p>This can be problematic if we do not trust in a team&#8217;s capability to make architecture and design decisions. My hope is to give some tools that organizations and teams can use to build this trust.</p>
<p>I did not attend many sessions at Agile 2008. I am not quite sure why this is but I found myself in good conversations and getting involved in the right topics for me. If you have an opportunity to attend Agile 2009 I highly recommend it.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/08/19/reflections-on-agile-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Affinity Estimating: A How-To</title>
		<link>http://chrissterling.gettingagile.com/2008/07/04/affinity-estimating-a-how-to/</link>
		<comments>http://chrissterling.gettingagile.com/2008/07/04/affinity-estimating-a-how-to/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 06:00:49 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=92</guid>
		<description><![CDATA[At the last Scrum Trainer&#8217;s Retreat in Boston, MA, Lowell Lindstrom presented a 30-minute exercise on Affinity Estimating.  Kane Mar has written a short blog entry on this technique for sizing a large Product Backlog here.  I would like to add some context for the exercise and a step-by-step that I have found [...]]]></description>
			<content:encoded><![CDATA[<p>At the last Scrum Trainer&#8217;s Retreat in Boston, MA, <a href="http://www.scrumalliance.org/profiles/57-lowell-lindstrom">Lowell Lindstrom</a> presented a 30-minute exercise on Affinity Estimating.  <a href="http://www.kanemar.com/" target="_blank">Kane Mar</a> has written a short blog entry on this technique for sizing a large Product Backlog <a title="Scrum Trainers Gathering (4/4): Affinity Estimating" href="http://kanemar.com/2008/04/21/scrum-trainers-gathering-44-affinity-estimating/" target="_blank">here</a>.  I would like to add some context for the exercise and a step-by-step that I have found useful since using this and other similar techniques.  Although I do not suggest having Product Backlogs of enormous size, this exercise has been successfully run in my presence with over 300 items in 2 hours.  I recommend that this exercise is used when you have more than 20 items to size.  When less than 20 I find that <a title="Planning Poker" href="http://www.planningpoker.com/" target="_blank">Planning Poker</a> or a more sequential approach may be more appropriate.</p>
<p><strong>Prerequisites</strong></p>
<p>In preparation for this exercise, the Product Owner must have a list items in their Product Backlog which are to be sized by the Team(s).  I suggest that the Product Backlog items are each put onto their own index card, post-it note, or better yet perforated and printable Avery index cards.  Also consider holding the exercise in a room with a large wall that you can stick Product Backlog items onto.  If you are using paper print outs of your Product Backlog items then you may need to bring blue painter&#8217;s tape or some other sticky substance to adhere them to the wall.  You may also wish to bring stickers, black sharpies, extra index cards or post-it notes, and multi-colored markers.</p>
<p><strong>Step 1: Silent Relative Sizing</strong></p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizingwall-empty-spectrum.png"><img class="aligncenter size-medium wp-image-93" title="relativesizingwall-empty-spectrum" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizingwall-empty-spectrum-300x94.png" alt="Silent Relative Sizing Setup" width="382" height="119" /></a></p>
<p>As shown above, place an X-Large post-it note or index card on the far left side of the wall with &#8220;Smaller&#8221; written on it.  On the far right side of the wall place another which says &#8220;Larger&#8221;.  Let the Teams know some simple guidelines which may help the relative sizing exercise, such as:</p>
<ul>
<li>Team members will be asked to come up to the wall with a subset of the Product Backlog items provided by the Product Owner</li>
<li>Team members will be expected to size each item relative to other items on the wall considering the effort involved in implementing it based on our <a title="Building a Definition of Done" href="http://chrissterling.gettingagile.com/2007/10/05/building-a-definition-of-done/">Definition of Done</a></li>
<li>This is a silent part of the exercise so please refrain from speaking to others except for basic comments like &#8220;move out of my way&#8221;</li>
<li>The Product Owner and any helpful stakeholders/supporters will be present towards the back of this room to provide clarity when needed, so please ask them for help when not sure about an item</li>
<li>Team members may use a place in the room to capture questionable Product Backlog items such as items which are too ambiguous to size even after discussion with the Product Owner</li>
<li>Think of the wall as a spectrum of size from Smaller to Larger; items stacked vertically on the wall are about the same relative size in effort</li>
</ul>
<p>I have facilitated this exercise with teams of 5 to 45.  When working with a larger number of team members it is important to use good facilitation techniques such as phased work in smaller groups at the wall.  Please find resources on the Internet and with your HR department on facilitation for more specific tips when working with the large groups.</p>
<p>Run the silent relative sizing until all Product Backlog items are up on the wall or in the space reserved for questionable items.  This can take anywhere from 5-20 minutes depending on the number of items and team members.</p>
<p><strong>Step 2: Wikipedia-like Editing of Wall</strong></p>
<p>Now it is time for Team(s) to edit the relative sizing on the wall.  Ask team members to read the Product Backlog items on the wall and move them around as needed in either direction, smaller or larger.  Explain to the Team(s) that we should be considerate of other team member&#8217;s estimates and therefore bring others into the conversation when appropriate before making extreme moves.</p>
<p>During this part of the exercise you may see some design discussions going on, thoughts about Product Backlog items which are missing, and increased clarifications needed from the Product Owner.  Allow this to continue until the Team(s) begin to settle down and there seems to be little change happening on the wall.  This may take 20-60 minutes to complete.</p>
<p><strong>Step 3: Place Items into Relative Sizing Buckets</strong></p>
<p>Once all of the Product Backlog items have been placed onto the wall and edited by the Team(s) our job is to get them placed in size buckets.  Depending upon the nomenclature that the Team(s) decided to use place the sizes along the spectrum at the top of the wall between smaller and larger.  For instance, if you are using Fibonacci sequence for your story point nomenclature, place the 5 further away from 3 than 3 is from 2 on the spectrum.  If you are using T-Shirt sizing then may decide to use a doubling or just increasing spacing as sizes get larger.  It should look something like the picture below after you put up the sizes:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizing-sizesonwall.png"><img class="aligncenter size-medium wp-image-94" title="relativesizing-sizesonwall" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizing-sizesonwall-300x79.png" alt="Relative Sizing Nomenclature on Wall" width="358" height="94" /></a></p>
<p>Ask the Team(s) to decide which size the Product Backlog items fit under based upon the relative size location on the wall.  Explain that we need to make the sizing clear so leave space between buckets of sized items.  After this has completed the wall may look something like the following:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizeditems-inbuckets.png"><img class="aligncenter size-medium wp-image-95" title="relativesizeditems-inbuckets" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/07/relativesizeditems-inbuckets-300x170.png" alt="Relative Sized Items in their Designated Buckets" width="358" height="202" /></a></p>
<p><strong>Step 4: Product Owner &#8220;Challenge&#8221;</strong></p>
<p>Once the Team(s) have sized the Product Backlog items on the wall the Product Owner is probably anxious to discuss some of the sizes.  I usually give the Product Owner and any of their supporters a colorful pen or stickers to mark items they would like to discuss with the Team(s).  This is also a good time for the Team(s) to take a 15-minute break to recover from the estimating work they have done so far.</p>
<p>It is important to tell the Product Owner and their supporters that the word &#8220;challenge&#8221; is not to disrespect the estimates of the Team(s).  Be careful how you approach the challenge and make sure that you are communicating what about the item&#8217;s size was not inline with your thoughts of it&#8217;s size.  I may even prepare them with some Planning Poker Tells that may be noticed by the Team(s) while they are challenging items.</p>
<p>When the Team(s) get back from break have them get comfortable and allow the Product Owner and supporters to ask about items they have marked on the wall.  The Team(s) discuss their reasons for the size associated with each item.  You can take multiple approaches in terms of changing sizes based on the Team(s) input:</p>
<ol>
<li>When team members decide that an item should be resized put it onto a separate wall for resizing after challenge has completed.</li>
<li>Have team members decide on the spot with the Product Owner what the new size is.</li>
</ol>
<p>Although the first of these choices seems best I have found the second to be sufficient in most circumstances.  This step is completed once all of the challenged items have been discussed.  This may take anywhere from 20-60 minutes.</p>
<p><strong>Step 5: Get it into an Electronic Tool</strong></p>
<p>Of course, we should make sure that the information is not lost once the estimating has been completed.  Make sure to get the estimates into your tool of choice for Product Backlog management ASAP.  I usually write the estimated size on each Product Backlog item before taking them off the wall and transferring into the tool.</p>
<p><strong>What Else?</strong></p>
<p>I found a few nuggets in running this exercise which I believe to be helpful:</p>
<ul>
<li>The Affinity Estimating exercise is best conducted on Product Backlogs larger than 20 items.  It is best when you have at least 40 items which allows for groupings to easily become apparent.</li>
<li>Some Product Backlog items may not be understood enough to estimate at all.  Place these on a space separate from the estimating wall so the Product Owner can take them away and clarify them.</li>
<li>Leaving the sizing nomenclature off the wall until the full sizing steps 1 &amp; 2 are completed helps Team(s) use relative sizing.</li>
<li>Ask the Team(s) to decide on a common sizing nomenclature such as T-shirt (XS, S, M, L, XL), Fibonacci (1, 2, 3, 5, 8, 13), or 2n (2, 4, 8, 16, 32) before starting step 3 if they haven&#8217;t already decided.</li>
<li>Spacing of sizes relative to the gap between the numbers across the wall can help team members put items into size buckets.</li>
<li>Be careful and work with the Product Owner and their supporters to understand how the &#8220;challenge&#8221; of sizes can be effective and still respect the Team(s) estimates.</li>
<li>ScrumMaster must be ready to do heavy facilitation with a single team.  If you are conducting the exercise with multiple teams it is imperative that each step is setup well.  I have facilitated this exercise with 3, 4, and 5 product teams in the room.  It works well in this situation with healthy facilitation.</li>
<li>This exercise does not remove the need to conduct more in depth estimating sessions such as with <a title="Planning Poker" href="http://www.planningpoker.com/">Planning Poker</a> as the Product Backlog evolves.</li>
</ul>
<p>Try it out and let me know in the comments if there are any additions or modifications you would like to make.  I believe the Affinity Estimating exercise will be helpful to those dealing with large Product Backlogs in getting initial estimates.  Thank you Lowell and Kane for exposing this exercise to us.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/07/04/affinity-estimating-a-how-to/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The &#8220;Wright Model&#8221; for Describing Incremental Architecture</title>
		<link>http://chrissterling.gettingagile.com/2008/06/02/the-wright-model-for-describing-incremental-architecture/</link>
		<comments>http://chrissterling.gettingagile.com/2008/06/02/the-wright-model-for-describing-incremental-architecture/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 22:39:53 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[DotNet]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[TDD]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=86</guid>
		<description><![CDATA[One of the most common questions in teaching and coaching agile processes to groups is:
&#8220;How do we design our software while delivering iterations of potentially shippable product increments?&#8221;
Scrum, an agile process that I teach about and coach organizations on implementation of, asks that each Sprint, analogous to an iteration, delivers a potentially shippable product increment. [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most common questions in teaching and coaching agile processes to groups is:</p>
<p><em>&#8220;How do we design our software while delivering iterations of potentially shippable product increments?&#8221;</em></p>
<p>Scrum, an agile process that I teach about and coach organizations on implementation of, asks that each Sprint, analogous to an iteration, delivers a potentially shippable product increment.  There is emphasis on potentially shippable since it is quite common to have releases that involve running multiple Sprints until there is <a title="Value vs. Return and Potentially Shippable Product Increments" href="http://chrissterling.gettingagile.com/2007/11/20/value-vs-return-and-potentially-shippable-product-increments/" target="_blank">enough value for your users</a>.  I usually describe potentially shippable product increment is that the software is of a quality that a releasable version would include.  This means that each Product Backlog item that is implemented during the Sprint is tested, coded, integrated, documented, and verified.  Scrum teams gain a better understanding of what deliverables are necessary to make this happen by creating a <a title="Building a Definition of Done" href="http://chrissterling.gettingagile.com/2007/10/05/building-a-definition-of-done/" target="_blank">Definition of Done</a>.</p>
<p>When I ask what design decisions are difficult in the Scrum process to deliver it usually revolves around high level architecture decisions or data modeling.  There are other specific design areas that get brought up but lets focus on these for now.  In order to help a Scrum team understand from a conceptual point of view how incremental design works across a release of their software product I use a diagram that I believe Mike Cohn created.  Here is my interpretation of the diagram:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/incremental-design-newprod.jpg"><img class="aligncenter size-medium wp-image-87" title="incremental-design-newprod" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/incremental-design-newprod-300x284.jpg" alt="Incremental Design on New Product" width="300" height="284" /></a></p>
<p>This diagram attempts to describe how in new software product development efforts more emphasis in early Sprints is put into implementation of architecture elements.  As the architecture is more fully defined and implemented in later Sprints emphasis is increasingly put into feature development.  In the final Sprint of a release there may be little to no architecture implementation left to do.  This diagram demonstrates the expectations of early release deliverables in terms of technical architecture implementation to support feature delivery.  It also shows that each Sprint in the release should deliver features that a user can review.</p>
<p>In a software product team that delivers more than one release may have less architecture emphasis in early Sprints of following releases.  This is shown in a modified version of the diagram below:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/incremental-design-existingprod.jpg"><img class="aligncenter size-medium wp-image-88" title="incremental-design-existingprod" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/incremental-design-existingprod-300x180.jpg" alt="Incremental Design in Following Releases of Product" width="300" height="180" /></a></p>
<p>After describing the above diagrams to a developer named David Wright he approached me to validate his understanding.  Within 10 minutes of my description of incremental architecture he had developed a new diagram perspective which I thought was brilliant.  His diagram involved two axis with the x-axis representing the surface visible to users and the y-axis representing depth of the architecture.  In Sprint 1 of a multiple Sprint release a portion of both the surface and architecture depth are realized.  The figure below is a visual representation of the portions implemented of a fully releasable product version.  The dark blue areas of the grid show implementation of the surface and depth in Sprint 1 while the empty grid elements represent what has not been implemented yet.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprint1.jpg"><img class="aligncenter size-medium wp-image-89" title="depth-surface-sprint1" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprint1.jpg" alt="Sprint 1 Depth and Surface of Releasable Product" width="252" height="213" /></a><br />
As a release progresses the amount of surface visible features and architectural depth implemented is incrementally built upon towards a fully releasable product version.  The following diagram shows the incremental architecture progress later in the release cycle.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprintn.jpg"><img class="aligncenter size-medium wp-image-90" title="depth-surface-sprintn" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprintn.jpg" alt="Depth and Surface of Incremental Architecture Later in Release" width="252" height="213" /></a></p>
<p>The adoption of an incremental architecture approach comes with a couple of potential issues:</p>
<ul>
<li>Less up front design of the overall release architecture is known at the beginning and while the depth of the architecture is still being implemented</li>
<li>New knowledge may impact existing implementation of architecture elements</li>
</ul>
<p>In order to manage these types of issues we must implement disciplined practices to allow our architecture to accept change as we gain more knowledge.  This is why the Extreme Programming practices such as Test-Driven Design (TDD), Continuous Integration (CI), Pair Programming (or continuous code review), and Refactoring have become so common on Scrum teams.  TDD gives our design an executable way to prove we have not broken existing functionality at the component and functional level.  This does not negate the need for exploratory testing by a person but it will keep manual testing to a manageable level.  CI automatically runs builds, automated tests, and deployment of our application then provides feedback to the team about the current state of the integrated system.  Pair Programming increases knowledge transfer across the team and provides coherent communication of the products domain into the tests, code, and support artifacts.  And finally, refactoring is defined by the guy who wrote the book on it, Martin Fowler, as:</p>
<p><em>&#8220;a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior&#8221;</em></p>
<p>Refactoring is best support by a high automated test coverage that allows a team to know when the external behavior has not been changed in response to changes deep in the architecture.  Here is a visual representation of architectural elements, in red, which could be refactored in response to a new feature.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprintn-refactor.jpg"><img class="aligncenter size-medium wp-image-91" title="depth-surface-sprintn-refactor" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/06/depth-surface-sprintn-refactor.jpg" alt="Depth and Surface of Release with Refactored Elements" width="252" height="213" /></a></p>
<p>Each of the refactorings may be small changes but lead to larger positive impact over the span of a release.  Effective use of refactoring keeps our architecture flexible and therefore able to meet evolving business needs.</p>
<p>I have used David Wright&#8217;s model to describe incremental architecture to other clients in conjunction with the original diagram from Mike Cohn.  It has helped provide a clearer picture of incremental design and how to incorporate it into their real world projects.  With David&#8217;s permission I named it the &#8220;Wright Model&#8221; and will continue to use it in the future.  Thank you, David.</p>
<p>Big design up front (BDUF) is based on the thought that we can lock down business requirements and design our software right the first time.  The problem is that business needs change almost as soon as the requirement has been developed.  Not only do they change but the functionality requested is better understood once a user touches the feature and provides their feedback.  Incremental design of a system throughout a release allows us to incorporate this feedback and change our architecture to satisfy the user&#8217;s needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/06/02/the-wright-model-for-describing-incremental-architecture/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating a Team Working Agreement</title>
		<link>http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/</link>
		<comments>http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/#comments</comments>
		<pubDate>Fri, 02 May 2008 05:00:09 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/</guid>
		<description><![CDATA[While coaching teams I have found the creation of a Working Agreement as an essential step for a Team to initialize their adoption of an agile framework.  I have also noticed that the ideas behind along with the process of creating a Working Agreement is not widely understood by coaches, ScrumMasters, and team members. [...]]]></description>
			<content:encoded><![CDATA[<p>While coaching teams I have found the creation of a Working Agreement as an essential step for a Team to initialize their adoption of an agile framework.  I have also noticed that the ideas behind along with the process of creating a Working Agreement is not widely understood by coaches, ScrumMasters, and team members.  Although there is no single reason or way to facilitate a Team in the creation of their Working Agreement, here is what I have found to be helfpul.</p>
<p>As a facilitator you can help the team understand the reason for creating a Working Agreement by discussing the need for understood team norms because agile frameworks involve increased collaboration.  Becoming a Team involves commitment to working together and supporting each other in our common goals.  This commitment is supported by writing what all team members believe are important protocols for the Team to comply with to maximize their capabilities to deliver faster and with higher quality.</p>
<p>With Scrum Teams I have found the following topics are a good starter list to start the creation of a Working Agreement:</p>
<ul>
<li>Time and location of Daily Scrum</li>
<li>Testing strategy (unit, functional, integration, performance, stress, etc&#8230;)</li>
<li>Build and infrastructure plans (shared responsbilities)</li>
<li>Team norms (be on time, respect estimates, help when needed, etc&#8230;)</li>
<li>How to address bugs/fires during Sprint</li>
<li>Product Owner availability (phone, office hours, attendance in Daily Scrum)</li>
<li>Capacity plan for initial Sprint(s)</li>
</ul>
<p>A common way that I facilitate is to put these topics on a white board or piece of easel pad paper and then ask the Team(s) to create their working agreement with these as guidance.  If they find other topics which are important please add them to the list.  I highly recommend creating a Working Agreement for your Team.  It helps all team members understand what are common  protocols for the Team and an opportunity to work through conflicts in practices.</p>
<p><!-- ckey="0BE755FF" --></p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Managing Software Debt</title>
		<link>http://chrissterling.gettingagile.com/2008/05/02/managing-software-debt/</link>
		<comments>http://chrissterling.gettingagile.com/2008/05/02/managing-software-debt/#comments</comments>
		<pubDate>Fri, 02 May 2008 04:33:56 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Acceptance Testing]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[TDD]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2008/05/02/managing-software-debt/</guid>
		<description><![CDATA[At a recent Seattle Scrum users group meeting I presented on the topic of &#8220;Managing Software Debt&#8221;.  Here is a link to a PDF of the presentation and the following is a description of the topic:
The Product Backlog in Scrum is used to prioritize implementation of features into software based on value. A Product [...]]]></description>
			<content:encoded><![CDATA[<p>At a recent Seattle Scrum users group meeting I presented on the topic of <a href="http://seattlescrum.wordpress.com/2008/03/11/seattlescrum-meeting-on-thursday-march-27th-managing-software-debt/">&#8220;Managing Software Debt&#8221;</a>.  Here is a <a href="http://gettingagile.com/csterwa/Managing%20Software%20Debt.pdf">link to a PDF</a> of the presentation and the following is a description of the topic:</p>
<p><em>The Product Backlog in Scrum is used to prioritize implementation of features into software based on value. A Product Owner is charged with managing the Product Backlog to direct software implementation for the greatest possible Return on Investment (ROI). Entirely feature-based Product Backlogs do not consider the decay of software over time, and the resulting software debt can sink a project or company. This presentation will highlight ways Scrum Teams and Product Owners can work with stakeholders to manage software debt over the life cycle of the product.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/05/02/managing-software-debt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Focus on Value</title>
		<link>http://chrissterling.gettingagile.com/2008/03/02/focus-on-value/</link>
		<comments>http://chrissterling.gettingagile.com/2008/03/02/focus-on-value/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 13:05:45 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2008/03/02/focus-on-value/</guid>
		<description><![CDATA[An article I wrote in the summer last year is now on the Scrum Alliance web site.  The article focuses on value when deriving user stories for your Product Backlogs and describes a step-by-step process for running the value-driven user stories exercise.  Here is a link to the article directly:
Focus on Value - How to [...]]]></description>
			<content:encoded><![CDATA[<p>An article I wrote in the summer last year is now on the <a href="http://www.scrumalliance.org/">Scrum Alliance</a> web site.  The article focuses on value when deriving user stories for your Product Backlogs and describes a step-by-step process for running the value-driven user stories exercise.  Here is a link to the article directly:</p>
<p><a href="http://www.scrumalliance.org/articles/89-focus-on-value">Focus on Value - How to Create Value-Driven User Stories</a></p>
<p>Please comment on this blog if you are using this exercise during Product Backlog &#8220;grooming&#8221; sessions and let me know how it is working for you.  Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/03/02/focus-on-value/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What Can Cause IT Projects to Fail?</title>
		<link>http://chrissterling.gettingagile.com/2008/02/24/what-can-cause-it-projects-to-fail/</link>
		<comments>http://chrissterling.gettingagile.com/2008/02/24/what-can-cause-it-projects-to-fail/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 18:13:43 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Product Owner]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2008/02/24/what-can-cause-it-projects-to-fail/</guid>
		<description><![CDATA[Michael Krigsman provided an interesting variation of why blind dates so often fail and changed blind dates to project plans.

The interesting piece to me is the overlap area identified as &#8220;rare&#8221;.  I speak to many folks about their project expectations compared to plans and one phrase which comes up often is &#8220;well, it worked in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.zdnet.com/bio.php?id=krigsman">Michael Krigsman</a> provided an interesting variation of <a href="http://indexed.blogspot.com/2008/02/why-blind-dates-so-often-fail.html">why blind dates so often fail</a> and changed blind dates to <a href="http://blogs.zdnet.com/projectfailures/?p=605">project plans</a>.</p>
<p><img src="http://bp2.blogger.com/_FBXGhy-QmVw/R7IXeSl9NpI/AAAAAAAABg8/v7IAG9ST6rw/s320/card1308.JPG" title="Reality versus Expectations" alt="Reality versus Expectations" align="middle" height="191" width="320" /></p>
<p>The interesting piece to me is the overlap area identified as &#8220;rare&#8221;.  I speak to many folks about their project expectations compared to plans and one phrase which comes up often is &#8220;well, it worked in [name of] project fairly close to plan&#8221;.  The somewhat rare success in planning up front seems to be a beacon for further use of particular project planning tactics.</p>
<p>I am not going to expand right now on this subject but I would like to leave this with something for us to ponder.  How many of your projects actually get even close to original plan expectations?  What methods in planning are actually adding to the success?  What types of projects are finding better success?  Let me know if you have any comments or wish to share your answers with the readers of this blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/02/24/what-can-cause-it-projects-to-fail/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
