<?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>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>
	<lastBuildDate>Fri, 12 Jun 2009 18:49:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maintain One List of Work</title>
		<link>http://chrissterling.gettingagile.com/2009/06/12/maintain-one-list-of-work/</link>
		<comments>http://chrissterling.gettingagile.com/2009/06/12/maintain-one-list-of-work/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 18:44:00 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=281</guid>
		<description><![CDATA[During an interview at the Better Software conference this week, I mentioned that I thought maintaining a single list of work prioritized by the business was important for our industry to improve. The following text is an excerpt, in first draft form, from chapter 2, &#8220;Architecture Integrity&#8221;, of my upcoming book &#8220;Architecture in an Agile [...]]]></description>
			<content:encoded><![CDATA[<p><em>During an interview at the Better Software conference this week, I mentioned that I thought maintaining a single list of work prioritized by the business was important for our industry to improve. The following text is an excerpt, in first draft form, from chapter 2, &#8220;Architecture Integrity&#8221;, of my upcoming book &#8220;Architecture in an Agile Organization&#8221; that is relevant to this topic.</em></p>
<hr size="1" />In Scrum, the Product Backlog is a list of desired features prioritized by the Product Owner. Prioritization is done by the Product Owner to optimize value of the software delivered to the users. Instead of prioritizing within levels of importance such as high, medium, and low the Product Owner must prioritize in “stack-rank” order. This means that no Product Backlog item has the same priority as another item. This form of prioritization gives clear directions to development teams about what the most important feature is next to work on.</p>
<p>A healthy Product Backlog contains not only new features but also technical requirements to support the next Product Backlog items in priority. The development team is expected to review the Product Backlog frequently to provide cost estimates for Product Backlog items to help the Product Owner prioritize based on both cost and benefit. During the development team’s review they will suggest Product Backlog items that are missing from a technical point of view in the product definition. These technical Product Backlog items will be discussed with the Product Owner so they are able to prioritize them effectively. It is essential that the development team explain why each technical Product Backlog item is important to support other upcoming items. If this is not expressed the Product Owner could be inclined to demote those technical Product Backlog items because the value of them is not understood enough.</p>
<p>When issues are found in the software they usually come in three varieties:</p>
<ul>
<li>Enhancement – a suggestion for improving the current state of the software from a user’s point of view</li>
<li>Defect – a system fault that occurs while using the software</li>
<li>Fire – a system fault that is inhibiting significant usage scenarios in the software and must be fixed immediately</li>
</ul>
<p>Enhancements are requests for improvements to the software based on the perspective of the user. These improvements should be prioritized based on their value against all other Product Backlog items. An enhancement and defect issues are hard to distinguish from one another at times but that is fine. Defects are system faults that users are able to workaround but should not be happening from a user experience and/or technical perspective. Since we are able to work around these defects and the development team is able to provide a fix in the next iteration they are placed into the Product Backlog and prioritized against all other Product Backlog items. Fires are defects that cannot be worked around and cause serious problems for users of the software. In healthy software applications, fires should be a rare occurrence. It is important that a fix is implemented right away and may interrupt the work getting done in the current iteration.</p>
<p><img class="aligncenter size-medium wp-image-282" title="issuetriage" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/06/issuetriage-300x167.png" alt="issuetriage" width="300" height="167" /><em></em></p>
<p><em>Figure: This flow diagram describes how an identified issue is triaged in an iterative and incremental approach such as Scrum. If the issue is an enhancement or defect that can be worked around for now it goes into the Product Backlog and prioritized based on its value. If the issue is a “fire” or defect that cannot be worked around then it must be fixed immediately. The development will put the fire into their current list of work in the Sprint Backlog and figure out how it effects their commitment to deliver on their current iteration.</em></p>
<p>Defects are captured in bug databases in many organizations. Teams using the Scrum process to manage their software development find themsves in a predicament. Do we continue working from two lists, the Product Backlog of desired features and bug database? Or do we incorporate items from the bug database into the Product Backlog? I suggest all teams should incorporate defects into the Product Backlog. There are multiple reasons to do this:</p>
<ul>
<li>Development team does not make priority decisions for the business stakeholders. If the development team decides to work on defects rather than desired features then they are deciding the defects are higher priority than the desired features without including the Product Owner in the decision-making process.</li>
<li>Minimizes the amount of hidden work done by the development team. By providing visibility into the defects, the development team is being transparent about the state of the software they are working on.</li>
<li>Provides the Product Owner with an opportunity to prioritize the defect lower. The Product Owner could decide the defect is not important enough to fix at this time.</li>
<li>Allows development team and Product Owner to design a solution for dealing with defects. From time to time the defect provides insight into a design flaw that the Product Owner would like to improve.</li>
</ul>
<p>Ultimately, the development is able to maintain alignment with business priorities for the software. Priorities are decided based upon the full reality of the software, new features and defects included.</p>
<p>A single work queue, such as the Product Backlog, provides visibility to the development team about current expectations about upcoming work. The Product Owner should share the Product Backlog with the development team and discuss the direction of the product beyond the next iteration. As the development team gains knowledge about the direction of the product they will be able to provide input into the Product Backlog. This visibility is important so Product Backlog items do not surprise the development team when it is too late to prepare a proper solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/06/12/maintain-one-list-of-work/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Designing Through Programmer Tests (TDD)</title>
		<link>http://chrissterling.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/</link>
		<comments>http://chrissterling.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/#comments</comments>
		<pubDate>Wed, 27 May 2009 19:47:53 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=227</guid>
		<description><![CDATA[To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:
What should the software do next for the user?
The following coding session will provide [...]]]></description>
			<content:encoded><![CDATA[<p>To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:</p>
<blockquote><p><em><strong>What should the software do next for the user?</strong></em></p></blockquote>
<p>The following coding session will provide an example of applying this question. The fictitious application is a micro-blogging tool named “Jitter”. This is a Seattle-based fictitious company that focuses on enabling coffee injected folks write short messages and have common online messaging shorthand to be expanded for easy reading. The user story we are working on is:</p>
<blockquote><p><strong>So that it is easier to keep up with my kid’s messages, Mothers want to automatically expand their kid’s shorthand</strong></p></blockquote>
<p>The acceptance criteria for this user story are:</p>
<ul>
<li>LOL, AFAIK, and TTYL are expandable</li>
<li>Able to expand lower and upper case versions of shorthand</li>
</ul>
<p>The existing code already includes a JitterSession class that users obtain when they authenticate into Jitter to see messages from other people they are following. Mothers can follow their children in this application and so will see their messages in the list of new messages. The client application will automatically expand all of the messages written in shorthand.</p>
<p>The following programmer test expects to expand LOL to “laughing out loud” inside the next message in the JitterSession.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public class WhenUsersWantToExpandMessagesThatContainShorthandTest {

    @Test
    public void shouldExpandLOLToLaughingOutLoud() {
        JitterSession session = mock(JitterSession.class);
        when(session.getNextMessage()).thenReturn("Expand LOL please");
        MessageExpander expander = new MessageExpander(session);
        assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
    }

}
</pre>
<p>The MessageExpander class did not exist so along the way I created a skeleton of this class to make the code compile. Once the assertion is failing, I then make the test pass with the following implementation code inside the MessageExpander class:</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return msg.replaceAll("LOL", "laughing out loud");
}
</pre>
<p>This is the most basic message expansion I could do for only one instance of shorthand text. I notice that there are different variations of the message that I want to handle. What if LOL is written in lower case? What if it is written as “Lol”? Should it be expanded? Also, what if some variation of LOL is inside a word? It probably should not expand the shorthand in that case except if the characters surrounding it are symbols, not letters. I write all of this down in the programmer test as comments so I don’t forget about all of these.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
// shouldExpandLOLIfLowerCase
// shouldNotExpandLOLIfMixedCase
// shouldNotExpandLOLIfInsideWord
// shouldExpandIfSurroundingCharactersAreNotLetters
</pre>
<p>I then start working through this list of test cases to enhance the message expansion capabilities in Jitter.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandLOLIfLowerCase() {
    when(session.getNextMessage()).thenReturn("Expand lol please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
}
</pre>
<p>This forced me to use the java.util.regex.Pattern class to handle case insensitivity.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL", Pattern.CASE_INSENSITIVE).matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Now make it so mixed case versions of LOL are not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfMixedCase() {
    String msg = "Do not expand Lol please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>This forced me to stop using the Pattern.CASE_INSENSITIVE flag in the pattern compilation. Instead I tell it to match only “LOL” or “lol” for replacement.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL|lol").matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Next we’ll make sure that if LOL is inside a word it is not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfInsideWord() {
    String msg = "Do not expand PLOL or LOLP or PLOLP please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>The pattern matching is now modified to use spaces around each variation of valid LOL shorthand.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\sLOL\\s|\\slol\\s").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>Finally, it is important that if the characters around LOL are not letters it still expands.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandIfSurroundingCharactersAreNotLetters() {
    when(session.getNextMessage()).thenReturn("Expand .lol! please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand .laughing out loud! please"));
}
</pre>
<p>The final implementation of the pattern matching code looks as follows.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\bLOL\\b|\\blol\\b").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>I will defer refactoring this implementation until I have to expand additional instances of shorthand text. It just so happens that our acceptance criterion for the user story asks that AFAIK and TTYL are expanded, as well. I won’t show the code for the other shorthand variations in the acceptance criteria. However, I do want to discuss how the focus on “what should the software do next” drove the design of this small component.</p>
<p>Driving the software development using TDD focusing on what the software should do next helps guide us to only implement what is needed and with 100% programmer test coverage for all lines of code. For those who have some experience with object-oriented programming will implement the code with high cohesion, modules focused on specific responsibilities, and low coupling, modules that make few assumptions about other module they interact with will do. This is supported by the disciplined application of TDD. The failing programmer test represents something that the software does not do yet. We focus on modifying the software with the simplest implementation that will make the programmer test pass. Then we focus on enhancing the software’s design with the refactoring step. It has been my experience that refactoring refactoring represents most of the effort expended when doing TDD effectively.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AgilePalooza in San Francisco May 29th</title>
		<link>http://chrissterling.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/</link>
		<comments>http://chrissterling.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/#comments</comments>
		<pubDate>Tue, 19 May 2009 20:57:15 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=267</guid>
		<description><![CDATA[
AgilePalooza is a one day Agile conference on Friday May 29th at the San Francisco State University downtown campus. There will be two tracks: Learning Agility and Advancing Agility.
&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.
Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="AgilePalooza logo" src="http://www.agilepalooza.com/images/AgilePaloozaHeader.gif" alt="" width="497" height="87" /></p>
<p><span><a href="http://www.AgilePalooza.com" target="_blank">AgilePalooza</a> is a one day Agile conference on Friday May 29th at the <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">San Francisco State University downtown campus</a>. There will be two tracks: Learning Agility and Advancing Agility.</p>
<p>&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.</p>
<p>Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson (VersionOne Services) with special guests Ainsley Nies (open space co-facilitator) and Ian Culling (VersionOne CTO). When not presenting for the &#8220;Learning Agility&#8221; track speakers will participate in the open space.</p>
<p>Space is limited and the cost is low so please register soon if you would like to attend. For more information or to register please visit <a href="http://www.AgilePalooza.com" target="_blank">www.AgilePalooza.com</a>.</p>
<p><strong>Where? </strong></span></p>
<p><span>San Francisco State University Downtown Campus, 835 Market Street, San Francisco. (Powell street BART station in the Westfield Center) &#8211; <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">Map/Directions</a><br />
</span></p>
<p><strong><span>When? </span></strong></p>
<p><span>9am-5pm (check-in and continental breakfast starts at 8am)</span></p>
<p><span><strong>Cost?</strong> </span></p>
<p><span>$69</span></p>
<p><span>Register here: <a href="http://www.AgilePalooza.com">www.AgilePalooza.com</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Survey for Software Quality Attributes &#8211; Where Should We Focus?</title>
		<link>http://chrissterling.gettingagile.com/2009/05/17/survey-for-software-quality-attributes-where-should-we-focus/</link>
		<comments>http://chrissterling.gettingagile.com/2009/05/17/survey-for-software-quality-attributes-where-should-we-focus/#comments</comments>
		<pubDate>Sun, 17 May 2009 21:43:14 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IASA]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=263</guid>
		<description><![CDATA[I have been using a tool for some time with clients and teams to find out what software quality attributes the product development team should focus on in the project. ISO standard 9621 describes the quality attributes found in software. The following image shows the 6 categories and specific attributes contained within them.
Before I knew [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using a tool for some time with clients and teams to find out what software quality attributes the product development team should focus on in the project. ISO standard 9621 describes the quality attributes found in software. The following image shows the 6 categories and specific attributes contained within them.</p>
<div id="attachment_264" class="wp-caption aligncenter" style="width: 310px"><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/05/iso9621.gif"><img class="size-medium wp-image-264" title="ISO 9621 Software Quality Attributes" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/05/iso9621-300x44.gif" alt="ISO 9621 Software Quality Attributes" width="300" height="44" /></a><p class="wp-caption-text">ISO 9621 Software Quality Attributes</p></div>
<p>Before I knew about this standard I would discuss how different quality attributes are in conflict with each other. For instance, if we write code that is focused on performance we lose some maintainability. It will be more difficult to read code focused on performance because readability will be sacrificed to some extent.</p>
<p>Now that I&#8217;ve known about ISO 9621 for many years, I made a simple spreadsheet tool to interview Product Owners, stakeholders, and software development team members with. Here is the Excel spreadsheet form of this tool:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/05/softwarequalityattributes-ratingtool.xls">Software Quality Attributes Rating Tool</a></p>
<p>Although a bunch of smart people have come up with ISO 9621, I found that modifying the software quality attributes rated in the tool worked more effectively with interviewees. This tool is not to decide what software attributes will be present in the software product getting developed. It is used to identify which software quality factors the team should put more emphasis on when making trade-off decisions during the project. Here is a list of the software quality attributes used in the tool:</p>
<ul>
<li><strong>Suitability</strong> &#8211; Functionality is suitable to all end users</li>
<li><strong>Interoperability</strong> &#8211; Functionality interoperates with other systems easily</li>
<li><strong>Compliance</strong> &#8211; Functionality is compliant with applicable regulatory guidelines</li>
<li><strong>Security</strong> &#8211; System is secure: confidentiality, integrity, availability, accountability and assurance</li>
<li><strong>Maturity</strong> &#8211; System components are proven stable by others</li>
<li><strong>Fault Tolerance</strong> &#8211; System continues operating properly in the event of failure by one or more of its components</li>
<li><strong>Recoverability</strong> &#8211; System recovers from failures in surrounding environment</li>
<li><strong>Understandability</strong> &#8211; Able to use system with little training</li>
<li><strong>Learnability</strong> &#8211; Supports learning of system functionality with little external interfacing</li>
<li><strong>Operability</strong> &#8211; Ability to keep a system in a functioning and operating condition</li>
<li><strong>Performance</strong> &#8211; Perceived response is immediate</li>
<li><strong>Scalability</strong> &#8211; Able to handle increased usage on the appropriate amount of resources</li>
<li><strong>Analyzability</strong> &#8211; Ability to figure out how the system functions</li>
<li><strong>Changeability</strong> &#8211; Ability to change the system components to meet new business needs</li>
<li><strong>Testability</strong> &#8211; Ability to create repeatable and specific tests of the system and potential for some to be automated</li>
<li><strong>Adaptability</strong> &#8211; Ability to change out system component functionality quickly</li>
<li><strong>Installability</strong> &#8211; Ease of installation and reinstallation</li>
<li><strong>Conformance</strong> &#8211; Conformance to industry and operational standards</li>
<li><strong>Replaceability</strong> &#8211; Ability to replace system in the future</li>
</ul>
<p>Using the tool is quite simple:</p>
<ol>
<li><strong>Emphasis Ranking</strong>: Have the Product Owner score each of the software quality factors from 1-5 (1 being less applicable and 5 being more applicable) in terms of the software product.</li>
<li><strong>Business Stakeholders identify 3 Must Haves</strong> &#8211; Ask the business stakeholders what are the 3 software quality factors they want most and stack rank them from 1 to 3</li>
<li><strong>Software Development Team 3 Must Haves</strong> &#8211; Ask the software development team what are the 3 software quality factors they want most and stack rank them from 1 to 3</li>
<li><strong>Capture Notes about Decisions</strong> &#8211; Use the notes column to capture any specific decisions about the software quality factors that would help the entire software product team come to consensus.</li>
<li><strong>Discuss Must Haves across Groups</strong> &#8211; Get the Product Owner, business stakeholders, and software development team members together to discuss and come to consensus on which software quality attributes they will focus on for this project.</li>
</ol>
<p>Please let me know how you use this tool. There have been many teams that have taken up this tool and found it to be helpful for communicating what is most important from a software quality attibutes point of view in the project. Hope it does the same for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/05/17/survey-for-software-quality-attributes-where-should-we-focus/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Scrum is the Vehicle, Not the Destination</title>
		<link>http://chrissterling.gettingagile.com/2009/05/01/scrum-is-the-vehicle-not-the-destination/</link>
		<comments>http://chrissterling.gettingagile.com/2009/05/01/scrum-is-the-vehicle-not-the-destination/#comments</comments>
		<pubDate>Fri, 01 May 2009 22:54:18 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=247</guid>
		<description><![CDATA[Have you ever heard or said any of these phrases?

We are going to implement the Scrum methodology.
We&#8217;re doing a modified Scrum.
Our developers are using a Scrum process.

These may seem like innocuous statements but they are indicators of potential misinterpretation of how Scrum is best utilized. Scrum is not a full development process (although almost anything [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever heard or said any of these phrases?</p>
<ul>
<li><em>We are going to implement the Scrum methodology.</em></li>
<li><em>We&#8217;re doing a modified Scrum.</em></li>
<li><em>Our developers are using a Scrum process.</em></li>
</ul>
<p>These may seem like innocuous statements but they are indicators of potential misinterpretation of how Scrum is best utilized. Scrum is not a full development process (although almost anything that has steps could be considered a &#8216;process&#8217;) and it is not a methodology. It does not tell you how to implement the software. It is a simple-looking framework that will help a group developing products figure out what is not working well so they can fix it. Here is the Scrum framework diagram:</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 310px"><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/05/scrumframework.png"><img class="size-medium wp-image-256" title="The Scrum Framework" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/05/scrumframework-300x189.png" alt="The Scrum Framework" width="300" height="189" /></a><p class="wp-caption-text">The Scrum Framework</p></div>
<p>At first, people and teams implementing Scrum focus on the process without understanding why and how to do each piece effectively. We believe that we will be &#8220;doing Scrum&#8221;, and will gain all of its benefits, by just:</p>
<ul>
<li>Keeping a list of work (the Product Backlog)</li>
<li>Assigning it to the team during a Sprint Planning meeting</li>
<li>Doing that work over the course of the Sprint</li>
</ul>
<p>This focus on going through the steps can be dangerous and frustrating for individuals, teams, and managers. Scrum is NOT A SILVER BULLET! No process, practices, or techniques are. Instead of focusing on the process, practices, and techniques of Scrum, I suggest individuals, teams, and management focus on the learning that can be produced by a team doing Scrum and act on that learning.</p>
<p>Scrum is an Empirical Process Control. The idea is that you plan and then do something, inspect what you did, and then adapt your behavior to improve on what you did. It is a learning framework for product development teams. This learning cycle is referred to as &#8220;inspect and adapt&#8221;. All 3 Scrum roles are involved in the learning: the Product Owner, ScrumMaster, and Developers (when I say developers I mean anybody needed to build the product, not just coders). In Scrum, there are 3 specific &#8220;inspect and adapt&#8221; cycles:</p>
<ul>
<li>The Daily Scrum meeting allows the team to focus on their commitment for the current Sprint and whether they are still on track to deliver on that commitment. If they are not able to meet the commitment then they are asked to adjust the Sprint, thereby adapting to the situation.</li>
<li>The Sprint Review meeting allows customers to view a potentially shippable product increment created by the Team and provide feedback that adjusts the Product Backlog contents and priorities. We are inspecting the product and adapting to a new understanding of the product.</li>
<li>The Sprint Retrospective enables the Team to improve the process they use to delivery software each Sprint. The Team is expected to inspect their process honestly and thoroughly to figure out how they can adjust for improved delivery capability in the following Sprint.</li>
</ul>
<p>If you read my blog often, you might recognize this from a previous post called <a href="http://chrissterling.gettingagile.com/2008/11/22/a-kaizen-mindset/" target="_blank">&#8220;A Kaizen Mindset&#8221;</a> that has good information on how to use learnings and manage the impediments around those learnings.</p>
<p>Scrum is more of a tool than a methodology. It will make visible what is not going as well as it could be.  It is then up to people in the team and organization to make changes to improve it. With each incremental improvement the product development team will move that much more effectively on its work. Rather than focusing on getting perfect at the steps in the Scrum framework, find out what can be improved in your delivery process and adapt it accordingly. If a part of the Scrum framework is difficult to do or seems like a waste then instead of eliminating that part, find out why it is difficult or wasteful in its adoption. There is usually a hidden impediment behind these difficulties and perceptions that if eliminated will allow the product development team to be more effective.</p>
<p>Scrum is not a destination.  It is rather a tool that a product development team uses to continually inspect and adapt their way to more effective delivery. The destination should be your business and development team effectiveness goals. How can we deliver more product? How can we reduce time from inception of project to release? How can we release more often at a lower cost for release stabilization of the product? How can we reduce the risk in our project delivery and portfolio? The destination should be substantial and worthwhile. Scrum is just the vehicle to help get you there.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/05/01/scrum-is-the-vehicle-not-the-destination/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>When Is Team Velocity Affected?</title>
		<link>http://chrissterling.gettingagile.com/2009/04/07/when-is-team-velocity-affected/</link>
		<comments>http://chrissterling.gettingagile.com/2009/04/07/when-is-team-velocity-affected/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 21:49:41 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=243</guid>
		<description><![CDATA[For some time I have described team velocity as a:
 function of (sprint length, team makeup, sizing nomenclature, product)
Given these parameters to team velocity, how can each affect team velocity when modified?
Sprint Length
It is common for teams when they first implement Scrum to have difficulty with short sprint length. They are probably not used to [...]]]></description>
			<content:encoded><![CDATA[<p>For some time I have described team velocity as a:</p>
<p><em> function of (sprint length, team makeup, sizing nomenclature, product)</em></p>
<p>Given these parameters to team velocity, how can each affect team velocity when modified?</p>
<p><strong>Sprint Length</strong></p>
<p>It is common for teams when they first implement Scrum to have difficulty with short sprint length. They are probably not used to delivering potentially shippable code every 2 weeks or whatever their initial sprint length is. When a team is having difficulties many of them believe that lengthening the sprint length will alleviate the problems. When a team is thinking about doing this, I now share a phrase that I heard from Chet Hendrickson at a technical debt workshop we both attended:</p>
<p><em>Lower the threshold of pain</em></p>
<p>Instead of changing the sprint length I want to facilitate teams in identifying what is the root cause of their difficulties. Many times I have found that the problems are either technical or external difficulties. Technical difficulties such as:</p>
<ul>
<li>executing manual testing takes too long</li>
<li>not enough support from QA department for testing each sprint</li>
<li>build takes too long to validate and deploy</li>
<li>too much technical debt</li>
</ul>
<p>are something that the team can start to work on. A team must work with their Product Owner to understand the technical issues and what they will get in return for fixing the most important ones. External difficulties may come in the form of:</p>
<ul>
<li>sign off takes too long from external person in organization</li>
<li>cannot deploy into external environments easily</li>
<li>not able to get key people with special skill sets on team</li>
</ul>
<p>and can cause the team problems in getting to potentially shippable code each sprint. It is my opinion that a team should weaken their Definition of Done and identify impediments to getting as close to potentially shippable code as they had hoped. If it is technical then they must get items in the Product Backlog. If it is external then the ScrumMaster must shepherd the impediments to resolution or make step-wise progress on addressing them. Take care of the impediments and the sprint length will become less of a problem.</p>
<p><strong>Team Makeup</strong></p>
<p>If the team makeup is changed then the velocity will change. There are many factors that cause this to happen:</p>
<ul>
<li>skill set differences</li>
<li>bringing new person up to speed</li>
<li>reduction in team size</li>
<li>personality problems</li>
</ul>
<p>The most effective Scrum teams that I have witnessed have worked together, at least a core group, for some time. If your organization is having difficulty keeping teams together then there is an organizational impediment that must be addressed. What about the way work flows to the teams causes them to continually get broken up and reconfigured? Organizations that can give work to teams rather than reconfiguring teams to match the work will have more success with Scrum.</p>
<p><strong>Sizing Nomenclature</strong></p>
<p>Although this is part of the function of team velocity, in my experience it is rare that teams modify their sizing nomenclature. Usually this happens when they first start Scrum where they change from duration-based estimation to estimating size and then deriving duration after executing a number of sprints. If the sizing nomenclature is changed from 2n to Fibonacci sequence there could be a significant change in velocity numbers. Fibonacci sequence produces a curve that rises at a much shorter slope than 2n. 2n is used by teams who have significant risk in technology knowledge on the team, such as in using new platform or R&amp;D. The technical knowledge may lessen over time and they might decide to change their sizing nomenclature to Fibonacci instead. This will have an effect but, again, this has been rare in my experience.</p>
<p><strong>Product</strong></p>
<p>It can&#8217;t be said enough but:</p>
<p><em><strong>Team velocity cannot be compared across teams! &#8211; Take NOTE managers!<br />
</strong></em></p>
<p>If teams are working on different products, and therefore different Product Backlogs, then they will have to consider different contextual issues when deriving their velocity for planning efforts. Velocity is most useful when all parts of the team velocity function above is staying consistent. Teams should understand this and if they start working on a different product such as:</p>
<ul>
<li>another project</li>
<li>new initiative</li>
<li>or an actual different product</li>
</ul>
<p>then they should understand that their team velocity will be affected.</p>
<p><strong>Conclusion</strong></p>
<p>Consider the items described in this article that can affect team velocity usefulness in your own projects. Team velocity is a:</p>
<p><em> function of (sprint length, team makeup, sizing nomenclature, product)</em></p>
<p>If any part of this function is modified then it will affect your team velocity. Bring this up amongst the team and management so that it can be discussed honestly and dealt with in a reasonable way.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/04/07/when-is-team-velocity-affected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Talk @ SD West 2009 on &#8220;Managing Software Debt&#8221;</title>
		<link>http://chrissterling.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/</link>
		<comments>http://chrissterling.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:55:12 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Distributed Computing]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IASA]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Jini/JavaSpaces]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=237</guid>
		<description><![CDATA[I have uploaded the talk I did at SD West 2009 on Yahoo! Video and here it is:
Managing Software Debt &#8211; Chris Sterling @ SD West 2009 @ Yahoo! Video
]]></description>
			<content:encoded><![CDATA[<p>I have uploaded the talk I did at SD West 2009 on Yahoo! Video and here it is:</p>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=12699073&#038;vid=4754803&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8055/82632771.jpeg&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=12699073&#038;vid=4754803&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8055/82632771.jpeg&#038;embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/4754803/12699073">Managing Software Debt &#8211; Chris Sterling @ SD West 2009</a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s BeyondAgile: people making software that works</title>
		<link>http://chrissterling.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/</link>
		<comments>http://chrissterling.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 16:38:06 +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[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=234</guid>
		<description><![CDATA[The hopefully-not-anticlimatic second event of the still-pretty-new BeyondAgile is happening on Thursday:
&#8220;Agile Challenges Clinic/Swap Meet&#8221;
Thursday, 26 March 2009
6:30 to 8:30 p.m.
Locations on the Eastside and Seattle!
Read on for agenda and location information, or visit our Google Group at
http://groups.google.com/group/beyondagile
The Blurb
At the first event, everyone (over forty people) created a backlog of ideas, suggestions, and work items. [...]]]></description>
			<content:encoded><![CDATA[<p>The hopefully-not-anticlimatic second event of the still-pretty-new BeyondAgile is happening on Thursday:</p>
<p class="MsoNormal"><strong>&#8220;Agile Challenges Clinic/Swap Meet&#8221;<br />
</strong>Thursday, 26 March 2009<br />
6:30 to 8:30 p.m.<br />
Locations on the Eastside <em>and</em> Seattle!<br />
Read on for agenda and location information, or visit our Google Group at<br />
<a href="https://mail.solutionsiq.com/exchweb/bin/redir.asp?URL=http://groups.google.com/group/beyondagile" target="_blank">http://groups.google.com/group/beyondagile</a></p>
<p class="MsoNormal"><strong>The Blurb<br />
</strong>At the first event, everyone (over forty people) created a <a href="https://mail.solutionsiq.com/exchweb/bin/redir.asp?URL=http://groups.google.com/group/beyondagile/web/backlog?hl=en" target="_blank">backlog</a> of ideas, suggestions, and work items. Among them were two suggestions that gave rise to this event&#8217;s focus: &#8220;a bring-a-problem&#8221; session where everyone helps everyone with their challenges. We&#8217;ve extended the idea of a clinic, where you bring a problem to an expert and get help, to a swap meet (or potluck), were everyone brings something and gets something. So come if you think you&#8217;re brimming over with answers and expertise, and come if you&#8217;re wanting other perspectives or advice on how to tangle with the problems that bedevil your days.</p>
<p class="MsoNormal">We&#8217;ll also form a program team, a group that&#8217;ll work proactively to plan interesting and exciting events in sufficient time for the blurb-writer–that&#8217;s me–to write and distribute the blurb a few weeks before the event. If you&#8217;re wondering who&#8217;d be good at doing that, go look in a mirror—it&#8217;s you we need!</p>
<p class="MsoNormal"><strong>Second Event Agenda</strong></p>
<ul>
<li>Welcome and Announcements (10 min.)</li>
<li>Formation of Program Team (10 min.)</li>
<li>&#8220;Agile Clinic/Swap Meet (85 min.)</li>
<li>Giveaway Drawing (5 min.)</li>
<li>Meeting Retrospective (10 min.)</li>
<li>Socializing and Breakout/Breakup/Beer</li>
</ul>
<p><strong>Event Locations</strong></p>
<p><strong>Eastside: </strong>SolutionsIQ<br />
First Floor Training Center<br />
10785 Willows Road NE, Suite 250<br />
Redmond, WA<br />
NOTE: directions and picture of building at http://www.solutionsiq.com/about-us/contact-us.php?Look for the tent signs and the blue BeyondAgile logo</p>
<p><strong>Seattle: </strong>Amdocs Digital Commerce Division (formerly QPass)<br />
Greece Room<br />
2211 Elliott Ave Suite 400<br />
Seattle, WA</p>
<p><strong>Questions?</strong><br />
Contact us at beyondagile@taoproductions.com, or visit our Google Group, or contribute to the nascent Wiki at beyondagile.org.</p>
<p><strong>Why come?</strong><br />
Here&#8217;s your chance to be in on the beginning of an exciting new collaboration of the Puget-Sound area (and beyond!) agile-interested. And if that&#8217;s not enough, we&#8217;ll hold a drawing to win exciting and valuable prizes!</p>
<p><strong>What&#8217;s BeyondAgile?</strong><br />
It&#8217;s the combination and follow-on to a number of the agile-oriented user and interest groups that have operated in the Puget Sound area. Representatives of the Seattle XP User Group and Seattle Scrum came together in December to try and combine the efforts of all of us who care about and use agile methods.</p>
<p><strong>Why does BeyondAgile exist?</strong><br />
o Find best practices among all agile processes<br />
o Build a bigger agile community<br />
o Take advantage of overlaps between existing groups<br />
o Expand beyond meetings and provide a place to collaborate<br />
o Align software development and business<br />
o Explore cutting-edge ideas and techniques</p>
<p><strong>What is BeyondAgile like?</strong><br />
That, in large part, is up to you. A primary reason for consolidating our efforts is to broaden our base of support, capability, and leadership. We envision a more active, multi-faceted organization that does more than just host talking heads. We&#8217;ll gather at least once a month on the 4th Thursday of the month, and probably more often, once you figure out what other events you&#8217;d like.</p>
<p><strong>Where do BeyondAgile events happen?</strong><br />
Our goal is to have many answers to this. As a result, we&#8217;ve worked to remove the impediment offered by bridges and commuting: for our monthly meetings, we hold our events in both Eastside and Seattle locations, through the semi-magic of videocasting. We&#8217;re experimenting: we&#8217;ve thought of trying to alternate the &#8220;real&#8221; physical meeting between sides of the lake. At this point, we&#8217;re only at the stage of using a semi-okayish video link between the two locations, and try *very* hard to make the meeting balanced between locations. That&#8217;s harder than it seems; come and help us work it out! We&#8217;re still dreaming of enabling people anywhere to attend through streaming video, even after the meeting&#8217;s already happened, but we need more knowledge, resources, and volunteers before that&#8217;s going to happen.</p>
<p><strong>I have question for you.</strong><br />
Great! Visit the Google Group (BeyondAgile) or send a message to beyondagile@taoproductions.com</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choking Productivity &#8212; Shared &#8220;Resources&#8221;</title>
		<link>http://chrissterling.gettingagile.com/2009/03/06/choking-productivity-shared-resources/</link>
		<comments>http://chrissterling.gettingagile.com/2009/03/06/choking-productivity-shared-resources/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 16:41:41 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=230</guid>
		<description><![CDATA[When introducing Scrum into an organization with many teams there are usually questions about particular roles and how they will work with teams. Questions that I have heard in the past are:

I work on features that cut across all or most of the teams, how can I possibly work with all of them?
I am the [...]]]></description>
			<content:encoded><![CDATA[<p>When introducing Scrum into an organization with many teams there are usually questions about particular roles and how they will work with teams. Questions that I have heard in the past are:</p>
<ul>
<li>I work on features that cut across all or most of the teams, how can I possibly work with all of them?</li>
<li>I am the only person or part of a small group that supports all of the teams, how will they work with me?</li>
<li>Our department handles all of these aspects of software delivery, how will we assure quality won&#8217;t go down?</li>
</ul>
<p>As has been said many times by many individuals, Scrum is NOT a silver bullet and it will NOT solve your problems. Scrum will make your problems visible and then it is up to the people within your organization to fix the problems. This is why I believe that the greater your organization can exhibit the five value of Scrum the greater success they will achieve with Scrum. Here are the five values:</p>
<ul>
<li>Courage</li>
<li>Commitment</li>
<li>Openness</li>
<li>Respect</li>
<li>Focus</li>
</ul>
<p>I want to point out that all of these are needed, in double order, when we find out that people within an organization are &#8220;shared&#8221;. These people are usually called &#8220;shared resources&#8221; and anytime that I hear the word &#8220;resources&#8221; used to identify people it causes me to flinch. &#8220;Resources&#8221; can be moved around wherever they are needed with specific objectives and not a worry about how they will interact with people around them. At least this is my experience in discussions about moving &#8220;resources&#8221; around the organization. I like to call human beings &#8220;people&#8221; and even call them out by name because this causes people who are discussing their movement to address their skill sets and interactions more explicitly. OK, enough of my rant on &#8220;resources&#8221; versus &#8220;people&#8221;.</p>
<p>Courage is needed for management to acknowledge that sharing people across Scrum teams is going to cause a bottleneck and to take action. I have found that this phenomenon of going through a single source for that person&#8217;s function was already causing a bottleneck but the &#8220;hand off&#8221; culture allows it to hide from daily view. It takes commitment of either funds for more people or a program to distribute knowledge through mentoring for parts of this person&#8217;s functional role. It takes openness on the part of a person who is being &#8220;shared&#8221; too thin to point it out and make sure that something is done about it. Respect is necessary for all involved to assess the situation and ask for help in resolving the issue. Finally, <em>focus </em>is the value that guides us towards working with one team or at least one Product Backlog at a time.</p>
<p>Depending upon the granularity at which a person functions well, you may find working with a Scrum team or on the Product Backlog a better choice. If your functional role supports the delivery of technical functionality in terms of software development artifacts that are actually used by your end users then being on a Scrum team is better. If your functional role influences the product strategically but does not directly generate software development artifacts that end users use then working with a Product Owner ahead of the Scrum team may be more appropriate. Here are some symptoms of sharing people too thin:</p>
<ul>
<li>People mentioning that there are too many meetings</li>
<li>Scrum teams waiting on dependent artifacts to be delivered</li>
<li>People working overtime continually to keep up with demand</li>
<li>Mentioning vacation time causes multiple organizational groups to think about how they will get along while a person is gone</li>
</ul>
<p>Sharing people is always a potential bottleneck within an organization. Your organization may be able to function for a while with shared people but at some point, if you are lucky and your company grows, they will become spread too thin. Scrum can help you identify this problem and make it visible but it takes people in your organization with courage, commitment, openness, respect, and an eye on focus to fix the sharing of people too thin. Look for ways to find the granularity at which that person in their functional role works within the software delivery process and figure out how they can interact at that level for more appropriate focus and results.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/03/06/choking-productivity-shared-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Product Backlog Rules of Thumb</title>
		<link>http://chrissterling.gettingagile.com/2009/02/07/product-backlog-rules-of-thumb/</link>
		<comments>http://chrissterling.gettingagile.com/2009/02/07/product-backlog-rules-of-thumb/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 01:28:01 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=224</guid>
		<description><![CDATA[While working with Product Owners over the years I have learned some rules of thumb that make their Product Backlogs more manageable. Some of these items are what I have learned from others and some are just working with Product Owners though trial and error. Remember these are rules of thumb and help guide your [...]]]></description>
			<content:encoded><![CDATA[<p>While working with Product Owners over the years I have learned some rules of thumb that make their Product Backlogs more manageable. Some of these items are what I have learned from others and some are just working with Product Owners though trial and error. Remember these are rules of thumb and help guide your management of a Product Backlog. They are not rules to adhere to no matter what. Always use common sense when applying a rule of thumb to your context.</p>
<p>The first one that I would like to discuss is the:</p>
<blockquote><p>Keep your Product Backlog between 50 and 100 items total</p></blockquote>
<p>This is difficult for some Product Owners at first. They may be collecting items from bug databases, issue tracking, stakeholder requests, and customers. A Product Owner may hear that this list must represent the prioritized list of work to be done on the product and then dump any item they can find into the list without making them easily consumable. Find ways to gather items into larger groupings and remove items that are not on your Product Roadmap yet.</p>
<blockquote><p>The top 20-40 items are small enough to fit into a team&#8217;s Sprint</p></blockquote>
<p>The top of your Product Backlog represents what is in highest priority to be implemented by the team. It is important to work with the team on making these items small enough for those items to fit into a Sprint. Getting estimates of cost from the team can help a Product Owner guage if the item is small enough to fit into a Sprint. If the item is important but sized too large to fit then the team can help the Product Owner break it down into smaller pieces.</p>
<blockquote><p>Put acceptance criteria on top 20-40 items</p></blockquote>
<p>Acceptance criteria could be a bulleted list of capabilities the Product Backlog item should put into the product once it has been implemented. These can be thought of as the functional acceptance tests for the Product Backlog item. If your list of acceptance criteria is getting larger than 7 bullet points then&#8230;</p>
<blockquote><p>Break up Product Backlog items into multiple items when acceptance criteria is larger than 7 capabilities</p></blockquote>
<p>Of course, there are also times where the Product Backlog item is too small and does not do enough on its own to create value for the product. In that case there is the following rule of thumb&#8230;</p>
<blockquote><p>Each Product Backlog item should have at least 3 acceptance criteria about its implemented capabilities</p></blockquote>
<p>Having too small of Product Backlog items is not always a bad thing but it could be difficult to manage and provide visibility into. I have found it also leads to Product Backlog items that are technical in nature without business benefit. As a Product Owner, it is usually difficult for me to guage the correct priority for something technical so&#8230;</p>
<blockquote><p>Every Product Backlog item should present value that a Product Owner can understand and prioritize effectively</p></blockquote>
<p>You may use abuse stories to help drive out the value to users for infrastructure or architecture Product Backlog items as written in this blog entry. However, a Product Owner could work closely with the team to delve into the value of their technical items through questions and learning. It is important that a Product Owner does not take the team&#8217;s technical items too lightly since those could be capabilities that allow your release to be successful. Such as scaling to meet your 100,000 users on the site at once.</p>
<blockquote><p>The entire Product Backlog should be prioritized in stack rank order and&#8230;</p>
<p>The entire Product Backlog should be estimated by the team who is going to work off of it</p></blockquote>
<p>These are the basics for Product Backlog management but I thought I should reiterate them. I often find that the Product Owner does not take time to prioritize their entire Product Backlog. The Product Backlog provides visibility to stakeholders, management, and the team about how the product is proposed to move forward. It is sometimes difficult to prioritize if the Product Owner does not have a cost to weigh against the benefit for each Product Backlog item. The team who is actually going to implement items off the Product Backlog should be the ones who estimate it as a group. Not any individual outside the group who will tell the team how long they should be taking on each item. From this costing of the Product Backlog it is possible to&#8230;</p>
<blockquote><p>Generate a release burndown to monitor the release plan</p></blockquote>
<p>Once you know how much the team can take on each Sprint you can do some ad-hoc release planning by going through your estimated Product Backlog and finding out how far they will be after <em>n</em> number of Sprints. Once you put this on a Release Burndown you can monitor that release and see if any changes must be made to the plan based on the reality of implementation or emergent requirements. You may even hold a Release Planning event with your entire team, stakeholders, and other interested parties to create a subset of your Product Backlog that is expected to be in the next release. With all of these parties coming together, a Product Owner may get more items to put into their Product Backlog where gaps were found by the team and stakeholders.</p>
<p>This listing of some Product Backlog rules of thumb is just a start. I have found it helpful to go through this list with new or troubled Product Owners. Please let me know if you have any other items for the list or if you disagree with some. I am always interested in what others have found helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/02/07/product-backlog-rules-of-thumb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile 2009 &#8211; Wear Your Badge Proud!</title>
		<link>http://chrissterling.gettingagile.com/2009/01/28/agile-2009-wear-your-badge-proud/</link>
		<comments>http://chrissterling.gettingagile.com/2009/01/28/agile-2009-wear-your-badge-proud/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 13:22:18 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=216</guid>
		<description><![CDATA[Show off your attendance at Agile 2009 with the badges below. Place these badges on your blog, web site, emails, and newsletters to get the word out about Agile 2009. The link to the official Agile 2009 web site is http://agile2009.agilealliance.org/.




]]></description>
			<content:encoded><![CDATA[<p>Show off your attendance at Agile 2009 with the badges below. Place these badges on your blog, web site, emails, and newsletters to get the word out about Agile 2009. The link to the official Agile 2009 web site is <a href="http://agile2009.agilealliance.org/" target="_blank">http://agile2009.agilealliance.org/</a>.</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_register.png"><img class="size-medium wp-image-217 alignnone" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_register.png" alt="Register for Agile 2009" width="206" height="132" /></a></p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_self.png"><img class="alignnone size-medium wp-image-218" title="I will be at Agile 2009" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_self.png" alt="" width="206" height="132" /></a></p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_speaker.png"><img class="size-medium wp-image-219 alignnone" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_speaker.png" alt="I am speaking at Agile 2009" width="206" height="132" /></a></p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_sponser.png"><img class="size-medium wp-image-220 alignnone" title="We sponsor Agile 2009" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/01/agile2009_webbadges_sponser.png" alt="We sponsor Agile 2009" width="206" height="132" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/01/28/agile-2009-wear-your-badge-proud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is Architecture?</title>
		<link>http://chrissterling.gettingagile.com/2009/01/19/what-is-architecture/</link>
		<comments>http://chrissterling.gettingagile.com/2009/01/19/what-is-architecture/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 18:59:32 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IASA]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2009/01/19/what-is-architecture/</guid>
		<description><![CDATA[Talk about a loaded term. Even the term itself, &#8220;architecture&#8221;, when used in the Agile community can start a heated discussion. When I was coordinator of the International Association of Software Architects Puget Sound chapter, the discussions about &#8220;what is architecture&#8221; caused passionate debate. I am sure this entry will get some interesting comments, as [...]]]></description>
			<content:encoded><![CDATA[<p>Talk about a loaded term. Even the term itself, &#8220;architecture&#8221;, when used in the Agile community can start a heated discussion. When I was coordinator of the International Association of Software Architects Puget Sound chapter, the discussions about &#8220;what is architecture&#8221; caused passionate debate. I am sure this entry will get some interesting comments, as well.</p>
<p>I don&#8217;t believe that this entry will solve the question but I hope to at least give some focus for teams who are dealing with the structural integrity of their applications. First off, a definition of &#8220;architecture&#8221;:</p>
<p><em><strong>architecture: </strong>noun &#8211; &#8220;the art or practice of designing and constructing&#8230;&#8221; or &#8220;the complex or carefully designed structure of something&#8221; or &#8220;the conceptual structure and logical organization of a computer or computer-based system&#8221;</em></p>
<p><em></em>Each of these definitions interests me but to put them to practice is quite difficult. They are left to interpretation about what is design, construction, structure, conceptual, and logical. Earlier interpretations of this term interpreted these to mean the high-level structure, architectural style, and finally the stuff that is too expensive to get wrong.</p>
<p>It seems to me that my interpretation is a bit different. Working with tools, practices, and processes over the past 15 years has guided me to a different conclusion. I believe that architecture is how it is <strong><em>SAID</em></strong>:</p>
<p><em><strong>Structure</strong> &#8211; how the pieces (components) create a solution (application)<br />
</em><em><strong>Alignment</strong> &#8211; the degree to which the application or enterprise structures align to current business objectives and strategy</em><em><strong><br />
</strong><strong>Integrity</strong> &#8211; the components that provide stability to the structure (application or enterprise) (ie. automated tests and builds, service-level agreements, network infrastructure, etc&#8230;)<br />
</em><em><strong>Design</strong> &#8211; a way to conceptually communicate the planned or implemented structure of a component, application, or enterprise (ie. system of names, XP practice of Metaphor, information radiators, etc&#8230;)</em></p>
<p>Using these as the basic building blocks for teams to focus their efforts can be helpful.</p>
<p>The structure is the reality of the solution&#8217;s construction. If the structure is too brittle or complex to support future needs then the structure is not sound. If you have been in the software development industry for even short period of time you have probably seen applications that are too brittle or complex.</p>
<p>If the application or enterprise structures are not aligned with current business needs then the value of those structures have deteriorated. We sometimes keep a specific architecture and force-fit new business needs into it because it once was the right architecture to have or we paid a bunch of money for it. Continual restructuring of our architecture to meet today&#8217;s business needs is important.</p>
<p>Providing supports to our structure allows for it withstand changes in the environment such as new business needs and updates in technology. Automated tests and builds help us keep the structural integrity of our applications intact while these changes are introduced into our applications and enterprise.</p>
<p>Communicating the conceptual structure of a component, application, or enterprise is important because it is common for new people to work on them and for those structures to interact with other components and applications. Getting someone up to speed on a component or application involves verbal, tactile, written, and visual examples. Much of what is needed can be kept in or close to the codebase along with conversations with existing developers. It is important to understand how components and applications are currently structure conceptually so we can discuss their interactions with other components and applications. For instance, should we connect via library, SOAP, RPC, or REST?</p>
<p>When I think of application architecture I want to focus on just a few principles:</p>
<ul>
<li>Application architecture is about changeability, not longevity</li>
<li>Application architecture decisions should be made closest to where they are implemented as possible</li>
<li>Application architecture design is not only about our ability to design a solution but also knowing what components, applications, and solutions already exist</li>
<li>The value for change in a component&#8217;s, application&#8217;s, or enterprise&#8217;s architecture is directly proportional to the cost of not addressing</li>
</ul>
<p>If the structure is not able to change as the needs of our business change then the solution will become a liability. If someone other than those who are constructing components and applications are deciding on architecture decisions then there will be important information lost in translation between the two. If we keep using the same design hammer (ie. always using 3-tier or IoC for everything) then we are not allowing the strongest solutions to emerge. The value of architecture can usually be described by the cost incurred if it is not taken care of.</p>
<p>Well, let the onslaught of comments commence. I have put out my ideas on architecture. There are many more out there to discuss and I am sure I will hear some of them. I will finish this entry with a quote from Martin Fowler&#8217;s &#8220;Who Needs an Architect?&#8221; article:</p>
<blockquote><p>&#8220;I define architecture as a word we use when we want to talk about design but want to puff it up to make it sound important.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/01/19/what-is-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>See You at SD West 2009</title>
		<link>http://chrissterling.gettingagile.com/2009/01/15/see-you-at-sd-west-2009/</link>
		<comments>http://chrissterling.gettingagile.com/2009/01/15/see-you-at-sd-west-2009/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 18:59:23 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=208</guid>
		<description><![CDATA[I’d like to invite you to join me at …
SD West 2009 Conference &#38; Expo
March 9–13
Santa Clara Convention Center, Santa Clara, CA
http://www.SDExpo.com/
I’m pleased to announce that I’ll be teaching the following session at SD West 2009:
&#8220;Managing Software Debt: Continuing to Deliver High Value as Systems Age&#8221; on Friday, March 13th from 3:30-5:00pm
SD West is where [...]]]></description>
			<content:encoded><![CDATA[<p>I’d like to invite you to join me at …</p>
<p>SD West 2009 Conference &amp; Expo<br />
March 9–13<br />
Santa Clara Convention Center, Santa Clara, CA<br />
<a href="http://www.SDExpo.com/" target="_blank">http://www.SDExpo.com/</a></p>
<p>I’m pleased to announce that I’ll be teaching the following session at SD West 2009:</p>
<p>&#8220;Managing Software Debt: Continuing to Deliver High Value as Systems Age&#8221; on Friday, March 13th from 3:30-5:00pm</p>
<p>SD West is where the software development community gathers to learn about the latest business-critical technologies, network with peers, connect with innovative vendors and get inspiration from industry visionaries. The comprehensive conference program covers today’s most important topics including cloud computing, concurrent programming, dynamic languages, agile processes, security, testing and much more.</p>
<p>Super early bird conference discounts of up to $400 expire Friday, January 16.  As a speaker, I can also offer you an additional $100 off the VIP Pass. Simply register at <a href="http://www.SDExpo.com/" target="_blank">http://www.SDExpo.com</a> with the code 9ESPK to get your discount.</p>
<p>Check out all the excellent educational opportunities SD West 2009 has to offer at <a href="http://www.SDExpo.com/" target="_blank">http://www.SDExpo.com</a>.</p>
<p>I look forward to seeing you in Santa Clara!</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/01/15/see-you-at-sd-west-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OK, I Created a Wordle, Too</title>
		<link>http://chrissterling.gettingagile.com/2009/01/05/ok-i-created-a-wordle-too/</link>
		<comments>http://chrissterling.gettingagile.com/2009/01/05/ok-i-created-a-wordle-too/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 00:27:04 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=201</guid>
		<description><![CDATA[Here is the wordle for this blog site:

]]></description>
			<content:encoded><![CDATA[<p>Here is the wordle for this blog site:</p>
<p><a title="Wordle: Chris Sterling's Blog Wordle" href="http://www.wordle.net/gallery/wrdl/417786/Chris_Sterling%27s_Blog_Wordle"><img style="padding:4px;border:1px solid #ddd" src="http://www.wordle.net/thumb/wrdl/417786/Chris_Sterling%27s_Blog_Wordle" alt="Wordle: Chris Sterling's Blog Wordle" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/01/05/ok-i-created-a-wordle-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Stories Gone Wild!</title>
		<link>http://chrissterling.gettingagile.com/2009/01/03/user-stories-gone-wild/</link>
		<comments>http://chrissterling.gettingagile.com/2009/01/03/user-stories-gone-wild/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 21:03:06 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=193</guid>
		<description><![CDATA[The thought of less documentation is appealing to many in the software industry. Reducing the specificity of our requirements can have tremendous value but some go too far. One of the big myths about Agile software development is that Agile means no more documentation. This was not the purpose of the Agile Manifesto value &#8220;Working [...]]]></description>
			<content:encoded><![CDATA[<p>The thought of less documentation is appealing to many in the software industry. Reducing the specificity of our requirements can have tremendous value but some go too far. One of the big myths about Agile software development is that Agile means no more documentation. This was not the purpose of the <a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a> value &#8220;Working software over comprehensive documentation&#8221;. The ideas was that only the documentation that supports the creation of working software should be created. There are many reasons for software to have documentation:</p>
<ul>
<li>Maintainability</li>
<li>User manuals</li>
<li>Training</li>
<li>Communication</li>
<li>etc&#8230;</li>
</ul>
<p>Since the idea of Agile software development is not to remove all documentation from software delivery then what is the right amount of documentation? Of course, the answer is it depends but we won&#8217;t leave it at that. This article will focus on one area of documentation and that is specifying what users want.</p>
<p>User stories were popularized by Mike Cohn with his book <a href="http://www.amazon.com/User-Stories-Applied-Development-Addison-Wesley/dp/0321205685" target="_blank">&#8220;User Stories Applied&#8221;</a>. Many people do not read and take in all of what is provided in Mike&#8217;s book before using user stories to capture user desired functionality. Instead they may be introduced to it on the Internet, through a seminar, or in training. The appeal of user stories is they are short statements that are easy to write and fit on 1 index card. The problem, as Ron Jeffries explains it in his article <a href="http://www.xprogramming.com/xpmag/expCardConversationConfirmation.htm" target="_blank">&#8220;Card, Conversation, Confirmation&#8221;</a>, is the statement written on an index card is not enough information for the development to implement without providing some clarity through conversation with someone who represents the user&#8217;s desires. So the first way that user stories &#8220;GO WILD!&#8221; is:</p>
<blockquote><p><em>Stakeholders expecting that a statement written on an index card is enough for the team to implement what they desired in the software</em></p></blockquote>
<p>And this can be more generalized as:</p>
<blockquote><p><em>User stories inappropriately used and becoming just bad specifications</em></p></blockquote>
<p>Development must have conversations with people knowledgable about the user story domain to clarify the desired functionality. And as Ron rightly describes, conversations may be supplemented with documentation when needed. This could be in the form of an user interface design, usability study, business rules, acceptance tests, and any other format necessary for the development team to implement the user story satisfactorily. During the conversation new understanding and clarity of the user story specifics will be drawn out. The next way user stories &#8220;GO WILD!&#8221; is:</p>
<blockquote><p><em>Acceptance criteria (or &#8220;Confirmation&#8221; as Ron puts it) for the user story is not captured and many times forgotten during implementation</em></p></blockquote>
<p>It is important that the development team and domain experts write down important nuggets of knowledge about the desired functionality. This could be as simple as writing it down as bullet points on the back of the index card or creating skeletons of acceptance test cases.</p>
<p>Sometimes teams come across user stories that seem either too ambiguous or potentially mammoth in size. There are some great indicators in the user story text that I have found over the years while working with them over the years. Here are a few ways that user stories &#8220;GO WILD!&#8221; along with ways to deal with them when they do:</p>
<blockquote><p><em>Using <a href="http://www.arts.uottawa.ca/writcent/hypergrammar/conjunct.html" target="_blank">conjunctions</a> within the user story statement</em></p></blockquote>
<p>Whenever I see an &#8220;and&#8221; or &#8220;or&#8221; or &#8220;if&#8221; or &#8220;until&#8221; or&#8230; well you get the picture&#8230; this is an indicator to me that more than one piece of functionality is being described. This is an opportunity to split the user story into multiple user stories usually right where the conjunction was put in.</p>
<blockquote><p><em>Describing too much about &#8220;how&#8221; to implement the user story</em></p></blockquote>
<p>It has been common in my experience to see business analysts or technical writers creating user stories to support a Scrum Product Owner or stakeholder group in defining their desired features. You might see phrases such as &#8220;when they click on &#8230; button&#8221;, &#8220;drop down&#8221;, and &#8220;using Excel&#8221; which are specific about the &#8220;how&#8221;. In the past, these people were asked to describe the functionality so it was clear for programmers to code and testers to verify. Now we are asking them to write user stories that describe &#8220;what&#8221; the user wants and not &#8220;how&#8221; to implement it. This is a problem since they have used the &#8220;how&#8221; to make clear requirements for the development team to implement. Agile teams are expected to take more responsibility in defining &#8220;how&#8221; the software is implemented. This includes providing their input on specifying and designing the software. Many times I have seen specification of features get simplified or enhanced through the conversation between development team and domain experts. We want this to occur more often since these interactions will increase software features delivered and improve the product for its users.</p>
<blockquote><p><em>Can&#8217;t describe the value provided to the user for the desired functionality</em></p></blockquote>
<p>There has been more than one time that I have asked &#8220;why are we implementing this user story&#8221; and was not provided a satisfactory answer. I may have gotten an answer like &#8220;because it is defined in the requirements document&#8221;, &#8220;because it was prioritized high&#8221;, or &#8220;because the CEO wanted it&#8221;. All of these may be good enough reasons to implement the functionality but it is less likely that the development or domain experts will implement it masterfully given the lack of understand around what the user wants to do with this functionality. Understanding how a user story fits into the bigger picture is important since it will enhance the <a href="http://c2.com/cgi/wiki?ConceptualIntegrity" target="_blank">conceptual integrity</a> of the software overall. When software is implemented by generating many disconnected components and integrating them together into a cohesive package the software tends to become inconsistent in its usage with lots of hidden but potentially useful functionality. Ask yourself when writing a user story why would the user want this functionality. You can use the user story template:</p>
<p><em>As a [user role] I want to [do something] so that [I gain some benefit or value]</em></p>
<p>By address the &#8220;so that&#8221; clause you will provide more understanding of how the functionality fits into the larger picture. Or you may find out that it is not useful at all. In that case, you can throw it away and work on something of more value to your users.</p>
<blockquote><p><em>Writing technical user stories in which the value is not understood by the Product Owner or stakeholders</em></p></blockquote>
<p>Technical user stories tend to get deprioritized since they are not easily assessed for value by most non-technical people. I have found that it is essential to describe why we have new technical needs or what the cost of not addressing a system&#8217;s quality attribute such as scalability could be. I have written an <a href="http://chrissterling.gettingagile.com/2007/09/16/develop-architectural-needs-through-abuse-user-stories/" target="_blank">earlier post on this</a> regarding a term coined by Mike Cohn called &#8220;abuse stories&#8221;. The idea is to capture the cost of not addressing an architectural or infrastructure need by describing it from an abuser of the software&#8217;s point of view. Writing technical needs in a user story format is not necessary but may be helpful while building trust between the development team and stakeholders. Sometimes project stakeholders believe that time and money is getting wasted on technical perfection. By writing the abuse story a development team can show that these technical needs are not just wasted efforts but provide value to the software. It is hoped that over time a team can just let their Product Owner or stakeholder group that there is a technical need that must be prioritized before particular functionality should be implemented and that will be enough.</p>
<p>Now that you know some ways that your user stories can &#8220;GO WILD!&#8221; it is time to tame those user stories so that your software can be the best it can be. Happy story writing! And, oh yeah, happy new year 2009!</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2009/01/03/user-stories-gone-wild/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Illusions Created by &#8220;Working Hard&#8221;</title>
		<link>http://chrissterling.gettingagile.com/2008/12/21/the-illusions-created-by-working-hard/</link>
		<comments>http://chrissterling.gettingagile.com/2008/12/21/the-illusions-created-by-working-hard/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 19:09:59 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=188</guid>
		<description><![CDATA[George Dinwiddie, a wonderful blogger on Agile software development, wrote on &#8220;Working Hard? Or Hardly Working?&#8221;. Please read his blog and then you can read my comment below:
Good day George,
I read your blog all the time and enjoy what you write about. This blog entry caught my attention and I had to respond.
The one problem [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.gdinwiddie.com/" target="_blank">George Dinwiddie</a>, a wonderful blogger on Agile software development, wrote on <a href="http://blog.gdinwiddie.com/2008/12/21/working-hard-or-hardly-working/" target="_blank">&#8220;Working Hard? Or Hardly Working?&#8221;</a>. Please read his blog and then you can read my comment below:</p>
<p><em>Good day George,</em></p>
<p><em>I read your blog all the time and enjoy what you write about. This blog entry caught my attention and I had to respond.</em></p>
<p><em>The one problem I have with the judgment of “working hard or hardly working” is that is presumes that working hard is always good. A large issue in our industry is the “busy-ness” factor of all people involved in the organization from executives to managers to developers and operations. We all are too busy and therefore our hard work turns into adding more work than if we were to slow down and make better decisions about how to complete the work best.</em></p>
<p><em>So, even if someone could tell if another person is “working hard” or “hardly working” I am not sure this is a good measure of anything. In the end I would rather understand if the organization or product team as a whole is getting faster in their delivery of valuable software. If this is the case then all people involved are improving their capabilities for the good of the whole.</em></p>
<p>Coincidentally, <a href="http://agiletools.wordpress.com/" target="_blank">Tom Perry</a> wrote on <a href="http://agiletools.wordpress.com/2008/12/18/measuring-productivity-continuous-improvement/" target="_blank">&#8220;Measuring Productivity = Continuous Improvement?&#8221;</a> where he makes many references to &#8220;monkeys&#8221; but also makes a conclusion that teams can create their own productivity metrics to help improve their own delivery capabilities rather than management defining problematic measurements for the team that create poor responses.</p>
<p>Both blog entries have great information and references in them and I hope that those of you interesting in &#8220;measuring productivity&#8221; take a look. I am still on the Alistair Cockburn side of the house when it comes to measuring productivity. I believe it cannot be done but that doesn&#8217;t mean that the team cannot create metrics that help them improve.</p>
<p>And finally I will just point you towards <a href="http://www.xprogramming.com/welcome.htm" target="_blank">Ron Jeffries</a> wonderful writing on <a href="http://www.xprogramming.com/xpmag/aokoProductivity.htm" target="_blank">&#8220;Productivity&#8221;</a> from <a href="http://www.xprogramming.com/xpmag/kateIndex.htm" target="_blank">&#8220;Annals of Kate Oneal&#8221;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/12/21/the-illusions-created-by-working-hard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Story Haiku</title>
		<link>http://chrissterling.gettingagile.com/2008/12/17/user-story-haiku/</link>
		<comments>http://chrissterling.gettingagile.com/2008/12/17/user-story-haiku/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 21:11:29 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=186</guid>
		<description><![CDATA[In a Certified ScrumMaster course this week one of the teams created some haiku on the topic of user stories. Here is what they came up with:
INVEST your time in telling stories that give you meaning moving on&#8230;
Unique perspective inward and outward focused simply understood
The user wishes to do something on the site they do [...]]]></description>
			<content:encoded><![CDATA[<p>In a Certified ScrumMaster course this week one of the teams created some haiku on the topic of user stories. Here is what they came up with:</p>
<blockquote><p>INVEST your time in telling stories that give you meaning moving on&#8230;</p>
<p>Unique perspective inward and outward focused simply understood</p>
<p>The user wishes to do something on the site they do not know why</p>
<p>Start with a user a new or improved feature gives us the value</p>
<p>As a Scrum novice I want to learn this method so that we can plan</p>
<p>The confirmation makes conversation simple and settles details</p></blockquote>
<p>Not bad for 5 minutes worth of work. Some of the items that were referenced:</p>
<ul>
<li><a href="http://xp123.com/xplor/xp0308/index.shtml" target="_blank">INVEST model</a></li>
<li><a href="http://blog.mountaingoatsoftware.com/?p=24" target="_blank">User Story template</a></li>
<li><a href="http://www.xprogramming.com/xpmag/expCardConversationConfirmation.htm" target="_blank">3 C&#8217;s of a User Story</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/12/17/user-story-haiku/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top 25 Open Source Projects &#8212; Recommended for Enterprise Use</title>
		<link>http://chrissterling.gettingagile.com/2008/12/17/top-25-open-source-projects-recommended-for-enterprise-use/</link>
		<comments>http://chrissterling.gettingagile.com/2008/12/17/top-25-open-source-projects-recommended-for-enterprise-use/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 20:44:20 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Distributed Computing]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2008/12/17/top-25-open-source-projects-recommended-for-enterprise-use/</guid>
		<description><![CDATA[This is a bit off my usual topics on this blog but I am a heavy open source user and this article is something that I hope gets to more enterprise operations, managers and executives. I have been using and deploying production available applications using open source tools, libraries, and platforms for over 12 years [...]]]></description>
			<content:encoded><![CDATA[<p>This is a bit off my usual topics on this blog but I am a heavy open source user and <a target="_blank" href="http://www.palamida.com/blogs/25-hot-open-source-projects-organizations-should-be-using-today">this article</a> is something that I hope gets to more enterprise operations, managers and executives. I have been using and deploying production available applications using open source tools, libraries, and platforms for over 12 years now. Open source tools can do almost anything commercial products are able to do and have transformed the software industry in that time span. The list given in the article contains open source projects that I would recommend and have used in the past either directly or indirectly including *nix tools and libraries shown.</p>
<p>I would like to add to this listing with some of the tools I have come to use often:
<ul>
<li>Maven 2.x+ (http://maven.apache.org/)</li>
<li>JBoss (http://www.jboss.org/)</li>
<li>Rio/Jini/Apache River (http://incubator.apache.org/river/RIVER/index.html)</li>
<li>Apache Commons (http://commons.apache.org/)</li>
<li>Subversion (http://subversion.tigris.org/)</li>
<li>Apache Web Server (http://httpd.apache.org/)</li>
<li>Bouncy Castle (http://www.bouncycastle.org/)</li>
<li>Time and Money (http://timeandmoney.sourceforge.net/)</li>
<li>Spring Framework (http://www.springframework.org/)</li>
<li>Hadoop (http://hadoop.apache.org/)</li>
<li>Ruby on Rails (http://www.rubyonrails.org/)</li>
</ul>
<p>This is some of the open source that I have and still use on my projects. What are your favorites that were not on the list?</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/12/17/top-25-open-source-projects-recommended-for-enterprise-use/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Executable Design &#8212; A New Name for TDD?</title>
		<link>http://chrissterling.gettingagile.com/2008/12/13/executable-design-a-new-name-for-tdd/</link>
		<comments>http://chrissterling.gettingagile.com/2008/12/13/executable-design-a-new-name-for-tdd/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 22:24:48 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=181</guid>
		<description><![CDATA[For multiple years now I have thrown around the name &#8220;Executable Design&#8221; to describe Test-Driven Development (TDD) and how it is used for design rather than a test-centric tool. The name itself causes problems for those who are initially introduced to the technique. As a coach I was looking for a way to introduce it [...]]]></description>
			<content:encoded><![CDATA[<p>For multiple years now I have thrown around the name &#8220;Executable Design&#8221; to describe Test-Driven Development (TDD) and how it is used for design rather than a test-centric tool. The name itself causes problems for those who are initially introduced to the technique. As a coach I was looking for a way to introduce it without stereotyping it as extra tests inhibiting more code getting delivered.</p>
<p>From my readings of multiple books, articles, and blog postings along with my own experiences with TDD the content of what I am about to distill is not new. This post is entirely about explaining the technique in a way that garners interest quickly. There are multiple pieces to &#8220;Executable Design&#8221; beyond the basic process of:</p>
<ul>
<li><em>Red, Green, Refactor or</em></li>
<li><em>Write Test, Write Code, Refactor</em></li>
</ul>
<p>These statements and the technique is the basis for practicing Executable Design but are not sufficient for describing the value and nuance of the practice. Not that I will be able to present it sufficiently in a single blog post but I want to present the basic principles.</p>
<p>While in a meeting with a team recently we were presented with a question I have heard often:</p>
<p><em>&#8220;Why should we use TDD?&#8221;</em></p>
<p>There are many reasons but generic reasoning alone is not sufficient. We discussed the safety net that good code coverage creates. We discussed the reason system tests do not take the place of unit tests. Then we started to touch on design and this is where it got interesting (and usually it does about this time for me). Before I can describe the rest of this discussion I want to present what lead up to this meeting.</p>
<p>A coach that I highly respect seemed a bit preoccupied one day when he wandered into my team&#8217;s area. I asked him what was going on and he told me that some of his issues with the current team he was coaching. He wondered why they were not consistently using TDD in their day-to-day development. The team had allowed a card saying &#8220;We do TDD&#8221; onto their <a title="Creating a Team Working Agreement" href="http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/">Working Agreement</a> and were not adhering to it.</p>
<p>I happened to know a bit about the background of this project that our company has been working on for over 2 1/2 years. There is a significant legacy codebase developed over many more years with poor design, multiple open source libraries included, and heavy logic built into relational database stored procedures. Also, just recently management on the client&#8217;s side had changed significantly and caused quite a shake up in terms of their participation and guidance of release deliverables. Yet the team was supposed to deliver on a date with certain features that were not well defined. This lead me to discuss the following situations that a coach can find their way into:</p>
<ol>
<li>You could come into a team that has limited pressure on features and schedule and has considered the impact of learning a new technique such as Executable Design. Also, they have asked for a coach to help them implement Executable Design effectively. This is a highly successful situation for a coach to enter.</li>
<li>You could come into a team that has deadline pressures but has some leeway on features or vise versa and has considered the impact of learning a new technique such as Executable Design within their current release. Also, they have asked for a coach to help them implement Executable Design effectively. This is somewhat successful but pressures of the release rise and fall in this situation and may impact the effectiveness of the coaching.</li>
<li>You could come into a team that has deadline pressures and has not considered implementing Executable Design seriously as a team. Also, they have NOT asked for a coach and yet they have gotten one. The coach and the techniques they are attempting to help the team implement may seem like a distraction to the team&#8217;s real work of delivering a release. This is usually not successful and please let me know if you are a person who is somewhat successful in this situation because we could hire you.</li>
</ol>
<p>The current team situation seemed to be more like #3 above and therefore the lack of success in helping the team adopt TDD did not surprise me. Also, I started to play devil&#8217;s advocate and provide a list of reasons for this team NOT to do TDD:</p>
<ul>
<li>At current velocity the team is just barely going to make their release date with the minimum feature set</li>
<li>Not enough people on the team know how to do TDD well enough to continue it&#8217;s use without the coach</li>
<li>The architecture of the system is poor since most logic is captured in Java Server Pages (JSP) and stored procedures</li>
<li>The code base is large and contains only about 5-10% test coverage at this time</li>
<li>It sometimes takes 10 times longer to do TDD than just add functionality desired by customer</li>
</ul>
<p>This is not the full list but you get the picture. Don&#8217;t get me wrong, the list above begs to me the need for Executable Design but if the team does not have significant experience to implement it effectively it could seem overhead with little benefit to show for it.</p>
<p>After discussing this and more stuff that I won&#8217;t go into he told me about a couple of things that he can do to help the team. One of them was to work on minimizing the reasons for not doing Executable Design by discussing them with their ScrumMaster and actioning them on the impediments list. Some of those actions would go to upper management who get together each day and resolve impediments at an organizational level. One of the actions was to get our CTO and myself into a room with the team so they can ask the question &#8220;why should we do TDD?&#8221;.</p>
<p>Now we are in the room and most of the team members had been exposed to TDD through pairing sessions. Some of them had some ideas about where TDD was useful and why they thought it was not on this project. During the discussion one of the team members brought up a great discussion point:</p>
<p><em>&#8220;One of the problems with our use of TDD is that we are not using it for improving the design. If we just create unit tests to test the way the code is structured right now it will not do any good. In fact, it seems like we are wasting time putting in unit tests and system tests since they are not helping us implement new functionality faster.&#8221;</em></p>
<p>This team member had just said in the first sentence what I instinctually think when approaching a code base. The reason to do TDD is not just to create code coverage but to force design improvement as the code is being written. This is why I call TDD and its best known principles and practices of applying it Executable Design. If you are not improving the design of the application then you are not doing Executable Design. You might be just adding tests.</p>
<p>Some of the principles I have found to help me in applying Executable Design effectively are (and most, if not all, of these are not something I came up with):</p>
<ul>
<li>Don&#8217;t write implementation code for your application without a failing unit test</li>
<li>Separate unit tests from system and persistence tests. (as described in this <a title="Managing Unit and Acceptance Tests Effectively" href="http://chrissterling.gettingagile.com/2007/07/23/managing-unit-and-acceptance-tests-effectively/">previous blog entry</a>)</li>
<li>Create interfaces with integration points in a need-driven way (as described in this <a title="Need-Driven Design as an Integration Strategy" href="http://chrissterling.gettingagile.com/2006/09/25/need-driven-design-as-an-integration-strategy/">previous blog entry</a>)</li>
<li>Always start implementing from the outside in (such as in <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">Behavior-Driven Development</a> and as described in this <a title="Defining the Unit in Unit Testing" href="http://chrissterling.gettingagile.com/2008/09/27/defining-the-unit-in-unit-testing/">previous blog entry</a>)</li>
<li>Mercilessly refactor the code you are working on to an acceptable design (the limits of which are described in this <a title="Refactoring: How Far Should I Go?" href="http://chrissterling.gettingagile.com/2008/10/13/refactoring-how-far-should-i-go/">previous blog entry</a>)</li>
<li>Execute your full &#8220;unit test&#8221; suite as often as possible (as described in this <a title="Running All Unit Tests When Saving a File in Eclipse" href="http://chrissterling.gettingagile.com/2007/11/13/running-all-unit-tests-when-saving-a-file-in-eclipse/">previous blog entry</a>)</li>
<li>Use the &#8220;campground rules&#8221; of working in the code: <em>&#8220;Leave the site in better shape than when you arrived&#8221;</em></li>
<li>Create a <a title="Creating a Team Working Agreement" href="http://chrissterling.gettingagile.com/2008/05/02/creating-a-team-working-agreement/">working agreement</a> that the whole team is willing to adhere to, not just what the coach or a few think is the &#8220;right&#8221; agreements to have.</li>
</ul>
<p>Try these out on your own or with your team and see how they work for you. Modify as necessary and always look for improvements. There are many thought leaders in the Agile community that have written down important principles that may work for you and your team.</p>
<p>And finally, now that I have filled an entire blog post with &#8220;Executable Design&#8221; what do people think about the name? It has worked for me in the past to explain the basic nature of TDD so I will use it either way unless others have better names that I can steal?</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/12/13/executable-design-a-new-name-for-tdd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Kaizen Mindset</title>
		<link>http://chrissterling.gettingagile.com/2008/11/22/a-kaizen-mindset/</link>
		<comments>http://chrissterling.gettingagile.com/2008/11/22/a-kaizen-mindset/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 15:09:07 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=176</guid>
		<description><![CDATA[To start with, I want to be honest about my knowledge of kaizen. I have not been in a workplace where the actual term kaizen was used to demonstrate improvements within our organization. I have researched quite a bit about it and found the book &#8220;The Kaizen Revolution&#8221; by Michael Regan was the easiest for [...]]]></description>
			<content:encoded><![CDATA[<p>To start with, I want to be honest about my knowledge of <a href="http://en.wikipedia.org/wiki/Kaizen" target="_blank">kaizen</a>. I have not been in a workplace where the actual term kaizen was used to demonstrate improvements within our organization. I have researched quite a bit about it and found the book <a title="The Kaizen Revolution" href="http://www.amazon.com/Kaizen-Revolution-Michael-D-Regan/dp/0966354974" target="_blank">&#8220;The Kaizen Revolution&#8221; by Michael Regan</a> was the easiest for me to read on the subject. This book also follows a fictional situation that creates examples of using the kaizen philosophy to change a company around. Through my research and discussions with others on the subject I have found that kaizen and the mindset shift is similar to that enabled by the <a href="http://www.scrumalliance.org/view/scrum_framework" target="_blank">Scrum framework</a>.</p>
<p>Scrum is based on an empirical process control that focuses on inspecting the current state and adapting behavior to improve. This focus on continuous improvement through &#8220;inspect and adapt&#8221; is supported in the Scrum framework at 3 points in the process.</p>
<ul>
<li>The Daily Scrum meeting allows the team to focus on their commitment for the current Sprint and whether they are still on track to deliver on that commitment. If they are not able to meet the commitment then they are asked to adjust the Sprint therefore adapting to the situation.</li>
<li>The Sprint Review meeting allows customers to view a potentially shippable product increment created by the Team and provide feedback that adjusts the Product Backlog contents and priorities. We are inspecting the product and adapting to a new understanding of the product.</li>
<li>The Sprint Retrospective enables the Team to improve the process they use to delivery software each Sprint. The Team is expected to inspect their process honestly and thoroughly to figure out how they can adjust for improved delivery capability in the following Sprint.</li>
</ul>
<p>The &#8220;inspect and adapt&#8221; focus allows for a Team and product to continually improve over time through seemingly simple mechanisms with sizable effects on the software delivered. An unexpected or additional effect of this focus on &#8220;inspect and adapt&#8217; in Scrum is the organizational environment encompassing the team starts to adjust based on needs of the Team to improve their software delivery. Therefore a single team causes &#8220;organizational change&#8221; through small and incremental adjustments.</p>
<p>One of the main tools that a Scrum Team can use to &#8220;inspect and adapt&#8221; is the &#8220;impediment&#8221;. An impediment is:</p>
<p><em>&#8220;Anything that prevents a team member from performing work as efficiently as possible&#8221; &#8211; from Victor Szalvay&#8217;s article <a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms" target="_blank">&#8220;Glossary of Scrum Terms&#8221;</a></em></p>
<p>In coaching teams I have found that capturing impediments is done casually and is not initially found to be as important as other activities the team is doing. Over time I have found a few simple &#8220;rules of thumb&#8221; for capturing impediments that have helped Scrum Teams:</p>
<ul>
<li>ScrumMasters keeping a physical impediment and action item list. As we teach in the Certified ScrumMaster course it is important to action impediments after the Daily Scrum meeting immediately. Many of our teams at SolutionsIQ setup an area to capture impediments written on post-it notes. Following the Daily Scrum meeting team members who are interested in taking action on the newly captured impediments stay behind to work with the ScrumMaster. An action item is created identifying &#8220;What&#8221; needs to be done, &#8220;Who&#8221; is going to make sure it happens, and &#8220;When&#8221; they will communicate progress back. It usually looks something like this:</li>
</ul>
<div id="attachment_178" class="wp-caption aligncenter" style="width: 310px"><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/11/impedimentsgettingactioned.png"><img class="size-medium wp-image-178" title="Impediments getting actioned" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/11/impedimentsgettingactioned-300x170.png" alt="Impediments getting actioned" width="300" height="170" /></a><p class="wp-caption-text">Impediments getting actioned</p></div>
<ul>
<li>At least 1 impediment raised every Daily Scrum. It is my opinion that if a Scrum Team is unable to bring up at least 1 impediment at each Daily Scrum then the ScrumMaster is not supporting the team effectively. I want the ScrumMaster to find ways to extract at least 1 impediment during the Daily Scrum. In the past I have asked teams whether they were comfortable speaking about an impediment they are having in the Daily Scrum with me there. I have also pleaded with a team to tell me at least one impediment before we leave. One time the Daily Scrum was before a Sprint Review we were going to conduct in the afternoon. Each team member said they had no impediment and at the end I found out that at least one person was not ready to demo the software just by asking &#8220;Why are there no impediments today?&#8221;.</li>
<li>Ask everybody on the team to write down at least 1 impediment. Sometimes a Scrum Team has improved significantly and begin to get into a flow. Although I want to celebrate significant improvements we should not sit on our laurels. The stagnation of &#8220;status quo&#8221; can catch hold quickly and we must find ways to break through this potential behavioral issue. Just ask all members of the team to write down at least 1 impediment and then work with the team to action those impediments immediately as shown above. One of my colleagues, <a title="Brent Barton" href="http://www.scrumalliance.org/profiles/42-brent-a-barton" target="_blank">Brent Barton</a>, once wrote up on our white board the following saying that I have found to be helpful to me for fighting the &#8220;status quo&#8221;:</li>
</ul>
<p><em>&#8220;The absence of conflict is not harmony, it&#8217;s apathy&#8221; &#8211; from article by <span class="AuthorName">Kathleen M. Eisenhardt, Jean L. Kahwajy, and L.J. Bourgeois III called <a href="http://www.hbsp.harvard.edu/hbsp/hbr/articles/article.jsp?articleID=97402&amp;ml_action=get-article&amp;print=true" target="_blank">&#8220;How Management Teams Can Have a Good Fight&#8221;</a><a href="http://www.hbsp.harvard.edu/hbrol/en/includes/sasearch.jhtml?author=L.J.+Bourgeois+III"></a></span></em></p>
<ul></ul>
<p>My own nature has helped me internalize the &#8220;inspect and adapt&#8221; mindset with Scrum. I used to think I was lazy but the fact that I would work additional hours to improve builds, mock frameworks, test cases, and other artifacts of projects I worked on seemed to contradict this. The reason I thought I was lazy was my tendancy to find ways to automate just about anything that could be so that I did not have to manually do it anymore. My initial splash into programming actually started this way while working in a data entry job. Each day my work was incredibly repetitive. One day a person who understood the software we were using to do data entry showed me the use of a cool macro that allowed fields to be automatically filled out. I was immediately impressed and asked them to show me how that worked. The language used was a Visual Basic knock off and the scripts I wrote following this allowed me to get 10 times faster in my data entry. I was able to focus on other activities including learning HTML, JavaScript, Pascal, and Java. The moral of this story is jump on opportunities to improve your environment including processes, facilities, and software.</p>
<p>Those additional hours I put in has decreased over time as I have found a much more sustainable pace for myself. I cannot say that I keep a fully sustainable pace even now but at least I am able to identify earlier when I am starting to tank. The &#8220;inspect and adapt&#8221; mindset should not cause our Scrum Team to adapt themselves into a culture of late hours and intravenous Red Bull drips. A Scrum Team should find ways to adjust within their timebox rather than adjust their timebox. This means that hourly, daily, and iteration timeboxes are important to understand and monitor for breakage. As a ScrumMaster I want the team to keep a constant pace as much as possible and sudden adjustments that cause time management problems should be identified immediately and monitored from there to resolution ASAP.</p>
<p>A continual need to improve my life and environment has become an addiction of mine. How can I better use the time I have with my family? How can I help make my work environment even more fun to work in? What can I do to improve my knowledge in all types of subjects? This addiction has been a valuable behavior for my entire life and I hope that others will find something that has similar effects for themselves. People reading this blog who are currently using Scrum please use the impediment to your advantage and find ways to improve your software delivery. It&#8217;ll be worth every minute used to &#8220;inspect and adapt&#8221; your Sprint, Product Backlog, and processes.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrissterling.gettingagile.com/2008/11/22/a-kaizen-mindset/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
