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

<channel>
	<title>Agile Insider</title>
	<atom:link href="http://www.agileinsider.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agileinsider.org</link>
	<description>reality bytes...</description>
	<lastBuildDate>Mon, 14 Sep 2009 12:10:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Functional Debt</title>
		<link>http://www.agileinsider.org/2009/09/functional-debt/</link>
		<comments>http://www.agileinsider.org/2009/09/functional-debt/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 12:10:50 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=192</guid>
		<description><![CDATA[Thanks to Ward Cunningham, we now have a wonderful metaphor "Technical Debt" which explains the common problem of skipping a little bit of design or missing out that little bit of refactoring to meet a deadline.  Whenever we cut corners there is a very good chance we are taking on more and more Technical Debt.
But [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to <a href="http://www.c2.com/cgi/wiki?WardCunningham" target="_blank">Ward Cunningham</a>, we now have a wonderful metaphor "<a href="http://martinfowler.com/bliki/TechnicalDebt.html" target="_blank">Technical Debt</a>" which explains the common problem of skipping a little bit of design or missing out that little bit of <a title="refactoring" href="http://www.agileinsider.org/tag/refactoring/">refactoring</a> to meet a deadline.  Whenever we cut corners there is a very good chance we are taking on more and more Technical Debt.</p>
<div id="attachment_193" class="wp-caption alignleft" style="width: 278px"><img class="size-full wp-image-193" title="Burning Money" src="http://www.agileinsider.org/wp-content/uploads/2009/09/burning-money-2.jpg" alt="Money to Burn? Invest in Functional Debt" width="268" height="300" /><p class="wp-caption-text">Money to Burn? Invest in Functional Debt</p></div>
<p>But is there a flip side to this?  I think there is and the term I would use is Functional Debt.  This is tied firmly in the <a href="http://c2.com/xp/YouArentGonnaNeedIt.html" target="_blank">YAGNI</a> camp and relates to functionality that is developed without a need (or worse still a test).  Applying too much design, or developing generic frameworks with no business reason to do so inevitably leads to a solution which is over-engineered.  Of course, over-engineering as a term has been around for a long time, but I prefer the term Functional Debt, because this ties it back to money in a similar way to Technical Debt.</p>
<p>Debt is a term that evokes emotion and is easy for people to identify with and it is this capacity of the term to clarify the issue with a certain practise.  Over-engineering as a term doesn't evoke the same response and certainly doesn't suggest a loss of money in the same way that Debt does.</p>
<p>There are of course direct, easily measurable costs involved in creating unused functionality and that is the development costs, however, there are many more subtle costs that are easy to overlook.  There is the missed opportunity costs associated with not doing the right thing.  There is the project overhead costs in maintaining code that is not used.  There is the project overhead costs in increased complexity and time for the standard day to day activities of testing and <a title="refactoring" href="http://www.agileinsider.org/tag/refactoring/">refactoring</a>.  There is the increased maintenance costs since it is now harder to understand the code for support personnel...</p>
<p>One of the biggest causes for Functional Debt I have seen is a lack of customer (business) involvement or direction.  Left to their own devices, IS departments naturally build overly- complex solutions to simple problems.  Without a business value attached to a piece of functionality (actually to a problem that is solved by a piece of functionality) it is only too easy for the IS department to burn money like there's no tomorrow.</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/09/functional-debt/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/09/functional-debt/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/09/functional-debt/&title=Functional+Debt" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/09/functional-debt/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/09/functional-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vision &gt;= Solution &gt;= Problem</title>
		<link>http://www.agileinsider.org/2009/08/vision-solution-problem/</link>
		<comments>http://www.agileinsider.org/2009/08/vision-solution-problem/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 09:00:34 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[puzzles]]></category>
		<category><![CDATA[pragmatism]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=185</guid>
		<description><![CDATA[I'll admit it, I'm not 100% agile since I tend to like solutions.  I would prefer a problem to solve, but if a problem is intangible I often find a solution is a great way to explore the potential and help express the underlying problem.
It is worth noting that innovation and invention are solutions [...]]]></description>
			<content:encoded><![CDATA[<p>I'll admit it, I'm not 100% agile since I tend to like solutions.  I would prefer a problem to solve, but if a problem is intangible I often find a solution is a great way to explore the potential and help express the underlying problem.</p>
<p>It is worth noting that innovation and invention are solutions and not problems.  When you apply for a patent, you don't patent the problem, you patent the solution, why?  If there are multiple solutions to any given problem then wouldn't we want to patent the problem?</p>
<p>I also find that quite often the solutions I am exploring are the result of a problem that I have assumed was well known and in actuality is not; it is in these moments that using the solution to derive the lowest common denominator of a problem stated as a user story can ensure that everyone is speaking the same language.</p>
<p>But given a solution, do we always need to know the problem?  My <a title="pragmatism" href="http://www.agileinsider.org/tag/pragmatism/">pragmatism</a> (and a few lean principles, i.e. waste) would state that if the solution brings value then run with it, if not ditch it.  If on the other hand the solution seems too constrained or lacking in features/functionality, then why not exploit the solution as the basis for a <a title="vision" href="http://www.agileinsider.org/tag/vision/">vision</a>?  Indeed many visions are just that, solutions to problems, expressed in a language alien to most developers.</p>
<p>So given a <a title="vision" href="http://www.agileinsider.org/tag/vision/">vision</a> expressed in an abstract form vs a vision that is pinned against an actual solution which is easier to understand and less likely to be misinterpreted?  I know which I'd prefer...</p>
<p>Do solutions have value, obviously; must we always mine problems, hmmm...</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/08/vision-solution-problem/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/08/vision-solution-problem/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/08/vision-solution-problem/&title=Vision+%3E%3D+Solution+%3E%3D+Problem" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/08/vision-solution-problem/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/08/vision-solution-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ten Commandments of Agile</title>
		<link>http://www.agileinsider.org/2009/07/ten-commandments-of-agile/</link>
		<comments>http://www.agileinsider.org/2009/07/ten-commandments-of-agile/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 09:05:02 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[commandments]]></category>
		<category><![CDATA[fuzzy]]></category>
		<category><![CDATA[psychology]]></category>
		<category><![CDATA[satire]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=171</guid>
		<description><![CDATA[I've posted a few entries now about my unease with the fuzziness surrounding Agile and how I feel it needs some clarity so I thought I'd have a quick stab at it.
The following commandments would be my first stab at such a list which would apply to any person who is part of or interacts [...]]]></description>
			<content:encoded><![CDATA[<p>I've posted a few entries now about my unease with the fuzziness surrounding Agile and how I feel it needs some clarity so I thought I'd have a quick stab at it.</p>
<p>The following <a title="commandments" href="http://www.agileinsider.org/tag/commandments/">commandments</a> would be my first stab at such a list which would apply to <strong>any</strong> person who is part of or interacts with an Agile <a title="team" href="http://www.agileinsider.org/tag/team/">team</a>.</p>
<ol>
<li>Thou shalt not negotiate <a title="quality" href="http://www.agileinsider.org/tag/quality/">quality</a></li>
<li>Thou shalt not prophesize without proof</li>
<li>Thou shalt not falsify the facts</li>
<li>Thou shalt not force thy wishes on others</li>
<li>Thou shalt not discourage those around you</li>
<li>Thou shalt not disparage the actions of others</li>
<li>Thou shalt not work without committment</li>
<li>Thou shalt not focus on more than a singular item</li>
<li>Thou shalt not demonstrate incomplete work</li>
<li>Thou shalt not act in isolation</li>
</ol>
<p>Of course, this is just a bit of fun on my part, but I fail to see why there can't be a set of golden rules of Agile?  This is also a very quick list, so who knows, I may revisit this at some time to refine it...</p>
<p>Also, please note, I'm not being remotely <a title="fuzzy" href="http://www.agileinsider.org/tag/fuzzy/">fuzzy</a> about this...  I'm not saying</p>
<blockquote><p>"I value not negotiating <a title="quality" href="http://www.agileinsider.org/tag/quality/">quality</a> over allowing any old crap in the code..."</p></blockquote><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/07/ten-commandments-of-agile/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/07/ten-commandments-of-agile/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/07/ten-commandments-of-agile/&title=Ten+Commandments+of+Agile" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/07/ten-commandments-of-agile/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/07/ten-commandments-of-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Could Agile Have Evolved?</title>
		<link>http://www.agileinsider.org/2009/06/could-agile-have-evolved/</link>
		<comments>http://www.agileinsider.org/2009/06/could-agile-have-evolved/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 10:44:42 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[puzzles]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[human nature]]></category>
		<category><![CDATA[simplicity]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=160</guid>
		<description><![CDATA[I've been researching material to support an article on my company blog entitled "Agile Dictators" and it left me thinking about how Agile started in the first place.
The more I reflect on this, the more I am left feeling that Agile is actually a mutation in software development and this is one of the major [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_165" class="wp-caption alignleft" style="width: 250px"><a href="http://www.3dscience.com/3D_Models/Biology/DNA/DNA.php"><img class="size-full wp-image-165" title="DNA" src="http://www.agileinsider.org/wp-content/uploads/2009/06/3d_model_DNA_web1.jpg" alt="DNA" width="240" height="240" /></a><p class="wp-caption-text">DNA</p></div>
<p>I've been researching material to support an article on my <a title="blogn@emergn" href="http://www.agileinsider.org/blogn" target="_blank">company blog</a> entitled "Agile Dictators" and it left me thinking about how Agile started in the first place.</p>
<p>The more I reflect on this, the more I am left feeling that Agile is actually a mutation in software development and this is one of the major reasons why Agile is so difficult to master.  I'm wondering whether agile would ever naturally evolve in a small <a title="team" href="http://www.agileinsider.org/tag/team/">team</a> left to their own devices and I simply can't envisage it.  Of course, this will now remain an academic hypothesis since Agile has now stamped it's influence indelibly on the DNA of software development.</p>
<p>Software development as a craft suffers from unnecessary complexity and I fear that Agile, which initially thrived in simplifying (or removing) this complexity, is now becoming itself encompassed in unnecessary complexity.  Despite agreeing with much of the sentiment of the <a href="http://manifesto.softwarecraftsmanship.org/" target="_blank">software craftmanship manifesto</a> I just can't bring myself to sign up to it yet.  I struggle to see the benefit of more <a title="fuzzy" href="http://www.agileinsider.org/tag/fuzzy/">fuzzy</a> aspirational statements and would prefer to see a clarity of <a title="vision" href="http://www.agileinsider.org/tag/vision/">vision</a> and roadmap to achieving it.</p>
<p>Fundamentally Agile is fantastic, but sadly the passionate discussions, raging debates and conflicting methodologies don't clarify anything.  If Agile doesn't clearly define itself soon I fear yet another mutation may take centre stage and Agile will end up being just a blip (albeit a very significant blip, where we gained sight) in the evolution of software development.</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/06/could-agile-have-evolved/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/06/could-agile-have-evolved/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/06/could-agile-have-evolved/&title=Could+Agile+Have+Evolved%3F" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/06/could-agile-have-evolved/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/06/could-agile-have-evolved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Love Wave, Hate Google</title>
		<link>http://www.agileinsider.org/2009/06/love-wave-hate-google/</link>
		<comments>http://www.agileinsider.org/2009/06/love-wave-hate-google/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 09:43:33 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[just enough]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=151</guid>
		<description><![CDATA[With the recent announcement of Google Wave at google I/O, I'm hating the wait...  I need it now...]]></description>
			<content:encoded><![CDATA[<p>I've not tried <a title="wave" href="http://www.agileinsider.org/tag/wave/">wave</a>, but I'm already loving it, I can see immediately how it addresses one of my wishes from a previous post...  But I'm hating the wait.  I had always looked to <a title="Google" href="http://www.agileinsider.org/tag/google/">Google</a> as a very pioneering company and certainly assumed they applied agile principles.  However, I can't see how such an important disruptive technology like <a title="Google" href="http://www.agileinsider.org/tag/google/">Google</a> <a title="Wave" href="http://www.agileinsider.org/tag/wave/">Wave</a> has managed to stay behind closed doors for 2 years...</p>
<p>I've been working on a few internal projects for <a href="http://www.agileinsider.org/exoftware" target="_blank">my company</a> of late and this has involved working in a distributed fashion (yes, pairing by phone), and during some of these sessions I can immediately envisage the <a title="benefits" href="http://www.agileinsider.org/tag/benefits/">benefits</a> of using Wave.</p>
<p>Surely there is at least one complete, tested feature they can roll out to production?  My concern is there are still some fundamental challenges facing the <a title="team" href="http://www.agileinsider.org/tag/team/">team</a>, and I would not be surprised to find it being concurrency issues, so as the potential end-user of this technology I'm going to make it clear, I don't particularly care about have multiple users editing the same document in real-time with transparent, asynchronous updating...  Let me edit, commit, refresh, etc as a simple starting point...  But whatever you do, let me do something before I find a simple alternative...</p>
<p>To find out more about wave, visit the wave site <a href="http://wave.google.com/" target="_blank">http://wave.google.com/</a>, and especially watch the google I/O presentation...</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/06/love-wave-hate-google/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/06/love-wave-hate-google/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/06/love-wave-hate-google/&title=Love+Wave%2C+Hate+Google" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/06/love-wave-hate-google/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/06/love-wave-hate-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real Value of Test First is the Thought Process</title>
		<link>http://www.agileinsider.org/2009/06/real-value-of-test-first/</link>
		<comments>http://www.agileinsider.org/2009/06/real-value-of-test-first/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 16:51:31 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[test driven]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[just enough]]></category>
		<category><![CDATA[pragmatism]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test first]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=141</guid>
		<description><![CDATA[Thanks to a colleague at Exoftware I'm left questioning the real value of TDD.]]></description>
			<content:encoded><![CDATA[<div id="attachment_143" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-143" title="A Bit Too Simple" src="http://www.agileinsider.org/wp-content/uploads/2009/06/simple_test-300x299.jpg" alt="TDD found the simple solution ;)" width="300" height="299" /><p class="wp-caption-text">TDD found the simple solution <img src='http://www.agileinsider.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></div>
<p><a title="Test Driven" href="http://www.agileinsider.org/tag/test-driven/">Test Driven</a> is a loaded term and means different things to different people.  I much prefer the term <a title="Test First" href="http://www.agileinsider.org/tag/test-first/">Test First</a> which clearly states that the test comes before the implementation.  However, for me, the value is not necessarily in creating an executable test, but in the thought processes that <a title="Test First" href="http://www.agileinsider.org/tag/test-first/">Test First</a> brings out.</p>
<p>One of my colleagues at <a href="http://3.ly/n1" target="_blank">Exoftware</a> is constantly reminding me that when presented with a solution you need to ask yourself what is the problem. This is what lead me to question TDD and it's variants.  If you search the web for <a title="Test Driven" href="http://www.agileinsider.org/tag/test-driven/">Test Driven</a> Development, you'll uncover a wealth of information from many of the authors in my BlogRoll, as well as many variants on a theme. I think the <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">wikipedia entry</a> is a particularly good summary of Test Driven as it is currently understood by the community but for the real meat and bones you need to look at the articles from the thought leaders behind the practises.</p>
<p>However, when I look at this wealth of information, I'm now faced with the question...  OK, these are all solutions, but what is the fundamental problem they are solving?  Is it</p>
<ul>
<li>Code <a title="quality" href="http://www.agileinsider.org/tag/quality/">quality</a>/design is poor</li>
<li>Code is overly complex/difficult to test</li>
<li>Unused functionality within the code</li>
<li>Too many bugs</li>
</ul>
<p>It is only when we understand the underlying problem fully that we can then evaluate the applicability/suitability of a particular approach.  Indeed, it is this lack of a clearly defined problem which makes it impossible to determine which approach is best, since we can't define any tests up front...  This is actually a little bit of a paradox, but highlights for me one of the most important points about TDD.  TDD is a solution to too many problems and in certain cases is not a very good solution.</p>
<p>Testing should be about proving functionality, but unfortunately we too often see TDD trying to address non testing issues like design and code <a title="quality" href="http://www.agileinsider.org/tag/quality/">quality</a>.  Of course, code needs to be testable, but it is not the responsibility of the Testing to enforce this, it is the responsibility of the design, but this is (unfortunately IMHO) the missing piece in most methodologies...  Indeed, the approach of writing the "Simplest Possible Thing" to pass a test is possibly my biggest bug-bear with TDD.  This approach often means you can <strong>pass tests with no functionality</strong> other than hard coded return values, now that has to be the biggest process smell ever.</p>
<p>I'm going to stop using TDD, or Test Driven now and use instead the term I prefer which is Test First.  For me, this means that before I do anything, I will <strong>determine</strong> ahead of time how I <strong>would</strong> test it.  The immediate benefit (a.k.a value) I get from determining how to test something is I'm also starting to think about (dare I suggest design) things like apis/design/interaction/responsibilities.  This is not the same as BDUF (big design up front), instead it is <a title="just enough" href="http://www.agileinsider.org/tag/just-enough/">just enough</a> thought at just the right moment to (hopefully)  prevent a disaster.  I can then apply some cost/benefit <a title="analysis" href="http://www.agileinsider.org/tag/analysis/">analysis</a> with a pinch of <a title="risk" href="http://www.agileinsider.org/tag/risk/">risk</a> <a title="analysis" href="http://www.agileinsider.org/tag/analysis/">analysis</a> to assign a value to actually writing all the tests that TDD would have forced you to write, or just a small percentage to cover the important or more complex functionality.</p>
<p>Of course, in many cases I will actually create executable tests for many of those uncovered during this thought exercise, but will I go through the whole Red/Green/Refactor cycle, possibly not.  For me the Red/Green/Refactor is like micro context switching.  I prefer a slightly longer period of focus and therefore I may write quite a few tests at the same time before applying that context switch to go into coding mode.  This of course is my personal preference and undoubtedly would be scorned upon by the dogmatic TDD zealots, but if this is what makes me more productive, and without a baseline problem statement I challenge them to prove that this is not the best way to do your testing.</p>
<p>Test First allows me to</p>
<ul>
<li>Understand the problem I'm trying to solve</li>
<li>Think about how I will solve it (<a title="just enough" href="http://www.agileinsider.org/tag/just-enough/">just enough</a> design)</li>
<li>Uncover any unknowns or risks hidden in the initial problem statement</li>
<li>Produce high quality code which has just enough tests</li>
</ul>
<p>Many of the Test Driven approaches do indeed address many of the initial problems stated earlier, but are they the only solution to these problems?  Indeed, are these problems actually just symptoms of even deeper problems?  If the problem is simply that your code is very tightly coupled and difficult to test then the best ROI will probably come not from TDD but from up-skilling your development <a title="team" href="http://www.agileinsider.org/tag/team/">team</a> on fundamental design principles (unskilled developers was the <strong>real problem</strong> in the first place and TDD can't solve that).</p>
<p>Resources:</p>
<ul>
<li>Wikipedia entry for Test Driven Development:  <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">http://en.wikipedia.org/wiki/Test-driven_development</a></li>
<li>Introducing BDD by Dan North: <a href="http://dannorth.net/introducing-bdd" target="_blank">http://dannorth.net/introducing-bdd</a> (highly recommended reading)</li>
<li>C2 wiki entry for Test Driven: <a href="http://c2.com/cgi/wiki?TestDriven" target="_blank">http://c2.com/cgi/wiki?TestDriven</a></li>
</ul><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/06/real-value-of-test-first/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/06/real-value-of-test-first/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/06/real-value-of-test-first/&title=The+Real+Value+of+Test+First+is+the+Thought+Process" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/06/real-value-of-test-first/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/06/real-value-of-test-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Red Button</title>
		<link>http://www.agileinsider.org/2009/06/big-red-button/</link>
		<comments>http://www.agileinsider.org/2009/06/big-red-button/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:42:52 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[pragmatism]]></category>
		<category><![CDATA[risk]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=136</guid>
		<description><![CDATA[Here's my little user story:
As a blogger,
I want to use Threely as my url shortener.
So that I get more letters on Twitter.
Pretty simple story, and also very simple to implement, but impossible to test?  I can certainly test the API to twitter, but given I use a wordpress plugin (developed by someone else) to do [...]]]></description>
			<content:encoded><![CDATA[<p>Here's my little user story:</p>
<p>As a blogger,<br />
I want to use <a href="http://3.ly/" target="_blank">Threely</a> as my url shortener.<br />
So that I get more letters on Twitter.</p>
<p>Pretty simple story, and also very simple to implement, but impossible to test?  I can certainly test the API to twitter, but given I use a wordpress plugin (developed by someone else) to do the auto-posting is it worth the effort for the addition of 6 lines of code?</p>
<p>For me, the pragmatic solution is to take the <a title="risk" href="http://www.agileinsider.org/tag/risk/">risk</a> based approach.  I'm going live with Threely (<a href="http://3.ly/" target="_blank">http://3.ly</a>) (again, fixed a small typo), but have an escape plan (extremely important when there are known risks) which is the ability to revert if anything untowards happens and revisit my approach.</p>
<p>So, here goes, pressing the big red button <img src='http://www.agileinsider.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/06/big-red-button/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/06/big-red-button/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/06/big-red-button/&title=Big+Red+Button" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/06/big-red-button/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/06/big-red-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delivering Early</title>
		<link>http://www.agileinsider.org/2009/06/delivering-early/</link>
		<comments>http://www.agileinsider.org/2009/06/delivering-early/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 09:11:18 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[mmf]]></category>
		<category><![CDATA[satire]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=126</guid>
		<description><![CDATA[The MMF is the hurdle to delivery that is often overlooked in agile.  I poke a little fun at delivering early, or delivering against a badly formulated MMF.]]></description>
			<content:encoded><![CDATA[<div id="attachment_127" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-127" title="A Mnimal Marketable Feature?" src="http://www.agileinsider.org/wp-content/uploads/2009/06/mmf-300x229.jpg" alt="The MMF wasn't quite complete." width="300" height="229" /><p class="wp-caption-text">The MMF wasn&#39;t quite complete.</p></div>
<p>I've seen plenty of fancy graphs demonstrating how agile provides faster ROI through early delivery and while this can certainly be <strong>true in some cases</strong>, it doesn't necessarily hold true for all cases.</p>
<p>Just because a feature is done, doesn't mean you could, or even should deliver it...  The Minimal Marketable Feature set (MMF) is very important for determining when to <strong>go live</strong>.  When you take the MMF into account, then agile doesn't deliver any value until the MMF is complete and this certainly won't be within the first iteration.</p>
<p>Of course, once the MMF is done, agile will win hands down delivering new functionality, enhancements and bug fixes (what bugs?)...</p>
<p>So what went wrong in the picture?  What was the MMF</p>
<ol>
<li>Wheels/Chassis</li>
<li>Engine/Gearbox</li>
<li>Steering</li>
<li>A Seat</li>
</ol>
<p>And guess what, they've ticked all the boxes, I'm so excited I'm going to run off now to my local dealership and  snap one up...</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/06/delivering-early/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/06/delivering-early/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/06/delivering-early/&title=Delivering+Early" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/06/delivering-early/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/06/delivering-early/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Requires Skilled Developers</title>
		<link>http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/</link>
		<comments>http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/#comments</comments>
		<pubDate>Fri, 29 May 2009 20:07:06 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[puzzles]]></category>
		<category><![CDATA[benefits]]></category>
		<category><![CDATA[methodology]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=120</guid>
		<description><![CDATA[In response to a tweet by Esther Derby, I'm left contemplating the relationship between developer competence, methodology and success.]]></description>
			<content:encoded><![CDATA[<p>In a recent <a href="http://twitter.com/estherderby/status/1962352880" target="_blank">tweet</a> from <a href="http://twitter.com/estherderby" target="_blank">@EstherDerby</a>, she states</p>
<blockquote><p><span class="status-body"><span class="entry-content">Some ppl complain agile only works w/ highly skilled developers. Never been clear 2 me that ANY dev. method works w/o highly skilled devs.</span></span></p></blockquote>
<p><span class="status-body"><span class="entry-content">I think the subtle distinction is that agile <strong>REQUIRES</strong> skilled developers to be successful, whereas some of the "heavier" methodologies <strong>would be better</strong> with skilled developers but <strong>don't actually require</strong> them.  I also think that when we look at many of the agile successes, it would be interesting to determine whether there was any correlation between the level of skill of the developers compared to the level of skill on the non-successful and/or non-agile projects.</span></span></p>
<p><span class="status-body"><span class="entry-content">And taking this just a little bit further...  Would a small group of skilled developers be successful regardless of the <a title="methodology" href="http://www.agileinsider.org/tag/methodology/">methodology</a>?  Truly skilled developers tend to be very pragmatic and will always find ways to simplify the complexity around them, so I'm sure that if you took 8 highly skilled, highly successful agile developers and stuck them on a waterfall project they would deliver a successful result, at least in terms of the customer... </span></span></p>
<p><span class="status-body"><span class="entry-content">What's also quite interesting about this dynamic is that once a developer "sees the light" and becomes "agile" they can't imagine going back to waterfall, despite the fact they can add immense value by being part of a waterfall project and improving the processes.  There is something very selfish about this which has not yet been picked up in the mainstream...  This is also possibly one of the reasons why agile suffers an identity crisis, often being regarded as a cult.<br />
</span></span></p>
<p><span class="status-body"><span class="entry-content">And no, <strong>I'm not advocating waterfall</strong>, I'm just wondering whether skilled developers have more impact on success compared to the <a title="methodology" href="http://www.agileinsider.org/tag/methodology/">methodology</a>.<br />
</span></span></p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/&title=Agile+Requires+Skilled+Developers" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/05/agile-requires-skilled-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slack Is Important</title>
		<link>http://www.agileinsider.org/2009/05/slack-is-important/</link>
		<comments>http://www.agileinsider.org/2009/05/slack-is-important/#comments</comments>
		<pubDate>Fri, 29 May 2009 14:53:10 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[coaching]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[human nature]]></category>
		<category><![CDATA[psychology]]></category>

		<guid isPermaLink="false">http://www.agileinsider.org/?p=112</guid>
		<description><![CDATA[Please help me gather some statistics to help me in my quest for more slack...]]></description>
			<content:encoded><![CDATA[<p>I'm a very strong advocate for slack.  I believe introducing slack as a policy improves the overall <a title="quality" href="http://www.agileinsider.org/tag/quality/">quality</a> produced during productive hours compared with the traditional approach of applying constant pressure.  Just like <a title="pair programming" href="http://www.agileinsider.org/tag/pair-programming/">pair programming</a>, it is actually very difficult to get managers to understand the real <a title="benefits" href="http://www.agileinsider.org/tag/benefits/">benefits</a> of having 'slack'.</p>
<p>For me, slack is just another way to improve the transparency of an agile project and is also the ideal vehicle for introducing diversity, continuous learning and continuous improvement.  Given slack, developers will naturally use this to either improve their own networks, improve their understanding on a topic they found difficult or explore new technologies.  Any of these will ultimately add significant value to your project.</p><div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.agileinsider.org/2009/05/slack-is-important/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.agileinsider.org/2009/05/slack-is-important/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.agileinsider.org/2009/05/slack-is-important/&title=Slack+Is+Important" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.agileinsider.org/2009/05/slack-is-important/" target="_new"><img src="http://www.agileinsider.org/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.agileinsider.org/2009/05/slack-is-important/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
