<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny" />
  <title>Agile Planet</title>
  <updated>2010-03-10T17:17:36Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Ian Davis</name>
    <email>iand@internetalchemy.org</email>
  </author>
  <id>http://www.agileplanet.org/atom.xml</id>
  
  <link href="http://www.agileplanet.org/" rel="alternate" />

  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/agileplanetorg" /><feedburner:info uri="agileplanetorg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/03/quick-agile-links-10.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/MfqyCKIqxeU/quick-agile-links-10.html" rel="alternate" type="text/html" />
    <title>Quick Agile Links #10</title>
    <summary>Almost no spare time this week, so just the links:
Virtual Team Member Dolly – from Lisa Crispin. Lisa talks about giving a remote Developer based in India a presence on her team. This is cool. Now if only we could erase the time difference  
 
Testing Small Stories – another from Lisa Crispin. I [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Almost no spare time this week, so just the links:</p>
<p><a href="http://lisacrispin.com/wordpress/2010/02/18/virtual-team-member-dolly/" target="_blank">Virtual Team Member Dolly</a> – from Lisa Crispin. Lisa talks about giving a remote Developer based in India a presence on her team. This is cool. Now if only we could erase the time difference <img alt=":-)" class="wp-smiley" src="http://agilepainrelief.com/site/wp-includes/images/smilies/icon_smile.gif" /> </p>
<p> <span id="more-925" />
</p><p><a href="http://lisacrispin.com/wordpress/2010/02/21/testing-small-stories/" target="_blank">Testing Small Stories</a> – another from Lisa Crispin. I so often hear from clients that it will impossible to slice their stories any smaller than 6-8 weeks for two developers. Its always possible and Lisa provides another tool to help.</p>
<p><a href="http://blogs.myspace.com/index.cfm?fuseaction=blog.view&amp;friendId=319545476&amp;blogId=472222118" target="_blank">You’re Just Going to Fail, So Don’t Bother</a> – from Scott Downey. Ignore the awful myspace ads and read the content. He nails the difficultly of really doing Scrum/Agile – you will have to change your organization.</p>
<p>Simon Baker takes an interesting crack at measuring <a href="http://blog.energizedwork.com/2010/03/effectiveness-case-study.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+AgileInAction+%28Energized+Work+Blog%29&amp;utm_content=Google+Reader" target="_blank">Effectiveness</a>: “is used as a measure of the product stream’s ability to improve throughput and minimize failure demand, which allows capacity to focus on meeting value demand. It was inspired by the First-Time-Through (FTT) measurement used in Lean manufacturing to measure the effectiveness of a cell’s standardized work as a percentage of product made without any need for rework or scrap.”</p>
<p>Bob Hartman writes: “<a href="http://www.agileforall.com/2009/10/06/new-to-agile-keep-it-very-simple/" target="_blank">New to agile? Keep it very simple</a>”</p>
<p>In the next few weeks I look forward to having some time to breathe and do some more writing.</p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/cKgddu_I4nw" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/MfqyCKIqxeU" height="1" width="1" /></div></content>
    <updated>2010-03-09T22:15:26Z</updated>
    <category term="Agile" />
    <category term="Links" />
    <category term="Testing" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/03/quick-agile-links-10.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:40Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/cKgddu_I4nw/quick-agile-links-10.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/03/there-are-no-best-practices.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/1exSWk1TXmk/there-are-no-best-practices.html" rel="alternate" type="text/html" />
    <title>There are no Best Practices</title>
    <summary>Pet peeve warning. I keep on hearing questions – what are the best practices for Agile, or … . 
There are no best practices – only good practices in your current context. The whole idea of Best Practices implies that you can learn them once and apply them in any context. I prefer the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.agilepainrelief.com/images/WindowsLiveWriter/TherearenoBestPractices_EB33/image.png"><img align="left" alt="image" border="0" height="240" src="http://www.agilepainrelief.com/images/WindowsLiveWriter/TherearenoBestPractices_EB33/image_thumb.png" style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px;" title="image" width="157" /></a> Pet peeve warning. I keep on hearing questions – what are the best practices for Agile, or … . </p>
<p>There are no best practices – only good practices in your current context. The whole idea of Best Practices implies that you can learn them once and apply them in any context. I prefer the notion that there are some ideas. Sometimes they work well, sometimes they don’t. Try lots of small experiments and learn. Also the idea ‘Best’ implies there is never any room for improvement – ‘Good’ is a better word because it holds open the promise that tomorrow might be better.</p>
<p>So please no more best practices – only “Good Practices in the Current Context”.</p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/7wvVK8a3G-8" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/1exSWk1TXmk" height="1" width="1" /></div></content>
    <updated>2010-03-08T21:44:17Z</updated>
    <category term="Agile" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/03/there-are-no-best-practices.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:41Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/7wvVK8a3G-8/there-are-no-best-practices.html</feedburner:origLink></entry>

  <entry>
    <id>http://martinfowler.com/bliki/VcsSurvey.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/tUjYC2dnllM/VcsSurvey.html" rel="alternate" type="text/html" />
    <title>Bliki: VcsSurvey</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>When I discussed <a href="http://martinfowler.com/bliki/VersionControlTools.html">VersionControlTools</a> I said that it
  was an unscientific agglomeration of opinion. As I was doing it I
  realized that I could add some spurious but mesmerizing numbers to
  my analysis by doing a survey. Google's spreadsheet makes the
  mechanics of conducting a survey really simple, so I couldn't
  resist.</p><img src="http://martinfowler.com/bliki/images/vcsSurvey/summary.png" /><p>I conducted the survey from February 23 2010 until March 3 2010
  on the ThoughtWorks software development mailing list. I got 99
  replies. In the survey I asked everyone to rate a number of version
  control tools using the following options:</p><ul><li>Best in Class:   Either the best VCS or equal best</li><li>OK: Not the best, but you're OK with it.</li><li>Problematic: You would argue that the team really ought to be using something else</li><li>Dangerous: This tool is really bad and ThoughtWorks should press hard to have it changed</li><li>No opinion: You haven't used it</li></ul><p>The results were this:</p>
<table class="data"><tbody><tr><th>Tool</th><th>Best</th><th>OK</th><th>Problematic</th><th>Dangerous</th><th>No
  Opinion</th><th>Active Responses</th><th>Approval %</th></tr><tr><td>Subversion</td><td>20</td><td>72</td><td>6</td><td>1</td><td>0</td><td>99</td><td>93%</td></tr><tr><td>git</td><td>65</td><td>19</td><td>1</td><td>0</td><td>14</td><td>85</td><td>99%</td></tr><tr><td>Mercurial</td><td>33</td><td>27</td><td>2</td><td>0</td><td>36</td><td>62</td><td>97%</td></tr><tr><td>ClearCase</td><td>0</td><td>3</td><td>14</td><td>41</td><td>41</td><td>58</td><td>5%</td></tr><tr><td>TFS</td><td>0</td><td>0</td><td>32</td><td>22</td><td>44</td><td>54</td><td>0%</td></tr><tr><td>CVS</td><td>0</td><td>14</td><td>59</td><td>11</td><td>15</td><td>84</td><td>17%</td></tr><tr><td>Bazaar</td><td>1</td><td>13</td><td>3</td><td>0</td><td>80</td><td>17</td><td>82%</td></tr><tr><td>Perforce</td><td>1</td><td>26</td><td>16</td><td>1</td><td>54</td><td>44</td><td>61%</td></tr><tr><td>VSS</td><td>1</td><td>1</td><td>11</td><td>64</td><td>22</td><td>77</td><td>3%</td></tr></tbody></table>
<p>As well as the raw summary values, I've added two calculated
columns here to help summarize the results.</p><ul><li>Active Responses: The total of responses excluding "No
  Opinion". (eg for git: 65 + 19 + 1 + 0)</li><li>Approval %: The sum of best and ok responses divided by active
  responses, expressed as a percentage. (eg for git: (65 + 19) / 85)</li></ul><p>The graph shows a scatter plot of approval percentage and active
responses. As you can see there's a clear cluster around Subversion,
git, and Mercurial with high approval and a large amount of
responses. It's also clear that there's a big divide in approval between those
three, together with Bazaar and Perforce, versus the rest.</p><p>Although the graph captures the headline information well, there's
a couple of other subtleties I should mention.</p><ul><li>Although the trio of Subversion, git, and Mercurial cluster close
together on approval, git does get a notably higher amount of best
scores: (65 versus 20 and 33).</li><li>VSS got the most "dangerous" responses, but a couple of people
 approved of it.</li><li>Neither TFS or ClearCase are liked much, but ClearCase got more
"dangerous" responses than TFS (41 versus 22).</li></ul><p>Some caveats. This is a survey of opinion of ThoughtWorkers who
follow our internal software development discussion list, nothing more. It's
possible some of them may have been biased by my previous article
(although unlikely, since I've never managed to get my ThoughtBot
opinion-control software to work reliably). Opinions of tools are
often colored by processes that are more about the organization than
the tool itself. But despite these, I think it's an interesting data
point.</p><p>I should also stress the important point to take away from this
isn't the comparison between those close in the numbers, eg comparing
git and Mercurial or comparing TFS and ClearCase. Any survey like this
has a certain amount of noise in it, and I suspect the noise here is
greater than such a difference. The important point is the big
approval gap between the leading tools (Subversion, git, and
Mercurial) and the laggards - essentially the point in
<a href="http://martinfowler.com/bliki/VersionControlTools.html">VersionControlTools</a>.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/tUjYC2dnllM" height="1" width="1" /></div></content>
    <updated>2010-03-08T19:02:00Z</updated>
    <category term="tools" />
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/bliki/VcsSurvey.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=367</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/Z41mdrHpNbo/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">Testing in depth</title>
    <summary xml:lang="en">In the late 1970s, in the Co-Evolution Quarterly, the magazine successor to The Whole Earth Catalog, Peter Warshall stated that geodesic dome houses always leak.  This was a bold and surprising statement at the time, coming from a man who was considered one of the finest builders of dome houses–ones that didn’t leak.
Why did he [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>In the late 1970s, in the <em>Co-Evolution Quarterly</em>, the magazine successor to <em>The Whole Earth Catalog</em>, Peter Warshall stated that geodesic dome houses <span style="text-decoration: underline;">always</span> leak.  This was a bold and surprising statement at the time, coming from a man who was considered one of the finest builders of dome houses–ones that <em>didn’t</em> leak.</p>
<p>Why did he make this statement?<span id="more-367" /></p>
<p>He went on to explain, that the design of a dome house depended on a single skin being perfect waterproofing technology.  Traditional houses, by comparison, have multiple imperfect layers.  There are overlapping shingles, which keep <em>most</em> of the water out.  Below that there’s a layer of tar paper, which keeps out <em>most</em> of what reaches it.  Then there’s the plywood sheathing, which blocks or absorbs <em>most</em> of what penetrates the tar paper.  Then the attic insulation….</p>
<p>No single layer of this system has to be perfect.</p>
<p>Software testing works the same way.  If you depend on one method of testing, you’re going to leak bugs into production.</p>
<p>If you do unit testing (or micro-testing, as <a href="http://anarchycreek.com/" target="_blank" title="GeePawHill's blog">Mike “GeePaw” Hill</a> calls it) of small chunks of code at a low level, you’ll catch most of the coding mistakes.  Then, if you do small scale integration tests of the code that talks to other systems (such as the database), you’ll catch most of the remaining ones.  Then higher level integration or acceptance tests that check that the whole system is wired together right will catch most of those that have escaped so far.  Then exploratory testing….</p>
<p>Any competent network security professional will tell you that you can’t protect your network from malicious people by relying on perimeter security.  You have to bake security into other levels of access, too.</p>
<p>Again, the same is true of testing to protect your application from bugs.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=367&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/Z41mdrHpNbo" height="1" width="1" /></div></content>
    <updated>2010-03-08T12:52:41Z</updated>
    <published>2010-03-06T03:31:42Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Testing" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-5654207388699295268</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/8myFo-3Jsm0/effectiveness-case-study.html" rel="alternate" type="text/html" />
    <title>Effectiveness of a real product stream</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I've pulled together some data for the first year of a <a href="http://blog.energizedwork.com/2009/10/product-stream.html">product stream</a> we created and plotted it as charts for throughput, rework and effectiveness. <br /><br />The first chart shows the weekly rework. I've talked about <a href="http://blog.energizedwork.com/2010/02/inevitable-and-avoidable-rework_8291.html">rework</a> previously so I won't cover it again here. The blue line indicates the remaining technical debt and the blue bars the repaid technical debt. The pink line indicates the remaining defects and the pink bar the fixed defects. Week by week, it can be seen that defects were fixed as soon as they were discovered to reduce the remaining defect count to zero. Also the technical team continuously repaid technical debt to keep the remaining amount of rework small.<br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4414072140/" title="Rework"><img alt="" src="http://farm3.static.flickr.com/2706/4414072140_8e849e7bac_o.png" style="border: solid 2px #000000;" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4414072140/">Rework</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><br clear="all" /><br />The second chart shows the amount of throughput every week.<br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4414072288/" title="Throughput"><img alt="" src="http://farm3.static.flickr.com/2774/4414072288_fe75f97e1e_o.png" style="border: solid 2px #000000;" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4414072288/">Throughput</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><br clear="all" /><br />The peak at week ending 18/12, without any throughput during the 8 preceding weeks, demonstrates a flush of inventory amounting to 104 cards and corresponds to the alpha release of the product. In the rework chart, a small increase in fixed defects can be observed during the same week. Inventory again builds up for two weeks, as improvements are made to the automated deployment system, until the next peak at week ending 15/01. At which point 48 completed cards are flushed. Releases then occurred every week and while some variation is observed the throughput remained stable. <br /><br />To improve the performance of the product for the beta release during week ending 26/02, 7 technical debt cards were completed. As the system experienced more rigorous use by editorial users, 12 defects were fixed plus a further 8 the following week due to increased traffic. The official launch was completed in the week ending 18/03. During that week some data inconsistencies were encountered following migration from the old content management system, which resulted in 9 defects. In response to traffic loads the load balancers were tuned with 5 technical debt cards. This effort continued the following week with a further 8 technical debt cards and 7 fixed defects as traffic increased to approximately 180 million page impressions and 3.7 million unique users per month with an average page weight of 2Mbytes. Further peaks in technical debt of 20, 16 and 10 can be seen during the weeks ending 06/05, 17/06 and 24/06, respectively. This work concentrated on the expansion of the product with reconfiguration of the production environment to support additional channels.<br /><br />It's worth me recapping on <a href="http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html">effectiveness</a>. Effectiveness is used as a measure of the product stream's ability to improve throughput and minimize failure demand, which allows capacity to focus on meeting value demand. It was inspired by the First-Time-Through (FTT) measurement used in Lean manufacturing to measure the effectiveness of a cell's standardized work as a percentage of product made without any need for rework or scrap. <br /><br />The effectiveness of the product stream is defined as:<br /><blockquote><i>Effectiveness = ( Throughput - Rework ) / Throughput</i></blockquote>where<br /><blockquote><i>Throughput = the number of cards released to production (excluding completed rework)</i></blockquote>and <br /><blockquote><i>Rework = the number of technical debt and defect cards in inventory and work-in-process</i></blockquote>The final chart shows the weekly effectiveness of the product stream.<br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4414072040/" title="Effectiveness"><img alt="" src="http://farm3.static.flickr.com/2500/4414072040_21b4a5485d_o.png" style="border: solid 2px #000000;" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4414072040/">Effectiveness</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><br clear="all" /><br />The lows at weeks ending 29/01, 25/03 and 01/04 can be attributed to marked dips in throughput. At 29/01, 12 cards were queued as inventory whereas a small increase in the amount of remaining rework was present at 25/03 and 01/04. Clearly the product stream is most effective when the completed rework was small compared to the throughput and was enough to keep the remaining rework small compared to the throughput.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-5654207388699295268?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/F7VtNf4te-U" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/8myFo-3Jsm0" height="1" width="1" /></div></summary>
    <updated>2010-03-07T16:17:33Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/03/effectiveness-case-study.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/F7VtNf4te-U/effectiveness-case-study.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-2022590879413932471</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/HBRECj8R6zM/product-development-in-land-of-free.html" rel="alternate" type="text/html" />
    <title>Come and see us at QCon London on 11th March</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Come and hear us talk at <a href="http://qconlondon.com/london-2010/">QCon London</a>. Our session is at 3pm on Thursday 11th March in the <a href="http://qconlondon.com/london-2010/tracks/show_track.jsp?trackOID=320">Agile Evolution</a> track. We'll be talking about <a href="http://qconlondon.com/london-2010/presentation/Product+Development+in+the+Land+of+the+Free">Product Development in the Land of the Free</a>. <br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4412451308/" title="Product Development in the Land of the Free"><img alt="" height="344" src="http://farm3.static.flickr.com/2729/4412451308_c6da9f0da8_o.png" style="border: 2px solid rgb(0, 0, 0);" width="460" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4412451308/">Product Development in the Land of the Free</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><br clear="all" /><br /><b>Abstract:</b> <br /><br />Creating and sustaining a system for effective product development is neither easy nor commonplace. If we were to pull together the lessons we've learned from eXtreme Programming and Scrum with systems approaches such as Lean Thinking and the Theory of Constraints what would such a system look like? Where would we start? How would we organize ourselves? And what would be our approach?<br /><br />The fact that so many information technology projects are still failing tells us that we should be doing something very different. This session will explore some of the things we've been doing beyond the agile comfort zone to improve the effectiveness and throughput of product development and realize business agility.<br /><br />PS. Thanks to <a href="http://qconlondon.com/london-2010/speaker/Jesper+Boeg">Jesper</a> for inviting us along.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-2022590879413932471?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/39Ez0i1PEds" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/HBRECj8R6zM" height="1" width="1" /></div></summary>
    <updated>2010-03-07T00:58:56Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/03/product-development-in-land-of-free.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:33Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/39Ez0i1PEds/product-development-in-land-of-free.html</feedburner:origLink></entry>

  <entry xml:lang="en-us">
    <id>http://www.codeodor.com/index.cfm/2010/3/5/The-General-Procedures-For-Troubleshooting-and-How-To-Give-Good-Tech-Support/3146</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/n2pivXLzMoY/3146" rel="alternate" type="text/html" />
    <title>The General Procedures For Troubleshooting and How To Give Good Tech Support</title>
    <summary type="html">You might think that "tech support" is a solved problem. You're probably right. Someone has solved it
and written down The General Procedures For Troubleshooting and How To Give Good Tech Support . 
However, surprisingly enough, not everyone has learned these lessons. 
And if the manual exists, I can't seem to find it so I can RTFthing.
 
The titles of the two unheard of holy books I mentioned above might seem at first glance to be 
different tales. After all, troubleshooting is a broad topic applicable to any kind of 
problem-solving from chemistry to mechanical engineering to computer and biological science. ...&lt;img src="http://feeds.feedburner.com/~r/agileplanetorg/~4/n2pivXLzMoY" height="1" width="1"/&gt;</summary>
    <updated>2010-03-06T04:14:01Z</updated>
    <category term="Miscellany" />
    <category term="Programming" />
    <category term="Save Your Job" />
    <category term="Management" />
    <category term="Productivity" />
    <author>
      <name>Sammy Larbi</name>
    </author>
    <source>
      <id>http://www.codeodor.com/</id>
      <link href="http://www.codeodor.com/" rel="alternate" type="text/html" />
      <link href="http://www.codeodor.com/rss/" rel="self" type="application/rss+xml" />
      <subtitle>Posts about Ruby, Java, Coldfusion, OOAD, TDD, DSLs, and more (some not TLAs!)...</subtitle>
      <title>My Secret Life as a Spaghetti Coder</title>
      <updated>2010-03-10T17:16:36Z</updated>
    </source>
  <feedburner:origLink>http://www.codeodor.com/index.cfm/2010/3/5/The-General-Procedures-For-Troubleshooting-and-How-To-Give-Good-Tech-Support/3146</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-2785682719986955059</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/3MlX55OApIo/visual-hospital.html" rel="alternate" type="text/html" />
    <title>Visual Hospital</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">We've been working with the boys from <a href="http://lean-health.blogspot.com/">Visual Healthcare Solutions</a> (who are faculty members at the <a href="http://www.leanuk.org/pages/healthcare.htm">Lean Enterprise Academy</a>) to create a touchscreen solution called <a href="http://lean-health.blogspot.com/2010/02/visual-hospital-system.html">Visual Hospital</a>, which supports the methods they talk about in their book <a href="http://www.leanuk.org/pages/book_making_hospitals_work.htm">Making Hospitals Work</a>. It's been a lot of fun using an iterative approach to building the interaction design with the users.<br /><br /><a href="http://lean-health.blogspot.com/2010/02/visual-hospital-system.html" title="Visual Hospital Touchscreen"><img alt="" height="384px" src="http://1.bp.blogspot.com/_NuQ8FpmSO7w/S4Z_LmEiCGI/AAAAAAAAADo/1pS1H063Rz8/s640/vhs-lea.png" style="border: 2px solid rgb(0, 0, 0);" width="512px" /></a><br /><br />We're very excited to collaborate with these lean consultants as they continue their work in healthcare.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-2785682719986955059?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/43c3dEGz8pc" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/3MlX55OApIo" height="1" width="1" /></div></summary>
    <updated>2010-03-05T20:05:32Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/03/visual-hospital.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:33Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/43c3dEGz8pc/visual-hospital.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/Agile-Friday-Sit-Together-Now-Online.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/XqUbrdfmMEA/Agile-Friday-Sit-Together-Now-Online.html" rel="alternate" type="text/html" />
    <title>Agile Friday: "Sit Together" Now Online</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>05 Mar 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p><a href="http://jamesshore.com/Blog/Art-of-Agile-Development-Going-Online.html">It's Friday!</a> I've posted the full text of <a href="http://jamesshore.com/Agile-Book/sit_together.html">Sit Together</a> from <cite>The Art of Agile Development</cite> on the <a href="http://jamesshore.com/Agile-Book/">book's site</a>.</p>

<p>You might have noticed that I'm not posting the practices in order. One of my motivations in putting the book online is that I want to provide a reference that people can easily link to. So I'm starting with the practices that I think people will reference most frequently.</p>

<p>I want your help! Next week, I'm posting a practice from the "Releasing" chapter. Which one do you think will be the most useful? Vote below, then explain your reasons in the comments.</p>

<noscript>&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/847433-238280"&gt;Click Here for Poll&lt;/a&gt;&lt;/div&gt;</noscript><!-- END MICROPOLL JAVASCRIPT CODE -->

<p>I also need to prepare the following week's release. Which practice from the "Planning" chapter should I post next?</p>

<noscript>&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/847433-238281"&gt;Click Here for Poll&lt;/a&gt;&lt;/div&gt;</noscript><!-- END MICROPOLL JAVASCRIPT CODE -->

    
    
    <p><a href="http://jamesshore.com/Blog/Agile-Friday-Sit-Together-Now-Online.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/XqUbrdfmMEA" height="1" width="1" /></div></summary>
    <updated>2010-03-05T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:36Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/Agile-Friday-Sit-Together-Now-Online.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Agile-Book/sit_together.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/B6jUh95YvpI/sit_together.html" rel="alternate" type="text/html" />
    <title>The Art of Agile Development: Sit Together</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>05 Mar 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Agile-Book/">James Shore/Agile-Book</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/real_customer_involvement.html">Real Customer Involvement</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/trust.html">Trust</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/collaborating_intro.html">Chapter 6: Collaborating</a></li>
</ul>

<h3>in 99 words</h3>

<blockquote class="ninetynine_words">

<p>Sitting together fuels team communication.  This has impressive results, cutting time-to-market by two thirds in one field study<sup>*</sup>.  It enables simultaneous phases, eliminates waste, and allows team members to contribute insights to others' conversations.</p>

<p>To sit together, create an open workspace.  This takes longer than you expect.  Organize your workspace around pairing stations, locating people according to conversations they should overhear.  Provide plenty of whiteboard space.  Make sure there's room for personal effects and a place for private conversations.</p>

<p>Open workspaces are hard for some to accept.  Get team members' permission before switching, or they may rebel.</p>

</blockquote>

<p class="footnote"><sup>*</sup>Teasley, Stephanie, Lisa Covi, M. S. Krishnan, Judith Olson.  2002.  "Rapid Software Development Through Team Collocation."  <cite>IEEE Trans. Softw. Eng.</cite>  28(7):671-83.  <a href="http://dx.doi.org/10.1109/TSE.2002.1019481">http://dx.doi.org/10.1109/TSE.2002.1019481</a></p>

<h3>as haiku</h3>

<blockquote class="haiku">

	<p>
	<br />mulch builds the soil;
	<br />herbs bring bees, bulbs repel grass:
	<br />come autumn, apples
	</p>

</blockquote>

<h3>Behind the Scenes</h3>

<p><a href="http://jamesshore.com/Blog/Time-Lapse-Author.html">Time-Lapse Author</a></p>

<h3>Full Text</h3>

<p>The following text is excerpted from <cite>The Art of Agile Development</cite> by James Shore and Shane Warden (O'Reilly 2007). Copyright © 2008 James Shore and chromatic. All rights reserved.</p>

<h2>Sit Together</h2>

<dl class="audience"><dt>Audience</dt><dd>Whole Team</dd><dd>Coaches</dd></dl>

<p class="goal">We communicate rapidly and accurately.</p>

<p>If you've tried to conduct a team meeting via speakerphone, you know how much of a difference face-to-face conversations make.  Compared to an in-person discussion, teleconferences are slow and stuttered, with uncomfortable gaps in the conversation and people talking over each other.</p>

<p>What you may not have realized is how much this affects your work.</p>

<p>Imagine you're a programmer on a nonagile team and you need to clarify something in your requirements document in order to finish an algorithm.  You fire off an email to your domain expert, Mary, then take a break to stretch your legs and get some coffee.</p>

<p>When you get back, Mary still hasn't responded, so you check out a few technical blogs that you've been meaning to read.  Half an hour later, your inbox chimes.  Mary has responded.</p>

<p>Uh-oh... it looks like Mary misunderstood your message and answered the wrong question.  You send another query, but you really can't afford to wait any longer.  You take your best guess at the answer—after all, you've been working at this company for a long time, and you know most of the answers—and get back to work.</p>

<p>A day later, after exchanging a few more emails, you've hashed out the correct answer with Mary.  It wasn't exactly what you thought, but you were pretty close.  You go back and fix your code.  While in there, you realize that there's an edge case nobody's handled yet.</p>

<p>You could bug Mary for the answer, but this is a very obscure case.  It's probably never going to happen in the field.  Besides, Mary's very busy and you promised that you'd have this feature done yesterday.  (In fact, you <em>were</em> done yesterday, except for all these nitpicky little details.)  You put in the most likely answer and move on.</p>

<h3>Accommodating Poor Communication</h3>

<p>As the distance between people grows, the effectiveness of their communication decreases.  Misunderstandings occur and delays creep in.  People start guessing to avoid the hassle of waiting for answers.  Mistakes appear.</p>

<p>To combat this problem, most development methods attempt to reduce the need for direct communication.  It's a sensible response.  If questions lead to delays and errors, reduce the need to ask questions!</p>

<p>The primary tools teams use to reduce reliance on direct communication are development phases and work-in-progress documents.  For example, in the requirements phase, business analysts talk to customers and then produce a requirements document.  Later, if a programmer has a question, he doesn't need to talk to an expert.  He can simply look the answer up in the document.</p>

<p>It's a sensible idea, but it has flaws.  The authors of the documents need to anticipate which questions will come up and write clearly enough to avoid misinterpretations.  This is hard to do well.  In practice, it's impossible to anticipate all possible questions.  Also, adding up-front documentation phases stretches out the development process.</p>

<h3>A Better Way</h3>

<p>In XP, the whole team—including experts in business, design, programming and testing—sits together in an open workspace.  When you have a question, you need only turn your head and ask.  You get an instant response, and if something isn't clear, you can discuss it at the whiteboard.</p>

<p>Consider the previous story from this new perspective.  You're a programmer and you need some information from your domain expert, Mary, in order to code an algorithm.</p>

<p>This time, rather than sending an email, you turn your head.  "Mary, can you clarify something for me?" you ask.</p>

<p>Mary says, "Sure.  What do you need?"</p>

<p>You explain the problem and Mary gives her answer.  "No, no," you reply.  "That's a different problem.  Here, let me show you on the whiteboard."</p>

<p>A few minutes later, you've hashed out the issue and you're back to coding again.  Whoops!  There's an edge case you hadn't considered.  "Wait a second, Mary," you say.  "There's something we didn't consider.  What about...."</p>

<p>After some more discussion, the answer is clear.  You're a little surprised: Mary's answer was completely different than you expected.  It's good that you talked it over.  Now, back to work!  The code is due today, and it took 20 whole minutes to figure out this nitpicky little issue.</p>

<h3>Exploiting Great Communication</h3>

<p>Sitting together eliminates the waste caused by waiting for an answer, which dramatically improves productivity.  In a field study of six colocated teams, [Teasley et al.] found that sitting together doubled productivity and cut time to market to almost one third of the company baseline.</p>

<p>Those results are worth repeating: the teams delivered software in <em>one-third</em> their normal time.  After the pilot study, 11 more teams achieved the same result.  This success led the company to invest heavily in open workspaces, by building a new facility in the US that supports 112 such teams and making plans for similar sites in Europe.</p>

<p>How can sitting together yield such impressive results?  Communication.</p>

<p>Although programming is the emblematic activity of software development, <em>communication</em> is the real key to software success.  As [Teasley et al.] report, "Past studies have indicated that less than 30 percent of a programmer's time is spent on traditional programming tasks and less than 20 percent of the time is spent on coding.  The rest of the time is spent on meetings, problem resolution with the team, resolving issues with customers, product testing, etc."</p>

<p>My experience is that programmers on XP teams spend a far greater percentage of their time programming.  I attribute that to the increased communication effectiveness of sitting together.  Rather than sitting in hour-long meetings, conversations last only as long as needed and involve only the people necessary.</p>

<p>Teams that sit together not only get rapid answers to their questions, they experience what [Cockburn] calls <em>osmotic communication</em>.  Have you ever been talking with someone in a crowded room and then heard your name out of the blue?  Even though you were focusing on your conversation, your brain was paying attention to all of the other conversations in the room.  When it heard your name, it replayed the sounds into your conscious mind.  You not only hear your name, you hear a bit of the conversation around it, too, in a phenomenon known as the <em>cocktail party effect</em>.<sup>1</sup></p>

<p class="aside"><sup>1</sup>The best layman's description of the cocktail party effect I've seen is on Wikipedia: http://en.wikipedia.org/wiki/Cocktail_party_effect, accessed 17 July 2006.</p>

<p>Imagine a team that sits together.  Team members are concentrating on their work and talking quietly with their partners.  Then somebody mentions something about managing database connections, and another programmer perks up.  "Oh, Tom and I refactored the database connection pool last week.  You don't need to manage the connections manually anymore."  When team members are comfortable speaking up like this, it happens often (at least once per day) and saves time and money every time.</p>

<blockquote class="coach">When I see an adversarial relationship between separate groups in a team, I suggest that they sit together.</blockquote>

<p>There's another hidden benefit to sitting together: it helps teams jell and breaks down us-versus-them attitudes between groups.  Distance seems to encourage adversarial relationships and blaming "those people."  Whenever I see this (for example, between programmers and testers), I suggest that they sit together.  This helps the groups interact socially and gain respect for each other professionally.</p>

<h3>Secrets of Sitting Together</h3>

<p>To get the most out of sitting together, be sure you have a complete team (see <a href="http://jamesshore.com/Agile-Book/the_xp_team.html">The XP Team</a> in Chapter 3).  It's important that people be physically present to answer questions.  If someone must be absent often—product managers tend to fall into this category—make sure that someone else on the team can answer the same questions.  A domain expert is often a good backup for a traveling product manager.</p>

<p>Similarly, sit close enough to each other that you can have a quick discussion without getting up from your desk or shouting.  This will also help encourage osmotic communication, which relies on team members overhearing conversations.</p>

<blockquote class="coach">Ask for help when you're stuck.</blockquote>

<p>Available instant help doesn't do any good if you don't ask for it.  Many organizations discourage interruptions, I encourage them on my XP teams.  There's no sense in banging your head against a wall when the person with the answer is right across the room.  To support this attitude, many teams have a rule: "We must always help when asked."</p>

<p>Interruptions disrupt flow and ruin productivity, so this rule may sound foolish.  It takes a programmer 15 minutes or more to get back into flow after an interruption [DeMarco &amp; Lister 1999].</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a></dd></dl><p>Fortunately, with pair programming, flow works differently.  The delay doesn't seem to occur.  One programmer answers the question and the other keeps thinking about the problem at hand.  When the interruption is over, a quick "Where were we?" gets work moving again.</p>

<p>Pairing helps in a few other ways, too.  Osmotic communication depends on a buzz of conversation in the room.  If people aren't pairing, there's less talking.  Pairing also makes it easier for programmers to ignore irrelevant background conversations.</p>

<h3>Making Room</h3>

<p>Sitting together is one of those things that's easy to say and hard to do.  It's not that the act itself is difficult—the real problem is finding space.</p>

<blockquote class="notetip">
 
 <p>Start arranging for a shared workspace <em>now</em>.</p>
 
</blockquote>

<p>A team that sits in adjacent cubicles can convert them into an adequate shared workspace, but even with cubicles, it takes time and money to hire people to rearrange the walls.</p>

<p>When I say "time", I mean weeks or even months.</p>

<p>In a smaller company, you might be able to take matters (and screwdrivers) into your own hands.  In a larger company, you could run afoul of Facilities if you do that.  That may be a worthwhile cost, but talk to your project manager first.  She should have some insight on the best way to get a shared workspace.</p>

<p>While you're waiting for construction on your dream workspace to finish, a big conference room is a good alternative.  One team I worked with set up shop in the company boardroom for six weeks while they waited for their workspace to be ready.</p>

<h3>Designing Your Workspace</h3>

<p>Your team will produce a buzz of conversation in its workspace.  Because they'll be working together, this buzz won't be too distracting for team members.  For people outside the team, however, it can be very distracting.  Make sure there's good sound insulation between your team and the rest of the organization.</p>

<p>Within the workspace, group people according to the conversations they most need to overhear.  Programmers should all sit next to each other because they collaborate moment-to-moment.  Testers should be nearby so programmers can overhear them talk about issues.  Domain experts and interaction designers don't need to be quite so close, but should be close enough to answer questions without shouting.</p>

<p>The product manager and project manager are most likely to have conversations that would distract the team.  They should sit close enough to be part of the buzz but not so close that their conversations are distracting.</p>

<blockquote class="coach">Leave room for individuality in your workspace.</blockquote>

<p>An open workspace doesn't leave much room for privacy, and pair programming stations aren't very personal.  This loss of individuality can make people uncomfortable.  Be sure that everyone has a space they can call their own.  You also need an additional enclosed room with a door, or cubes away from the open workspace, so people can have privacy for personal phone calls and individual meetings.</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/informative_workspace.html">Informative Workspace</a></dd></dl><p>As you design your workspace, be sure to include plenty of whiteboards and wall space for an informative workspace.  Try to have at least 24 linear feet of whiteboard space, magnetic if possible.  You can never have too many whiteboards.</p>

<p>Some teams include a projector in their workspace.  This is a great idea, as it allows the team to collaborate on a problem without moving to a conference room.</p>

<p>Finally, the center of an XP workspace is typically a set of pairing stations.  I like to have the stations facing each other so people can see each other easily.  A hollow triangle, square, or oval setup works well.  Provide a few more pairing stations than there are programming pairs.  This allows testers and customers to pair as well (either with each other or with programmers) and it provides programmers with space to work solo when they need to.</p>

<blockquote class="notetip">
 
 <p>For information on building a good pairing station, see <a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a> in Chapter 5.</p>
 
</blockquote>

<h3>Sample Workspaces</h3>

<p>The sample workspace in Figure was designed for a team of 13.  They had six programmers, six pairing stations, and a series of cubbies for personal effects.  Nonprogrammers worked in cubbies close to the pairing stations so they could be part of the conversation even when they weren't pairing.  Programmers' cubbies were at the far end: they typically sat at the pairing stations.  For privacy, people adjourned to the far end of the workspace or went to one of the small conference rooms down the hall.</p>

<div style="text-align: center;">
 
 
 
 <p><img alt="figure (sit_together__sample_workspace_2.gif)" src="http://jamesshore.com/images/art-of-agile/figs/sit_together__sample_workspace_2.gif" width="67%" /></p>
 
<p class="caption">Figure. A sample workspace</p></div>

<p>In addition to the pairing stations, everybody had a laptop for personal work and email.  The pairing stations all used a group login so that any team member could work at them.</p>

<p>Before creating this workspace, the team sat in cubicles in the same part of the office.  To create the workspace, they reconfigured the inner walls.</p>

<p>This workspace was good, but not perfect.  It didn't have nearly enough wall space for charts and whiteboards and non-programmers didn't have enough desk space.  On the plus side, there was plenty of room to accommodate people at the pairing stations, which meant that customers paired with programmers frequently, and there were also extra cubbies for bringing people into the team temporarily.</p>

<h4>A Small Workspace</h4>

<p>The small workspace in Figure was created by an up-and-coming startup when they moved into new offices.  They were still pretty small so they couldn't create a fancy workspace.  They had a team of seven: six programmers and a product manager.</p>

<div style="text-align: center;">
 
 
 
 <p><img alt="figure (sit_together__sample_workspace_1.gif)" src="http://jamesshore.com/images/art-of-agile//figs/sit_together__sample_workspace_1.gif" width="67%" /></p>
 
<p class="caption">Figure. A small workspace</p></div>

<p>This team arranged its pairing stations along a long wall.  They had a table on the side for meetings, and charts and whiteboards on dividers surrounding them.  The programmers had a pod of half-cubicles to the other side for personal effects, and there were small conference rooms close by for privacy.</p>

<p>This was a great workspace with a serious problem: the product manager wasn't in earshot and didn't participate in team discussions.  The team couldn't get ready answers to its questions and struggled with requirements.</p>

<h3>Adopting an Open Workspace</h3>

<p>Some team members may resist moving to an open workspace.  Common concerns include loss of individuality and privacy, implied reduction in status from losing a private office, and managers not recognizing individual contributions.  Team members may also mention potential distractions and noise, but I find that this is usually a cover for one of the other concerns.</p>

<p>As with pair programming, people come to enjoy the benefits that sitting together provides, but it can take a few months.  In [Teasley et al.]'s study, team members initially preferred cubicles to the open workspace, but by the end of the study, they preferred the open workspace.</p>

<blockquote class="coach">Don't force people to sit together against their will.</blockquote>

<p>However, forcing people to sit together in hopes that they'll come to like it is a bad idea.  When I've forced team members to do so, they've invariably found a way to leave the team, even if it meant quitting the company.  Instead, talk with the team about their concerns and the tradeoffs of moving to an open workspace.  Discuss how team members will be evaluated in the new system and what provisions for privacy you can make.  You may be able to address some concerns by providing a shared workspace in addition to existing offices and cubicles.</p>

<p>If a large portion of the team is against the open workspace, sitting together is probably not a good choice.  If you only have one or two adamant objectors and the rest of the team wants to sit together, you may wish to sit together anyway and allow the objectors to move to a different team.</p>

<h3>Questions</h3>

<h4 class="faq">How can I concentrate with all that background noise?</h4>

<p>A team that's working together in a shared workspace produces a busy hum of activity.  This can be distracting at first, but most people get used to it in time.</p>

<blockquote class="coach">Pairing makes background conversations fade away.</blockquote>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a></dd></dl><p>For programmers, pair programming is an excellent way to focus your attention away from the background noise.  You won't notice it if you're pairing.  Nonprogrammers can work in pairs too.</p>

<p>If you work alone and find the background noise distracting, put on headphones, wear earplugs, or sit further away from the team for a time.  You'll miss out on osmotic communication, but at least you'll be able to concentrate.</p>

<p>Sometimes, the team gets a little noisy and rambunctious.  It's okay to ask for quiet—the sound in the team room should be a <em>hum</em>, not a full-throated chorus.  Some teams have a bell for team members to ring when they want the team to be more quiet.</p>

<h4 class="faq">When one person is interrupted, the whole team stops what they're doing to listen.  What can we do to prevent people from being distracted so easily?</h4>

<p>Especially in the beginning of the project, it's possible that the whole team really does need to hear these conversations.  As time goes on, team members will learn which conversations they can comfortably ignore.</p>

<p>If this is a continuing problem, try stepping a little further away from the pairing stations when a conversation lasts more than a few minutes.  Interested team members can join the conversation and the rest of the team can continue working.</p>

<h4 class="faq">What if I need privacy for phone calls?</h4>

<p>Some people, particularly customers and project managers, need to take a lot of calls as they work.  Either situate them further away from the rest of the team or arrange for an enclosed office with a door.  Keep the door open as often as possible to allow information to flow smoothly.</p>

<h3>Results</h3>

<p>When your team sits together, communication is much more effective.  You stop guessing at answers and ask more questions.  You overhear other people's conversations and contribute answers they may not expect.  Team members spontaneously form cross-functional groups to solve problems.  There's a sense of camaraderie and mutual respect.</p>

<h3>Contraindications</h3>

<p>The hardest part about sitting together is finding room for the open workspace.  Cubicles, even adjacent cubicles, won't provide the benefits that an open workspace does.  Start working on this problem now as it can take months to resolve.</p>

<p>Don't force the team to sit together against their will.  Adamant objectors will find a way to leave the team, and possibly the company.</p>

<p>Be careful about sitting together if programmers don't pair program.  Programming alone requires a quiet workspace.  <em>Pair</em> programming, on the other hand, enables programmers to ignore the noise.</p>

<h3>Alternatives</h3>

<blockquote class="coach">Multisite teams are difficult and expensive.</blockquote>

<p>Sitting together is one of the most powerful practices in XP.  It's important for communication and team dynamics.  Sitting apart tends to fray fragile relationships, particularly between different functional groups, and puts your team at a disadvantage.  If your team is in a single location, you're better off figuring out how to sit together.</p>

<p>If you have a multisite team, consider turning each site into its own team.  For example, if programmers are in one site and customers are in another, the programmers may engage some business analysts to act as proxy customers.  In this scenario, the customers and development team should still work together, face-to-face, for several weeks at the beginning of each release.</p>

<p>If you have multiple teams of programmers, consider separating their responsibilities so that each works on entirely different codebases.  [Evans] has an excellent discussion of the options for doing so.</p>

<p>You <em>can</em> practice XP with a single, multi-site team, but it requires a lot of travel.  [Yap] has a good experience report describing how her team made this work 24 hours a day across three time zones.  She focused on maximizing communication by regularly flying team members to a single location for several weeks at a time.  They also conducted daily phone calls between locations.</p>

<blockquote class="coach">If you can't sit together, talk to your mentor about your options.</blockquote>

<p>If your whole team cannot sit together and you still wish to practice XP, talk to your mentor (see "Find a Mentor" in Chapter 2) about your options and hire experienced XP coaches for each site.</p>

<h3>Further Reading</h3>

<p><cite>Agile Software Development</cite> [Cockburn] has an excellent chapter on communication.  Chapter 3, "Communicating, Cooperating Teams," discusses information radiators, communication quality, and many other concepts related to sitting together.</p>

<p>If you can't sit together, "Follow the Sun: Distributed Extreme Programming Development" [Yap] is an interesting experience report describing a single XP team divided into three locations, each eight hours apart.</p>

<p>Similarly, <cite>Domain-Driven Design</cite> [Evans] has an excellent discussion of coordinating multiple development teams in chapter 14, "Maintaining Model Integrity."  While the book's focus is object-oriented domain models, this chapter is applicable to many design paradigms.</p>


<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/real_customer_involvement.html">Real Customer Involvement</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/trust.html">Trust</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/collaborating_intro.html">Chapter 6: Collaborating</a></li>
</ul>

    
    
    <p><a href="http://jamesshore.com/Agile-Book/sit_together.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/B6jUh95YvpI" height="1" width="1" /></div></summary>
    <updated>2010-03-05T08:00:00Z</updated>
    <category term="/Agile-Book" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:35Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Agile-Book/sit_together.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Agile-Book/collaborating_intro.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/2ziIiKLtR18/collaborating_intro.html" rel="alternate" type="text/html" />
    <title>The Art of Agile Development: Chapter 6: Collaborating</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>05 Mar 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Agile-Book/">James Shore/Agile-Book</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/trust.html">Trust</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/retrospectives.html">Retrospectives</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/">Table of Contents</a></li>
</ul>

<h3>Full Text</h3>

<p>The following text is excerpted from <cite>The Art of Agile Development</cite> by James Shore and Shane Warden (O'Reilly 2007). Copyright © 2008 James Shore and chromatic. All rights reserved.</p>

<h2>Collaborating</h2>

<p>Sometimes I like to imagine software development as a pulsing web of light, with blips of information flowing along lines from far-flung points.  The information races towards the development team, which is a brilliant, complex tangle of lines, then funnels into a glowing core of software too bright to look at.</p>

<p>I'm a little weird that way.</p>

<p>There's truth to the idea, though.  Software development is all about information.  The more effectively your programmers can access and understand the information they need, the more effective they will be at creating software.  The better information customers and managers have, the better they can manage the schedule and the flow of feedback to the programmers.</p>

<p>Communication in the real world is a lot more messy than it is in my image.  There are no glowing lines to sterilely transport information from one brain to another.  Instead, people have to work together.  They have to ask questions, discuss ideas, and even disagree.</p>

<p>This chapter contains eight practices to help your team and its stakeholders collaborate efficiently and effectively:</p>

<ul>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/trust.html">Trust</a></em> is essential for the team to thrive.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/sit_together.html">Sitting together</a></em> leads to fast, accurate communication.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/real_customer_involvement.html">Real Customer Involvement</a></em> helps the team understand what to build.</p></li>
  <li><p>A <em><a href="http://jamesshore.com/Agile-Book/ubiquitous_language.html">Ubiquitous Language</a></em> helps team members understand each other.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/stand_up_meetings.html">Stand-Up Meetings</a></em> keep team members informed.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/coding_standards.html">Coding Standards</a></em> provide a template for seamlessly joining the team's work together.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/iteration_demo.html">Iteration Demos</a></em> keep the team's efforts aligned with stakeholder goals.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/reporting.html">Reporting</a></em> helps reassure the organization that the team is working well.</p></li>
</ul>

<blockquote class="sidebar"><h3>"Collaborating" Mini-Etude</h3>
 
 <p>The purpose of this étude is to explore the flow of information in your project. If you're new to agile development, you may use it to help you understand how collaboration occurs in your project, even if you're not currently using XP. If you're an experienced agile practitioner, review Chapter 12 and use this étude to help you modify your process to remove communication bottlenecks.</p>
 
 <p>Conduct this étude for a timeboxed half-hour every day for as long as it is useful.  Expect to feel rushed by the deadline at first. If the étude becomes stale, discuss how you can change it to make it interesting again.</p>
 
 <p>You will need white, red, yellow, and green index cards; an empty table or magnetic whiteboard for your information flow map; and writing implements for everyone.</p>
 
 <p><strong>Step 1.</strong>  Start by forming pairs.  Try for heterogeneous pairs—have a programmer work with a customer, a customer work with a tester, and so forth, rather than pairing by job description. Work with a new partner every day.</p>
 
 <p><strong>Step 2.</strong>  <em>(Timebox this step to 10 minutes.)</em>  Within your pair, discuss the kinds of information that you need in order to do your job, or that other people need from you in order to do their job.  Choose one example that you have personally observed or experienced.  If you can't think of anything new, pick an existing card and skip to Step 3.</p>
 
 <p>Information usually flows in both directions.  For example, during an iteration demo as the example, the flow may be the developers asking if the software behaves correctly.  Alternately, it may be the customer asking what the software actually does.  Choose just direction.</p>
 
 <p>Reflect on all of the times you remember needing or providing this information.  How long did it take?  For information you needed, think of the <em>calendar time</em> needed from the moment you realized you needed the information to the moment you received it.  For information you provided, think of the <em>total effort</em> that you and other team members spent preparing and providing the information.</p>
 
 <p>Next, think of the <em>typical</em> time required for this piece of information.  If the typical time required is less than ten minutes, take a <em>green</em> index card.  If it's less than a day, take a <em>yellow</em> index card.  If it's a day or longer, take a <em>red</em> index card.  Write down the type of information involved, the group that you get it from (or give it to), the role you play, and the time required, as shown in Figure.</p>
 
 <div style="text-align: center;">
 
 
 
 <p><img alt="figure (collaborating_intro__sample_card.gif)" src="http://jamesshore.com/images/art-of-agile/figs/collaborating_intro__sample_card.gif" width="67%" /></p>
 
<p class="caption">Figure. Sample Cards</p></div>
 
 <p><strong>Step 3.</strong>  <em>(Timebox this step to 10 minutes.)</em>  Within your pair, discuss things that your team can do to <em>reduce</em> or <em>eliminate</em> the time required to get or provide this information.  Pick one and write it on a <em>white</em> card.</p>
 
 <p><strong>Step 4.</strong>  <em>(Timebox this step to 10 minutes.)</em>  As a team, discuss all of the cards generated by all of the pairs.  Consider these questions:</p>
 
 <ul>
  <li><p>Where are the bottlenecks in receiving information?</p></li>
  <li><p>Which latencies are most painful in your current process?</p></li>
  <li><p>Which flow is most important to optimize in your next iteration?</p></li>
  <li><p>What is the root cause of those latencies?</p></li>
  <li><p>What will you do next iteration to improve information flow?</p></li>
</ul>
 
 <p>After everyone has had a chance to share their cards, add them to the table.  Place colored cards on the table so that the cards visually show information flow.  For example, if an interaction designer gets information about usage from real customers and gives it to the development team, those two cards would be placed side by side.  Place white cards underneath colored cards.</p>
 
</blockquote>

<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/trust.html">Trust</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/retrospectives.html">Retrospectives</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/">Table of Contents</a></li>
</ul>

    
    
    <p><a href="http://jamesshore.com/Agile-Book/collaborating_intro.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/2ziIiKLtR18" height="1" width="1" /></div></summary>
    <updated>2010-03-05T08:00:00Z</updated>
    <category term="/Agile-Book" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:36Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Agile-Book/collaborating_intro.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=360</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/vDA8aqRfDGE/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">More on Automated Acceptance Testing</title>
    <summary xml:lang="en">Jim Shore has posted a response to the reactions about his previous post on Acceptance Testing in which he defends the way he and the teams he coaches are working.  About the same time, Lisa Crispin posted her thoughts on the topic.
As Lisa says,
I can’t tell you the one right way to test and develop [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Jim Shore has posted <a href="http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html" target="_blank" title="Jim Shore's blog">a response</a> to the reactions about his <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html" target="_blank" title="Jim Shore's blog">previous post</a> on Acceptance Testing in which he defends the way he and the teams he coaches are working.  About the same time, Lisa Crispin posted <a href="http://blogs.stickyminds.com/Blogs/tabid/91/EntryId/172/The-One-Right-Way.aspx" target="_blank" title="Lisa Crispin's blog on StickyMinds">her thoughts on the topic</a>.</p>
<p>As Lisa says,</p>
<blockquote><p>I can’t tell you the one right way to test and develop software….  The one right way for your team to code and test will continually evolve over the years. In fact, I’m sorry to tell you that you’ll never find the one right way; it’s a moving target, but you’ll get closer and closer to it.</p></blockquote>
<p>This is an incredibly important point!  There may be many “wrong” ways—wrong in that they fail to achieve your objectives—but there is no “right way.”  So I’m happy that Jim and his teams are able to achieve the results they want.  I’m not saying they’re doing it wrong.<span id="more-360" /></p>
<p>At the same time, I’ve seen teams struggle with the increasing burden of acceptance testing and the divergence of understanding between the Customer, the Developers, and the Testers.  And so I continue to explore ways to alleviate that struggle.</p>
<p>Jim describes how the teams discuss concrete examples with the customer.  They then automate those examples (or not) in their own unit and integration tests.  Jim reports that these tests give the programmers confidence that the system is working as desired.  For the customer’s confidence, Jim reports relying on “a reliable track record of shipping defect-free software.”</p>
<p>Jim’s argument is that the customer won’t trust the test results before trusting the team.  This is true.  If the customer thinks the developers will fake the test results, then it doesn’t matter how the tests are expressed; you’ve got a serious problem.</p>
<p>I’ve not experienced this level of distrust.  Instead, I’ve experienced customer’s who trust that the developers are working in good faith, but still don’t trust that the developers will ship defect-free software.  And perhaps the developers won’t ship defect-free software.  They’re fallible, just like the rest of us humans.  Maybe they misunderstood the customer’s example.  Or they made an error converting it to code.  Or they didn’t automate that example because they thought it was the same as another that they did automate. Or…</p>
<p>Mistakes happen.  Miscommunication happens.  It’s great that Jim’s developers have that zero bugs attitude, but the customer has the right and obligation to participate in achieving zero bugs.  It can be condescending to take all the responsibility for correctness.</p>
<p>Yes, the customer gets to review the completed software, but we can detect misunderstandings sooner if the customer can read the acceptance tests.  Yes, the developers may produce defect-free software, but miss a test case such that nobody notices right away when a defect is inserted into this feature later.  I want to enable the customer reading the test and saying “Yes, that’s what I meant.”  I want to enable the customer saying, “I’ve thought about another case we don’t have covered.”  Or “We’re changing our business rules and this example is no longer correct.”  Or anything else that’s appropriate.  I want the customer to share that zero bugs attitude.</p>
<p>But is this practice essential?  Obviously not, as Jim and his teams are successful without it.  For many teams transitioning to agile practices, they’ve probably got too many other, more fundamental, practices to learn that they don’t have the energy to tackle this one yet.</p>
<p>Is this practice too expensive in terms of effort?  Maybe.  A lot of people are working on making it less expensive.  If you don’t make it an integral part of the conversations when you first start discussing the story, then it’s likely to seem too expensive.  Then it’s like writing unit tests after the code rather than doing TDD.  To make it work, I think you need to make the customer examples flow from the initial conversation through signaling “done” for the developer.  You’ve got to work at making them maintainable, just like the code in the system you’re delivering.</p>
<p>This is just one small practice in a forest of useful practices.  The forest can survive without any single one.  We can almost always find ways to compensate for things we’re not doing.  That’s a double-edged sword, however.  It can also allow us to fritter away our advantages until we’re working in the same old way we’ve always done.  It can blind us to some of the process improvements we could make.  Jim’s “fix the process description” is</p>
<blockquote><p>Every escaped defect, whether found in exploratory testing or found by end-users, is a indication of a flaw in the process. When we find one, we fix our process.</p>
<p>The first thing is to analyze the defect, write a test that reproduces it, and fix it. While we’re fixing it, we look at the design of the code and see if it needs improvement, too.</p>
<p>Next, we conduct Root-Cause Analysis. We ask ourselves, “What about our process allowed this defect to escape?” We continue asking “why” until we get to the root cause. Once we find it, we make changes to prevent that entire category of defects from happening again.</p></blockquote>
<p>Note that “fix the process” could include adding a process of creating Customer Readable Automated Acceptance Tests.  They’re are a tool that I want to keep in my toolbox.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=360&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/vDA8aqRfDGE" height="1" width="1" /></div></content>
    <updated>2010-03-04T01:54:58Z</updated>
    <published>2010-03-04T01:54:58Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Individuals and Interactions" />
    <category scheme="http://blog.gdinwiddie.com" term="Tools and Techniques" />
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Testing" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/</feedburner:origLink></entry>

  <entry>
    <id>http://martinfowler.com/bliki/ToyotaFailings.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/Cuv2frrrfu0/ToyotaFailings.html" rel="alternate" type="text/html" />
    <title>Bliki: ToyotaFailings</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><b>One of the arguments used to support the adoption of lean
techniques in software is the success of Toyota. So do Toyota's <a href="http://www.guardian.co.uk/business/toyota">recent quality
failings</a> undermine the case for lean software
development?</b></p>
<p>One answer for this is to take a sense of proportion. Lean
manufacturing techniques were the underpinning of Toyota's rise from
an insignificant company in the 1950's to a global giant in the
2000's. By the 1990's other car companies, and many other
manufacturers, were busily copying Toyota's techniques. The general
sense is that copying these techniques did much to raise the overall
quality of cars in the last decade or so. I would be very surprised if
the recent problems at Toyota are enough negate that half-century of
success.</p><p>But a better answer is to remember that Lean manufacturing is about
manufacturing not software. The application of lean ideas to software
development is a consequence of <a href="http://martinfowler.com/bliki/MetaphoricQuestioning.html">MetaphoricQuestioning</a>. Lean
ideas can help us come up with better ideas for software development,
and as such are valuable. But in the end their usefulness lies with
how they are used in software and they should be judged on their
record here. Their history in manufacturing, both
good and bad, is another industry.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/Cuv2frrrfu0" height="1" width="1" /></div></content>
    <updated>2010-03-03T00:45:00Z</updated>
    <category term="agile" />
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/bliki/ToyotaFailings.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/03/agile-games-at-agile-ottawa.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/iZIl59DLK5U/agile-games-at-agile-ottawa.html" rel="alternate" type="text/html" />
    <title>Agile Games – at Agile Ottawa</title>
    <summary>Come play a game with us. 
You have been hand-picked by your company to join an exciting new division.  You have over-heard that this new group will be ‘Agile’ but what does that mean?  Is this the career opportunity you’ve been waiting for?  Is this a chance to make your mark and be part [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.agilepainrelief.com/images/WindowsLiveWriter/AgileGamesatAgileOttawa_DBC8/image.png"><img align="left" alt="image" border="0" height="161" src="http://www.agilepainrelief.com/images/WindowsLiveWriter/AgileGamesatAgileOttawa_DBC8/image_thumb.png" style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px;" title="image" width="240" /></a> Come play a game with us. </p>
<p><em>You have been hand-picked by your company to join an exciting new division.  You have over-heard that this new group will be ‘Agile’ but what does that mean?  Is this the career opportunity you’ve been waiting for?  Is this a chance to make your mark and be part of something big? Did someone just say “making games”?     <br /></em>    <br />On March 9, Bryan Beecham will bring us through an Agile workshop to help sharpen our team skills.  We will simulate the experience of a company that has just decided to become Agile. Regardless of your experience in Agile there’s a spot for you on one of our teams.  To understand Agile you can’t just read about it, you need to experience it.  Come and join us for an exciting evening of learning and discovery as we tackle some interesting problems by applying Agile principles.</p>
<p>Location: <a href="http://maps.google.com/maps?f=d&amp;hl=en&amp;geocode=&amp;saddr=&amp;daddr=343+Preston+St,+Ottawa,+ON,+Canada&amp;sll=43.645982,-79.520738&amp;sspn=0.0034,0.006652&amp;ie=UTF8&amp;ll=45.402296,-75.710515&amp;spn=0.00165,0.003326&amp;z=18">343 Preston Street, Ottawa, ON</a> <a href="http://www.adobe.com/aboutadobe/contact/ottawa_directions.pdf">(Detailed directions)</a></p>
<p>When: Tuesday March 9th, 2010</p>
<p>Time: Networking from 6:00-6:30; meetup from 6:30-8:00</p>
<p><em>Shamelessly copied from the <a href="http://agileottawa.wordpress.com/2010/03/02/join-us-for-an-agile-game-for-march-9-meetup/" target="_blank">Agile Ottawa</a> blog</em></p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/OSwZ6sU6BcA" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/iZIl59DLK5U" height="1" width="1" /></div></content>
    <updated>2010-03-02T20:40:32Z</updated>
    <category term="Agile Ottawa" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/03/agile-games-at-agile-ottawa.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:40Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/OSwZ6sU6BcA/agile-games-at-agile-ottawa.html</feedburner:origLink></entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5056996.post-874254524642871913</id>
    <link href="http://www.blogger.com/feeds/5056996/874254524642871913/comments/default" rel="replies" type="application/atom+xml" />
    <link href="http://www.estherderby.com/weblog/2010/03/moving-to-new-location.html#comment-form" rel="replies" type="text/html" />
    <link href="http://www.blogger.com/feeds/5056996/posts/default/874254524642871913" rel="edit" type="application/atom+xml" />
    <link href="http://www.blogger.com/feeds/5056996/posts/default/874254524642871913" rel="self" type="application/atom+xml" />
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/sgElnqmfhAo/moving-to-new-location.html" rel="alternate" type="text/html" />
    <title>Moving to a new location</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This blog is moving.  <br /><br />Two factors came together:  I decided to move to Word Press and Blogger decided to discontinue support for non-hosted blogs.  Done deal.<br /><br />New Location: http://www.estherderby.com/category/insights<br /><br />New Feed:       feed://www.estherderby.com/feed<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5056996-874254524642871913?l=www.estherderby.com%2Fweblog%2Fblogger.html" width="1" /></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/sgElnqmfhAo" height="1" width="1" /></div></content>
    <updated>2010-03-02T15:25:51Z</updated>
    <published>2010-03-02T15:21:00Z</published>
    <author>
      <name>Esther Derby</name>
      <email>derby@estherderby.com</email>
      <uri>http://www.blogger.com/profile/06729210899814816620</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5056996</id>
      <author>
        <name>Esther Derby</name>
        <email>derby@estherderby.com</email>
        <uri>http://www.blogger.com/profile/06729210899814816620</uri>
      </author>
      <link href="http://www.blogger.com/feeds/5056996/posts/default" rel="self" type="application/atom+xml" />
      <link href="http://www.estherderby.com/weblog/blogger.html" rel="alternate" type="text/html" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://www.blogger.com/feeds/5056996/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml" />
      <link href="http://www11.pair.com/estherd/weblog/RSS/blogger_rss.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" />
      <subtitle>"Poor management can increase software costs more rapidly than any other factor." (Barry Boehm)</subtitle>
      <title>esther derby's "insights you can use"</title>
      <updated>2010-03-02T15:25:51Z</updated>
    </source>
  <feedburner:origLink>http://www.estherderby.com/weblog/2010/03/moving-to-new-location.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=353</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/kH8SpWEVY5c/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">The Reality of Automated Acceptance Testing</title>
    <summary xml:lang="en">Recently, Jim Shore wrote about The Problems With Acceptance Testing.  I like Jim, and respect him a lot.  Because of my respect for his opinions, I found it quite discouraging that he said, “I no longer use [automated acceptance testing] or recommend it.”  Gojko Adzic has posted his response to Jim.  This is mine.
Certainly when [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Recently, Jim Shore wrote about <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html" target="_blank" title="Jim Shore's blog">The Problems With Acceptance Testing</a>.  I like Jim, and respect him a lot.  Because of my respect for his opinions, I found it quite discouraging that he said, “I no longer use [automated acceptance testing] or recommend it.”  Gojko Adzic has posted his <a href="http://gojko.net/2010/03/01/are-tools-necessary-for-acceptance-testing-or-are-they-just-evil/" target="_blank" title="Gojko Adzic's blog">response to Jim</a>.  This is mine.</p>
<p>Certainly when something’s not giving you the results you want, it’s time to make a change.  That change can be to drop the practice that’s not working for you.  It can also be changing the way you go about the practice, or changing what you want to accomplish.  Or, instead of changing, maybe the word “refining” is a better fit.<span id="more-353" /></p>
<p>In my experience, teams that don’t do automated acceptance testing quickly get to a point where adding new features goes slower and slower, just because it takes longer and longer to test all of the functionality.  Sometimes they start trying to figure out which functionality they need to retest, and which “couldn’t possibly be broken by this change.”  This starts down a very slippery slope.  As <a href="http://video.google.com/videoplay?docid=4949576318072329085" target="_blank" title="Elisabeth Hendrickson's AAFTT 2007 lightning talk video">Elisabeth Hendrickson says</a>,</p>
<blockquote><p>If the customer has an expectation, they have expressed that expectation, they have every reason to believe you have already fulfilled that expectation, they don’t want to have to manually go re-verify that you have actually done the thing that you said you did before.</p></blockquote>
<p>Is that so much to expect?</p>
<p>In one of Jerry Weinberg’s books [<a href="http://www.amazon.com/gp/product/0932633242?ie=UTF8&amp;tag=alberg30-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633242" target="_blank" title="Amazon">Quality Software Management: Vol 2, First-Order Measurement</a>, pp. 156-158], he talks about how a one-line change is <em>more likely</em> to introduce a defect than a larger one.  This seems counter-intuitive, until you consider how people drop their guard when they think they’re making a trivial change.  They don’t check everything as completely.  When someone doesn’t check some aspect because “it couldn’t possibly be affected” by this change, they leave the door wide open for Murphy to demonstrate his law.</p>
<p>Given that I’m convinced things need to be retested, and that the shorter the iteration the more frequently they need to be retested, I’m not willing to give up on automated tests.  That leaves me looking at what I want to accomplish and how I want to practice it.</p>
<p>Jim describes two problems with automated acceptance tests.</p>
<blockquote><p>These two problems–that customers don’t participate, which eliminates the purpose of acceptance testing, and that they create a significant maintenance burden, means that acceptance testing isn’t worth the cost.</p></blockquote>
<p>About the first problem, lack of customer participation, he says,</p>
<blockquote><p>The planned benefit of those tools is that the customers are supposed to write the examples themselves, thus improving communication between customers and programmers. In practice, I found that customers (a) weren’t interested in doing that, and (b) often couldn’t understand and didn’t trust tests that were written by others. Typically, responsibility for the tests gets handed off to testers, which defeats the whole point.</p></blockquote>
<p>I also have found that customers are not interested in writing tests, themselves.  I don’t blame them for that.  Nor do I think they would, in general, do a very good job by themselves.  Sending testers (or developers, for that matter) off by themselves to translate discussions into test examples isn’t any better.  They have the same problems that face the customer, <em>plus</em> the problem of the customer not trusting tests they don’t understand.</p>
<p>I don’t, however, think that’s the way it has to be.</p>
<p>I’m still working on demonstrating long term results, but I’ve had some success using automatable examples as a tool to <a href="http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/" title="my blog posting on my &quot;Lingua Franca&quot; talk">enhance the conversation between the customer, the tester, and the developer</a>.  Not to replace the conversation, or to send one person off to write tests, but to add precision to the agreement about what needs to be accomplished.  The goal is for the customer to look at the test and say “Yes, that’s what I want.”</p>
<p>Once we’ve got that, there are lots of tools available now, and getting better all the time, to help us turn that automatable example into an automated one.  Yes, maintenance is still hard.  Dale Emery has an <a href="http://dhemery.com/pdf/writing_maintainable_automated_acceptance_tests.pdf" target="_blank" title="Writing Maintainable Automated Acceptance Tests by Dale Emery">excellent article</a> on this topic.  We, as an industry, have far to go getting this difficulty under control.  I say, let’s work on it.</p>
<p>If we approach the development of the examples <em>with</em> the customer and <em>in the terms</em> of the customer, then we’ve accomplished the hardest part.  It’s worth spending the extra effort to put these examples to work <em>preventing defects</em> rather than finding them after the fact.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=353&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/kH8SpWEVY5c" height="1" width="1" /></div></content>
    <updated>2010-03-01T21:41:40Z</updated>
    <published>2010-03-01T20:14:58Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Individuals and Interactions" />
    <category scheme="http://blog.gdinwiddie.com" term="Tools and Techniques" />
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Testing" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/</feedburner:origLink></entry>

  <entry>
    <id>http://martinfowler.com/bliki/BlueGreenDeployment.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/uXF_dYeLDzU/BlueGreenDeployment.html" rel="alternate" type="text/html" />
    <title>Bliki: BlueGreenDeployment</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of the goals that my colleagues and I urge on our clients is
  that of a completely automated deployment process. Automating your
  deployment helps reduce the frictions and delays that crop up in
  between getting the software "done" and getting it to realize its
  value. Dave Farley and Jez Humble are finishing up a book on this topic
  - <a href="http://continuousdelivery.com/">Continuous
  Delivery</a>. It builds upon many of the ideas that are commonly
  associated with <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous
  Integration</a>, driving more towards this ability to rapidly put
  software into production and get it doing something. Their section
  on blue-green deployment caught my eye as one of those techniques
  that's underused, so I thought I'd give a brief overview of it here.</p><img src="http://martinfowler.com/bliki/images/blueGreenDeployment/blue_green_deployments.png" /><p>One of the challenges with automating deployment is the cut-over
  itself, taking software from the final stage of testing to live
  production. You usually need to do this quickly in order to minimize
  downtime. The blue-green deployment approach does this by ensuring
  you have two production environments, as identical as possible. At
  any time one of them, let's say blue for the example, is live. As you
  prepare a new release of your software you do your final stage of
  testing in the green environment. Once the software is working in the
  green environment, you switch the router so that all incoming
  requests go to the green environment - the blue one is now idle.</p><p>Blue-green deployment also gives you a rapid way to rollback - if
  anything goes wrong you switch the router back to your blue
  environment. There's still the issue of dealing with missed
  transactions while the green environment was live, but depending on
  your design you may be able to feed transactions to both
  environments in such a way as to keep the blue environment as a
  backup when the green is live. Or you may be able to put the application
  in read-only mode before cut-over, run it for a while in read-only
  mode, and then switch it to read-write mode. That may be enough to
  flush out many outstanding issues.</p><p>The two environments need to be different but as identical as
  possible. In some situations they can be different pieces of
  hardware, or they can be different virtual machines running on the
  same (or different) hardware. They can also be a single operating
  environment partitioned into separate zones with separate IP
  addresses for the two slices.</p><p>An advantage of this approach is that it's the same basic
  mechanism as you need to get a hot-standby working. Hence this
  allows you to test your disaster-recovery procedure on every
  release. (I hope that you release more frequently than you have a
  disaster.)</p><p>The fundamental idea is to have two easily switchable
  environments to switch between, there are plenty of ways to vary the
  details. One project did the switch by bouncing the web server
  rather than working on the router. Another variation would be to use
  the same database, making the blue-green switches for web and domain
  layers.</p><p>This technique has been "out there" for ages, but I don't see it
  used as often as it should be. Some foggy combination of <a href="http://dannorth.net/">Dan North</a> and Jez Humble came up with the
  name.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/uXF_dYeLDzU" height="1" width="1" /></div></content>
    <updated>2010-03-01T14:25:00Z</updated>
    <category term="design" />
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/bliki/BlueGreenDeployment.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/vzlj7XGQSqI/Alternatives-to-Acceptance-Testing.html" rel="alternate" type="text/html" />
    <title>Alternatives to Acceptance Testing</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>01 Mar 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p class="update">Updated 3 Mar 2010: Clarified "Customer Examples" section.</p>

<p>My essay on <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html">the problems with acceptance testing</a> caused a bit of a furor. (<a href="http://gojko.net/2010/03/01/are-tools-necessary-for-acceptance-testing-or-are-they-just-evil/">Gojko Adzic</a>, <a href="http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/">George Dinwiddie</a>, <a href="http://xprogramming.com/xpmag/problems-with-acceptance-testing">Ron Jeffries</a>.) The biggest criticism was that, without acceptance testing, how do you know that the software continues to work? The classic approach, manual regression testing, is a huge burden that only increases over time.</p>

<p>It's true. Manual regression testing is not a good idea. I'm not recommending it. But that's only one of the alternatives to automated acceptance testing.</p>

<p>Every software development practice has a cost and a benefit. The trick in designing your ideal method is to choose families of practices that combine to maximize benefits and minimize costs. When <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html">I said</a>, "acceptance testing tools cost more than they're worth. I no longer use it or recommend it," I meant that I've found alternatives that provide the same benefit for lower cost.</p>

<p>This is what I do instead.</p>

<h3>My Goal</h3>

<p>When it comes to testing, my goal is to eliminate defects. At least the ones that matter. (Netscape 4.01 users, you're on your own.) And I'd much rather <em>prevent</em> defects than <em>find and fix</em> them days or weeks later.</p>

<p>I think of defects as coming from four sources: programmer errors, design errors, requirements errors, and systemic errors. When trying to eliminate defects, I look for practices that address these four causes.</p>

<ul>
	<li><strong>Programmer errors</strong> occur when a programmer knows what to program but doesn't do it right. His algorithm might be wrong, he might have made a typo, or he may have made some other mistake while translating his ideas into code.</li>
	
	<br /><li><strong>Design errors</strong> create breeding grounds for bugs. According to <a href="http://csse.usc.edu/csse/TECHRPTS/1985/usccse85-499/usccse85-499.pdf">Barry Boehm (PDF)</a>, 20% of the modules in a program are typically responsible for 80% of the errors. They're not necessarily the result of an outright mistake, though. Often a module starts out well but gets crufty as the program grows.</li>
	
	<br /><li><strong>Requirements errors</strong> occur when a programmer creates code that does exactly what she intends, but her intention was wrong. Somehow she misunderstood what needed to be done. Or, perhaps, no one knew what needed to be done. Either way, the code works as intended, but it doesn't do the right thing.</li>
	
	<br /><li><strong>Systemic errors</strong> make mistakes easy. The team's work habits include a blind spot that lets subtle defects escape. In this environment, everybody thinks they're doing the right thing--programmers are confident that they're expressing their intent, and customers are confident that programmers are doing the right thing--yet defects occur anyway. Security holes are a common example.</li>
</ul>

<p>I use the following techniques to eliminate these sources of errors. Although there are a lot of practices here, nearly all of them are practices my teams already use. I get them for free. Also, a <em>long list</em> doesn't translate to <em>high cost</em>. My experience with acceptance testing is that it's high cost, even though it doesn't take much time to describe. These practices, despite taking a lot of time to describe, are low cost. Many of them, such as TDD and fixing bugs promptly, actually decrease costs.</p>

<p>Finally, and most importantly, I can't take credit for these practices. Most of them are standard XP practices. All I've done is tweak the package a bit so I get the benefits of acceptance testing without the cost.</p>

<h3>1. Preventing Programmer Errors</h3>

<p><a href="http://jamesshore.com/Agile-Book/test_driven_development.html">Test-Driven Development</a> (TDD) is my defect-elimination workhorse. Not only does it improve the quality of my code, it gives me a comprehensive regression suite that I can use to detect future errors. My criteria for TDD is that I need to continue to write tests until I'm confident that the code does what I think it does <em>and</em> that the tests will alert me of improper changes in the future.</p>

<p>A lot of people think that TDD is just for unit testing. I don't use it that way. As I use TDD, I write three kinds of tests:</p>

<ul>
	<li><strong>Unit tests</strong>, which are focused on a single class or set of interrelated classes. These tests don't cross process boundaries, don't involve I/O, and should run at a rate of hundreds per second. The number of tests scales linearly with the size of the code. Typically, 30-50% of my codebase is unit test code.</li>
	
	<br /><li><strong>Focused integration tests</strong>, which test specific integration points in my program. For example, if I have a library that provides a database abstraction, I'll write tests that prove that I can connect to a database, perform queries, insert rows, and so forth. These tests run at a rate of tens per second. The number of tests scales proportionally to the number of ways my code talks to the outside world.</li>
	
	<br /><li><strong>End-to-end integration tests</strong>, which test all layers of the application, from UI to database. Typically, the test will act like a user of the program, entering text and clicking buttons (or simulating clicks in the presentation layer), and then check the result by looking at the database or checking the program's output. These tests are very slow--seconds or even minutes per test--and tend to break when the program changes. I keep these to the minimum necessary for me to be confident that all of the pieces of the program fit together properly. Legacy systems written without TDD require a lot more end-to-end tests, but my goal is to replace them with unit tests and focused integration tests.</li>
</ul>

<p>In addition to TDD, <a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a> helps prevent programmer error through continuous code review. Two brains are better than one. Pairing also improves design quality, which reduces design errors.</p>

<p>I also implement policies that enable <a href="http://jamesshore.com/Agile-Book/energized_work.html">Energized Work</a>. Tired, burned-out programmers make dumb mistakes. I use sensible work hours and encourage people to go home on time.</p>


<h3>2. Preventing Design Errors</h3>

<p>The techniques for eliminating programming errors also benefit the design, but I use additional practices to continually improve the design.</p>

<p><a href="http://jamesshore.com/Agile-Book/simple_design.html">Simple Design</a> emphasizes creating small, focused designs that only solve the problems we're facing today. Keeping the designs focused makes them easier to understand, reducing the likelihood of creating a bug breeding ground.</p>

<p><a href="http://jamesshore.com/Agile-Book/incremental_design.html">Incremental Design and Architecture</a> works hand-in-hand with Simple Design by enabling us to grow our initial, simple designs as our needs become more complex. The two practices together are sometimes called Evolutionary Design.</p>

<p><a href="http://jamesshore.com/Agile-Book/refactoring.html">Refactoring</a> is an essential tool that allows us to change existing designs. Not only does it enable Incremental Design and Architecture, we can use it to improve poor quality designs. Even the best design gets crufty over time. I build <a href="http://jamesshore.com/Agile-Book/slack.html">Slack</a> into every iteration and use the extra time to refactor away <a href="http://jamesshore.com/Articles/Business/Software%20Profitability%20Newsletter/Design%20Debt.html">technical debt</a>.</p>

<p>And finally, when my teams find a bug, we fix it right away--or decide that it isn't ever worth fixing. Not only do bugs get more expensive to fix over time, they're probably in the 20% of the code that causes 80% of the defects. After writing a test to reproduce the bug and fixing it, we look for ways to refactor the code so similar bugs are less likely in the future.</p> 


<h3>3. Preventing Requirements Errors</h3>

<p>Acceptance tests are mostly about requirements. Since I don't use acceptance tests, I need lots of collaboration instead.</p>

<h4>Whole Team</h4>

<p>First, a <a href="http://jamesshore.com/Agile-Book/the_xp_team.html">Whole Team</a> is essential. My teams are cross-functional, co-located, and have the resources necessary to succeed. In particular, my teams include customers and testers on-site as part of the team.</p>

<p>"On-site customers" is a broad term that includes product managers, product owners, domain experts, business analysts, interaction designers, and others. Essentially, these are the people on the team who <em>understand</em> and <em>generate</em> the software's requirements. Sometimes they make requirements up out of whole cloth, but more often they supplement their work with lots of stakeholder feedback.</p>

<p>When programmers need to understand requirements, they simply turn their head and ask the on-site customers. For anything that can't be explained easily, the customers provide concrete examples, cunningly called <em>Customer Examples</em>, to illustrate the point.</p>

<h4>Customer Examples</h4>

<p>Examples turn out to be a very powerful form of communication, and it's the legacy of Fit that's provided me with the most value. Typically, when you ask an on-site customer to explain something, she will try to explain the general principle. For example, she might say, "when a customer buys a ringtone, we either debit his pre-paid account or charge his credit card, but if he's using a credit card and the ringtone costs less than one dollar, we batch up the charges until the end of the month or until his total expenses are more than twenty dollars." Not only is this hard to understand, customers often leave out important details.</p>

<p>Instead, I have the customers illustrate their descriptions with concrete examples. I'll say, "Okay, so we have a customer named Fred, and he's paying with a credit card. He buys a ring-tone that costs fifty cents. He's already purchased 12 dollars of merchandise this month. How much do we charge his card for?" Once the dam has broken, the customers are able to provide additional examples in the same vein, and we keep going until we have examples for all of the edge cases we need.</p>

<p>Examples aren't just for domain rules. I also ask for work-flow examples and UI examples, such as screen mock-ups. Any non-trivial requirement can benefit from a concrete example. They can be informal, such as a discussion at a whiteboard, or formal, such as a Powerpoint mockup. I let the on-site customers decide how much formality they need--they often keep some of the examples for later reference.</p>

<p>The programmers use these examples to guide their work. Sometimes they'll use the examples directly in their tests. Domain rule examples are most likely to map directly to programmer concepts, particularly if the team uses <a href="http://domaindrivendesign.org/">Domain-Driven Design</a>, a <a href="http://jamesshore.com/Agile-Book/ubiquitous_language.html">Ubiquitous Language</a>, and <a href="http://c2.com/ppr/checks.html#1">Whole Value</a>.</p>

<p>More often, though, the examples are too high-level to be used directly in the tests. Workflow examples, in particular, often correspond to the end-to-end integration tests I prefer to avoid. Instead, programmers use the examples as a guide, writing a multitude of more focused, programmer-centric tests as they use TDD. (As they're working, they're likely do a few manual walk-throughs of the program to make sure things come together as expected, but these "tests" aren't saved or repeated in any way. They're just part of the conscientious, paranoid programmer's workflow.)</p>

<p>The programmers stop when they're confident that the software reflects the customers' goals, as illustrated with the examples. Because they use TDD, they've also created a sophisticated suite of regression tests that are far more complete and thorough than the original examples. Even though the examples themselves aren't coded as tests, the regression suite will fail if the software breaks.</p>

<p>There's one problem with this approach: it doesn't close the feedback loop. Programmers work from customers' examples, and talk with the customers when they have questions, but how do they confirm that they <em>really</em> understood what the customers wanted? That's where <em>Customer Review</em> of the completed software comes in.

</p><blockquote class="sidebar">
	<h4>Aside: Customer Confidence</h4>
	
	<p>If tests are for the programmers' confidence, what gives the customers confidence? This was one of the hardest lessons for me to learn. I would show customers passing Fit tests, and they would say, "How do I know that the program is really doing what this says? How do I know you didn't just program it to give the right answer for these examples?" It was so frustrating! We were essentially being accused of fraud. I wanted to shout, "Just trust us!" But, of course, that was the problem. They didn't.</p>
	
	<p>The question of customer confidence isn't one that any tool can resolve. It all comes down to interpersonal relations. Customers that don't trust the programmers aren't going to be assuaged by a test run. Customers who <em>do</em> trust the programmers don't need a test run to bolster that confidence.</p>
	
	<p>In my experience, a reliable track record of shipping defect-free software is what improves customer confidence. Nothing more; nothing less. (Sorry.)</p>
</blockquote>


<h4>Customer Review</h4>

<p>The check on the programmers' interpretation of requirements is continuous customer review. As programmers finish parts of the system, they pair with on-site customers to walk through the new functionality. This review often reveals minor flaws--sometimes purely cosmetic--that nobody thought to mention. Sometimes customers realize that what they asked for wasn't quite right. Reviews happen as soon as programmers have something to show, which exposes errors in time to be corrected. In addition, stories aren't marked <a href="http://jamesshore.com/Agile-Book/done_done.html">"done done"</a> until the on-site customers agree they're done.</p>


<h4>Bring Testers Forward</h4>

<p>Although examples help communicate complex requirements, customers typically have trouble thinking of edge cases. Programmers can help them spot holes, but I've experienced even better results from bringing testers into the mix.</p>

<p>In my experience, some testers are business-oriented testers: they're very interested in getting business requirements right. These testers work with the customers to uncover all the nit-picky details the customers would otherwise miss. They'll often prompt the customers to provide examples of edge cases during requirements discussions.</p>

<p>Other testers are more technically-oriented. They're interested in test automation and non-functional requirements. These testers act as technical investigators for the team. They create the massive testbeds that look at issues such as scalability, reliability, and performance.</p>


<h3>4. Preventing Systemic Errors</h3>

<p>If everyone does their job perfectly, the previous practices yield a system with no defects. Too bad perfection is so hard to come by. The team is sure to have blind spots: subtle areas where they don't do everything they need to, but they don't know it.</p>

<p><em>Escaped defects</em> are a clear signal of problems in paradise. Although defects are inevitable--TDD alone has programmers finding and fixing defects every few minutes--defects that are found by end-users have "escaped." Every escaped defect is an indication of a flaw somewhere in the process.</p>

<p>Of course, we don't really want our end-users to be our beta testers. (Not usually, anyway.) That's where exploratory testing comes in.</p>


<h4>Exploratory Testing</h4>

<p><a href="http://jamesshore.com/Agile-Book/exploratory_testing.html">Exploratory Testing</a> is a technique for finding surprising defects. Testers use their training, experience, and intuition to form hypotheses about where defects are likely to be lurking in the software, then they use a fast feedback loop to iteratively generate, execute, and refine test plans that expose those defects. It appears similar to ad-hoc testing to an untrained observer, but it's far more rigorous.</p>

<p>Some teams use exploratory testing to check the quality of their <em>software</em>. After a story's been coded, the testers do some exploratory testing, the team fixes bugs, and repeat. Once the testers don't find any more bugs, the story is done.</p>

<p>I do it differently. If the team is preventing defects like they should be, their code should be defect-free without additional testing. Instead, I use exploratory testing as a check on the quality of the <em>process</em>, not the software. Any defects found through exploratory testing are considered "escaped defects," indicating a flaw in the process. Only completed stories go through exploratory testing. In fact, once the team has demonstrated that it produces nearly zero defects, they release at-will, without a separate testing phase.</p>


<h4>Fix the Process</h4>

<p>Every escaped defect, whether found in exploratory testing or found by end-users, is a indication of a flaw in the process. When we find one, we fix our process.</p>

<p>The first thing is to analyze the defect, write a test that reproduces it, and fix it. While we're fixing it, we look at the design of the code and see if it needs improvement, too.</p>

<p>Next, we conduct <a href="http://jamesshore.com/Agile-Book/root_cause_analysis.html">Root-Cause Analysis</a>. We ask ourselves, "What about our process allowed this defect to escape?" We continue asking "why" until we get to the root cause. Once we find it, we make changes to prevent that entire category of defects from happening again.</p>

<p>Sometimes we can prevent defects by changing the design of our system so that type of defect is impossible. For example, if find a defect that's caused by mismatch between UI field lengths and database field lengths, we might change our build to automatically generate the UI field lengths from database metadata.</p>

<p>When we can't make defects impossible, we try to catch them automatically, typically by improving our build or test suite. For example, we might create a test that looks at all of our UI field lengths and checks each one against the database.</p>

<p>And lastly, we might change our process to make defects less likely. For example, we might add an item to our <a href="http://jamesshore.com/Agile-Book/done_done.html">"done done"</a> checklist that reminds us to double-check any field lengths we changed.</p>


<h4>'Tude</h4>

<p>I also encourage an attitude among my teams... a bit of eliteness, even snobbiness. It goes like this: "Bugs happen to other people."</p>

<p>In a lot of teams, bugs are a way of life. But when you have the attitude that defects are inevitable, you aren't motivated to prevent them. They're just a nuisance to be fixed and forgotten as quickly as possible.</p>

<p>All of the practices I've described here take discipline and rigor. They're not necessarily difficult, but they break down if people are sloppy or don't care about their work. A culture of "<a href="http://jamesshore.com/Agile-Book/no_bugs.html">No Bugs</a>" helps the team maintain the discipline required, as does <a href="http://jamesshore.com/Agile-Book/pair_programming.html">pair programming</a>, a <a href="http://jamesshore.com/Agile-Book/sit_together.html">co-located team</a>, and <a href="http://jamesshore.com/Agile-Book/collective_code_ownership.html">collective ownership</a>.</p>


<h3>The Complete Package</h3>

<p>So that's how I achieve low defects without using acceptance tests. As I said in <a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html">my previous essay</a>, I've found acceptance testing to be high cost and low value. This set of practices, though long, is mostly free for teams using XP. For those teams, it costs less than acceptance testing and does a better job of preventing defects.</p>

<p>It's not easy, by any means. To achieve the value I'm describing here, you have to be rigorous in your approach to TDD and you have to commit wholeheartedly to having a cross-functional, co-located team. It's really based on a rigorous application of XP. If you can't do that, then perhaps automated acceptance tests are your best alternative.</p>

<p>But if you can to do this instead, I think you'll find that it gives you better results. It has for me.</p>

    
    
    <p><a href="http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/vzlj7XGQSqI" height="1" width="1" /></div></summary>
    <updated>2010-03-01T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-743335942059687430</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/uaGC1k5EiEA/budgeting-bunkum.html" rel="alternate" type="text/html" />
    <title>Budgeting bunkum</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Despite the UK Government issuing it's new budget today - oh utter joy, btw - this post was motivated by IT budgeting experiences.<br /><br />I consider budgeting to be waste.<br /><br />A budget is based on assumptions and estimations and therefore, without constant refinement, which seldom happens, it gets out of date fast. And the whole process of arriving at the budget amount is shamefully stupid and entirely comical! It goes something like this ..<br /><br />Someone gets to spend an inordinate amount of time, usually painful time (living the myth that it’s possible to know everything at the start), trying to calculate the amount of money needed to deliver X. That amount is submitted, consolidated and rolled up into department, division and ultimately company figures, undergoing a protracted review process en route that typically results in the amount being summarily cut. Of course, this is all a silly game and everyone knows how it's played. The submitter, to ensure he receives the amount he feels he needs to get the job done, exaggerated the amount in the first place. He purposely over-budgeted in his submission in anticipation of budget cuts. The reviewers know this. And the submitter knows the reviewers know and .. sigh. What starts out involving the operational realities soon becomes a purely financial planning exercise that is divorced from those operational realities. The futility of it all.<br /><br />It gets dafter. Ever heard of people rushing to spend the remaining money from this year's budget before the year runs out so they won't suffer budget cuts next year? WTF!<br /><br />This all works so well, right! There's got to be more effective ways.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-743335942059687430?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/OTpInDYVKwo" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/uaGC1k5EiEA" height="1" width="1" /></div></summary>
    <updated>2010-02-28T11:55:19Z</updated>
    <category term="budgeting" /><feedburner:origLink>http://blog.energizedwork.com/2009/12/budgeting-bunkum.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/OTpInDYVKwo/budgeting-bunkum.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Agile-Book/thinking_intro.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/81OOOL6Ibtg/thinking_intro.html" rel="alternate" type="text/html" />
    <title>The Art of Agile Development: Chapter 5: Thinking</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>28 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Agile-Book/">James Shore/Agile-Book</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/assess_your_agility.html">Assess Your Agility</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/">Table of Contents</a></li>
</ul>

<h3>Full Text</h3>

<p>The following text is excerpted from <cite>The Art of Agile Development</cite> by James Shore and Shane Warden,  published by O'Reilly. Copyright © 2008 James Shore and chromatic. All rights reserved.</p>

<h2>Thinking</h2>

<p />

<p>What's wrong with this sentence?</p>

<blockquote>
 
 <p>What we really need is more keyboards cranking out code.</p>
 
</blockquote>

<p>That's a quote from a manager I once worked with.  In a way, he was right: you will never give your customer what she wants without typing on a keyboard.</p>

<p>That wasn't our problem, though.  I later realized that our progress had a single bottleneck: the availability of our staging environment.  More keyboards wouldn't have helped, even if we had more programmers sitting at them.  If we had realized this sooner, we would have been much more productive.</p>

<p>Sometimes the biggest gains in productivity come from stopping to think about <em>what</em> you're doing, <em>why</em> you're doing it, and <em>whether</em> it's a good idea.  The best developers don't just find something that works and use it; they also question why it works, try to understand it, and then improve it.</p>

<p>XP doesn't require experts.  It <em>does</em> require a habit of mindfulness.  This chapter contains five practices to help mindful developers excel.</p>

<ul>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a></em> doubles the brainpower available during coding, giving one person in each pair the opportunity to think about strategic, long-term issues.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/Energized work.html">Energized Work</a></em> acknowledges that developers do their best, most productive work when they're energized and motivated.</p></li>
  <li><p>An <em><a href="http://jamesshore.com/Agile-Book/informative workspace.html">Informative Workspace</a></em> gives the whole team more opportunities to notice what's working well and what isn't.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/Root-cause analysis.html">Root-Cause Analysis</a></em> is a useful tool for identifying the underlying causes of your problems.</p></li>
  <li><p><em><a href="http://jamesshore.com/Agile-Book/Retrospectives.html">Retrospectives</a></em> provide a way to analyze and improve the entire development process.</p></li>
</ul>

<blockquote class="sidebar"><h3>"Thinking" Mini-Etude</h3>
 
 <p>The purpose of this étude is to practice mindfulness. If you're new to agile development, you may use it to help you understand the XP practices, even if you're not currently using XP. If you're an experienced agile practitioner, review Chapter 11 and use this étude to consider how you can go beyond the practices in this book.</p>
 
 <p>Conduct this étude for a time-boxed half-hour every day for as long as it is useful.  Expect to feel rushed by the deadline at first.  If the étude becomes stale, discuss how you can change it to make it interesting again. </p>
 
 <p>You will need multiple copies of this book (if you don't have enough copies on hand, you can make photocopies of specific practices for the purpose of this exercise), paper, and writing implements.</p>
 
 <p><strong>Step 1.</strong>  Start by forming pairs.  Try for heterogeneous pairs—have a programmer work with a customer, a customer work with a tester, and so forth, rather than pairing by job description.  Work with a new partner every day.</p>
 
 <p><strong>Step 2.</strong>  <em>(Timebox this step to 15 minutes.)</em>  Within your pair, pick one practice from Part II of this book and discuss one of the following sets of questions.  Pick a practice that neither of you have discussed before, even if you didn't get to lead a discussion yesterday.  Timebox your discussion to fifteen minutes.  It's okay not to finish the section, particularly if you haven't read it before.  You'll have the chance to read it again.</p>
 
 <p><em>If you aren't using the practice:</em></p>
 
 <ul>
  <li><p>What about the practice would be easy to do?  What would be hard?  What sounds ridiculous or silly?</p></li>
  <li><p>How does it differ from your previous experiences?</p></li>
  <li><p>What would have to be true in order for you to use the practice exactly as written?</p></li>
</ul>
 
 <p><em>If you are using the practice:</em></p>
 
 <ul>
  <li><p>What aspects of the practice do you differently than the book says?  (Observations only—no reasons.)</p></li>
  <li><p>If you followed the practice exactly as written, what would happen?</p></li>
  <li><p>What one experimental change could you try that would give you new insight about the practice?  (Experiments to prove that the practice is inappropriate are okay.)</p></li>
</ul>
 
 <p><strong>Step 3.</strong>  <em>(Timebox this step to 15 minutes.)</em>  Choose three pairs to lead discussions of their answers.  Try to pick pairs so that, over time, everyone gets to lead equally.  Timebox each presentation to five minutes.</p>
 
</blockquote>


<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/assess_your_agility.html">Assess Your Agility</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/">Table of Contents</a></li>
</ul>

    
    
    <p><a href="http://jamesshore.com/Agile-Book/thinking_intro.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/81OOOL6Ibtg" height="1" width="1" /></div></summary>
    <updated>2010-02-28T08:00:00Z</updated>
    <category term="/Agile-Book" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:36Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Agile-Book/thinking_intro.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/LgSM0bYwVyo/The-Problems-With-Acceptance-Testing.html" rel="alternate" type="text/html" />
    <title>The Problems With Acceptance Testing</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>27 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p><a href="http://gojko.net/">Gojko Adzic</a> wrote to ask about my experiences with acceptance testing. For those who don't know, I was the coordinator of the <a href="http://fit.c2.com/">Fit</a> project for a while and co-author of the C# version. Fit is <a href="http://c2.com/~ward/">Ward Cunningham</a>'s brainchild and (as far as I know) inspired a lot of the current Agile acceptance testing tools, such as <a href="http://seleniumhq.org/">Selenium</a>, <a href="http://cukes.info/">Cucumber</a>, and <a href="http://fitnesse.org/">FitNesse</a>. FitNesse, in particular, started out as a fork of Fit.</p>

<p>When Ward first introduced me to Fit, I was very excited about the possibilities. I embraced it wholeheartedly (as evidenced by my participation in the project) and introduced it to my consulting clients. Over the years, my enthusiasm dimmed. It just didn't work as well in practice as it was supposed to. Here's what I had to say to Gojko:</p>

<blockquote>
	<p>My experience with Fit and other agile acceptance testing tools is that they cost more than they're worth. There's a lot of value in getting concrete examples from real customers and business experts; not so much value in using "natural language" tools like Fit and similar.</p>
	
	<p>The planned benefit of those tools is that the customers are supposed to write the examples themselves, thus improving communication between customers and programmers. In practice, I found that customers (a) weren't interested in doing that, and (b) often couldn't understand and didn't trust tests that were written by others. Typically, responsibility for the tests gets handed off to testers, which defeats the whole point.</p>
	
	<p>Furthermore, acceptance testing tools are almost invariably used to create end-to-end integration tests, which are slow and brittle. Fit works best for targeted tests that describe the domain, but that's not how it's used. Also, tools like Fit don't work with refactoring tools. Once you have a lot of tests, they become a real maintenance burden.</p>
	
	<p>These two problems--that customers don't participate, which eliminates the purpose of acceptance testing, and that they create a significant maintenance burden, means that acceptance testing isn't worth the cost. I no longer use it or recommend it.</p>
	
	<p>Instead, I involve business experts (on-site customers) closely throughout the iteration. I do have them create concrete examples, but only when faced with particularly complex topics, and never with the intention that they be run by a tool like Fit. Instead, the programmers use those examples to inform their test-driven development, which may or may not involve creating automated tests from the examples, at the programmers' discretion.</p>
	
	<p>I also have the on-site customers conduct ad-hoc review of the software as programmers complete it. They pair with a programmer, look at what's been created, and ask for changes that the programmer implements on the spot.</p>
</blockquote>

<h3>Further Reading</h3>

<p>If you'd like to know more, I highly recommend listening to Scott Hanselman's <a href="http://www.hanselminutes.com/default.aspx?showID=169">"Is Fit Dead?" podcast</a>. In this podcast, Scott interviewed Ward and I together. We talked about our goals for Fit, what actually happened, and passed the torch. I'm very happy with how this interview turned out.</p>

<p>That podcast kicked off an excellent discussion about Fit on Twitter. Eric Lefevre-Ardant wrote <a href="http://ericlefevre.net/wordpress/2009/03/06/is-fit-dead-a-debate-on-twitter/">a great summary</a>. 

</p><p><a href="http://gojko.net/2010/03/01/are-tools-necessary-for-acceptance-testing-or-are-they-just-evil/">Gojko Adzic</a>, <a href="http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/">George Dinwiddie</a>, and <a href="http://xprogramming.com/xpmag/problems-with-acceptance-testing">Ron Jeffries</a> each posted thoughtful reactions to this essay on their blogs.</p>

<p>I've posted a follow-up essay describing <a href="http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html">Alternatives to Acceptance Testing</a>.

    
    
    </p><p><a href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/LgSM0bYwVyo" height="1" width="1" /></div></summary>
    <updated>2010-02-27T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-8297216352536460821</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/d1QQ0AeME9k/sitemap-on-wall.html" rel="alternate" type="text/html" />
    <title>Sitemap on the wall</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.flickr.com/photos/agileinaction/3573534705/" title="Full size sitemap on the wall by energizr, on Flickr"><img alt="Full size sitemap on the wall" height="250" src="http://farm4.static.flickr.com/3588/3573534705_3a7e2e3136.jpg" style="border: 2px solid rgb(0, 0, 0);" width="500" /></a><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-8297216352536460821?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/oqUadPAwm7Q" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/d1QQ0AeME9k" height="1" width="1" /></div></summary>
    <updated>2010-02-27T00:07:55Z</updated>
    <category term="sitemap" />
    <category term="commutineer" /><feedburner:origLink>http://blog.energizedwork.com/2010/02/sitemap-on-wall.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/oqUadPAwm7Q/sitemap-on-wall.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-7585092788553106265</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/m5LGThBqR-k/simple-measure-of-effectiveness.html" rel="alternate" type="text/html" />
    <title>A simple measure of effectiveness</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In the Lean manufacturing world there's a measurement called First-Time-Through (FTT), which monitors whether a cell is making products right the first time. It's a measurement of the effectiveness of the cell's standardized work and shows the percentage of product made without any need for rework or scrap. <br /><blockquote>FTT = ( Total units processed - Rejects or Reworks ) / Total units processed</blockquote>If the standardized work is adhered to, the product will be made right first time and FTT will be 100%. However, flawed materials, faulty components and operator error all contribute to rework and scrap.<br /><br />Who cares about parallels between manufacturing and software development? I was just interested to read about FTT because I've been thinking for a while now about the effectiveness of software teams ... at an operational level, let's say. I've long considered an effective team as one that is able to sustain throughput (i.e. the number of cards released to production that deliver value) while fixing defects immediately and repaying technical debt to keep the amount of rework small.<br /><br />I consider technical debt and defects to be rework, and technical debt to be a natural byproduct of software development. It stems from earlier decisions, based on what we knew at the time, and requires attention later when the system has outgrown the outcomes of those decisions. It is necessary rework that keeps the emerging design relevant and the software healthy and habitable, reducing risks and medium to long-term costs. Defects are basically mistakes. They happen. How we create software determines whether we have a small and manageable amount of rework or a crippling amount of rework. If we're responsible, skilled and bake quality into code we can minimize rework to technical debt and occasional defects. If we're irresponsible and cut corners, or we're rubbish and write crap code, then rework can become so large that the only viable option is to cancel or start again. <br /><br />Technical debt requires careful management and continuous investment while defects should be fixed as soon as they are found. A proportion of a team's capacity is therefore always expended doing an amount of rework. That's a good thing providing:<br /><br /><ul><li>the completed rework is small compared to the throughput so that capacity mostly focuses on value demand, and</li><li>the completed rework is enough to keep the remaining rework small compared to the throughput, thus minimizing further failure demand.</li></ul><br />(Throughput excludes repaid technical debt and fixed defects that went live). <br /><br />On a weekly basis then, the throughput in relation to the remaining technical debt and defects might be a useful measure of a team's effectiveness.<br /><blockquote>Effectiveness = ( Throughput - Rework ) / Throughput<br /><br />where<br /><br />Throughput = Number of cards released to production that deliver value<br />Rework = Number of technical debt and defect cards in inventory and work-in-process</blockquote>I’ve pushed various teams’ data through and the charts seem to correlate with the events described in my historical notes. Here's a chart based on a small, experienced team working on a small project for 3 months. <br /><br /><a href="http://www.flickr.com/photos/agileinaction/4385869438/" title="Effectiveness"><img alt="" height="240" src="http://farm5.static.flickr.com/4024/4385869438_8499d8dcac_o.png" style="border: solid 2px #000000;" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4385869438/">Effectiveness</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span><br /><br />You can see there wasn't any throughput in the first 4 weeks as completed cards queued up in inventory. In week 5 that inventory was flushed to became throughput as the first cut was released. Effectiveness then varied with the weekly releases until week 10, which saw the team 100% effective with no rework cards in inventory or work-in-process. In week 12, however, effectiveness dropped to -33% because 1 technical debt card was work-in-process and 3 fixed defects were queued in inventory while only 3 cards were released.<br /><br />Although it's perhaps a simplistic indicator do you think it's useful as a measure for effectiveness (i.e. a team's ability to deliver value and stay healthy)? Or is it utter tosh? Can it be refined (without complicating it)?<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-7585092788553106265?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/zJazWXHwUi8" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/m5LGThBqR-k" height="1" width="1" /></div></summary>
    <updated>2010-02-26T22:11:32Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:32Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/zJazWXHwUi8/simple-measure-of-effectiveness.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-1473040599826559129</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/jssFDSZPN00/inevitable-and-avoidable-rework_8291.html" rel="alternate" type="text/html" />
    <title>Inevitable and avoidable rework</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Without really thinking about it until now, I've been seeing two types of technical debt. The first is the quick solution implemented with dirty code. I consider this to be irresponsible. That's not to say I won't do it, just that if I decide I should do it I make sure the necessary people understand the consequences and that it's an irresponsible action to take.<br /><br />The second is a natural byproduct of emergent design and <a href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it">YAGNI</a>(yet) decisions. It's the debt that surfaces when a system outgrows implementations resulting from previous decisions, which were the right ones to make at the time based on the information available (because they did not compromise quality or the health of the code in any way). Irresponsible debt creates avoidable rework; it's failure demand. It's bad, it smells and it needs to be cleaned up because, if left to fester, it's going to slow us down and divert capacity away from meeting the value demand.<br /><br />The debt that surfaces because the system is maturing creates inevitable rework. It's necessary to do this rework on a regular basis to keep the emergent design relevant, the code habitable, to prevent obsolescence, perhaps increase reuse, and reduce risks and medium to long-term costs. I think most people try to roll this debt into feature cards and that's the right policy. We prefer to do that if we can. However, we've become too good at <a href="http://blog.energizedwork.com/2009/05/pomodoro-galore.html">writing cards to be less than 2 days</a> (which helps smooth the flow) and sometimes it's not possible to absorb inevitable rework into a feature card and keep it under 2 days (the way we like it). And of course, sometimes, the rework just doesn't relate to any features, e.g. upgrading to the latest Grails framework. So this gets <a href="http://blog.energizedwork.com/2009/11/how-we-use-stories.html">written on a blue card</a>. By definition this is failure demand too. But that's harsh, don't you think? I have a weird take on this because I insist that the system is recognized and treated as a stakeholder, and as such it values certain things and makes its own demands. One of the things it values is to be kept healthy. But I'm not hung up on this rework being classified as failure demand providing it's being managed effectively.<br /><br />As I mentioned in my <a href="http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html">previous post</a>, completing some inevitable rework on a regular basis (and assuming you're not being irresponsible ;) helps reduce the remaining rework. We can see this in action in the chart below.<br /><br /><a href="http://www.flickr.com/photos/agileinaction/4388540448/" title="Rework"><img alt="" height="240" src="http://farm5.static.flickr.com/4009/4388540448_88f0239892_o.png" style="border: 2px solid rgb(0, 0, 0);" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4388540448/">Rework</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span><br /><br />The blue and pink lines show the remaining technical debt and defects that are either work-in-process or queued inventory (i.e. completed but not released). The blue and pink bars show the technical debt that has been repaid and the defects that have been fixed. Think of these bars pulling the remaining rework down keeping it small and preferably fairly steady. And, of course, assuming there's throughput satisfying the value demand then the team is <a href="http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html">effective</a>.<br /><br />It's useful to track the remaining technical debt and defects in statistical process control charts. The natural process limits help to distinguish signs of system instability from normal variation. When the limits are breached investigate what's happened to understand how the system may have changed. Watch for trending beyond the breach as it's likely to reveal more information to help you. Use these events to identify improvements.<br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4389576034/" title="Technical Debt SPC"><img alt="" height="240" src="http://farm5.static.flickr.com/4025/4389576034_5ceb0958fb_o.png" style="border: solid 2px #000000;" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4389576034/">Technical Debt SPC</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4388807593/" title="Defects SPC"><img alt="" height="240" src="http://farm5.static.flickr.com/4063/4388807593_2336477a73_o.png" style="border: solid 2px #000000;" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4388807593/">Defects SPC</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><br />(Incidentally, the process limits were calculated between weeks 7 and 14 because week 6 saw the system change. Up to the end of week 6 all the software completed became queued inventory. This was then flushed to throughput and released, enabling a weekly release from then on.)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-1473040599826559129?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/zDC7gZ5Z_FQ" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/jssFDSZPN00" height="1" width="1" /></div></summary>
    <updated>2010-02-26T21:45:08Z</updated>
    <category term="spc" />
    <category term="rework" />
    <category term="technical debt" /><feedburner:origLink>http://blog.energizedwork.com/2010/02/inevitable-and-avoidable-rework_8291.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:33Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/zDC7gZ5Z_FQ/inevitable-and-avoidable-rework_8291.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=348</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/MtPLHN5iWO0/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/26/how-fascinating/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/26/how-fascinating/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">How Fascinating!</title>
    <summary xml:lang="en">Yesterday was a day of mistakes.  Not so much making mistakes, but talking about them.  It started with Bret Pettichord’s tweet
Agile requires the courage to make mistakes in front of others and the maturity to admit them when they happen.
Surely this is true.  Agile is all about paying attention to what happens and adjusting for [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Yesterday was a day of mistakes.  Not so much making mistakes, but talking about them.  It started with <a href="http://twitter.com/bpettichord/status/9629582579" target="_blank" title="the tweet">Bret Pettichord’s tweet</a></p>
<blockquote><p>Agile requires the courage to make mistakes in front of others and the maturity to admit them when they happen.</p></blockquote>
<p><span id="more-348" />Surely this is true.  Agile is all about paying attention to what happens and adjusting for it.  We learn most when when thing are a little off from what we want, we notice that, and we correct for it.</p>
<p><a href="http://twitter.com/marick/status/9635032030" target="_blank" title="the tweet">Brian Marick responded</a></p>
<blockquote><p>I now think that Agile requires the creation of an environment in which admitting mistakes doesn’t require courage.</p></blockquote>
<p>Surely this is also true.  If we want people to notice when things are a little off, so we can make a correction, then we have to make it easy to talk about our mistakes.  If we don’t, the little mistakes get swept under the carpet and we continue on our way–until the mistakes grow so big that we can’t ignore them any more.  By this time we’re <em>way off the path</em> we want.</p>
<p><a href="http://twitter.com/gdinwiddie/status/9635637710" target="_blank" title="my tweet">In other words</a>, well, in my words,</p>
<blockquote><p>I think Agile requires creating environment where admitting mistakes requires no more courage than you have.</p></blockquote>
<p>We can’t eliminate the need for courage to admit our mistakes.  It’s human nature to gloss over even tiny ones, and hope no one noticed.  But we can reduce the stigma of making mistakes.</p>
<blockquote><p>How fascinating!</p></blockquote>
<p>was the <a href="http://twitter.com/fluencygame/status/9657879008" target="_blank" title="the tweet">comment by Willem Larsen</a>.  Willem and Evan Gardner are spreading Evan’s <a href="http://whereareyourkeys.org/" target="_blank" title="Where Are Your Keys?">“Where Are Your Keys” language fluency game</a>.  It’s expected that you’ll make mistakes when learning a language.  The response to such a mistake is “how fascinating” signed by raising both hands in the air.  Everyone laughs.  No one feels badly for making a mistake.  In fact, it feels good to share your mistakes with a laugh and helpful colleagues rather than to hide it inside.</p>
<p>Is that the way it feels when you make a mistake in your team?  What could you change so it does feel that way?</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=348&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/MtPLHN5iWO0" height="1" width="1" /></div></content>
    <updated>2010-02-26T17:16:47Z</updated>
    <published>2010-02-26T17:16:47Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Responding to Change" />
    <category scheme="http://blog.gdinwiddie.com" term="Feedback" />
    <category scheme="http://blog.gdinwiddie.com" term="Teams" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/02/26/how-fascinating/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-1843702255335203867</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/266LyOhoBD0/inevitable-and-avoidable-rework.html" rel="alternate" type="text/html" />
    <title>Inevitable and avoidable rework</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Without really thinking about it until now, I've been seeing two types of technical debt. The first is the quick solution implemented with dirty code. I consider this to be irresponsible. That's not to say I won't do it, just that if I decide I should do it I make sure the necessary people understand the consequences and that it's an irresponsible action to take.<br /><br />The second is a natural byproduct of emergent design and <a href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it">YAGNI</a>(yet) decisions. It's the debt that surfaces when a system outgrows implementations resulting from previous decisions, which were the right ones to make at the time based on the information available (because they did not compromise quality or the health of the code in any way). Irresponsible debt creates avoidable rework; it's failure demand. It's bad, it smells and it needs to be cleaned up because, if left to fester, it's going to slow us down and divert capacity away from meeting the value demand.<br /><br />The debt that surfaces because the system is maturing creates inevitable rework. It's necessary to do this rework on a regular basis to keep the emergent design relevant, the code habitable, to prevent obsolescence, perhaps increase reuse, and reduce risks and medium to long-term costs. I think most people try to roll this debt into feature cards and that's the right policy. We prefer to do that if we can. However, we've become too good at <a href="http://blog.energizedwork.com/2009/05/pomodoro-galore.html">writing cards to be less than 2 days</a> (which helps smooth the flow) and sometimes it's not possible to absorb inevitable rework into a feature card and keep it under 2 days (the way we like it). And of course, sometimes, the rework just doesn't relate to any features, e.g. upgrading to the latest Grails framework. So this gets <a href="http://blog.energizedwork.com/2009/11/how-we-use-stories.html">written on a blue card</a>. By definition this is failure demand too. But that's harsh, don't you think? I have a weird take on this because I insist that the system is recognized and treated as a stakeholder, and as such it values certain things and makes its own demands. One of the things it values is to be kept healthy. But I'm not hung up on this rework being classified as failure demand providing it's being managed effectively.<br /><br />As I mentioned in my <a href="http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html">previous post</a>, completing some inevitable rework on a regular basis (and assuming you're not being irresponsible ;) helps reduce the remaining rework. We can see this in action in the chart below.<br /><br /><a href="http://www.flickr.com/photos/agileinaction/4388540448/" title="photo sharing"><img alt="Rework" height="240" src="http://farm5.static.flickr.com/4009/4388540448_88f0239892_o.png" style="border: 2px solid rgb(0, 0, 0);" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4388540448/">Rework</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span><br /><br />The blue and pink lines show the remaining technical debt and defects that are either work-in-process or queued inventory (i.e. completed but not released). The blue and pink bars show the technical debt that has been repaid and the defects that have been fixed. Think of these bars pulling the remaining rework down keeping it small and preferably fairly steady. And, of course, assuming there's throughput satisfying the value demand then the team is <a href="http://blog.energizedwork.com/2010/02/simple-measure-of-effectiveness.html">effective</a>.<br /><br />It's useful to track remaining technical debt and defects in a statistical process control chart. Using natural process limits signs of system instability can be distinguished from normal variation. These events should be investigated to understand how the system may have changed and, with root cause analysis, they can be used to identify improvements.<br /><br /><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4389576034/" title="photo sharing"><img alt="Technical Debt SPC" height="240" src="http://farm5.static.flickr.com/4025/4389576034_5ceb0958fb_o.png" style="border: solid 2px #000000;" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4389576034/">Technical Debt SPC</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><div style="float: left; margin-bottom: 10px;"><a href="http://www.flickr.com/photos/agileinaction/4388807593/" title="photo sharing"><img alt="Defects SPC" height="240" src="http://farm5.static.flickr.com/4063/4388807593_2336477a73_o.png" style="border: solid 2px #000000;" width="520" /></a><br /><span style="font-size: 0.9em; margin-top: 0px;"><a href="http://www.flickr.com/photos/agileinaction/4388807593/">Defects SPC</a><br />Originally uploaded by <a href="http://www.flickr.com/people/agileinaction/">energizr</a></span></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-1843702255335203867?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/aXe2rVk46X8" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/266LyOhoBD0" height="1" width="1" /></div></summary>
    <updated>2010-02-26T10:04:26Z</updated>
    <category term="rework" />
    <category term="technical debt" />
    <category term="failure demand" /><feedburner:origLink>http://blog.energizedwork.com/2010/02/inevitable-and-avoidable-rework.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-02-26T11:17:24Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/aXe2rVk46X8/inevitable-and-avoidable-rework.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/Art-of-Agile-Development-Going-Online.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/bXlmg-U1hWg/Art-of-Agile-Development-Going-Online.html" rel="alternate" type="text/html" />
    <title>"Art of Agile Development" Going Online</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>26 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p>I'm very happy to announce that the <strong>full text</strong> of <cite>The Art of Agile Development</cite> is going online, starting today! Now you can look up that tough question from the comfort of your computer, even if your boss never returned your copy.</p>

<p>I'll be posting one section of the book every Friday, starting with the Agile practices from Part II. Today's chapter: <a href="http://jamesshore.com/Agile-Book/pair_programming.html">Pair Programming</a>.</p>

    
    
    <p><a href="http://jamesshore.com/Blog/Art-of-Agile-Development-Going-Online.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/bXlmg-U1hWg" height="1" width="1" /></div></summary>
    <updated>2010-02-26T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/Art-of-Agile-Development-Going-Online.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Agile-Book/pair_programming.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/8dj5GAPQz_8/pair_programming.html" rel="alternate" type="text/html" />
    <title>The Art of Agile Development: Pair Programming</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>26 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Agile-Book/">James Shore/Agile-Book</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/energized_work.html">Energized Work</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/thinking_intro.html">Chapter 5: Thinking</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/thinking_intro.html">Chapter 5: Thinking</a></li>
</ul>

<h3>in 99 words</h3>

<blockquote class="ninetynine_words">

<p>It's more fun than it sounds: two programmers at one computer.  One drives; the other navigates.  Switching roles fluidly, they constantly communicate.  Together, they accomplish better work more quickly than either could alone.</p>

<p>The driver types.  She focuses on <em>tactics</em>--writing clean code that compiles and runs.  The navigator focuses on <em>strategy</em>--how the code fits into the overall design, which tests will drive the code forward, and which refactorings will improve the entire codebase.</p>

<p>Pairs self-organize by selecting partners who can best help with the current task.  They switch every few hours to share perspectives and knowledge.</p>

</blockquote>

<h3>as haiku</h3>

<blockquote class="haiku">

<p>Summer bakes the earth
<br />Heads together, we ponder
<br />Aha!  An insight.</p>

</blockquote>

<h3>Behind the Scenes</h3>

<p><a href="http://jamesshore.com/Blog/Iterative-Writing.html">Iterative Writing</a></p>

<h3>Poster</h3>

<a href="http://jamesshore.com/downloads/art-of-agile/pairing-tips.pdf"><img alt="'Pairing Tips' poster" class="framed" src="http://jamesshore.com/images/art-of-agile/pairing-tips-thumb.jpg" width="200" /></a><p>

</p><h3>Full Text</h3>

<p>The following text is excerpted from <cite>The Art of Agile Development</cite> by James Shore and Shane Warden (O'Reilly 2007). Copyright © 2008 James Shore and chromatic. All rights reserved.</p>

<h2>Pair Programming</h2>

<p class="goal">We help each other succeed.</p>

<dl class="audience"><dt>Audience</dt><dd>Programmers</dd><dd>Whole Team</dd></dl>

<p>Do you want somebody to watch over your shoulder all day?  Do you want to waste half of your time sitting in sullen silence watching somebody else code?</p>

<p>Of course not.  Nobody does—especially not people who pair program.</p>

<p>Pair programming is one of the first things people notice about XP.  Two people work at the same keyboard?  It's weird.  It's also extremely powerful and, once you get used to it, tons of fun.  Most programmers I know who tried pairing for a month find that they prefer it to programming alone.</p>

<h3>Why Pair?</h3>

<p>This chapter is called <em>Thinking</em>, yet I included pair programming as the first practice.  That's because pair programming is all about increasing your brainpower.</p>

<p>When you pair, one person codes—the <em>driver</em>.  The other person is the <em>navigator</em>, whose job is to think.  As navigator, sometimes you think about what the driver is typing.  (Don't rush to point out missing semicolons, though.  That's annoying.)  Sometimes you think about what tasks to work on next and sometimes you think about how your work best fits into the overall design.</p>

<p>This arrangement leaves the driver free to work on the tactical challenges of creating rigorous, syntactically correct code without worrying about the big picture, and it gives the navigator the opportunity to consider strategic issues without being distracted by the details of coding.  Together, the driver and navigator create higher-quality work more quickly than either could produce on their own.<sup>1</sup></p>

<p class="aside"><sup>1</sup>One study found that pairing takes about 15% more effort than one individual working alone, but produces results more quickly and with 15% fewer defects [Cockburn &amp; Williams].  Every team is different, so take these results with a grain of salt.</p>

<p>Pairing also reinforces good programming habits.  XP's reliance on continuous testing and design refinement takes a lot of self-discipline.  When pairing, you'll have positive peer pressure to perform these difficult but crucial tasks.  You'll spread coding knowledge and tips throughout the team.</p>

<p>You'll also spend more time in <em>flow</em>—that highly-productive state in which you're totally focused on the code.  It's a different kind of flow than normal because you're working with a partner, but it's far more resilient to interruptions.  To start with, you'll discover that your office mates are far less likely to interrupt you when you're working with someone.  When they do, one person will handle the interruption while the other continues his train of thought.  Further, you'll find yourself paying more attention to the conversation with your programming partner than surrounding noise; it fades into the background.</p>

<p>If that isn't enough, pairing really is a lot of fun.  The added brainpower will help you get past roadblocks more easily.  For the most part, you'll be collaborating with smart, like-minded people.  Plus, if your wrists get sore from typing, you can hand off the keyboard to your partner and continue to be productive.</p>

<h3>How to Pair</h3>

<p>I recommend pair programming on all production code.  Many teams who pair frequently, but not exclusively, discover that they find more defects in solo code.  A good rule of thumb is to pair on anything that you need to maintain, which includes tests and the build script.</p>

<p>When you start working on a task, ask another programmer to work with you.  If another programmer asks for help, make yourself available.  Never assign partners: pairs are fluid, forming naturally and shifting throughout the day.  Over time, pair with everyone on the team.  This will help improve team cohesion and it will spread design skills and knowledge throughout the team.</p>

<blockquote class="coach">Get a fresh perspective by switching partners.</blockquote>

<p>When you need a fresh perspective, switch partners.  I usually switch when I'm feeling frustrated or stuck.  Have one person stay on the task to help bring the new partner up to speed.  Often, even explaining the problem to someone new will help you resolve it.</p>

<p>It's a good idea to switch partners several times per day even if you don't feel stuck.  This will help keep everyone informed and moving quickly.  I switch whenever I finish a task.  If I'm working on a big task, I switch within four hours.</p>

<p>When you sit down to pair together, make sure that you're physically comfortable.  Position your chairs side by side, allowing for each others' need for personal space, and make sure the monitor is clearly visible.  When you're driving, place the keyboard directly in front of you.  Keep an eye out for this one—for some reason, people pairing tend to contort themselves to reach the keyboard and mouse rather than moving them closer.</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/test_driven_development.html">Test-Driven Development</a></dd></dl><p>Paired programmers produce code through conversation.  As you drive or navigate, think out loud.  Take small, frequent design steps—test-driven development works best—and talk about your assumptions, short-term goals, general direction, and any relevant history of the feature or project.  If you're confused about something, ask questions.  The discussion may enlighten your partner as much as it does you.</p>

<blockquote class="notetip">
 
 <p>When a pair <em>goes dark</em>—talks less, lowers their voices, or doesn't switch off with other pairs—it's often a sign of technical difficulty.</p>
 
</blockquote>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/energized_work.html">Energized Work</a></dd></dl><p>Expect to feel tired at the end of the day.  Pairs typically feel that they have worked harder and accomplished more than when working alone. Practice energized work to maintain your ability to pair every day.</p>

<h3>Driving and Navigating</h3>

<blockquote class="coach">Pairing will feel natural in time.</blockquote>

<p>When you start pairing, expect to feel clumsy and fumble-fingered as you drive. You may feel that your navigator sees ideas and problems much more quickly than you do.  She does—navigators have more time to think than drivers do.  The situation will reverse when you navigate.  Pairing will feel natural in time.</p>

<p>When navigating, expect to feel like you want to step in and take the keyboard away from your partner.  Relax; your driver will often communicate an idea with both words and code.  He'll make typos and little mistakes—give him time to correct them himself.  Use your extra brainpower to think about the greater picture.  What other tests do you need to write?  How does this code fit into the rest of the system?  Is there duplication you need to remove?  Can the code be more clear?  Can the overall design be better?</p>

<p>As navigator, help your driver be more productive.  Think about what's going to happen next and be prepared with suggestions.  When I'm navigating, I like to keep an index card in front of me.  Rather than interrupting the driver when I think of an issue, I write my ideas on the index card and wait for a break in the action to bring them up.  At the end of the pairing session, I tear up the card and throw it away.</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/spike_solutions.html">Spike Solutions</a></dd></dl><p>Similarly, when a question arises, take a moment to look up the answer while the driver continues to work.  Some teams keep spare laptops on hand for this purpose.  If you need more than a few minutes, research the solution together.  Sometimes the best way to do so is to split up, pursue parallel lines of inquiry, and frequently come back together to share what you have learned.  Spike solutions are a particularly powerful approach.</p>

<p>As you pair, switch roles frequently—at least every half hour, and possibly every few minutes.  If you're navigating and find yourself telling the driver which keys to press, ask for the keyboard.  If you're driving and need a break, pass the keyboard off to your navigator.</p>

<blockquote class="sidebar"><h3>Pairing Tips</h3>
 
 <ul>
  <li><p>Pair on everything you'll need to maintain.</p></li>
  <li><p>Allow pairs to form fluidly rather than assigning partners.</p></li>
  <li><p>Switch partners when you need a fresh perspective.</p></li>
  <li><p>Avoid pairing with the same person for more than a day at a time.</p></li>
  <li><p>Sit comfortably, side-by-side.</p></li>
  <li><p>Produce code through conversation.  Collaborate, don't critique.</p></li>
  <li><p>Switch driver and navigator roles frequently.</p></li>
</ul>
 
</blockquote>

<h3>Pairing Stations</h3>

<p>To enjoy pair programming, good pairing stations are essential.  You need plenty of room for both people to sit side by side.  Typical cubicles, with a workstation located in a corner, won't work.  They're uncomfortable and require one person to sit behind another, adding psychological as well as physical barriers to peer collaboration.</p>

<p>You don't need fancy furniture to make a good pairing station; the best ones I've seen are just simple folding tables found at any good office supply store.  They should be six feet long, so that two people can sit comfortably side-by-side, and at least four feet deep.  Each table needs a high-powered development workstation.  I like to plug in two keyboards and mice so each person can have a set.</p>

<p>Splurge on large monitors so that both people can see clearly.  Some teams mirror the display onto two monitors, which makes things a little easier to see, but you may find yourself pointing to the wrong monitor.  Others prefer to spread one desktop across two monitors.</p>

<blockquote class="notetip">
 
 <p>For ideas about where to put the pairing stations, see "<a href="http://jamesshore.com/Agile-Book/sit_together.html">Sit Together</a>" in Chapter 6.</p>
 
</blockquote>

<h3>Challenges</h3>

<p>Pairing can be uncomfortable at first, as it may require you to collaborate more than you're used to.  These feelings are natural and typically go away after a month or two, but you have to face some challenges.</p>

<h4>Comfort</h4>

<p>It bears repeating: pairing is no fun if you're uncomfortable.  When you sit down to pair, adjust your position and equipment so you can sit comfortably.  Clear debris off the desk and make sure there's room for your legs, feet, and knees.</p>

<p>Some people (like me) need a lot of personal space.  Others like to get up close and personal.  When you start to pair, discuss your personal space needs and ask about your partner's.</p>

<p>Similarly, while it goes without saying that personal hygiene is critical, remember that strong flavors such as coffee, garlic, onions, and spicy foods can lead to foul breath.  Decide as a team, <em>before</em> any issues come up, how to notify people of challenging personal habits respectfully.</p>

<h4>Mismatched Skills</h4>

<p>Pairing is a collaboration between peers, but sometimes a senior developer will pair with a junior developer.  Rather than treating these occasions as student/teacher situations, restore the peer balance by creating opportunities for both participants to learn.  For example, if you know you'll be pairing with a junior developer, you could ask him to research a topic that no one else knows, such as the inner workings of a library that the team depends on.  Give everyone a chance to be an expert.</p>

<h4>Communication Style</h4>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/test_driven_development.html">Test-Driven Development</a></dd></dl><p>New drivers sometimes have difficulty involving their partners; they can take over the keyboard and shut down communication.  To practice communicating and switching roles while pairing, consider <em>ping-pong pairing</em>.  In this exercise, one person writes a test.  The other person makes it pass and writes a new test.  Then the first person makes it pass and repeats the process by writing another test.</p>

<p>The flip side of too little communication is too much communication—or rather, too much blunt communication.  Frank criticism of code and design is valuable, but it may be difficult to appreciate at first.  Different people have different thresholds, so pay attention to how your partner receives your comments.  Try transforming declarations (such as "This method is too long") into questions or suggestions ("Could we make this method shorter?" or "Should we extract this code block into a new method?").  Adopt an attitude of collaborative problem solving.</p>

<h4>Tools and Keybindings</h4>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/coding_standards.html">Coding Standards</a></dd></dl><p>Even if you don't fall victim to the endless <code>vi</code> versus <code>emacs</code> editor war, you may find your coworkers' tool preferences annoying.  Try to standardize on a particular toolset.  Some teams even create a standard image and check it into version control.  When you discuss coding standards, discuss these issues as well.</p>

<h3>Questions</h3>

<h4 class="faq">Isn't it wasteful to have two people do the work of one?</h4>

<p>In pair programming, two people aren't really doing the work of one.  Although only one keyboard is in use, there's more to programming than that.  As Ward Cunningham said, "If you don't think carefully, you might think that programming is just typing statements in a programming language."<sup>2</sup>  In pair programming, one person is programming and the other is thinking ahead, anticipating problems, and strategizing.</p>

<p class="aside"><sup>2</sup>http://en.wikiquote.org/wiki/Ward_Cunningham, accessed 12 December 2006.</p>

<p>If you're looking for hard data, [Williams] has a chapter on pairing research.  Keep in mind that the number of variables in software development make it notoriously difficult to conduct large-scale controlled studies.  Sometimes the best way to know whether something will work for your team is just to try it.</p>

<h4 class="faq">How can I convince my team or organization to try pair programming?</h4>

<p>Ask permission to try it as an experiment.  Set aside a month in which everyone pairs on all production code.  Be sure to keep going for the entire month, as pair programming may be difficult and uncomfortable for the first few weeks.</p>

<p>Don't just ask permission of management; be sure your fellow team members are interested in trying pairing as well.  The only programmers I know who tried pairing for a month and didn't like it are the ones who were forced to do it against their will.</p>

<h4 class="faq">Do we really have to pair program all the time?</h4>

<p>This is a decision that your whole team should make together.  Before you decide, try pairing on all production code (everything you need to maintain) for a month.  You may enjoy it more than you expect.</p>

<p>Regardless of your rule, you will still produce code that you don't need to maintain.  (Spike solutions are one example.)  These may benefit from individual study.</p>

<blockquote class="coach">If you're bored while pairing, consider how you can make your design less repetitive.</blockquote>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/simple_design.html">Simple Design</a></dd></dl><p>Some production tasks are so repetitive that they don't require the extra brainpower a pair provides.  Before abandoning pairing, however, consider why your design requires so much repetition.  It could be an indication of a design flaw.  Use the navigator's extra time to think about design improvements and consider discussing it with your whole team.</p>

<h4 class="faq">How can I concentrate with someone talking to me?</h4>

<p>When you navigate, you shouldn't have too much trouble staying several steps ahead of your driver.  If you do, ask your driver to think out loud so you can understand her thought process.</p>

<p>As driver, though, you may sometimes find that you're having trouble concentrating.  Let your navigator know—she may have a suggestion that will help you get through the roadblock.  At other times, you may just need a few moments of silence to think through the problem.</p>

<blockquote class="coach">If you have trouble concentrating, try taking smaller steps.</blockquote>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/test_driven_development.html">Test-Driven Development</a></dd></dl><p>If you find yourself in this situation a lot, you may be taking steps that are too large.  Use test-driven development and take very small steps.  Rely on your navigator to keep track of what you still need to do (tell him if you have an idea; she'll write it down) and focus only on the few lines of code needed to make the next test pass.</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/spike_solutions.html">Spike Solutions</a></dd></dl><p>If you are working with a technology you don't completely understand, consider taking a few minutes to work on a spike solution.  You and your partner can work on this together or separately.</p>

<h4 class="faq">What if we have an odd number of programmers?</h4>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/exploratory_testing.html">Exploratory Testing</a></dd></dl><p>A programmer flying solo can do productive tasks that don't involve production code.  She can research new technologies, or learn more about a technology the team is using.  She can pair with a customer or tester to review recent changes, polish the application, or do exploratory testing.  She could be the team's batman (see "<a href="http://jamesshore.com/Agile-Book/iteration_planning.html">Iteration Planning</a>" in Chapter 8).</p>

<p>Alternatively, a solo programmer may wish to spend some time reviewing the overall design—either to improve his own understanding, or to come up with ideas for improving problem areas.  If a large refactoring is partially complete, the team may wish to authorize a conscientious programmer to finish those refactorings.</p>

<p>If your team is on the smaller side, you may run out of useful solo tasks.  In this case, consider relaxing the "no production code" rule or bringing in another programmer.</p>

<h4 class="faq">There are only two (or three) of us.  Should we still pair all the time?</h4>

<p>Even a saint will get on your nerves if you have to pair with him day-in, day-out.  Use your own judgment about when to pair and when you need time to yourself.  If you feel fine but your pair is getting cranky, don't escalate; just say <em>you're</em> tired and need a break.</p>

<p>I pair-programmed with the same person for three months straight during a two-person project.  I think it helped that we had a large office and a big desk: it gave us room to move around.  We also kept a mini-fridge stocked with goodies.</p>

<p>Even with these comforts, I had my cranky moments. Perhaps the most important factor was that my partner was a very laid-back, easy-going person who put up with my occasional bad mood.</p>

<h4 class="faq">We get engrossed in our work and forget to switch pairs.  How can we encourage more frequent pair switching?</h4>

<p>One approach is to remember that you can switch when you feel stuck or frustrated.  In fact, this is a perfect time to switch partners and get a fresh perspective.</p>

<p>Some teams use kitchen timers to switch partners at strictly defined intervals.  [Belshee] reports interesting results from switching every ninety minutes.  While this could be a great way to get in the habit of switching pairs, make sure everybody is willing to try it.</p>

<h4 class="faq">How can we pair remotely?</h4>

<p>You can use a phone headset and a desktop sharing tool such as VNC or NetMeeting to pair remotely.  I have heard of teams who use individual workstations with shared <code>screen</code> sessions and VoIP applications.</p>

<p>When I tried this, I found it to be a poor substitute for pairing in person.  XP teams usually sit together, so remote pairing isn't often necessary.</p>

<h3>Results</h3>

<p>When you pair program well, you find yourself focusing intently on the code and your work with your partner.  You experience fewer interruptions and distractions.  When interrupted, one person deals with the problem while the other continues thinking.  Afterward, you slide back into the flow of work immediately.  At the end of the day, you feel tired yet satisfied.  You enjoy the intense focus and the camraderie of working with your teammates.</p>

<p>The team as a whole enjoys higher quality code.  Technical debt decreases.  Knowledge travels quickly through the team, raising everyone's level of competence and helping to integrate new team members quickly.</p>

<h3>Contraindications</h3>

<p>Pairing requires a comfortable work environment (see "<a href="http://jamesshore.com/Agile-Book/sit_together.html">Sit Together</a>" in Chapter 6 for design options).  Most offices and cubicles just aren't set up that way.  If your workspace doesn't allow programmers to sit side-by-side comfortably, either change the workspace or don't pair program.</p>

<p>Similarly, if your team doesn't sit together, pairing may not work for you.  Although you can pair remotely, it's not as good as in-person.</p>

<p>Programmer resistance may be another reason to avoid pairing.  Pairing is a big change to programmers' work styles and you may encounter resistance.  I usually work around this by asking people to try it for a month or two before making a final decision.  If they still resist, you're probably better off avoiding pairing rather than forcing anyone to pair against their will.</p>

<h3>Alternatives</h3>

<p>Pairing is a very powerful tool.  It reduces defects, improves design quality, shares knowledge amongst team members, supports self-discipline, and reduces distractions; all without sacrificing productivity.  If you cannot pair program, you need alternatives.</p>

<p>Formal code inspections can reduce defects, improve quality, and support self-discipline.  However, my experience is that programmers have trouble including inspections in their schedules, even when they're in favor of them.  Pairing is easier to do consistently, and it provides feedback much more quickly than scheduled inspections.  If you're going to use inspections in place of pairing, add some sort of support mechanism to help them take place.</p>

<p>Inspections alone are unlikely to share knowledge as thoroughly as collective code ownership requires.  If you cannot pair program, consider avoiding collective ownership, at least at first.</p>

<p>If you'd still like to have collective code ownership, you need an alternative mechanism for sharing knowledge about the state of the codebase.  I've formed regular study groups  in which programmers meet daily for a timeboxed half-hour to review and discuss the design.</p>

<dl class="practice"><dt>Ally</dt><dd><a href="http://jamesshore.com/Agile-Book/energized_work.html">Energized Work</a></dd></dl><p>I'm not aware of any other tool that helps reduce distractions as well as pair programming does.  However, I find that I succumb to more frequent distractions when I'm tired.  In the absence of pairing, put more emphasis on energized work.</p>

<h3>Further Reading</h3>

<p><cite>Pair Programming Illuminated</cite> [Williams] discusses pair programming in depth.</p>

<p>"The Costs and Benefits of Pair Programming" [Cockburn &amp; Williams] reports on Laurie Williams' initial study of pair programming.</p>

<p>"Promiscuous Pairing and Beginner's Mind: Embrace Inexperience" [Belshee] is an intriguing look at the benefits of switching pairs at strict intervals.</p>

<p>"Adventures in Promiscuous Pairing: Seeking Beginner's Mind" [Lacey] explores the costs and challenges of promiscuous pairing.  It's a must-read if you plan to try Belshee's approach.</p>

<p><cite>Peer Reviews in Software: A Practical Guide</cite> [Wiegers] discusses formal inspections and peer reviews.</p>


<ul class="book_nav">
	<li>Next: <a href="http://jamesshore.com/Agile-Book/energized_work.html">Energized Work</a></li>
	<li>Previous: <a href="http://jamesshore.com/Agile-Book/thinking_intro.html">Chapter 5: Thinking</a></li>
	<li>Up: <a href="http://jamesshore.com/Agile-Book/thinking_intro.html">Chapter 5: Thinking</a></li>
</ul>

    
    
    <p><a href="http://jamesshore.com/Agile-Book/pair_programming.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/8dj5GAPQz_8" height="1" width="1" /></div></summary>
    <updated>2010-02-26T08:00:00Z</updated>
    <category term="/Agile-Book" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:36Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Agile-Book/pair_programming.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=342</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/2liD_OmBdt8/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">A Lingua Franca between the Three (or more) Amigos</title>
    <summary xml:lang="en">There were a couple dozen people who showed up at the Fool, last night, for my presentation on A ”Lingua Franca” to Ensure You Get the Right System.  I’d like to thank them all for coming and for such lively participation.
These are exciting times.  The tools of acceptance testing and behavior-driven development are progressing beyond [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>There were a couple dozen people who showed up at the Fool, last night, for my presentation on <a href="http://blog.gdinwiddie.com/wp-content/uploads/2010/02/LinguaFranca-Feb2010.pdf" title="slides from presentation">A ”Lingua Franca” to Ensure You Get the Right System</a>.  I’d like to thank them all for coming and for such lively participation.</p>
<p>These are exciting times.  The tools of acceptance testing and behavior-driven development are progressing beyond the domain of the techies.  They are entering the realm where they can help the Whole Team.<span id="more-342" /></p>
<p>Using these tools, or even better ones to come, the Three Amigos, Developer, Tester, and Business (and User Experience expert, and Manual Writer, and …), can invent their own shared language, specific to the system under development, to talk about what the system is supposed to do.  The acid test: that the Business representative feels comfortable reading the examples written in these terms and definitively say, “Yes, that’s what I mean” or not.</p>
<p>After the presentation, Uncle Bob Martin showed me the Given When Then capabilities he’s added to <a href="http://fitnesse.org/" target="_blank" title="Fitnesse home page">Fitnesse</a> since I last looked at it last fall.  Other tools mentioned included <a href="http://cukes.info/" target="_blank" title="Cucumber home page">Cucumber</a>, <a href="http://specflow.org/" target="_blank" title="SpecFlow home page">SpecFlow</a>, <a href="http://jbehave.org/" target="_blank" title="JBehave home page">JBehave</a>, <a href="http://www.easyb.org/" target="_blank" title="easyb home page">easyb</a>, <a href="http://code.google.com/p/givwenzen/" target="_blank" title="GivWenZen, perhaps obsoleted by additions to Fitnesse">GivWenZen</a>, <a href="http://c2.com/cgi/wiki?MoreliaViridis" target="_blank" title="description of Morelia Viridis on Ward's wiki">Morelia Viridis</a>, <a href="http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/See http://storyq.codeplex.com/" target="_blank" title="StoryQ">StoryQ</a>, and <a href="http://anotherdave.wordpress.com/2010/02/23/storevil-intro/" target="_blank" title="blog posting on StorEvil">StorEvil</a>.  I’m sure there’s more to come.  And, as we use these tools more and more, I’m sure that we’ll develop patterns beyond Given When Then and language specification tools beyond regular expressions.</p>
<p>Just remember, it’s not the technology that’s important.  It’s the communication between the Three (plus) Amigos.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=342&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/2liD_OmBdt8" height="1" width="1" /></div></content>
    <updated>2010-02-25T20:17:01Z</updated>
    <published>2010-02-25T20:15:37Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Customer Collaboration" />
    <category scheme="http://blog.gdinwiddie.com" term="Tools and Techniques" />
    <category scheme="http://blog.gdinwiddie.com" term="Communication" />
    <category scheme="http://blog.gdinwiddie.com" term="Testing" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/Large-Scale-Agile.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/UXm9fYnA_9Q/Large-Scale-Agile.html" rel="alternate" type="text/html" />
    <title>Large-Scale Agile</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>25 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p>There's been interest in "scaling Agile" since the beginning of the movement, but most of the early discussion was theoretical. There wasn't anybody doing Agile on a large scale at the time. Ron Jeffries summed up my early feelings on the subject perfectly on <a href="http://c2.com/cgi/wiki/Wiki?HundredPersonProject">the C2 Wiki</a>: "A hundred-person project is a ten-person project, with overhead." I dabbled with some of the challenging questions, such as how evolutionary architecture works in a multi-team environment, but I never tried to address the whole picture.</p>

<p>That's been changing. Agile has matured beyond the pilot project stage, and more companies are interested in rolling it out organization-wide. There's a genuine need for large-scale Agile that's continuing to grow, and even my smaller, entrepreneurial clients are facing the issue.</p>

<p>So I'm taking a second look at large-scale Agile systems. This essay shares some of my latest ideas. I've tried a lot of these ideas, but not as complete package, and none of them have the solid years of practice required to turn supposition into reliable recommendation.</p>


<h3>The Constraint</h3>

<p>When does Agile go from "normal" to "large-scale?" In my mind, it's the moment when you go from one intact team--that is, a cross-functional, co-located team that has the resources necessary to finish the job--to multiple interdependent teams. As a practical matter, this happens once you need more than ten to twenty people on a project. You can fudge along with modified "single team" practices up until <a href="http://martinfowler.com/articles/planningXpIteration.html">about fifty people</a>, but it becomes increasingly unwieldy. By the time you reach 100 people, even modified "single team" approaches break down.</p>

<p>Why ten? According to my colleague <a href="http://www.futureworksconsulting.com/">Diana Larsen</a>, the optimum size for a team is "seven plus or minus two." Once a team gets much larger than that, it starts breaking down into sub-teams. Even if they're all part of the same "team" on paper, the people form cliques and stop working as a single unit. You end up with multiple interdependent teams whether you admit it or not.</p>

<p>Now, you can certainly have multiple interdependent teams with less than ten people. This is the de-facto result of having a multi-location "team" unless you're very, very careful. But it's not optimal. Coordinating those teams adds a lot of overhead and opportunities for error. That's why I recommend creating intact teams when you can.</p>

<p>One last thing: there's no need for the cost and waste of large-scale Agile if your teams aren't interdependent. If you have five ten-person teams, each working on a separate product, with no shared code or other resources, then they're not interdependent. You can be quite successful with five normal Agile teams. It's once those teams start collaborating on a single product suite, or trying to re-use each others' code, or otherwise depend on each other to get the job done, that the need for large-scale Agile arises.</p>


<h3>Collected Wisdom</h3>

<p>There isn't a lot out there on large-scale Agile. There's a lot of interest in the subject, but no approach that's risen to prominence. The closest thing we have is Scrum's "Scrum of Scrums" idea, which is essentially a second (and possibly third) level of Daily Scrums which includes one representative from each team.</p>

<p>"Scrum of Scrums" seems fine for sharing status and engaging in light coordination, but in typical Scrum fashion it's silent on the tough details. It doesn't discuss how you address architectural issues, how you plan the work, or even how to divide work among teams. The folks I've talked to who have experience with Scrum of Scrums said it wasn't sufficient on its own.</p>

<p>Other than Scrum of Scrums, I haven't seen any consensus around large-scale Agile techniques. Most of the discussions get side-tracked by the politics and constraints of large organizations and end up focusing on how to water down Agile ideas to make them more palatable. A particularly common subset is "distributed Agile," often in regards to constructing a single team from people in multiple locations.</p>

<p>That's not really large-scale Agile. It's <a href="http://jamesshore.com/Blog/Stumbling-Through-Mediocrity.html">mediocre small-scale Agile</a> repeated many times. Not what I'm looking for.</p>


<h3>The Ideas</h3>

<p>Maybe there are brilliant ideas out there that I've missed. If so, please let me know. In the absense of anything else, though, I've put together my own package of ideas. (Brilliance optional.) As usual when I modify an Agile method, these ideas are inspired by Agile values and principles more than existing practices. In this case, I found myself gravitating towards Lean principles, first introduced to the Agile community by the Poppendiecks in <cite>Lean Software Development</cite>.</p>

<p>I started with <a href="http://jamesshore.com/Blog/Kanban-Systems.html">Kanban</a>. Kanban's an up-and-comer in the Agile community, but the popular implementation of it bothers me. It's heavily phase-based and typically ignores what the Agile community has learned about simultaneous phases.</p>

<p>At the recent Agile Open Northwest conference, I realized my core objection: Kanban enthusiasts are using it to manage the work of the team, a problem that the Agile community has already solved. Instead, they should be thinking of the team as a Lean work cell, and use Kanban to solve the hard problem: managing the interaction between teams!</p>

<p>That realization was the seed for my large-scale Agile ideas. I filled it out with other ideas that have been germinating for years. Here's the whole package:</p>

<ol>
	<li>Create High-Performance Work Cells</li>
	<li>Use Kanban to Manage Cross-Team Workflow</li>
	<li>Manage the Portfolio With a Dedicated Team</li>
	<li>Use Bounded Contexts to Minimize Dependencies</li>
	<li>Monitor the System Using Lean Techniques</li>
	<li>Sacrifice Reuse in Favor of Throughput</li>
	<li>Keep Communication Flowing With Scrums of Scrums</li>
</ol>
 

<h3>1. Create High-Performance Work Cells</h3>

<p>One of the key ideas of Lean is "one-piece flow." The goal is to take one car, or widget, or whatever entirely from start to finish without accumulating any inventory between steps. This has numerous benefits, including higher quality, higher throughput, and lower inventory. In practice, it's not possible to have the entire resources of a factory focused on just one widget. But that's the goal.</p>

<p>To this end, Lean has the concept of the work cell. In a work cell, an operator takes a piece of work from one machine to the next until it's been processed by all of the machines in the cell. This is quite a contrast to the traditional assembly line approach where each person operates just one machine all the time and inventory piles up between machines. Jeffrey Liker explains why:</p>

<blockquote>
	<p>When you link operations together in a one-piece flow, your entire cell goes down if any one piece of equipment fails. You sink or swim together as a unit. So why not have some inventory to make life more comfortable? Because whether it is a pile of material or a virtual pile of information waiting to be processed, <em>inventory hides problems and inefficiencies</em>. Inventory enables the bad habit of not having to confront your problems. If you don't confront your problems, you can't improve your process. One-piece flow and continuous improvement (<em>kaizen</em>) go hand in hand!</p>
	<p class="sig">Jeffrey Liker, <cite>The Toyota Way</cite></p>
</blockquote>

<p>The Lean work cell maps almost perfectly to the Agile idea of the cross-functional, co-located team using simultaneous phases. Rather than using the phase-based approach of handing off responsibility from group to group (requirements, then design, then coding, then test), an Agile team takes responsibility for one or two features at a time and works on them as a whole until they're done.</p>

<p>So the foundation of my approach to large-scale Agile is the high-performance Agile team, or work cell. Rather than water down Agile to fit in a large organization, I expect the work cell to use the same <a href="http://jamesshore.com/Agile-Book/">rigorous Agile practices</a> normal Agile teams do, and to produce the same high-quality, potentially-shippable results.</p>


<h3>2. Use Kanban to Manage Cross-Team Workflow</h3>

<p>Kanban has attracted a lot of attention lately in the Agile world, but I think the attention is misplaced. Kanban enthusiasts are using it to manage the work of the <em>team</em>, which ironically adds process steps and <em>increases</em> inventory over using the "work cell" approach I described above.</p>

<p>On the other hand, Kanban is a great way of coordinating work between <em>multiple</em> teams. I've found it to be a useful way of managing the backlog of a single Agile team. For large-scale Agile systems, the parallels with Lean are even stronger.</p>

<p>In this approach, "features" (or stories) are the unit of work. Each team gets a single backlog with a strict size limit that operates as their input buffer. When the team is ready to work on something new, they take the next item off of the backlog, work on it until it's done, and then deliver it to whichever team requested it. Teams should work on just a few features at a time--preferably, only one.</p>

<p>When there's a cross-team dependency, you can use feature cards to create a pull system. When a team gets a new feature, they take a look at it to see if the work has any dependencies on another team. If it does, they deliver the card to the other team. If the other team doesn't have room for the work, the card waits in the first team's backlog, taking up space, until the other team is ready for it.</p>

<blockquote class="notetip">
	<p>For example, imagine a large-scale Agile system at Motokia, a fictional cell phone manufacturer. One of the teams in the system is the S42 Web Browser team. They're responsible for the web browser that's shipped with the Motokia S42 smartphone.</p>
	
	<p>Assume the S42 Web Browser team receives a feature card that says, "Support tabbed browsing." In order to do that, they need the Mobile Sachromafox Web Engine team to implement support for multiple tabs. They take the card, walk over to the Mobile Sachromafox Web Engine team's shared workspace, and discuss it with them. The Web Engine team takes it and a week later (or whatever), the S42 Web Browser team gets the card back, along with a new build of the engine they need.</p>
</blockquote>


<h3>3. Manage the Portfolio with a Dedicated Team</h3>

<p>At the very front (or back, depending on how you look at it) of the workflow is the Product Portfolio Team. This team is a work cell, too--it's a colocated, cross-functional, intact team consisting of product managers, business experts, UX designers, architects, developers, testers, and anyone else needed. Their job is to craft the big picture ideas (like "provide a high performance, compelling mobile web browser that blows away the competition") and make sure they come together smoothly. They're the ones that push the "ship it" button.</p>

<ul>
	<li><strong>Product managers</strong> on the team come up with the big ideas and prioritize them.</li>

	<br /><li><strong>Product managers, business experts, and UX designers</strong> break the big ideas down into specific features and parcel out those features to various teams. They also provide direction on how those features should work and how they come together into a compelling whole.</li>

	<br /><li><strong>Developers and testers</strong> perform ongoing integration development and testing as various teams come back with their components.</li>

	<br /><li><strong>Architects</strong> float from team to team providing big-picture guidance, sharing patterns and lessons learned, and looking for opportunities for re-use. They also keep an eye on the flow of work-in-progress and provide insight into staffing levels, bounded contexts, and how to divide responsibilities among teams.</li>
</ul>

<blockquote class="notetip">
	<p>To continue the example, let's assume that Motokia's large-scale Agile system is dedicated to smartphone development. They're responsible for the development of three phones: the Motokia S42, the Motokia B52, and the Motokia K9 (for when you really need to email your pet). At the front of the system's workflow is the Motokia Smartphone Portfolio Team.</p>
	
	<p>The portfolio team decides that, in order to remain competitive, they need a high-performance, compelling mobile web browser across the entire smartphone line. They break this idea down into specific features, such as "pages display before they finish downloading," "tabbed browsing," "high-performance Javascript," "integration with email," and hand them off to the Motokia S42 team, the Motokia B52 team, and the Motokia K9 team. As the features come back from the various smartphone teams, the portfolio team confirms that they work consistently with each other and does any other integration work needed.</p>
	
	<p>Meanwhile, the portfolio team's architects each go join the other teams in the large-scale Agile system for a few weeks at a time. They check back with each other frequently to share information about roadblocks, challenges, and insights, and take what they learn back to individual teams. They also discuss how responsibilities have been divided between the teams, such as the decision to have a shared Mobile Sachromafox Web Engine team, and keep an eye out for bottlenecks and opportunities for improvement in the overall system.</p>
</blockquote>


<h3>4. Use Bounded Contexts to Minimize Dependencies</h3>

<p>The more dependencies between teams, the more hand-offs. The more hand-offs, the greater the opportunity for delay and error. These delays and errors are the reason large-scale Agile systems are so much more wasteful than individual Agile teams. Minimizing the number of dependencies is critical to reducing waste.</p>

<p>My favorite technique for managing dependencies between teams is the <em>bounded context</em>. The term comes from Eric Evans' excellent book, <cite>Domain-Driven Design</cite>. It's part of a discussion of cross-team dependencies hidden away in Chapter 14.</p>

<p>To put it simply, a bounded context is a collection of code, database schema, and other artifacts that are managed as a single unit. <em>Within</em> the bounded context, changes to one part of the system are allowed to affect any other part of the system. Any part of the bounded context may be refactored, enhanced, or changed at any time, and everybody working within a bounded context is expected to be aware of what everyone else in that context is doing.</p>

<p><em>Between</em> bounded contexts, things are different. Communication can't be assumed, which means changes that affect other bounded contexts must be made carefully. To manage changes, bounded contexts might provide a published and versioned API, service level agreements, or formal specifications. Evans provides a good overview of the various ways bounded contexts can interact in Chapter 14 of <cite>Domain-Driven Design</cite>.</p>

<p>Bounded contexts allow large-scale Agile to retain the fluidity of normal Agile without running into an exponential communication problem as more people are added. Within bounded contexts, the normal Agile free-for-all takes place. Between bounded contexts, changes are made much more carefully and slowly.</p>

<p>So, where do you draw the boundaries? That's easy: bounded contexts correspond to Agile work cells--that is, teams. Every team gets a single bounded context. Sometimes a team might have several small bounded contexts, but you never share bounded contexts across teams. Agile teams have the pervasive communication necessary to manage a bounded context, and the work cell approach allows even a large team to share ownership of a single bounded context.</p>

<p>This does raise the question of how to partition the work among teams. That's the responsibility of the architects on the Product Porfolio Team, and it's a decision that will gradually evolve over time. As the architects consider this question, they should look for structures that have the fewest links between bounded contexts.</p>

<blockquote class="notetip">
	<p>Mobile Sachromafox consists of three major components: the Javascript interpreter, the layout engine, and the network layer. It's too much work for a single team, so the work has been split into two bounded contexts, each with its own team. The Javascript Engine team is responsible for the Javascript interpreter and the Web Engine team is responsible for layout and networking.</p>
	
	<p>As the Web Engine team does its work, they discover that their layout engine is too slow, and they engage in a huge refactoring effort to fix it. It ends up requiring changes to methods throughout their codebase.</p>
	
	<p>Nonetheless, the Web Engine team makes those changes without worrying about their impact on other teams. They have a published API that they provide to their clients (such as the S42 Web Browser team), and the layout engine's changes didn't require any changes to the API. They do identify some changes that they would like from the Javascript interpreter, but they have to put those changes off because they're not part of their bounded context.</p>
	
	<p>Clear boundaries allow the Web Engine team to make the rest of their changes quickly, secure in the knowledge that they have free reign to make the refactorings they need.</p>
</blockquote>


<h3>5. Monitor the System Using Lean Techniques</h3>

<p>A large-scale Agile system with dozens of interacting teams is quite a beast. Keeping track of what's happening seems like it would be difficult at best.</p>

<p>Lean techniques seem like the best fit to manage the complexity. Visual control, measuring throughput, and value-stream mapping all seem like good ideas. I'm sure more techniques will emerge with practice.</p>

<ul>
	<li><strong>Visual control</strong> means making progress and problems clearly visible. Fly a red flag above a team's shared workspace when they're blocked by another team. Monitor the number of days a team spends on a particular feature, and change the number from green to red once a certain threshold is reached. Use physical cards and whiteboards for team planning. Use kanban boards to show the flow of work between teams. And so on.</li>
	
	<br /><li><strong>Throughput</strong> is my favorite productivity metric. It seems particularly apt for the complexity of large-scale Agile. It's also very easy to measure: just track how long it takes for an idea to go from concept to cash--from initial idea to revenue in the door. Improvements in throughput reflect improvements to the overall system.</li>
	
	<br /><li><strong>Value-stream mapping</strong> is a useful technique for finding waste in a system and identifying opportunities to improve throughput. The Poppendiecks explain it well in their book <cite>Lean Software Development</cite>; in summary, you document the progress of a typical feature through the system, from concept to cash, keeping track of the amount of time spent adding value versus the amount of time wasted in waiting or rework.</li>
</ul>

<p>Another Lean concept is the idea of <em>takt time</em>, which is the maximum time allowed to produce a unit in order for things to finish on schedule. In Lean systems, it becomes the heartbeat of the operation. Takt time seems like a good concept for large-scale Agile, but I'm not sure how to fit it in.</p>


<h3>6. Sacrifice Reuse in Favor of Throughput</h3>

<p>Large-scale Agile systems are likely to create more duplicate code than normal Agile teams, because there's so much code being created and it isn't possible for everyone to be aware of everything that's going on. Part of the role of the architects on the Product Portfolio Team is to identify when code needs to be made reusable.</p>

<p>Be careful, though. In <cite>The Mythical Man-Month</cite>, Fred Brooks estimated that making code reusable <em>tripled</em> its cost of development. Technology has changed a lot since Dr. Brooks wrote that article, but reuse still isn't free. In addition, the reusable software will form a new bounded context that will likely need its own team for ongoing enhancements and support. Users of the code won't be able to make changes when they need to. Instead, they'll have to make a hand-off to the other team and wait for the change, which increases delay and error. Even the team that originally developed the code will likely slow down, because the component will now be outside of their bounded context too.</p>

<p>These hand-offs mean that extracting a component for reuse by multiple teams can actually degrade throughput. As a result, the threshold for reuse in a large-scale Agile system should be much higher than it is on a normal Agile team. Track throughput and use this information to help guide, and even reverse, your decisions about when to reuse code and when to permit duplicate work.


</p><h3>7. Keep Communication Flowing with Scrums of Scrums</h3>

<p>I haven't used a Scrum of Scrums myself, but I can see its value in keeping teams in touch with each other. In the large-scale Agile system I'm proposing, the Scrum of Scrums would play out a little differently than described in the Scrum literature. Rather than using a Scrum of Scrums coordinate all of the teams, I would ask teams to create a Scrum of Scrums among the teams that have dependencies on each other. A large-scale Agile system might end up with multiple Scrums of Scrums.</p>

<blockquote class="notetip">
	<p>For example, the Mobile Sachromafox Web Engine team might form a Scrum of Scrums with the Javascript Engine team and the various web browser teams (the S42 Web Browser team, the B52 Web Browser team, and the K9 Web Browser team). Those teams form a web of dependencies and need to be aware of what each of the others are doing.</p>
	
	<p>At the same time, other teams would form independent but overlapping Scrums of Scrums. The S42 Web Browser team could form a Scrum of Scrums with all of the other S42 application teams, and the S42 Smartphone team might form a Scrum of Scrums with the Product Portfolio Team and the other top-level smartphone teams.</p>
</blockquote>


<h3>Putting It Together</h3>

<p>These ideas need further experimentation to see how they play out in practice. I've tried most of these ideas in one form or another on real projects, but this is the first time I've put them together as I describe here. It's my experience that every new process idea has hidden flaws that only get revealed when you put it into practice. I'm sure that's true of these ideas, too. I like to try my ideas in at least three different organizations, refining them over the course of several years, before I'm comfortable that they're as good as they look.</p>

<p>Unfortunately, large-scale Agile implementations are hard to come by. If you have one, I hope you'll give these ideas a try. And if you'd like me to come by and try them out with you, I'd love the opportunity. These theories need to be tempered in the crucible of experience. Let me know how they work for you.</p>

    
    
    <p><a href="http://jamesshore.com/Blog/Large-Scale-Agile.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/UXm9fYnA_9Q" height="1" width="1" /></div></summary>
    <updated>2010-02-25T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:35Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/Large-Scale-Agile.html</feedburner:origLink></entry>

  <entry>
    <id>tag:martinfowler.com,2010-02-24:-IT---more-than-Tools-and-Technology--track-at-QCon-London</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/fG_1hnzgOvU/201002241234.html" rel="alternate" type="text/html" />
    <title>"IT - more than Tools and Technology" track at QCon London</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’ve been a regular speaker at the QCon and JAOO conferences over the last few years. At <a href="http://qconlondon.com/london-2010/schedule/thursday.jsp">QCon London</a> this year, I’m involved in a somewhat off-beat track of talks. Software Developers have often had a habit of focusing primarily on the mechanics of developing software well, and not thinking much about the societal value of that software. This is a common strand in many professions, but as the influence of software development grows, I feel it’s increasingly important that we get more engaged in the consequences of the software we build.</p>

<p>This track is a chance to explore some of these issues. As well as myself, there are talks about some work done with UNICEF to make effective use technology in much poorer parts of the world, the role of IT in reducing carbon footprint, and the contribution of team diversity to innovation.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/fG_1hnzgOvU" height="1" width="1" /></div></content>
    <updated>2010-02-24T17:34:00Z</updated>
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/snips/201002241234.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-2545072858152620666</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/PoChpXILDFw/theres-more-to-done-than-green-dot.html" rel="alternate" type="text/html" />
    <title>There's more to done than the green dot</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">So you're working on a user story with your pair, developing <a href="http://blog.energizedwork.com/2007/10/vertical-slicing.html">vertical slices</a> and getting feedback from the tester and customer as you progress. You're ticking off the acceptance criteria as they're satisfied by the emerging functionality. Awesome! Everything is tickety-boo. Then the customer realizes that something is missing and asks for that something to be incorporated into the card. What do you do?<br /><br />You could just refuse and ask him to write a new story and prioritize it accordingly. You could say yes, have a discussion, write the new acceptance criteria on the back of the card and carry on. Some people say no because the additional work will exceed the original estimate for the story. Some people say no because they won't be able to finish the story with the new criteria by the showcase and the card will <a href="http://blog.energizedwork.com/2005/12/slop-and-slack.html">slop</a>.<br /><br />I used to say slop was bad. I stopped saying that some time ago when I started to focus on limiting work-in-process.<br /><br />I can't say what the right thing to do is because situations are different. I do say that the discussion with the customer must happen so that everyone involved understands, quite simply, whether the story will make more sense for users and provide them with greater value if the additional something is included. Perhaps the customer is pushing his luck. Or maybe he's got a point.<br /><br />I always say stories are an invitation to a conversation. In the last year we've started to frame these conversations in the context of users because we've been using iteration to explore interaction designs and improve user experiences. Given the users' perspective, I came to realize that stories are also a journey taken with the customer to explore options and learn more about users. It's easy to write  acceptance criteria but it's difficult to express what user experience will really work until we see a few different ones (and ideally validate them with real users). As a result, I am seeing more conversations where the customer or designers want to add something to a story when it's in play. I believe this to be a good thing providing the discussion happens and everyone agrees that the resultant delivery will be better for users.<br /><br />The goal is about users and satisfying their needs, delighting them if possible with every story delivered. There's context, a bigger picture, a system and that involves how the users interact with it. It's not about velocity, estimates or slop. And it's not about ticking off the acceptance criteria and getting the green dot. That's all just process.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-2545072858152620666?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/1uRaOToCEws" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/PoChpXILDFw" height="1" width="1" /></div></summary>
    <updated>2010-02-23T23:45:41Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/02/theres-more-to-done-than-green-dot.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/1uRaOToCEws/theres-more-to-done-than-green-dot.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://jamesshore.com/Blog/Im-Not-Dead.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/kOjelNA4Ia8/Im-Not-Dead.html" rel="alternate" type="text/html" />
    <title>I'm Not Dead</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" width="100%">
      <tbody><tr>
        <td align="left">
          <b>23 Feb 2010</b>
        </td>
        <td align="right">
          <i> <a href="http://jamesshore.com/Blog/">James Shore/Blog</a> </i>
        </td>
      </tr>
    </tbody></table>
  
    
    
      
<p>Just to set the record straight: I'm not the James Shore who died in a sweat lodge in Arizona. (My condolences to his family.) This news has been at the top of Twitter and Google searches for my name for several months now, so I figured I should probably say something.</p>

<p>Better luck next time.</p>

    
    
    <p><a href="http://jamesshore.com/Blog/Im-Not-Dead.html#comments">Comments</a><a /></p><p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/kOjelNA4Ia8" height="1" width="1" /></div></summary>
    <updated>2010-02-23T08:00:00Z</updated>
    <category term="/Blog" />
    <source>
      <id>http://jamesshore.com</id>
      <author>
        <name>James Shore</name>
      </author>
      <link href="http://jamesshore.com" rel="alternate" type="text/html" />
      <link href="http://www.jamesshore.com/Blog/index.rss" rel="self" type="application/rss+xml" />
      <rights>Copyright 2000-2006, James Shore</rights>
      <subtitle>The Art of Agile</subtitle>
      <title>James Shore</title>
      <updated>2010-03-10T17:17:36Z</updated>
    </source>
  <feedburner:origLink>http://jamesshore.com/Blog/Im-Not-Dead.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/02/agile-quick-links-9.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/wxdgmbaqIw4/agile-quick-links-9.html" rel="alternate" type="text/html" />
    <title>Agile Quick Links #9</title>
    <summary>Thanks for reading the 9th Agile Quick Links.
Shu-Ha-Ri comes from the Japanese Martial Art of Akido. Roughly speaking it equates to:

Shu – learning the basics, repeating movements and following commands without questioning. 
Ha – breaking with tradition, finding exceptions, asking questions. 
Ri – transcendence – there are no longer individual techniques or practices, instead everything [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.agilepainrelief.com/images/WindowsLiveWriter/AgileQuickLinks9_8EC4/image.png"><img align="right" alt="image" border="0" height="103" src="http://www.agilepainrelief.com/images/WindowsLiveWriter/AgileQuickLinks9_8EC4/image_thumb.png" style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px;" title="image" width="240" /></a>Thanks for reading the 9th Agile Quick Links.</p>
<p>Shu-Ha-Ri comes from the Japanese Martial Art of Akido. Roughly speaking it equates to:</p>
<ol>
<li><strong>Shu</strong> – learning the basics, repeating movements and following commands without questioning. </li>
<li><strong>Ha</strong> – breaking with tradition, finding exceptions, asking questions. </li>
<li><strong>Ri</strong> – transcendence – there are no longer individual techniques or practices, instead everything can flow.</li>
</ol>
<p>This progression has often been used in the Agile Community to remind people not to question or alter the basic practices when they’re still learning to become Agile. <em>(Thanks to Alistair Cockburn for introducing us to the idea in his book: </em><a href="http://www.amazon.com/gp/product/0321482751?ie=UTF8&amp;tag=notesfromatoo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321482751">Agile Software Development: The Cooperative Game</a><em>).</em> Rachel Davies has recently come across some harmful uses of the idea and talks about them in: <a href="http://agilecoach.typepad.com/agile-coaching/2010/02/shuhari-considered-harmful.html" target="_blank">Shu-Ha-Ri Considered Harmful?</a> <em>I don’t entirely agree with Rachel but that will be the subject another blog post.</em></p>
<p> <span id="more-888" />
</p><p>Mishkin Bertieg, Agile Trainer, has been creating OpenAgile a new Agile Methodology: <a href="http://feeds.feedburner.com/Comparison of OpenAgile with Scrum" target="_blank">Comparison of OpenAgile with Scrum</a>.</p>
<p>Chris Matts and Olav Maassen (the Real Options guys), use a comic to explain how <a href="http://decision-coach.com/real-options-and-black-scholes/" target="_blank">Real Options work with Blacl Sholes</a> (hint they don’t). BTW to make sense of this comic you need to have a good understanding of <a href="http://decision-coach.com/lean-and-real-options/" target="_blank">Real Options</a>.</p>
<p>En Francias: <a href="http://focusintelligence.ca/2010/02/18/l%E2%80%99extremisme-agile/" target="_blank">AGILE n’est pas un DOGME!</a> – apparently there are still some trainers/coaches out there who think Agile is a religion.  Sad.</p>
<p>Cory Foy writes two thought provoking pieces about the state of the Scrum Alliance: <a href="http://blog.coryfoy.com/2010/02/they-could-have-been-contenders/">They Could Have Been Contenders</a> and <a href="http://blog.coryfoy.com/2010/02/but-if-the-scrum-alliance-cant-do-it-who-will/">..but if the Scrum Alliance Can’t Do It, Who Will?</a>. I don’t know enough about the politics of the Scrum Alliance to comment on the first piece although I did write about this last year: “<a href="http://www.infoq.com/news/2009/05/scrum_alliance_change" target="_blank">Opinion: Will the Scrum Alliance Change its Stripes?</a>”. Frankly the first step will be more openness and transparency.</p>
<p>Finally David Bland has another piece on the misuse of Velocity in Scrum/Agile: <a href="http://www.scrumology.net/2010/01/24/sizing-up-the-enterprise/" target="_blank">Sizing Up the Enterprise</a>.</p>
<p><em>Caveat Emptor – if you buy any of the books after clicking on my link I get 4% of the price. In all likelihood that means I might be able to afford a coffee or two.</em></p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/Tqsg1Is7aIc" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/wxdgmbaqIw4" height="1" width="1" /></div></content>
    <updated>2010-02-22T16:02:54Z</updated>
    <category term="Agile" />
    <category term="Links" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/02/agile-quick-links-9.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:41Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/Tqsg1Is7aIc/agile-quick-links-9.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-1381744320795392207</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/rwf0iFncCa0/how-we-use-stories.html" rel="alternate" type="text/html" />
    <title>How we use stories</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">All our work items, both user-focused and technical, are stories framed in the context of a user interacting with the product. Each story represents a distinct, visible and testable piece of work that can be delivered independently to realize some value. Stories exist at many levels of specificity and never convey solutions. For example, at a point in time it's sufficient to use an ambiguous story to describe an interaction as simply an activity a user engages in using the product. At some time later, typically when detail starts to matter, smaller stories are written to describe that activity in terms of more specific tasks the user performs with the product.<br /><br />Stories are written on index cards measuring 6 by 4 inches. A description of the user interaction is written in as few words as possible on the front of a card to provide a brief outline. This provokes conversations to reveal and understand the details, which are captured as acceptance criteria on the reverse side in the language of the user. The physical card serves as a token, exchanged amongst the team when different people work on the story. It also acts as a physical flag that shows others what's in progress and a story's history in terms of the feedback obtained so far from testing, user experience, etc. Different colored index cards are used for different types of user:<br /><br />1. Business and end users<br /><ul><li>White cards describe stories written for business and end users.</li><li>Green cards describe user experience stories that need to be completed ahead of time and in just enough detail, e.g. using low fidelity prototypes or design mock-ups, to facilitate an iterative approach and provide useful input to the corresponding white cards.</li><li>Pink cards describe defects from the users' perspective and include the steps to reproduce on the back. We never debate whether something is a defect or not, we just ask the product owner.</li></ul><br />2. System and technical users<br /><ul><li>Yellow cards describe stories written for technical users, e.g. a system administrator operating and supporting the product, or for discrete system engineering work such as scalability and resilience.</li></ul><br />3. Technical debt<br /><ul><li>Blue cards describe stories written for developers, who are considered users of the system at an engineering level.  They describe technical debt in system and software terms and include acceptance criteria on the back so the developers know when they're done.</li></ul><br />The size of a story isn't important until it's planned and prepared, ready to be implemented.<br /><br /><span style="font-weight: bold;">Developing the product iteratively</span><br /><br />Using iterative development we progressively refine and extend functionality already delivered. Over time a user task is sometimes revisited by any number of stories. Whenever possible we use a green card to build a paper prototype that allows us to evaluate interaction designs with users before developing any software. The first white card typically delivers very basic functionality that allows users to perform the task using the product. Feedback from users validates our assumptions and often initiates a new story to enhance the functionality or improve its performance and ease of use. Every story aims to improve the experience for the user based on their feedback to enable them to perform the task more efficiently or effectively.<br /><br />By delivering a minimal version of functionality early and then evolving it in response to user feedback, we remain receptive to discovery and keep our options open rather than committing prematurely to a specific user experience. This way we invest more wisely to deliver exactly what the users wants, and no more.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-1381744320795392207?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/S5mAfw5ooo8" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/rwf0iFncCa0" height="1" width="1" /></div></summary>
    <updated>2010-02-18T21:23:46Z</updated>
    <category term="user stories" />
    <category term="technical debt" />
    <category term="real options" />
    <category term="defects" /><feedburner:origLink>http://blog.energizedwork.com/2009/11/how-we-use-stories.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-02-26T12:17:11Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/S5mAfw5ooo8/how-we-use-stories.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/02/misuse-of-velocity-in-agile-projects.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/rrx1qwpHmjY/misuse-of-velocity-in-agile-projects.html" rel="alternate" type="text/html" />
    <title>Misuse of Velocity in Agile Projects</title>
    <summary>Like clockwork every month, someone on one of the Agile Mailing lists asks a question about “comparing velocity between teams” or “benchmarking data on velocity.” Before we examine the problem, let’s recheck what velocity is—the amount of work completed by the team/time taken to complete it. The amount of work is usually measured in [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.agilepainrelief.com/images/WindowsLiveWriter/MisuseofVelocityinAgileProjects_92C6/measure.jpg"><img align="left" alt="measure" border="0" height="174" src="http://www.agilepainrelief.com/images/WindowsLiveWriter/MisuseofVelocityinAgileProjects_92C6/measure_thumb.jpg" style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;" title="measure" width="240" /></a> </p>
<p>Like clockwork every month, someone on one of the <a href="http://agilepainrelief.com/notesfromatooluser/2009/06/agile-mailing-lists.html">Agile Mailing lists</a> asks a question about “comparing velocity between teams” or “benchmarking data on velocity.” Before we examine the problem, let’s recheck what velocity is—the amount of work completed by the team/time taken to complete it. The amount of work is usually measured in <a href="http://en.wikipedia.org/wiki/Story_points">Story Points</a> (a relative measure of size). So velocity is just the number of points the team completes in the average iteration/sprint.</p>
<p>The underlying point is that Agile/Scrum teams use relative estimation (i.e., is this story/feature bigger or smaller than our standard story?) vs. the traditional approach of absolute estimation. The problem with comparisons, benchmarking, or any other attempts to compare velocity is that my story points ≠ your story points, because different projects use different standard stories. They work in different problem domains, and they have different people. </p>
<p> <span id="more-879" />
</p><p>If we could compare velocities across a team, what would happen? Estimation of inflation. Team <strong>Better</strong> hears that Team <strong>Good</strong> has just finished their release planning meeting and estimated that they will achieve 200 points before the next release in 6 iterations/sprints. Immediately, Team <strong>Better</strong> knows it needs to produce more points and so estimates 300 points. Now along comes Team <strong>Best</strong>. . . .</p>
<p>To my mind, the real value of Velocity and Release planningis giving the Product Owner a good idea of what can be achieved before the next release. For one client, our release planning told us that the list of required features was roughly double the amount of time in the project budget. For first three iterations, the Product Owner denied reality but eventually the team’s actual velocity made it clear that trade-offs were required.</p>
<p>What matters far more than comparing velocity is whether each of the teams arrived at a common understanding of their work. After each iteration, has the team delivered value? Does the Product Owner always have a good idea of how much value has already been delivered and how much they can expect to be delivered?</p>
<p>Anytime you’re about to spend time and money on something, ask if the customer would be prepared to pay for that.</p>
<p />
<p>BTW I smell an Agile FAQ coming out of this and other questions.</p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/hJ0jXJ_mQt4" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/rrx1qwpHmjY" height="1" width="1" /></div></content>
    <updated>2010-02-18T20:24:53Z</updated>
    <category term="Agile" />
    <category term="Agile FAQ" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/02/misuse-of-velocity-in-agile-projects.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:40Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/hJ0jXJ_mQt4/misuse-of-velocity-in-agile-projects.html</feedburner:origLink></entry>

  <entry>
    <id>tag:blogger.com,1999:blog-5056996.post-7959287237924260744</id>
    <link href="http://www.blogger.com/feeds/5056996/7959287237924260744/comments/default" rel="replies" type="application/atom+xml" />
    <link href="http://www.estherderby.com/weblog/2010/02/13-essential-questions-for-managers.html#comment-form" rel="replies" type="text/html" />
    <link href="http://www.blogger.com/feeds/5056996/posts/default/7959287237924260744" rel="edit" type="application/atom+xml" />
    <link href="http://www.blogger.com/feeds/5056996/posts/default/7959287237924260744" rel="self" type="application/atom+xml" />
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/OzUnC7TXuxo/13-essential-questions-for-managers.html" rel="alternate" type="text/html" />
    <title>13 Essential Questions for Managers</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">We think of managers making decisions, setting priorities, organizing work, keeping budgets, and mentoring people.<br /><br />What we’ve overlooked or ignored is a manager’s role as designer. Managers are designers of the experience of work and of systems to produce valuable products.<br /><br />As designers, we need to answer 13 essential questions.<br /><br />1. How does the work really work?<br /><br />2. What information and tools do people need to do their work?<br /><br />3. How can we build feedback into the work so that people can find and fix their own mistakes quickly, and learn from them?<br /><br />4. How do we know when a chunk of work is done?<br /><br />5. What is the capacity of the team?<br /><br />6. How long does it take us to know if we are off track?<br /><br />7. How do structures affect people’s ability to accomplish their work?<br /><br />8. What message does our reward system send?<br /><br />9. What message do our policies and procedures send?<br /><br />10. What happens when people bring unwelcome news?<br /><br />11. How do my management actions affect people and work?<br /><br />12. What do I “know” that ain’t so?<br /><br />13. What do I know that I forget at work?<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/5056996-7959287237924260744?l=www.estherderby.com%2Fweblog%2Fblogger.html" width="1" /></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/OzUnC7TXuxo" height="1" width="1" /></div></content>
    <updated>2010-02-18T19:33:31Z</updated>
    <published>2010-02-18T19:32:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="management" />
    <category scheme="http://www.blogger.com/atom/ns#" term="leadership" />
    <author>
      <name>Esther Derby</name>
      <email>derby@estherderby.com</email>
      <uri>http://www.blogger.com/profile/06729210899814816620</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-5056996</id>
      <author>
        <name>Esther Derby</name>
        <email>derby@estherderby.com</email>
        <uri>http://www.blogger.com/profile/06729210899814816620</uri>
      </author>
      <link href="http://www.blogger.com/feeds/5056996/posts/default" rel="self" type="application/atom+xml" />
      <link href="http://www.estherderby.com/weblog/blogger.html" rel="alternate" type="text/html" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://www.blogger.com/feeds/5056996/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml" />
      <link href="http://www11.pair.com/estherd/weblog/RSS/blogger_rss.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" />
      <subtitle>"Poor management can increase software costs more rapidly than any other factor." (Barry Boehm)</subtitle>
      <title>esther derby's "insights you can use"</title>
      <updated>2010-03-02T15:25:51Z</updated>
    </source>
  <feedburner:origLink>http://www.estherderby.com/weblog/2010/02/13-essential-questions-for-managers.html</feedburner:origLink></entry>

  <entry xml:lang="en-us">
    <id>http://jimmynilsson.com/blog/posts/ItWorksBothWays.htm</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/xlTEFYezWtU/ItWorksBothWays.htm" rel="alternate" type="text/html" />
    <title>It works both ways</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
I've spent a good part of my career trying hard to better understand the businesses I'm developing software for, since that helps *a lot* in delivering more value. This is not anything 
I'm done with. On the contrary, it's something that I find increasingly important. You can't program what you don't understand. Period. 
<br /><br />
This works both ways. If a business person wants their software development projects to be more successful, it pays off immediately to show an interest in the projects, to get involved 
with them and learn more about software development and all the changed and rapidly changing rules. For instance, in order to be able to adjust a software project for the better, it 
helps if you understand what is going on so you know what you'd like to change.
</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/xlTEFYezWtU" height="1" width="1" /></div></summary>
    <updated>2010-02-18T16:20:00Z</updated>
    <source>
      <id>http://jimmynilsson.com/blog/</id>
      <author>
        <name>Jimmy Nilsson</name>
      </author>
      <link href="http://jimmynilsson.com/blog/" rel="alternate" type="text/html" />
      <link href="http://www.jnsk.se/weblog/rss.xml" rel="self" type="application/rss+xml" />
      <rights>Copyright 2008 by Jimmy Nilsson</rights>
      <title>Jimmy Nilsson's weblog</title>
      <updated>2010-02-18T16:20:00Z</updated>
    </source>
  <feedburner:origLink>http://jimmynilsson.com/blog/posts/ItWorksBothWays.htm</feedburner:origLink></entry>

  <entry xml:lang="en-us">
    <id>http://jimmynilsson.com/blog/posts/DriversForNOSQL.htm</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/EXEOnI5Wbpw/DriversForNOSQL.htm" rel="alternate" type="text/html" />
    <title>Drivers for NOSQL</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
About two years ago I gave a few presentations about how relational databases are facing more and more competition and that several factors indicate that we will be choosing other 
ways of storing data in the not too distant future. 
<br /><br />
The term NoSQL was created last year and has morphed into NOSQL lately (Not Only SQL). This trend is rapidly gaining strength. Below I have written down some of the drivers behind the 
NOSQL movement. Which ones are missing?

</p><ul>
<li>TDD and DDD</li>
For many, this changes the picture completely. The focus moves away from the storage technology.

<li>Application databases instead of integration database</li>
Then the storage technology that is used is a private concern of the service/application itself and the decision becomes less dramatic.

<li>Internet scale</li>
The need for scaling out is changing the scene for certain scenarios and eventual consistency is most often good enough.

<li>We don't need many of the common capabilities for certain applications/services</li>
And we just don't want to pay a high cost for impedance mismatch if we don't get other large benefits.

<li>Querying and analysis finally moves away from the production databases</li>
Just an example of one reason why we have less of a need for functionality in specific situations.

<li>Certain types of applications don't fit the relational model very well</li>
A classic example is "bill of materials". Nowadays social networks is an often mentioned example.

<li>Event sourcing is growing in popularity</li>
This might mean that you only need a persistent log file for that part, a pretty basic need.

<li>Need for rapid schema evolution</li>
Or very many schemas, or no schemas.
</ul>
<p /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/EXEOnI5Wbpw" height="1" width="1" /></div></summary>
    <updated>2010-02-18T16:15:00Z</updated>
    <source>
      <id>http://jimmynilsson.com/blog/</id>
      <author>
        <name>Jimmy Nilsson</name>
      </author>
      <link href="http://jimmynilsson.com/blog/" rel="alternate" type="text/html" />
      <link href="http://www.jnsk.se/weblog/rss.xml" rel="self" type="application/rss+xml" />
      <rights>Copyright 2008 by Jimmy Nilsson</rights>
      <title>Jimmy Nilsson's weblog</title>
      <updated>2010-02-18T16:20:00Z</updated>
    </source>
  <feedburner:origLink>http://jimmynilsson.com/blog/posts/DriversForNOSQL.htm</feedburner:origLink></entry>

  <entry xml:lang="en-us">
    <id>http://jimmynilsson.com/blog/posts/NewCourseAboutTDD.htm</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/SzFzt74mZqA/NewCourseAboutTDD.htm" rel="alternate" type="text/html" />
    <title>New TDD course</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
factor10's course "Test First with TDD" (or "TDD på riktigt" in Swedish) is given as an open course for the first time in Malmö in Sweden in April. You can find 
<a href="http://sites.google.com/a/factor10.com/oppna-kurser/home/tdd-test-first">more information and book a seat here</a>.
<br /><br />
Oh, and the <a href="http://sites.google.com/a/factor10.com/oppna-kurser/home/dddfasttrack">DDD course is taking place next time in Stockholm in April</a>.
</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/SzFzt74mZqA" height="1" width="1" /></div></summary>
    <updated>2010-02-18T16:10:00Z</updated>
    <source>
      <id>http://jimmynilsson.com/blog/</id>
      <author>
        <name>Jimmy Nilsson</name>
      </author>
      <link href="http://jimmynilsson.com/blog/" rel="alternate" type="text/html" />
      <link href="http://www.jnsk.se/weblog/rss.xml" rel="self" type="application/rss+xml" />
      <rights>Copyright 2008 by Jimmy Nilsson</rights>
      <title>Jimmy Nilsson's weblog</title>
      <updated>2010-02-18T16:20:00Z</updated>
    </source>
  <feedburner:origLink>http://jimmynilsson.com/blog/posts/NewCourseAboutTDD.htm</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=338</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/U_ByFKV9_24/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">3 Legs to Standing Up an Agile Project</title>
    <summary xml:lang="en">Maybe you’re starting your first Agile project.  You’ve read books and blogs.  You’ve had training.  You think you’re ready, but it’s still a daunting prospect.  There’s just so much to remember—so many details.
Here’s a little cheat sheet.  Forget all the details and the various ways you can implement Agile for the moment.  Let’s simplify the [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Maybe you’re starting your first Agile project.  You’ve read books and blogs.  You’ve had training.  You think you’re ready, but it’s still a daunting prospect.  There’s just <em>so</em> much to remember—so many details.</p>
<p>Here’s a little cheat sheet.  Forget all the details and the various ways you can implement Agile for the moment.  Let’s simplify the picture.  There are just three essential legs that your Agile project needs to stand.  Get those in place, and you’ll do OK.  Keep improving all three, and you’ll do fantastically!<span id="more-338" /></p>
<p><strong>Arranging the work.</strong></p>
<p>Know what is the goal.  Everybody should know this.  The <em>“things to be done”</em> should be fed smoothly to the development team.  Iteration cycles should respect the capacity of the team.  So should release cycles.  Doing these cycles smoothly will allow the team to maximize their capacity better than pushing for higher productivity.  Delay making decisions until they’re really needed, and make use of what you learn in the mean time.  Get the flow going and measure progress in real terms—working software.</p>
<p><strong>Doing the work.</strong></p>
<p>Working in iterations, alone, won’t get the project done.  The team has to do a competent job at doing the work.  If they had trouble delivering before, then better focus on shorter term goals may help, but you still have to work at it.  In addition, the sharp focus of short iterations and measuring working software makes it harder to sweep problems under the rug.  The team <em>could</em> look worse until they get a handle on things.  Set a high standard with your definition of done and keep to it.  This is the <em>real</em> capacity of the team.  Work to improve skills to increase the capacity.  Work to eliminate unnecessary work.</p>
<p><strong>Working together.</strong></p>
<p>An incredible amount of productivity improvements of an Agile team comes from the synergy of working effectively together.  Build a team, a real gelled team, not just a work group assigned to a project.  Support each other.  Help each other grow.  Leave no team member behind.  Solve problems together.  Respect each other.  Respect the differences, the special abilities, the varying perspectives.  These things give the team strength and resilience.</p>
<p>These three legs are enough to stand up a new Agile project.  Use these three categories to organize all those details we put aside at the start of this post.  Use those details to help you steady these three legs.  Experiment and practice until you feel you can succeed at each of these three aspects of your project.  And then keep improving.  Keep looking for things you can do better.  Keep re-evaluating.</p>
<p>It’s really that simple.  I won’t promise that it’s easy.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=338&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/U_ByFKV9_24" height="1" width="1" /></div></content>
    <updated>2010-02-18T05:07:42Z</updated>
    <published>2010-02-18T05:07:42Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Individuals and Interactions" />
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Agile" />
    <category scheme="http://blog.gdinwiddie.com" term="Teams" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/</feedburner:origLink></entry>

  <entry>
    <id>http://martinfowler.com/bliki/VersionControlTools.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/0dN_xMHZuiw/VersionControlTools.html" rel="alternate" type="text/html" />
    <title>Bliki: VersionControlTools</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>If you spend time talking to software developers about tools, one
  of the biggest topics I hear about are version control tools. Once
  you've got to the point of using version control tools, and any
  competent developers does, then they become a big part of your
  life. Version tools are not just important for maintaining a history
  of a project, they are also the foundation for a team to
  collaborate. So it's no surprise that I hear frequent complaints
  about poor version control tools. In our recent <a href="https://www1.vtrenz.net/imarkownerfiles/ownerassets/1013/Technology%20Radar%20Jan%202010.pdf">ThoughtWorks
  technology radar</a>, we called out two items as version control
  tools that enterprises should be assessing for use: Subversion and
  Distributed Version Control Systems (DVCS). Here I want to expand on
  that, summarizing many discussions we've had internally about
  version control tools.</p><img src="http://martinfowler.com/bliki/images/versonControlTools/vcs-plane.png" /><p>But first some pinches of salt. I wrote this piece based on an
  unscientific agglomeration of conversations with my colleagues
  inside ThoughtWorks and various friends and associates outside. I
  haven't engaged in any rigorous testing or structured comparisons,
  so like most of my writing this is based on
  <a href="http://martinfowler.com/bliki/AnecdotalEvidence.html">AnecdotalEvidence</a>. My
  personal experience in recent years is mostly subversion and
  mercurial, but my usage patterns are not typical of a software
  development team. Overwhelmingly my contacts like to work in an
  agile-xp approach (even if many sniff at the label) and need tools
  that support that work style. I expect many people to be annoyed by
  this article. I hope that annoyance will lead to good articles that
  I can link to.</p><p> (After writing this I did do a small
  <a href="http://martinfowler.com/bliki/VcsSurvey.html">VcsSurvey</a> which didn't undermine my conclusions.)</p><p>Fundamentally there's three version control systems that get
  broad approval: <a href="http://subversion.tigris.org/">subversion</a> (svn), <a href="http://git-scm.com/">git</a>, and <a href="http://mercurial.selenic.com/">mercurial</a> (hg).</p>
<h3>Behind the Recommendability Threshold</h3>
<p>Many tools fail to pass the recommendability threshold. There are two
  reasons why: poor capability or poor visibility.</p><p>Many tools garner consistent complaints from ThoughtWorkers about
  their lack of capability. (ThoughtWorkers being what they are, all
  tools, including the preferred set, get some complaints. Those
  behind the threshold get <i>mostly</i> complaints.) Two in particular
  generate a lot of criticism: <a href="http://www-01.ibm.com/software/awdtools/clearcase/">ClearCase</a>
  (from IBM) and <a href="http://msdn.microsoft.com/en-us/teamsystem/dd408382.aspx">TFS</a>
  (from Microsoft). One reason they get a lot of criticism is that
  they are very popular on client sites, often with company policies
  mandating their use (I'll describe a coping strategy for that
  at the end).</p><p>It's fair to say that often these problems are compounded by
  company policies around using VCS. I've heard of some truly bizarre
  work-flows imposed on teams that make it a constant hurdle to get
  anything done. Since the VCS is the tool that enforces these
  work-flows, it does tend to get tarred with that brush.</p><p>I'm not going to go into details about the problems the
  poor-capability tools have here, that would be another
  article. (This has probably made me even more unpopular in IBM and
  Microsoft as it is.) I will, at least for the moment, leave it with
  the fact that developers I respect have worked extensively with, and
  do not recommend, these products.</p><p>The second reason for shuffling a tool behind the
  recommendability threshold is that I don't hear many comments about
  some tools. This is an issue because less-popular tools make it
  difficult to find developers who know how to use them or want to
  find out. There are many reasons why otherwise good tools can fall
  behind there. I used to hear people say good things about Perforce,
  but now the feeling seems to be that it doesn't have compelling
  advantages over Subversion, let alone the DVCSs. Speaking of DVCSs,
  there are more than just the two I've highlighted here. Bazaar, in
  particular, is one I occasionally hear good things about, but again
  I hear about it much less often then git or Mercurial.</p><p>Before I finish with those behind the threshold, I just want to
  say a few things about  a particularly awful
  tool: Visual Source Safe, or as I call it: Visual Source
  Shredder. We see this less often now, thank goodness, but if you are
  using it we'd strongly suggest you get off it. Now. Not just is it a
  pain to use, I've heard too many tales of repository corruption to
  trust it with anything more valuable than foo.txt.</p><p>So this leaves three tools that my contacts are generally happy
  with. I find it interesting that all three are open-source. Choosing
  between these tools involves first deciding between a centralized or
  distributed VCS model and then, if you chose DVCS, choosing between
  git and mercurial.</p>
<h3>Distributed or Centralized</h3>
<p>Most of the time, the choice between centralized and distributed
  rests on how skilled and disciplined the development team is. A
  distributed system opens up lots of flexibility in work-flow, but
  that flexibility can be dangerous if you don't have the maturity to
  use it well. Subversion encourages a simple central repository
  model, discouraging large scale branching. In an environment that's
  using <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous
  Integration</a>, which is how most of my friends like to work, that
  model fits reasonably well. As a result Subversion is a good choice
  for most environments.</p><p>And although DVCSs give you lots of flexibility in how you
  arrange your work-flows, most people I know still base their work
  patterns on the notion of a shared mainline repository that's used
  with Continuous Integration. Although modern VCS have almost magic
  tools to merge different people's changes, these merges are still
  just merging text. Continuous Integration is still necessary to get
  semantic consistency. So as a result even a team using DVCS usually
  still has the notion of the central master repository.</p><p>Subversion has three main downsides compared to its cooler
  distributed cousins.</p><p>Because distributed systems always give you a local disk copy of
  the whole repository, this means that repository operations are
  always fast as they don't involve network calls to central
  servers. This is a palpable difference if you are looking at logs,
  diffing to old revisions, and anything else that involves the full
  repository. If this is noticeable on my home network, it is a huge
  issue if your repository is on another continent - as we find with
  our distributed projects.</p><p>If you travel away from your network connection to the
  repository, a distributed system will still allow you to work with
  the repository. You can commit checkpoints of your work, browse
  history, and compare revisions on an airplane without a network
  connection.</p><p>The last downside is more of a social issue than a true tool
  issue. DVCS encourages quick branching for experimentation. You can
  do branches in Subversion, but the fact that they are visible to all
  discourages people from opening up a branch for experimental
  work. Similarly a DVCS encourages check-pointing of work: committing
  incomplete changes, that may not even compile or pass tests, to your local
  repository. Again you could do this on a developer branch in
  Subversion, but the fact that such branches are in the shared space
  makes people less likely to do so.</p><p>This last point also leads to the argument against a DVCS, that
  it encourages wanton branching, that feels good early on but can
  easily lead you to merge doom. In particular the
  <a href="http://martinfowler.com/bliki/FeatureBranch.html">FeatureBranch</a> approach is a popular one that I don't
  encourage. As with similar comments earlier I must point out that
  reckless branching isn't something that's particular to one
  tool. I've often heard people in ClearCase
  environments complain of the same issue. But DVCSs encourage
  branching, and that's the major reason why I indicate that team
  needs more skill to use a DVCS well.</p><p>There is one particular case where subversion is the better
  choice even for a team that skilled at using a DVCS. This case is
  where the artifacts you're collaborating on are binary and cannot be
  merged by the VCS - for example word documents or presentation
  decks. In this case you need to revert to pessimistic locking with
  single-writer checkouts - and that requires a centralized
  system.</p>
<h3>Git or Mercurial</h3>
<p>So if you're going to go the DVCS route - which one should you
  choose? Mercurial and git get most of the attention, so I feel the
  choice is between them. Then the choice boils down to power versus
  usability, with a dash of mind-share and the shadow of github.</p><p>Git certainly seems to be liked for its power. Folks go ga-ga
  over it's near-magical ability to do textual merges automatically
  and correctly, even in the face of file renames. I haven't seen any
  objective tests comparing merge capabilities, but the subjective
  opinion favors git.</p><p>(<a href="http://lucas-ward.blogspot.com/2010/02/maturity-model-for-source-control-scmm.html">Merge-through-rename</a>,
  as my colleague Lucas Ward defines it, describes the following scenario. I
  rename Foo.cs to Bar.cs, Lucas makes some changes to Foo.cs. When we
  merge his changes are correctly applied to Bar.cs. Both git and
  Mercurial handle this.)</p><p>For many git's biggest downside was its oft-cryptic commands and
  mental model. Ben Butler-Cole phrased it beautifully: "there is this
  amazingly powerful thing writhing around in there that will
  basically do everything I could possibly ask of it if only I knew
  how." To its detractors, git lacks discoverability - the ability to
  gradual infer what it does from it's apparent design. Git's
  advocates say that much of this is because it uses a different
  mental model to other VCSs, so you have to do more unlearn your
  knowledge of VCS to appreciate git. Whatever the reason git seems to
  be attractive more to those who enjoy learning the internals while
  mercurial seems to appeal more to those who just want to do version
  control.</p><p>The shadow of github is important here. Even git-skeptics rate it
  as a superb place for project collaboration. Mercurial's equivalent,
  <a href="http://bitbucket.org/">bitbucket</a>, just doesn't
  inspire the same affection. However there are other sites that may
  begin to close the gap, in particular <a href="http://code.google.com/">Google Code</a> and Microsoft's <a href="http://www.codeplex.com/">Codeplex</a>. (I find Codeplex's use of
  Mercurial very encouraging. Microsoft is often, rightly, criticized
  for not collaborating well with complementary open source
  products. Their use of Mercurial on their open-source hosting site
  is a very encouraging sign.)</p><p>Historically git worked poorly on Windows, poorly enough that
  we'd not suggest it. This has now changed, providing you run it using
  <a href="http://code.google.com/p/msysgit/">msysgit</a> and not
  cygwin. Our view now is that msysgit is good enough to make
  comparison with Mercurial a non-issue for Windows.</p><p>People generally find that git handles branching better than
  Mercurial, particular for short-lived branches for experimentation
  and check-pointing. Mercurial encourages other mechanisms, such as
  fast cloning of separate repository directories and queue patching,
  but git's branching is a simpler and better model.</p><p>Mercurial does seem to have an issue with large binary files. My
  general suggestion is that such things are usually better managed
  with subversion, but if you have too few of them to warrant separate
  management, then Mercurial may get hung up by the few that you have.</p>
<h3>Multiple VCS</h3>
<p>There's often value to using more than one VCS at the same
  time. This is generally where there is a wider need to use a less
  capable VCS than your team wants to use.</p><p>The case that we run into frequently is where there is a
  corporate standard for a deficient VCS (usually ClearCase) but we
  wish to work efficiently. In that case we've had success using a
  different VCS for day-to-day team team work and committing to the
  corporate VCS when necessary. So while the team VCS will see
  several commits per person per day, the corporate VCS sees a 
  commit every week or two. Often that's what the corporate admins
  prefer in any case. Historically we've done this using svn as the
  local VCS but in the future we're more likely to use a DVCS for
  local fronting.</p><p>This dual usage scenario is also common with git-svn where people
  use git locally but commit to a shared svn system. Git-svn is another
  reason for preferring git over mercurial. Using a local DVCS is
  particularly valuable for remote site working, where network outages
  and bandwidth problems can cripple a site that's remote from a
  centralized VCS.</p><p>A lot of teams can benefit from this dual-VCS working style,
  particularly if there's a lot of corporate ceremony enforced by
  their corporate VCS. Using dual-VCS can often make both the local
  development team happier and the corporate controllers happier as
  their motivations for VCS are often different.</p>
<h3>One Final Note</h3>
<p>Remember that although I've jabbered on a lot about tools here,
  often its the practices and workflows that make a bigger
  difference. Tools can certainly make it much easier to use a good
  set of practices, but in the end it's up to the people to use an
  effective way of working for their environment. I like to see
  approaches that allow many small changes that are rapidly integrated
  using Continuous Integration. I'd rather use a poor tool with CI
  than a good tool without.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/0dN_xMHZuiw" height="1" width="1" /></div></content>
    <updated>2010-02-17T15:23:00Z</updated>
    <category term="tools" />
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/bliki/VersionControlTools.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=334</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/VOD0QShuQ6s/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">The testers get behind at the end</title>
    <summary xml:lang="en">It’s a very common complaint, such as this one left on the Scrumdevelopment yahoogroup:
Usually in different phases, workload for tester and dev is different. E.g. when a project is coming to the end, most of the tasks will be test.
There are a couple of big red flags waving at me in those two sentences.  One [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>It’s a very common complaint, such as <a href="http://groups.yahoo.com/group/scrumdevelopment/message/45191" target="_blank" title="Yahoogroup posting">this one left on the Scrumdevelopment yahoogroup</a>:</p>
<blockquote><p>Usually in different phases, workload for tester and dev is different. E.g. when a project is coming to the end, most of the tasks will be test.</p></blockquote>
<p>There are a couple of big red flags waving at me in those two sentences.  One is <em>“different phases.”</em> Why should a software development project, especially one only a couple weeks to a couple months long, have phases?  The other is, at <em>“the end, most of the tasks will be test.”</em> Postponing testing to a phase at the end has <em>never</em> worked very well.  It <em>always</em> results in the testers being behind at the end.</p>
<p>Does this situation sound somewhat familiar to you?  If so, what can we do about it?</p>
<p><span id="more-334" />Many teams try to live with it.  I’ve seen teams institutionalize “being behind” by implementing in one iteration and testing in the next.  When they do that, they generally find that problems are found in the testing, so the implementation really drags across two iterations.  The rework in the second iteration bumps new work planned for that iteration, so things continue to slide.  And since it’s hard to tell when a bit of work <em>really</em> is completely done, it’s hard to know how much work fits into an iteration and when the release will be ready.  Often things feel the same as they did before going to time-boxed iterative development.  That’s no surprise, because this really <em>isn’t</em> time-boxed iterative development.  It’s waterfall phases in sheep’s clothing.</p>
<p>Just don’t do it.  Get things completely done <em>and</em> tested before moving on to the next thing.</p>
<p><strong>But how?  Don’t you have to wait until the code is written before you can test it?</strong></p>
<p>No, you don’t.  Start when the product owner is describing what is to be done.  Distill that down to the essence of the user story.  Make sure that the product owner agrees that this <em>potentially automatable</em> distillation is what is desired.</p>
<p>Then, while the developers are hard at work implementing the functionality, the testers should be automating the test that verifies it.  To be sure, this is often something the testers, and the organization they work for, find unfamiliar.  It’ll go a little slow and shaky while you learn.  It’s completely understandable that testers will need some assistance from the developers as they automate the tests–after all, test automation <em>is</em> a form of programming.</p>
<p>The bottom line is that the story isn’t ready for acceptance until both the implementation <em>and</em> the test are done, and the test passes.  That’s the minimum, but take a further look, too.</p>
<p>Over time, this will get easier.  The testers will learn to do more test automation with less help.  The resulting set of regression tests will grow, giving quick feedback that functionality that worked before, still works.  Instead of the testers getting further and further behind as they continue to check the same functionality iteration after iteration, they’ll get further ahead because running these tests takes about the same amount of time.  They’ll have <em>more</em> time to do exploratory testing, and less of that exploratory testing will have to cover basic functionality.</p>
<p>It’s hard work to make automated acceptance testing a success.  In the end, though, it’s the only thing that can make testing a success in time-boxed iterative development.  If you don’t make it work, I guarantee the testers will get further and further behind.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=334&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/VOD0QShuQ6s" height="1" width="1" /></div></content>
    <updated>2010-02-16T21:15:07Z</updated>
    <published>2010-02-16T21:15:07Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Testing" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7348428</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/6vIK0QEtSW0/devzing-no-hassel-open-source-project-management-hosting.aspx" rel="alternate" type="text/html" />
    <title>devZing - No Hassel Open Source Project Management Hosting</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The next revision of our open source project management hosting service is now live - <a href="http://devZing.com">devZing.com</a></p>
<div class="image_block"><a href="http://devzing.com" target="_blank"><img alt="" height="44" src="http://blogs.consultantsguild.com/media/blogs/news/logo.png" width="109" /></a></div>
<table border="0">
<tbody>
<tr align="center">
<td><a href="http://devzing.com/bugzilla.php" target="_blank"><img alt="" height="125" src="http://blogs.consultantsguild.com/media/blogs/news/buggie.png" width="95" /></a></td>
<td><a href="http://devzing.com/mantisbt.php" target="_blank"><img alt="" height="102" src="http://blogs.consultantsguild.com/media/blogs/news/mantis_logo.gif" width="171" /></a></td>
<td><a href="http://devzing.com/tikiwiki.php" target="_blank"><img alt="" height="100" src="http://blogs.consultantsguild.com/media/blogs/news/tikilogo.png" width="81" /></a></td>
</tr>
<tr align="center">
<td><a href="http://devzing.com/bugzilla.php" target="_blank">try bugzilla »</a></td>
<td><a href="http://devzing.com/mantisbt.php" target="_blank">try mantisbt »</a></td>
<td><a href="http://devzing.com/tikiwiki.php" target="_blank">try tikiwiki »</a></td>
</tr>
</tbody>
</table><img height="1" src="http://weblogs.asp.net/aggbug.aspx?PostID=7348428" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/6vIK0QEtSW0" height="1" width="1" /></div></summary>
    <updated>2010-02-15T21:05:00Z</updated>
    <category scheme="http://weblogs.asp.net/wallen/archive/tags/Community+News/default.aspx" term="Community News" />
    <category scheme="http://weblogs.asp.net/wallen/archive/tags/mantisbt/default.aspx" term="mantisbt" />
    <category scheme="http://weblogs.asp.net/wallen/archive/tags/tikiwiki/default.aspx" term="tikiwiki" />
    <category scheme="http://weblogs.asp.net/wallen/archive/tags/hosting/default.aspx" term="hosting" />
    <category scheme="http://weblogs.asp.net/wallen/archive/tags/bugzilla/default.aspx" term="bugzilla" />
    <author>
      <name>Wayne Allen</name>
    </author>
    <source>
      <id>http://weblogs.asp.net/wallen/default.aspx</id>
      <link href="http://weblogs.asp.net/wallen/default.aspx" rel="alternate" type="text/html" />
      <link href="http://weblogs.asp.net/wallen/Rss.aspx" rel="self" type="application/rss+xml" />
      <subtitle>pragmatic agility</subtitle>
      <title>Wayne Allen's Weblog</title>
      <updated>2010-03-10T17:16:58Z</updated>
    </source>
  <feedburner:origLink>http://weblogs.asp.net/wallen/archive/2010/02/15/devzing-no-hassel-open-source-project-management-hosting.aspx</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=328</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/SOdqaudW1bU/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/14/testability-good-design/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2010/02/14/testability-good-design/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">Testability &amp; Good Design</title>
    <summary xml:lang="en">Much of the time, the test-driven development yahoogroup is pretty quiet, but it has recently awakened from winter hibernation.  The question “Is it OK to add code to a class only to improve its testability?” stirred up a wide-ranging discussion that brought in the topic of what constitutes good design.  “Uncle Bob” Martin drew a [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Much of the time, the test-driven development yahoogroup is pretty quiet, but it has recently awakened from winter hibernation.  The question “Is it OK to add code to a class <strong>only</strong> to improve its testability?” stirred up a wide-ranging discussion that brought in the topic of what constitutes good design.  “Uncle Bob” Martin drew a bold line in the sand with <a href="http://tech.groups.yahoo.com/group/testdrivendevelopment/message/32320?l=1" target="_blank" title="Uncle Bob's post on TDD Yahoogroup">his comment</a>,</p>
<blockquote><p>One reasonable definition of good design is testability.  It is hard to imagine a software system that is both testable and poorly designed.  It is also hard to imagine a software system that is well designed but also untestable.</p></blockquote>
<p>I greatly sympathize with this statement, though I wouldn’t go quite that far.  I don’t think it is so hard to imagine code that is testable, but poorly designed.  For a trivial counter-case, there could be rampant duplication of testable code.  I would call that poorly designed, but it doesn’t affect it’s testability.  Therefore I would soften Uncle Bob’s definition to “One reasonable component of the definition of good design is testability.”</p>
<p>To me, the notion of “testable code” is the same thing that “testable circuit” was back when I worked on a custom integrated circuit.  Mostly, that depends on the ability to put the circuit or code into a known state, exercise it, and see the interactions with its collaborators and its resulting state.<span id="more-328" /></p>
<p>For ICs, the first level of making a circuit testable was to the internal state predictable and discernible.  Sometimes this was accomplished simply, by having the power-up state known, rather than random, and by being able to clock internal nodes into a shift register to be read out on an output pin in a special test mode.  That was enough to make it testable, but not generally enough to make it easy to test.</p>
<p>Being able to drive internal nodes to various known states gave a lot more power, allowing “unit testing” of various blocks of circuitry.  This generally required some additional hardware added just for testability (a point germane to the original question), but paid handsome dividends in reduced time to test units in production.</p>
<p>With ICs, much of the expense is in the packaging, and that expense was significantly related to the number of pins.  Testing equipment evolved to do the equivalent of “the bed of nails” used on circuit boards, but applied to pads on the circuit die that were never bonded out to pins.  This allowed easier access to internal nodes, both for driving state and for reading it, prior even to slicing the wafer into individual chips.  The heads that probed the circuit had a small nozzle to spray dye on failed circuits so they could be discarded before packaging.</p>
<p>With software, the ability to drive and access internal nodes is much easier–often not requiring any additional logic.  Sadly, many programs manage to make these internal nodes inaccessible, in spite of the lack of cost to do otherwise.</p>
<p>So, when I talk about testability, that’s what I mean.  And that’s why I quibble slightly with Uncle Bob’s assertion that testable code is necessarily well designed.  The converse is pretty easy to believe, but there are cases where, for no apparent reason, the design still sucks.</p>
<p>Well designed code, like well designed circuits, contain the complexity better and are therefore easier to adequately test.  This is, to me, an important point.  We’re very likely to miss stuff.  Let’s make it as hard as possible to miss stuff.  And let’s make it as easy as possible to notice when we’ve missed stuff.</p>
<p>In the words of C. A. R. Hoare,</p>
<blockquote><p>There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.</p></blockquote>
<p>Adam Sroka stated his discomfort with calling code testable unless it was, indeed, tested.  Again, I’ll be happy with a slightly lower standard.  It <em>can</em> be apparent that some code is <em>testable</em> even when not <em>tested</em>.  Generally, that code needs to be simple enough that testability can be obvious.  In most cases, though, code that isn’t tested is also not clearly testable.  To a first order approximation, both Uncle Bob’s and Adam’s statements ring true. I’m not terribly concerned with the absolute truth of either of them.  I do, however, prefer Michael Feathers’ assertion that there is <a href="http://michaelfeathers.typepad.com/michael_feathers_blog/2007/09/the-deep-synerg.html" target="_blank" title="Michael Feathers' blog posting">a deep synergy between testability and good design</a>.</p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=328&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/SOdqaudW1bU" height="1" width="1" /></div></content>
    <updated>2010-02-14T16:58:17Z</updated>
    <published>2010-02-14T16:58:17Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Responding to Change" />
    <category scheme="http://blog.gdinwiddie.com" term="Tools and Techniques" />
    <category scheme="http://blog.gdinwiddie.com" term="Working Software" />
    <category scheme="http://blog.gdinwiddie.com" term="Craftmanship" />
    <category scheme="http://blog.gdinwiddie.com" term="Software Design" />
    <category scheme="http://blog.gdinwiddie.com" term="TDD" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2010/02/14/testability-good-design/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/notesfromatooluser/2010/02/quick-links-week-8.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/tlBkSfYXmtc/quick-links-week-8.html" rel="alternate" type="text/html" />
    <title>Quick Links Week #8</title>
    <summary>Hopefully, it’s obvious to all and sundry that this blog has been transformed. As you can see, I’m in the middle of launching a new business site: Agile Pain Relief Consulting. The blog will always be called “Notes From A Tool User,” and notesfromatooluser.com will always work, but from now on it will be [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.agilepainrelief.com/images/WindowsLiveWriter/5ae4a716f144_D0A6/image.png"><img align="left" alt="image" border="0" height="219" src="http://www.agilepainrelief.com/images/WindowsLiveWriter/5ae4a716f144_D0A6/image_thumb.png" style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;" title="image" width="240" /></a> </p>
<p>Hopefully, it’s obvious to all and sundry that this blog has been transformed. As you can see, I’m in the middle of launching a new business site: <a href="http://agilepainrelief.com/">Agile Pain Relief Consulting</a>. The blog will always be called “Notes From A Tool User,” and notesfromatooluser.com will always work, but from now on it will be a 301 redirect to this site. The upshot—please do not adjust your set. It is functioning as intended.</p>
<p>The transformation is far from complete—some structural work and a lot of writing are left to do. Please excuse the mess. In the meantime, I’m going to get this blog back on track.</p>
<p>This week’s Quick Links:</p>
<p>We’re hearing a lot about Toyota’s woes in the news. Hal Macomber thinks the common claim that Toyota lost its focus in attempting to become the world’s largest car manufacturer is wrong—read: <a href="http://www.reformingprojectmanagement.com/2010/02/08/1053/#more-1053">What Is Going on with Toyota</a> and <a href="http://www.reformingprojectmanagement.com/2010/02/10/1060/">Toyota’s Lesson for Project Managers</a> for more.</p>
<p>Dave Nicolete (riffing on some comments by Dave Rooney) suggests a simple way for estimating a team’s <a href="http://dnicolet1.tripod.com/agile/index.blog?entry_id=1989462">initial velocity for its first few iterations</a>. This is the problem that teams new to Agile have. Management wants an initial estimate of how much work will get done before the product is released and the team doesn’t have enough experience to give it.</p>
<p>Sandy Walsh (a former colleague from Andyne Computing) is writing an interesting series on the importance of readable code: <a href="http://sandywalsh.blogspot.com/2010/01/tale-of-two-code-bases.html">A Tale of Two Code Bases</a> and <a href="http://sandywalsh.blogspot.com/2010/02/your-code-is-other-team-member.html">Your Code is the Other Team Member .…</a></p>
<p>In <a href="http://jkarlsson.com/blog/2009/02/19/goal-oriented-daily-stand-ups/">Goal-Oriented Daily Stand-Ups</a>, Joakim Karlsson offers the idea of setting a daily team goal, which helps to ensure that the individual tasks toward the team’s goals.</p>
<p>In the early ’80s, the department of Computing Science at Queen’s University got its first <a href="http://en.wikipedia.org/wiki/VAX">Vax 11/780</a>. At the time, my <a href="http://www.cs.queensu.ca/people/faculty.php">father</a> complained that professors no longer talked but just emailed each other even though their offices were only 10 feet apart. Phil Jeffs notices the problem continues: <a href="http://philipjeffs.com/dont-email-me-im-sat-right-next-to-you">Don’t email me. I’m sat right next to you.</a></p>
<p><a href="http://philipjeffs.com/dont-email-me-im-sat-right-next-to-you" /></p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/IxzY28o3kmM" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/tlBkSfYXmtc" height="1" width="1" /></div></content>
    <updated>2010-02-10T18:33:43Z</updated>
    <category term="Agile" />
    <category term="Links" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/02/quick-links-week-8.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-03-10T00:16:40Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/IxzY28o3kmM/quick-links-week-8.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-2300720513614129432</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/Q7qWA3u5hfY/without-accountability-there-can-be-no.html" rel="alternate" type="text/html" />
    <title>Without accountability there can be no solidarity</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Over the past two years I've been seeing teams fail because people are not holding one another accountable. People tell me they are scared of being perceived to blame and so instead they say nothing. I asked some people why they don't hold people accountable. They responded with things like: "I'm really uncomfortable doing that." Or "I'm not good at saying that kind of stuff. I'm just a developer." And I empathize. I really do. I'm uncomfortable holding people accountable too. I'm guessing everyone probably is to some degree. And by the way, I possess those developer genes. That said, I still think these responses are phooey! Being able to communicate is a basic human skill. We all do it, admittedly some better than others, but just because something is difficult doesn't mean we should stop doing it. How will we learn if we don't practice? <br /><br />Saying nothing rather than speaking up is the worst thing we could do. I see two reasons why. First, everyone has missed a great opportunity to learn something. If something goes wrong, and it does - often - then those accountable are expected to discuss their part in the events, because their knowledge is needed to improve the way we work. And second, restraint leads to pent-up frustration, even anger. Over time, perhaps bickering starts and fissures appear in the team. People start talking about others behind their backs, which really is blaming, and eventually what we've held back for so long probably comes blurting out in a damaging way. <br /><br />So what's really stopping people holding others accountable? Is it just a  misunderstanding of the difference between blame and accountability? This is something I'm struggling with.<br /><br />To be accountable means to accept responsibility and be answerable for any actions or decisions. However, to be blamed is to be assigned responsibility for a fault in a way that deserves censure. But this still doesn't make it clear for me. I like to think the difference between accountability and blame is in the intent. Think of accountability as a handshake between people whereas blame goes in one direction.<br /><br />The intention of holding people accountable is to understand, with them, the nature of the failure, its context and how it came to be. Those people questioning the actions value the participation of those responsible for the actions because they have useful information. And together they achieve clarity to explore solutions so that everyone may work to prevent similar failures in the future. The sole intent of blaming people is to identify the culprits and impose punishment. There is unwillingness to engage in a collaborative and objective analysis of the events. Instead judgment has already been passed based on a personal interpretation of events.<br /><br />I think fearing accountability and staying silent perpetuates the very thing people are seeking to avoid - blame. Holding people accountable is not optional. We need to take it easy and be gentle but we must start holding people accountable. We shouldn't overreact to peoples' reactions. They may feel like they are being blamed based on their past experiences, so we must work extra hard to communicate our intentions as positive and constructive framed within the context of learning. And we must keep at it. Eventually the blame-free culture of accountability we thought we had will emerge for real in a healthier team with a new found honesty and integrity.<br /><br />PS. I'd be really interested to hear your thoughts on this subject and any stories you have to tell. I still seek to understand this notion of accountability better.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-2300720513614129432?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/fDBUcrnmdrw" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/Q7qWA3u5hfY" height="1" width="1" /></div></summary>
    <updated>2010-02-10T17:25:14Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/02/without-accountability-there-can-be-no.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/fDBUcrnmdrw/without-accountability-there-can-be-no.html</feedburner:origLink></entry>

  <entry>
    <id>tag:martinfowler.com,2010-02-06:Texas-Speaking-Events-Rescheduled</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/G32ymMgIRBM/201002061234.html" rel="alternate" type="text/html" />
    <title>Texas Speaking Events Rescheduled</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The family medical issue has been resolved happily, so I’m free to go back on the road. We’ve thus rescheduled the events I was supposed to do last month in Texas.</p>

<ul>
<li>On February 23rd I’ll be speaking at <a href="http://www.meetup.com/DFWScrum/calendar/12329880/">DFW Scrum</a> in Dallas.</li>

<li>On February 25th ThoughtWorks is organizing a <a href="http://connect.thoughtworks.com/TechnologyForumAustin/">technology forum</a> in Austin.</li>
</ul>

<p>As is usual for me, I haven’t planned exactly what I’ll talk about yet, but it’ll revolve around my usual topics of software design and agile methods.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/G32ymMgIRBM" height="1" width="1" /></div></content>
    <updated>2010-02-06T17:34:00Z</updated>
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/snips/201002061234.html</feedburner:origLink></entry>

  <entry xml:lang="en-us">
    <id>http://www.codeodor.com/index.cfm/2010/2/6/A-Million-Dollar-Idea/3134</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/AhwqsHA3JPo/3134" rel="alternate" type="text/html" />
    <title>A Million Dollar Idea</title>
    <summary type="html">There was once upon a time I held some affinity for Expert'sExchange .
I tried hard and succeeded at becoming an expert. I thought it might look good on a resume and in fact
I got a few offers of job and freelance work from it. 
 
I was an expert at ColdFusion .
A couple of the guys who I remember racing for "the right answer" are still up there, including one who came after the 
guys who came after the guys who came after Dain 
" OMFG do they really have a book on ACM? " Anderson. You might know
him. It ...&lt;img src="http://feeds.feedburner.com/~r/agileplanetorg/~4/AhwqsHA3JPo" height="1" width="1"/&gt;</summary>
    <updated>2010-02-06T16:37:09Z</updated>
    <category term="Miscellany" />
    <category term="Customer Relations" />
    <category term="Management" />
    <author>
      <name>Sammy Larbi</name>
    </author>
    <source>
      <id>http://www.codeodor.com/</id>
      <link href="http://www.codeodor.com/" rel="alternate" type="text/html" />
      <link href="http://www.codeodor.com/rss/" rel="self" type="application/rss+xml" />
      <subtitle>Posts about Ruby, Java, Coldfusion, OOAD, TDD, DSLs, and more (some not TLAs!)...</subtitle>
      <title>My Secret Life as a Spaghetti Coder</title>
      <updated>2010-03-06T16:16:20Z</updated>
    </source>
  <feedburner:origLink>http://www.codeodor.com/index.cfm/2010/2/6/A-Million-Dollar-Idea/3134</feedburner:origLink></entry>

  <entry>
    <id>http://martinfowler.com/bliki/ConversationalStories.html</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/Y_eaE2ygrz8/ConversationalStories.html" rel="alternate" type="text/html" />
    <title>Bliki: ConversationalStories</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Here's a common misconception about agile methods. It centers on
  the way user stories are created and flow through the development
  activity. The misconception is that the product owner (or business
  analysts) creates user stories and then put them in front of
  developers to implement. The notion is that this is a flow from
  product owner to development, with the product owner responsible for
  determining <i>what</i> needs to be done and the developers
  <i>how</i> to do it.</p><img src="http://martinfowler.com/bliki/images/conversationalStories/decreed.png" /><p>A justification for this approach is that this separates the
  responsibilities along the lines of competence. The product owner
  knows the business, what the software is for, and thus what needs to
  be done. The developers know technology and know how to do things,
  so they can figure out how to realize the demands of the product
  owner.</p><p>This notion of product owners coming up with
  <a href="http://martinfowler.com/bliki/DecreedStories.html">DecreedStories</a> is a profound misunderstanding of the way
  agile development should work. When we were brainstorming names at
  <a href="http://martinfowler.com/articles/agileStory.html">Snowbird</a>, I
  remember Kent suggesting "conversational". This emphasized the fact
  that the heart of our thinking was of an on-going conversation
  between customers and developers about how a development project
  should proceed.</p><img src="http://martinfowler.com/bliki/images/conversationalStories/conversation.png" /><p>In terms of coming up with stories, what this means is that they
  are always something to be refined through conversation - and that
  developers should play an active role in helping that
  definition.</p><ul><li>spotting inconsistencies and gaps between the stories</li><li>using technical knowledge to come up with new stories that
    seem to fit the product owner's vision</li><li>seeing alternative stories that would be cheaper to build
    given the technological landscape</li><li>split stories to make them easier to plan or implement</li></ul><p>This is the Negotiable principle in Bill Wake's <a href="http://xp123.com/xplor/xp0308">INVEST</a> test for
  stories. Any member of an agile team can create stories and suggest
  modifications. It may be that just a few members of a team gravitate
  to writing most of the stories. That's up to the team's
  self-organization as to how they want that to happen. But everyone
  should be engaged in coming up and refining stories. (This
  involvement is in addition to the develpers' responsibility to
  estimate stories.)</p><p>The product owner does have a special responsibility. In the end
  the product owner is the final decider on stories, particularly
  their prioritization. This reflects the fact that the product owner
  should be the best person to judge that slippery attribute of
  business value. But having a final decision maker should never stop
  others from participating, and should not lead people astray into a
  decreed model of stories.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/Y_eaE2ygrz8" height="1" width="1" /></div></content>
    <updated>2010-02-04T20:42:00Z</updated>
    <category term="agile" />
    <source>
      <id>http://martinfowler.com/feed.atom</id>
      <author>
        <name>Martin Fowler</name>
        <email>fowler@acm.org</email>
        <uri>http://martinfowler.com</uri>
      </author>
      <link href="http://martinfowler.com/feed.atom" rel="self" type="application/atom+xml" />
      <link href="http://martinfowler.com" rel="alternate" type="text/html" />
      <subtitle>Master feed of news and updates from martinfowler.com</subtitle>
      <title>Martin Fowler</title>
      <updated>2010-03-08T19:02:00Z</updated>
    </source>
  <feedburner:origLink>http://martinfowler.com/bliki/ConversationalStories.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-1029128641359398357</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/iSsxsZooXHU/petition-against-recurring-government.html" rel="alternate" type="text/html" />
    <title>Petition against recurring Government IT incompetence</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Isn't it about time we started calling the civil service and the Government to account for the repeated failures and wasted money in Public IT projects?<br /><br />Don't delay! Sign the <a href="http://petitions.number10.gov.uk/ITProcessReview/">petition to the PM</a>.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-1029128641359398357?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/GN7LqCKX_S0" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/iSsxsZooXHU" height="1" width="1" /></div></summary>
    <updated>2010-02-04T15:15:24Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/02/petition-against-recurring-government.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:34Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/GN7LqCKX_S0/petition-against-recurring-government.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-4148394560523923633</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/GQUb1Q4Kx7g/integration-testing-story-continues.html" rel="alternate" type="text/html" />
    <title>Integration Testing: The Story Continues</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Over the past few months I've been reading the '<a href="http://jbrains.ca/integration_tests_are_a_scam">Integration Tests Are A Scam</a>' serious of articles by J.B. Rainsberger and following some of the responses to it such as <a href="http://www.m3p.co.uk/blog/2010/01/17/responding-to-brian-marick/">this one</a> by Steve Freeman. I put in <a href="http://jbrains.ca/permalink/278#disqus_thread">my 2 cents</a> a few days ago which I've reproduced here:<br /><blockquote>Interesting series of articles &amp; comments. I also read Steve Freeman’s article in response to the same topic. It’s got me thinking about how we work and I thought I’d take the time to describe it here.<br /><br />    You define an integration test as “… any test whose result (pass or fail) depends on the correctness of the implementation of more than one piece of non-trivial behavior.” We have many such components that exhibit such non-trivial behaviour in the products we create, many of which are not developed by us. And we have integration tests to verify they work. I’m not just talking about 3rd party libraries and frameworks here, I’m referring to the whole system: caching layers. load balancers, DNS servers, CDNs, virtualization etc. When we build software it only becomes a product or service for our users when it has been deployed into a suitable environment; an environment that typically contains more than just the software we have written and packaged. Since our users’ experience and perception of quality result from their interaction with a deployed instance of the whole system, not just their interaction with the software at a unit level, we have come to value end-to-end integration testing. I believe there’s merit in testing these components in symphony and will attempt to clarify what kind of integration testing I’m talking about.<br /><br />    For a given piece of functionality we write an executable acceptance test in human readable form (for web projects we typically use some domain-specific extensions to selenium, for services we have used FIT and it’s ilk, sometimes we roll our own if there’s nothing expressive enough available). We run it against a deployed version of the application (usually local though not always) which typically has a running web/application server and database. The test fails. We determine what endpoint needs to be created/enhanced and then we switch context down into unit-test land. A typical scenario would involve enhancing a unit test for the url mappings, adding one for the controller, then one for any additional service, domain object etc. When we’re happy and have tested and designed each of the required units we jump back up a level and get our acceptance test to progress further. The customer steers the development effort as he sees vertical ‘slices’ of functionality emerge. The acceptance test is added to a suite for that functional area. The continuous build system will then execute that test against a fully deployed (but scaled down) replica of the production environment, with hardware load balancer, vlans, multiple nodes (session affinity) and so forth. Any additional environmental monitoring (e.g. nagios alerting) is also done as part of this development effort and is deployed into the test environment along with the updated code.<br /><br />    Setting up the infrastructure to do this kind of testing takes investment, both initial and ongoing. The continuous build needs to be highly ‘parallelized’ so you get feedback from a checkin in 10 mins or less (we’re heavy users of virtualization, usually VMWare or OpenVZ). The individual acceptance test suites need to be kept small enough to run quickly before check-in.<br /><br />    Benefits of this approach<br /><ul><br /><li>The continuous context-switch between acceptance test and unit test is key to our staying focused on delivering what the customer actually wants.</li><br /><li>The customer has multiple feedback points that he can learn from and use to steer the development effort.</li><br /><li>It confirms that the whole system works together – networking, DNS, load balancing, automated deployment, session handling, database replication etc.</li><br /><li>We create additional ‘non-functional’ acceptance tests that automatically exercise other aspects of the system such as fail-over and recovery.</li><br /><li>Upgrades to parts of the system (switches, load balancers, web caches, library versions, database server versions etc.) can be tested in a known and controlled way.</li><br /></ul>We’ve caught a number of integration-related issues using this approach (a few examples: broken database failover due to missing primary keys, captcha validation not working due to a web cache not behaving correctly, data not persisting because one database server had the wrong locale) and stopped them before they have reached our users. We have used the feedback as a basis for improving our products and their delivery at a system level.<br /><br />    OK this reply has now become far too long :-/ It would of course be good to discuss this in person sometime :)<br /></blockquote><br />J.B.'s taken the time out <a href="http://jbrains.ca/permalink/295">to respond</a> and it seems that there's a lot of common ground. Maybe there's a language problem here in developer land? Do we need some clear common definitions in this area?<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-4148394560523923633?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/PXHqWNlgsNo" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/GQUb1Q4Kx7g" height="1" width="1" /></div></summary>
    <updated>2010-02-01T16:27:46Z</updated>
    <category term="integration tests" />
    <category term="testing" />
    <category term="end-to-end testing" /><feedburner:origLink>http://blog.energizedwork.com/2010/02/integration-testing-story-continues.html</feedburner:origLink>
    <author>
      <name>Gus Power</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:33Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/PXHqWNlgsNo/integration-testing-story-continues.html</feedburner:origLink></entry>

  <entry>
    <id>tag:blogger.com,1999:blog-3491762.post-6008546515364474842</id>
    <link href="http://www.blogger.com/feeds/3491762/6008546515364474842/comments/default" rel="replies" type="application/atom+xml" />
    <link href="https://www.blogger.com/comment.g?blogID=3491762&amp;postID=6008546515364474842" rel="replies" type="text/html" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/6008546515364474842" rel="edit" type="application/atom+xml" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/6008546515364474842" rel="self" type="application/atom+xml" />
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/TY4lwpFKsG4/excel-spreadsheet-for-hyperproductive.html" rel="alternate" type="text/html" />
    <title>Excel Spreadsheet for Hyperproductive Scrum Teams - very cool!</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="separator" style="clear: both; text-align: left;"><a href="http://1.bp.blogspot.com/_hVKvmhIMlbI/S2RtwErcfnI/AAAAAAAAAJ0/r9q7OtaUwtM/s1600-h/SutherlandDowneySprintBurndown.png"><img border="0" height="222" src="http://1.bp.blogspot.com/_hVKvmhIMlbI/S2RtwErcfnI/AAAAAAAAAJ0/r9q7OtaUwtM/s320/SutherlandDowneySprintBurndown.png" width="320" /></a></div><br /><span class="Apple-style-span" style="color: #515d52; font-family: Verdana; font-size: 12px; line-height: 20px;" /><br /><h2 class="with-tabs" style="font-family: Helvetica, Arial, sans-serif; font-size: 19px; font-weight: normal; line-height: 24px; margin-bottom: 0px; margin-left: 0px; margin-right: 2em; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">Scrum Metrics for Hyperproductive Teams: How They Fly Like Fighter Aircraft</h2><div>Jeff Sutherland and Scott Downey</div><div>Agile 2010 Submission</div><div><br /></div><div>Scrum teams use lightweight metrics like story points, the burndown chart, and team velocity. The inventor of Scrum was a fighter pilot and used the burndown chart to help teams land a sprint properly. Recent work with hyperproductive teams shows they are like modern jet fighters in two ways. They have engines that produce velocity—alignment of the team, and team spirit. And they carefully measures aspects of performance to make slight adjustments in flight. Failing to constantly adjust the flight of the team can result in a hyperproductive crash into waterfall performance.</div><div><br /></div><div>One hour discussion of a comprehensive, yet minimal set of team metrics used in an environment where hyperproductive teams are the norm, along with an Excel spreadsheet that can be used by any Scrum team to improve performance. Velocity, story completion by priority, work in progress, story acceptance rate by product owner, unplanned work, and trending accuracy of estimates all appear to be essential to determine the altitude, velocity, angle of attack, and attitude of a hyperproductive team. Slight adjustment of these parameters on a daily basis keeps the team on target. Half hour questions and discussion on using the Excel spreadsheet to improve team performance.</div><div><br /></div><div><b><span class="Apple-style-span" style="font-size: small;">How you can download Scott Downey's extremely cool Excel Spreadsheet for your Scrum team:</span></b></div><div><span class="Apple-style-span" style="font-size: small;"><b><br /></b></span></div><div><span class="Apple-style-span" style="font-size: small;">Go to the Agile 2010 speaker web site:</span></div><div><span class="Apple-style-span" style="font-size: small;"><a href="http://agile2010.agilealliance.org/speaker.html">http://agile2010.agilealliance.org/speaker.html</a></span></div><div><span class="Apple-style-span" style="font-size: small;"><br /></span></div><div><span class="Apple-style-span" style="font-size: small;">Click on login and sign up for a free account. You can then login and access:</span></div><div><span class="Apple-style-span" style="font-size: small;"><a href="http://agile2010.agilealliance.org/node/5217">http://agile2010.agilealliance.org/node/5217</a></span></div><div><span class="Apple-style-span" style="font-size: small;"><br /></span></div><div><span class="Apple-style-span" style="font-size: small;">Please give us a few positive comments in a review so Agile 2010 will get this submission on the agenda for the conference. You can download the spreadsheet at the link above.</span></div><div><span class="Apple-style-span" style="font-size: small;"><br /></span></div><div><span class="Apple-style-span" style="font-size: small;"><br /></span></div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/3491762-6008546515364474842?l=jeffsutherland.com" width="1" /></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/TY4lwpFKsG4" height="1" width="1" /></div></content>
    <updated>2010-01-30T17:43:00Z</updated>
    <published>2010-01-30T17:43:00Z</published>
    <author>
      <name>Jeff Sutherland</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/07761053439034726679</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-3491762</id>
      <author>
        <name>Jeff Sutherland</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/07761053439034726679</uri>
      </author>
      <link href="http://www.blogger.com/feeds/3491762/posts/default" rel="self" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/" rel="alternate" type="text/html" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://www.blogger.com/feeds/3491762/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/scrum/rss.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" />
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img src="http://jeffsutherland.com/scrumphoto_small.jpg" />
Scrum is an Agile development framework that Jeff Sutherland invented at Easel Corporation in 1993. Jeff worked with Ken Schwaber to formalize Scrum at <a href="http://jeffsutherland.com/oopsla/schwaber.html">OOPSLA'95</a>. 
Together, they extended and enhanced Scrum at many software companies and helped write the <a href="http://agilemanifesto.org">Agile Manifesto</a>.<br /><br /></div>
      </subtitle>
      <title>Scrum Log Jeff Sutherland</title>
      <updated>2010-02-04T06:00:47Z</updated>
    </source>
  <feedburner:origLink>http://jeffsutherland.com/2010/01/excel-spreadsheet-for-hyperproductive.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/?p=717</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/imJSWcVgVhY/welcome-to-new-notes-from-a-tool-user-blog.html" rel="alternate" type="text/html" />
    <title>Welcome to new Notes from a Tool User blog</title>
    <summary>We decided to move the Notes from a Tool User blog out from Typepad to a Wordpress platform. From now on, you will be able to find the blog here – at agilepainrelief.com/notesfromatooluser.
You was probably redirected here from the old www.notesfromatooluser.com address which we will no longer use.
Don’t worry, you all the content from the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>We decided to move the <strong>Notes from a Tool User</strong> blog out from Typepad to a Wordpress platform. From now on, you will be able to find the blog here – at <a href="http://agilepainrelief.com/notesfromatooluser">agilepainrelief.com/notesfromatooluser</a>.</p>
<p>You was probably redirected here from the old <a href="http://www.notesfromatooluser.com/">www.notesfromatooluser.com</a> address which we will no longer use.</p>
<p>Don’t worry, you all the content from the original site is here and you old links will keep working.</p>
<img height="1" src="http://feeds.feedburner.com/~r/NotesFromAToolUser/~4/O34ru8ap3H4" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/imJSWcVgVhY" height="1" width="1" /></div></content>
    <updated>2010-01-29T10:48:52Z</updated>
    <category term="Uncategorized" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/01/welcome-to-new-notes-from-a-tool-user-blog.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-02-10T19:16:24Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/O34ru8ap3H4/welcome-to-new-notes-from-a-tool-user-blog.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-3760875911121218470</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/gIYbFKUP70g/dont-aim-for-target.html" rel="alternate" type="text/html" />
    <title>Don't aim at the target</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Without numerical measures we wouldn't know what to do. The problem is, when numerical measures are used as targets they cause people to think their sole purpose is to achieve them, usually to the detriment of everything else. When managers own the targets and use them to force performance they bring out the wrong behaviors. People cut corners to meet the targets. And targets are everywhere. We blinker ourselves to everything except our targets and forget about the real needs of users. In pursuit of our targets we make local optimizations that are suboptimal for the throughput of the whole system, the wider organization.<br /><br />Measures should reflect the true purpose of the people doing the work, which is to improve service and quality and satisfy users, and should therefore measure the improvements directly experienced by users. These people are in the best position to decide how to improve quality and performance and they should own the measures and use them to understand their work as a system. As part of a <a href="http://en.wikipedia.org/wiki/PDCA">plan-do-check-act</a> cycle, they should study the actual results of changes aimed at improvement, comparing them to expectations, analyzing the differences to determine cause, and then identify further opportunities to improve the system.<br /><br />Managers shouldn't use their measures as targets to control our performance. Instead, we should use our measures to continuously improve how we work so that our system performs better.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-3760875911121218470?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/aAU1XslGk08" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/gIYbFKUP70g" height="1" width="1" /></div></summary>
    <updated>2010-01-25T13:16:28Z</updated>
    <category term="continuous improvement" />
    <category term="measures" /><feedburner:origLink>http://blog.energizedwork.com/2010/01/dont-aim-for-target.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:32Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/aAU1XslGk08/dont-aim-for-target.html</feedburner:origLink></entry>

  <entry>
    <id>tag:blogger.com,1999:blog-3491762.post-6840196298571312166</id>
    <link href="http://www.blogger.com/feeds/3491762/6840196298571312166/comments/default" rel="replies" type="application/atom+xml" />
    <link href="https://www.blogger.com/comment.g?blogID=3491762&amp;postID=6840196298571312166" rel="replies" type="text/html" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/6840196298571312166" rel="edit" type="application/atom+xml" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/6840196298571312166" rel="self" type="application/atom+xml" />
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/XWYwvVpGpFM/role-of-manger-in-scrum.html" rel="alternate" type="text/html" />
    <title>Role of the Manager in Scrum</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="separator" style="clear: both;"><a href="http://4.bp.blogspot.com/_hVKvmhIMlbI/S1xAgclFynI/AAAAAAAAAJM/svr9P-jBBSc/s1600-h/Sti%20logo%20red.jpg" style="margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_hVKvmhIMlbI/S1xAgclFynI/AAAAAAAAAJM/svr9P-jBBSc/s1600/Sti%20logo%20red.jpg" /></a><br /></div><br />Pete Deemer, our Business Manager at the Scrum Training Institute, has written an excellent article on the role of the manager in Scrum.<br /><br />---------<br /><span style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;" /><br /><ul>Like me, you probably get asked the following question quite often: "What's the role of a manager in Scrum? I'm a manager, and since I'm not mentioned in the definition of the Scrum roles, and the team is self-organizing, does that mean I'm supposed to just... disappear?" </ul><ul>I recently wrote a short guide to answering this question. A couple other CST's have stumbled upon it in the last few weeks and emailed me to say they found it quite useful, and I wanted to share it with the full group as well. If you have any feedback or suggestions, I'd love to hear. You can download the guide at:  Manager 2.0: The Role of the Manager in Scrum <a href="http://scrumti.com/home/stream_download/%23%3CUUID:0xb747aba0%3E-71972" style="color: #2a5db0;" target="_blank">http://scrumti.com/home/stream_download/%23%3CUUID:0xb747aba0%3E-71972</a></ul><ul>Pete Deemer</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/3491762-6840196298571312166?l=jeffsutherland.com" width="1" /></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/XWYwvVpGpFM" height="1" width="1" /></div></content>
    <updated>2010-01-24T12:47:47Z</updated>
    <published>2010-01-24T12:45:00Z</published>
    <author>
      <name>Jeff Sutherland</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/07761053439034726679</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-3491762</id>
      <author>
        <name>Jeff Sutherland</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/07761053439034726679</uri>
      </author>
      <link href="http://www.blogger.com/feeds/3491762/posts/default" rel="self" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/" rel="alternate" type="text/html" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://www.blogger.com/feeds/3491762/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/scrum/rss.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" />
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img src="http://jeffsutherland.com/scrumphoto_small.jpg" />
Scrum is an Agile development framework that Jeff Sutherland invented at Easel Corporation in 1993. Jeff worked with Ken Schwaber to formalize Scrum at <a href="http://jeffsutherland.com/oopsla/schwaber.html">OOPSLA'95</a>. 
Together, they extended and enhanced Scrum at many software companies and helped write the <a href="http://agilemanifesto.org">Agile Manifesto</a>.<br /><br /></div>
      </subtitle>
      <title>Scrum Log Jeff Sutherland</title>
      <updated>2010-02-04T06:00:47Z</updated>
    </source>
  <feedburner:origLink>http://jeffsutherland.com/2010/01/role-of-manger-in-scrum.html</feedburner:origLink></entry>

  <entry>
    <id>tag:blogger.com,1999:blog-3491762.post-5962666205683279725</id>
    <link href="http://www.blogger.com/feeds/3491762/5962666205683279725/comments/default" rel="replies" type="application/atom+xml" />
    <link href="https://www.blogger.com/comment.g?blogID=3491762&amp;postID=5962666205683279725" rel="replies" type="text/html" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/5962666205683279725" rel="edit" type="application/atom+xml" />
    <link href="http://www.blogger.com/feeds/3491762/posts/default/5962666205683279725" rel="self" type="application/atom+xml" />
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/GPLgXu-6MzM/agile-2010-abstract-posted-hitting-wall.html" rel="alternate" type="text/html" />
    <title>Agile 2010 Abstract Posted: Hitting the Wall!</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_hVKvmhIMlbI/S1wzR68b11I/AAAAAAAAAI0/Khl5gDFxz5k/s1600-h/agile2010.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="144" src="http://4.bp.blogspot.com/_hVKvmhIMlbI/S1wzR68b11I/AAAAAAAAAI0/Khl5gDFxz5k/s640/agile2010.png" width="640" /></a><br /></div><b><br /></b><br /><b>Hitting the Wall: What to Do When High Performing Scrum Overwhelms Operations</b><br /><br />ll-at-once Scrum implementations require total commitment to change, high level management participation and aggressive removal of impediments. In July of 2009, Pegasystems (NASDAQ:PEGA) deployed 27 Scrum teams in the U.S. and India in less than two months and global continuous integration became a top priority impediment. To avoid “hitting the wall” before the first major Scrum release of their enterprise software applications, a Scrum SWAT team engineered a continuous integration environment for hundreds of software developers on two continents within a few weeks.<br /><br />* Understand strategy for widespread deployment of Scrum in an enterprise<br />* See impact of Scrum team productivity on operations and infrastructure<br />* Learn how to identify top priority engineering impediments<br />* Be able to rapidly deploy continuous integration in a complex enterprise software environment<br /><div><br /></div><div>Create a free account at <a href="http://agile2010.agilealliance.org/speaker.html">http://agile2010.agilealliance.org/speaker.html</a> and you can download and review a draft of this paper.</div><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/3491762-5962666205683279725?l=jeffsutherland.com" width="1" /></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/GPLgXu-6MzM" height="1" width="1" /></div></content>
    <updated>2010-01-24T11:48:41Z</updated>
    <published>2010-01-24T11:48:00Z</published>
    <author>
      <name>Jeff Sutherland</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/07761053439034726679</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-3491762</id>
      <author>
        <name>Jeff Sutherland</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/07761053439034726679</uri>
      </author>
      <link href="http://www.blogger.com/feeds/3491762/posts/default" rel="self" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/" rel="alternate" type="text/html" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://www.blogger.com/feeds/3491762/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml" />
      <link href="http://jeffsutherland.com/scrum/rss.xml" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" />
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img src="http://jeffsutherland.com/scrumphoto_small.jpg" />
Scrum is an Agile development framework that Jeff Sutherland invented at Easel Corporation in 1993. Jeff worked with Ken Schwaber to formalize Scrum at <a href="http://jeffsutherland.com/oopsla/schwaber.html">OOPSLA'95</a>. 
Together, they extended and enhanced Scrum at many software companies and helped write the <a href="http://agilemanifesto.org">Agile Manifesto</a>.<br /><br /></div>
      </subtitle>
      <title>Scrum Log Jeff Sutherland</title>
      <updated>2010-02-04T06:00:47Z</updated>
    </source>
  <feedburner:origLink>http://jeffsutherland.com/2010/01/agile-2010-abstract-posted-hitting-wall.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://blog.gdinwiddie.com/?p=306</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/Smc4j0U0Qqo/" rel="alternate" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/#comments" rel="replies" type="text/html" />
    <link href="http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/feed/atom/" rel="replies" type="application/atom+xml" />
    <title xml:lang="en">I do not endorse PMAC Certification</title>
    <summary xml:lang="en">It has come to my attention that the PMAC (Project Management Association of Canada / Association de Management de Projet du Canada) claims that I support their certification program.  This is a lie.  I do not support their certification program.
Their claim seems to based on a mailing list posting in which I said,
I applaud your [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>It has come to my attention that the PMAC (Project Management Association of Canada / Association de Management de Projet du Canada) <a href="http://www.pmac-ampc.ca/Cert.APM" target="_blank" title="PMAC certification program">claims that I support their certification </a>program.  This is a lie.  <strong>I do not support their certification program.</strong></p>
<p>Their claim seems to based on a <a href="http://finance.groups.yahoo.com/group/agileprojectmanagement/message/11995?l=1" target="_blank" title="Agile Project Management mailing list posting">mailing list posting</a> in which I said,</p>
<blockquote><p>I applaud your efforts to educate the “traditional project manager” in Agile techniques.  I hope that you are very effective in doing so.</p></blockquote>
<ul>
<li>I did not say <em>anything</em> about their certification program.</li>
<li>They did not ask me if they could use my words on their web site.</li>
<li>They have fraudulently quoted me as if I have endorsed their certification.</li>
</ul>
<p>I am all for education. I am suspicious of certifications. I am angry that I have been so misrepresented.</p>
<p><span style="text-decoration: line-through;">I consider this misrepresentation to be a sleazy trick. It give me the impression that PMAC is not to be trusted. I suggest that you be wary of them.</span></p>
         <img alt="" src="http://blog.gdinwiddie.com/?ak_action=api_record_view&amp;id=306&amp;type=feed" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/Smc4j0U0Qqo" height="1" width="1" /></div></content>
    <updated>2010-01-23T23:00:23Z</updated>
    <published>2009-12-07T17:41:19Z</published>
    <category scheme="http://blog.gdinwiddie.com" term="Individuals and Interactions" />
    <author>
      <name>George Dinwiddie</name>
      <uri>http://blog.gdinwiddie.com/</uri>
    </author>
    <source>
      <id>http://blog.gdinwiddie.com/feed/atom/</id>
      <link href="http://blog.gdinwiddie.com" rel="alternate" type="text/html" />
      <link href="http://blog.gdinwiddie.com/feed/atom/" rel="self" type="application/atom+xml" />
      <subtitle xml:lang="en">Effective software development</subtitle>
      <title xml:lang="en">George Dinwiddie's blog</title>
      <updated>2010-03-08T12:52:41Z</updated>
    </source>
  <feedburner:origLink>http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>tag:blogger.com,1999:blog-8882974.post-3305343067881814579</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/udQkrH8lA2Q/bad-posture.html" rel="alternate" type="text/html" />
    <title>Bad posture</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.agileproductdesign.com/blog/">Jeff Patton</a> recently tweeted: <br /><blockquote><i>“I see agile process practiced with waterfall posture. By posture I mean the values, principles, and thinking processes with which you approach software development.”</i><br /></blockquote>I like this.<br />It's a simple way to explain many of the things I see.<br />'Posture'.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8882974-3305343067881814579?l=blog.energizedwork.com" width="1" /></div><img height="1" src="http://feeds.feedburner.com/~r/AgileInAction/~4/jLZJgzaEo3I" width="1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/udQkrH8lA2Q" height="1" width="1" /></div></summary>
    <updated>2010-01-23T18:07:55Z</updated><feedburner:origLink>http://blog.energizedwork.com/2010/01/bad-posture.html</feedburner:origLink>
    <author>
      <name>Simon Baker</name>
      <email>simon@energizedwork.com</email>
    </author>
    <source>
      <id>http://blog.energizedwork.com/</id>
      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
      <author>
        <name>Simon Baker</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://blog.energizedwork.com/" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/AgileInAction" rel="self" type="application/rss+xml" />
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html" />
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license" />
      <subtitle>This is the blog of Simon Baker and Gus Power of Energized Work.</subtitle>
      <title>Energized Work | agile in action</title>
      <updated>2010-03-07T17:17:33Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/AgileInAction/~3/jLZJgzaEo3I/bad-posture.html</feedburner:origLink></entry>

  <entry xml:lang="en">
    <id>http://agilepainrelief.com/?p=679</id>
    <link href="http://feedproxy.google.com/~r/agileplanetorg/~3/MjjrBlW_EP4/in-flux.html" rel="alternate" type="text/html" />
    <title>In flux</title>
    <summary>This site isn’t quite up and running yet and as such is in a massive state of flux. If you’re looking for Mark Levison – Agile Pain Relief Consultant – send an email to /*
Thanks for your patience
Mark</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This site isn’t quite up and running yet and as such is in a massive state of flux. If you’re looking for Mark Levison – Agile Pain Relief Consultant – send an email to</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/agileplanetorg/~4/MjjrBlW_EP4" height="1" width="1" /></div></content>
    <updated>2010-01-21T19:47:43Z</updated>
    <category term="Blog" /><feedburner:origLink>http://agilepainrelief.com/notesfromatooluser/2010/01/in-flux.html</feedburner:origLink>
    <author>
      <name>Mark Levison</name>
    </author>
    <source>
      <id>http://agilepainrelief.com</id>
      <link href="http://agilepainrelief.com" rel="alternate" type="text/html" />
      <link href="http://feeds.feedburner.com/NotesFromAToolUser" rel="self" type="application/atom+xml" />
      <link href="http://pubsubhubbub.appspot.com" rel="hub" type="text/html" />
      <subtitle>Best practices for your goals</subtitle>
      <title>Agile Pain Relief » Blog</title>
      <updated>2010-02-10T19:16:24Z</updated>
    </source>
  <feedburner:origLink>http://feedproxy.google.com/~r/NotesFromAToolUser/~3/dySG5OpkIig/in-flux.html</feedburner:origLink></entry>
</feed>
