<?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>Technoetic &#187; Agile</title>
	<atom:link href="http://blog.technoetic.com/categories/software-development/agile-techniques/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.technoetic.com</link>
	<description></description>
	<lastBuildDate>Thu, 24 Mar 2011 10:41:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Pragmatic Agility</title>
		<link>http://blog.technoetic.com/2007/03/29/pragmatic-agility/</link>
		<comments>http://blog.technoetic.com/2007/03/29/pragmatic-agility/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 12:41:16 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2007/03/29/pragmatic-agility/</guid>
		<description><![CDATA[There was an interesting discussion during the Agile Toolkit Podcast interview with Dave of the Pragmatic Programmers. I&#8217;ve transcribed a few of the comments about agile methodologies below. Dave Thomas: I think agile methodologies have adopted their own venom. And to that extent, I&#8217;m pulling back, away from, the individual agile methodologies. I believe very, [...]]]></description>
			<content:encoded><![CDATA[<p>There was an interesting discussion during the <a href="http://agiletoolkit.libsyn.com/"> Agile Toolkit Podcast</a> interview with Dave of the <a href="http://www.pragmaticprogrammer.com/">Pragmatic Programmers</a>. I&#8217;ve transcribed a few of the comments about agile methodologies below.</p>
<blockquote><p>
<strong>Dave Thomas:</strong> I think agile methodologies have adopted their own venom. And to that extent, I&#8217;m pulling back, away from, the individual agile methodologies. I believe very, very strongly in agility. I&#8217;m an author of the agile manifesto and I think the underlying values of agility fit far better with my world view of how software should be built. I think some of the implementations of agile methodologies are, frankly, scarey in their kind of&#8230;</p>
<p><strong>Bob Payne:</strong> dogmatic?</p>
<p><strong>Dave Thomas:</strong> dogmatic, yeah that&#8217;s a good word, that&#8217;s a mild word for some it. It&#8217;s kind of like &#8220;my way or you&#8217;re not doing it properly&#8221;, a lot of blackmail, a lot of absolutes. And to me that&#8217;s not what agility is all about. So I pull back from that. I don&#8217;t want to be associated with that.</p>
<p><strong>Bob Payne:</strong> In the past I&#8217;ve felt a number of pulls in different directions and I&#8217;ve started to realize that it is not necessarily the particular practice but what the resulting outcome is, the rhythm that it sets up.
</p></blockquote>
<p>This perspective sounds very similar to what I&#8217;ve been calling &#8220;<a href="http://blog.technoetic.com/2007/01/04/agile-without-a-name/">agile without a name</a>&#8221; or &#8220;effective software development&#8221; or what Tim Beck calls &#8220;<a href="http://pliantalliance.org/">pliant software development</a>&#8220;.</p>
<p>P.S. I highly recommend the <a href="http://agiletoolkit.libsyn.com/"> Agile Toolkit Podcast</a>. It&#8217;s a great resource to hear candid discussions about agile topics.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2007/03/29/pragmatic-agility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APM Tooling Survey and XPlanner</title>
		<link>http://blog.technoetic.com/2007/01/22/apm-tooling-survey-and-xplanner/</link>
		<comments>http://blog.technoetic.com/2007/01/22/apm-tooling-survey-and-xplanner/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 12:07:51 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>
		<category><![CDATA[XPlanner]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2007/01/22/apm-tooling-survey-and-xplanner/</guid>
		<description><![CDATA[Trail Ridge Consulting has released the results of an agile project management tooling survey performed in late 2006. Apparently, APM tools are being widely used by both small and large organizations although the primary reasons differ with the size of the organization. It was interesting to me to see that card-based approaches are use less [...]]]></description>
			<content:encoded><![CDATA[<p>Trail Ridge Consulting has released the results of an agile <a href="http://trailridgeconsulting.com/surveys.html">project management tooling survey</a> performed in late 2006. Apparently, <a href="http://blog.technoetic.com/agile-pm-tools/">APM tools</a> are being widely used by both small and large organizations although the primary reasons differ with the size of the organization. It was interesting to me to see that card-based approaches are use less often than dedicated APM tools or MS Office tools like Excel.</p>
<p>It was also interesting to see that XP has been adopted in about half as many organizations as Scrum. Of course, I&#8217;d guess that many of the Scrum shops are using at least some XP software development practices.</p>
<p><img src="http://www.xplanner.org/images/logo.jpg" alt="XPlanner" align="left" hspace="4" /> <a href="http://www.xplanner.org">XPlanner </a> was the fourth most widely used APM tool and the only open source product in the top 10 most used tools. (There is a factual error in the survey results that says ScrumWorks is also open source. The ScrumWorks Basic product is free but not open source). XPlanner is also the most used tool focusing specifically on XP. It surprised me a little to see that XPlanner is adopted somewhat more by large organizations than small organizations. It&#8217;s possible that this is an indication that the licensing fees for the commercial tools are high enough to cause some pain for large organizations. I know at least one large organization that chose XPlanner over VersionOne for this reason.</p>
<p>As the founder<sup>[1]</sup> of the XPlanner project, I&#8217;m very happy to see it so widely used even with no marketing or sales resources. </p>
<hr /><span style="font-size: 0.9em">1. <a href="http://docs.codehaus.org/display/~jacmorel">Jacques Morel</a> is now the XPlanner project management and doing a great job.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2007/01/22/apm-tooling-survey-and-xplanner/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pair Programming Benefits and Costs</title>
		<link>http://blog.technoetic.com/2007/01/21/pair-programming-benefits-and-costs/</link>
		<comments>http://blog.technoetic.com/2007/01/21/pair-programming-benefits-and-costs/#comments</comments>
		<pubDate>Sun, 21 Jan 2007 15:41:08 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2007/01/21/pair-programming-benefits-and-costs/</guid>
		<description><![CDATA[A new pair programming study (Arisholm et al. 2007) indicates that that the practice neither increases quality or reduces costs, in general. &#8220;The results of this experiment do not support the hypotheses that pair programming in general reduces the time required to solve the tasks correctly or increases the proportion of correct solutions. On the [...]]]></description>
			<content:encoded><![CDATA[<p>A new pair programming study (Arisholm et al. 2007) indicates that that the practice neither increases quality or reduces costs, in general.</p>
<blockquote><p>
&#8220;The results of this experiment do not support the hypotheses that pair programming in general reduces the time required to solve the tasks correctly or increases the proportion of correct solutions. On the other hand, there is a significant 84 percent increase in effort to perform the tasks correctly.&#8221;
</p></blockquote>
<p><img src="http://lukewelling.com/wp-content/uploads/2006/03/pairon.jpg" alt="Pair Chair" align="right" width="154" height="88"/><br />
In specific contexts, like junior programmers pairing on complex tasks, pair programming results in significant increases in quality. However, in other contexts the increase in quality, if any, comes at a high cost. The study doesn&#8217;t appear to support the conclusions described in earlier XP research. Specifically, that a team could expect &#8220;a 15% increase in development cost for a 15% improvement in quality&#8221;. This earlier study used students rather than professional programmers and the strength of some of the researchers&#8217; techniques and conclusions <a href="http://www.hacknot.info/hacknot/action/showEntry?eid=50">have been questioned</a>.</p>
<p>My own personal experience is that I enjoy pair programming for some activities and in some contexts, but not in all contexts. <span id="more-111"></span>On complex tasks, I enjoy pairing with other senior developers for collaborative problem solving. It&#8217;s not as enjoyable, but I also see benefit for the team when pairing with junior or less skilled developers for some tasks. The less skilled developer may provide the occasional useful input often I feel the collaboration is a net loss in productivity. For example, let&#8217;s say we&#8217;re working on functionality that uses several advanced technologies. If my pair is not skilled in these technologies then the pairing will probably not be a net productivity increase. You could say that it&#8217;s valuable for training the less skilled developer in these technologies. However, I&#8217;m speaking about the case where the less skilled developer has already had extensive opportunities to learn the technologies in question and has not been successful. &#8220;Training&#8221; by pair programming will generally not solve this problem, in my experience.</p>
<p>When developing simpler functionality, I see more benefit from testing and specifically from test-first and TDD techniques than pair programming. For the <em>either/or</em> types of people I generally enjoy collaboration and I&#8217;m not the type that wants to work in isolation from the team. Pair programming is only one specific form of collaboration. I&#8217;ve worked exclusively in open work areas for the last 7-8 years and worked in those environments several times before then. I like that work environment very much and although I had the option to have an office I choose to sit with the team.</p>
<p>I like Martin Fowler&#8217;s perspective on pair programming. He says &#8220;my view is that you should try it and the team should reflect on whether they feel they are more effective with pairing that without&#8221;. I&#8217;d also recommend that the team discuss in what contexts they feel they are more effective or not.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2007/01/21/pair-programming-benefits-and-costs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are You an Effective Software Developer?</title>
		<link>http://blog.technoetic.com/2007/01/20/are-you-an-effective-software-developer/</link>
		<comments>http://blog.technoetic.com/2007/01/20/are-you-an-effective-software-developer/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 19:22:07 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2007/01/20/are-you-an-effective-software-developer/</guid>
		<description><![CDATA[In a recent article I wrote about preferring Effective Software Development (ESD). I prefer being effective over being labeled as &#8220;agile&#8221; (whatever that might mean to you personally). This preference raises many questions for me. How do I define effectiveness? How do I know if I&#8217;m being effective or not? How can I become more [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://blog.technoetic.com/2007/01/04/agile-without-a-name/">recent article</a> I wrote about preferring Effective Software Development (ESD). I prefer being effective over being labeled as &#8220;agile&#8221; (whatever that might mean to you personally). This preference raises many questions for me. How do I define effectiveness? How do I know if I&#8217;m being effective or not? How can I become more effective? Is there any way I can help those around me be more effective? As you can imagine, these questions lead to many others. </p>
<p>I like the Wikipedia description of <a href="http://en.wikipedia.org/wiki/Effectiveness">effectiveness</a>. The description defines <em>positive effectiveness</em> in terms of <em>efficacy</em> and <em>efficiency</em>. Efficacy is the ability to produce a desired effect or achieve a goal. In a software development context, that might mean the ability to produce timely business value. Efficiency is the amount of effect that can be produced with a given amount of resources such as time or number of developers.</p>
<p>I think of efficacy as a primary component of effectiveness and efficiency as a secondary component.  <span id="more-110"></span> In fact, it&#8217;s sometimes desirable to intentionally reduce efficiency to increase efficacy. This is the idea behind having &#8220;slack&#8221; resources. The demands on a team are often dynamic and having slack resources for the peak demand times can improve the team&#8217;s overall efficacy. The challenge here is to know the right amount of slack to allow when future demands are uncertain. Of course, being highly inefficient will often not be efficacious. For example, wasting time on unnecessary or valueless activities might cause us to miss schedule milestones.</p>
<p>How do I know if I or my team are efficacious? I have to identify the desired effects I want to produce or the goals I want to achieve. A few examples might be:</p>
<ul>
<li>I want to produce something useful or valuable for my employer</li>
<li>I want interesting work (learning new technologies, continually improving my skills)</li>
<li>I want to generate sufficient income for my non-work goals like hobbies, travel, or retirement.</li>
<li>I want balance between work, play, self development, and other activities</li>
</ul>
<p>Of course, this list could become quite large and would be significantly different for different people. Sometimes the goals conflict and trade offs are required. Sometimes the trade offs are guided by values, but often observing the trade offs we make is a great way to discover our deeper and possibly unconscious and conflicting values. Create your own list. Are you achieving achieving those goals? How do you know? Do you judge your efficacy based on your feelings or by some quantitative method or some combination of the two?</p>
<p>So, are you as effective as you&#8217;d like to be? If so, that&#8217;s great. Ask yourself again every a few weeks. If not, what are you able and willing to do to improve your effectiveness? You might consider whether you have sufficient feedback. Are you evaluating yourself often (think of it as a personal retrospective)? It&#8217;s difficult to accurately predict the future effects of our actions so it&#8217;s good to get feedback frequently and adjust accordingly. Rapid feedback is a form of communication that allow us to courageously take action knowing we be able to quickly adjust our actions. This is starting to sound like the values of the first edition of Extreme Programming Explained. I don&#8217;t believe that&#8217;s a coincidence. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2007/01/20/are-you-an-effective-software-developer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&#8220;Agile&#8221; Without a Name</title>
		<link>http://blog.technoetic.com/2007/01/04/agile-without-a-name/</link>
		<comments>http://blog.technoetic.com/2007/01/04/agile-without-a-name/#comments</comments>
		<pubDate>Thu, 04 Jan 2007 14:00:41 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2007/01/04/agile-without-a-name/</guid>
		<description><![CDATA[There&#8217;s been much discussion and debate in various forums about the evolving use of the word &#8220;agile&#8221; to describe software development. Some people involved in the discussion have suggested creating a new term to replace &#8220;agile&#8221;. In most cases, I don&#8217;t support replacing terminology. However, the term &#8220;agile&#8221; seems to have suffered so much semantic [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been much <a href="http://pliantalliance.org/">discussion</a> and <a href="http://www.infoq.com/news/2006/12/debating-agility-at-thoughtworks">debate</a> in various forums about the evolving use of the word &#8220;agile&#8221; to describe software development. Some people involved in the discussion have suggested creating a new term to replace &#8220;agile&#8221;. In most cases, I don&#8217;t support replacing terminology. However, the term &#8220;agile&#8221; seems to have suffered so much <a href="http://www.martinfowler.com/bliki/SemanticDiffusion.html">semantic diffusion</a> that it&#8217;s practically meaningless.</p>
<p><img src="http://blog.technoetic.com/wp-content/hammer_nail.jpg" alt="Getting work done" align="left" hspace="8"/>Speaking for myself, I am interested in the effectiveness of my software development activities, where &#8220;effective&#8221; must be evaluated in a specific context. In Effective Software Development (ESD), I want to have a wide range of resources (practices, tools, resources) available to me and I want to understand the tradeoffs associated with using these resources in various contexts. I&#8217;m not interested in labeling myself or my team as an &#8220;XP Team&#8221; or a &#8220;Scrum Team&#8221;. Who cares about the label if the team or organization is not effective.</p>
<p>I&#8217;ve seen several ESD teams who have used practices similar to the established named agile methodologies. However, they typically used a hybrid of those sets of practices. They couldn&#8217;t be labeled as Scrum or XP or Crystal or whatever. Their process was agile &#8212; but without a name. And they were effective.</p>
<p>I recommend not worrying about whether your team or organization deserves the fashionable &#8220;agile&#8221; label. The important question is &#8220;are you effective?&#8221;. Ask yourself what &#8220;effectiveness&#8221; means in your organization and then evaluate if your team meets that criteria. This isn&#8217;t an optimization problem. If you are effective enough, then focus on delivering value. If not, study the development options available to you and decide which ones will help you and your team be more effective. You might decide on a &#8220;ready-to-go&#8221; combination of practices like XP or you could experiment with a combination of techniques that are a custom fit for your team. Evaluate the results and adjust as necessary until you become an ESD team.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2007/01/04/agile-without-a-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XP Values, Principles, and Local Adaptation</title>
		<link>http://blog.technoetic.com/2006/12/23/xp-values-principles-and-local-adaptation/</link>
		<comments>http://blog.technoetic.com/2006/12/23/xp-values-principles-and-local-adaptation/#comments</comments>
		<pubDate>Sat, 23 Dec 2006 15:54:41 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2006/12/23/xp-values-principles-and-local-adaptation/</guid>
		<description><![CDATA[I&#8217;ve seen recent discussions in various forums about the meaning of XP values and principles. Here are my current working definitions. Values. A description of preference between alternatives. Often the alternatives represent candidate courses of action and the value guides the selection among the alternatives. Sometimes values are basically axioms. They can be irrational in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen recent discussions in various forums about the meaning of XP values and principles. Here are my current working definitions.</p>
<blockquote><p>
<strong>Values</strong>. A description of preference between alternatives. Often the alternatives represent candidate courses of action and the value guides the selection among the alternatives. Sometimes values are basically axioms. They can be irrational in the sense that we might not be able to explain them intellectually or they might be primarily based on emotions.</p>
<p><strong>Principles</strong>. Statements describing a model. A scientific principle is a statement describing an aspect of physical reality. Principles might also describe a model of social activity, for example. Principles can be fundamental or logically derived from fundamental principles. It&#8217;s commonly believed that principles are derived from values, but sometimes people have certain values because of specific principles. For example, the XP &#8220;value&#8221; of communication can be derived from the principle that communication improves cooperation and coordination effectiveness. This circularity between values and principles can be confusing at times.</p>
<p><strong>Practices</strong>. A pattern of activity that can be repeated to achieve goals within a context. A person defining a practice is applying principles within a framework of their values (preferences). A related collection of practices might be called a process or methodology.
</p></blockquote>
<p><span id="more-106"></span>The XP values and principles describe the basis for the XP practices. That&#8217;s interesting, but why should we care much about that? If the practices work, do we need to know the values and principles behind them? I believe we do, because the effectiveness of a practice very often depends on the context. Sometimes the practice fits the context reasonable well, sometimes it&#8217;s better to tailor or eliminate the practice. There may also be situations where we need different or new practices that must work well with our existing set of practices. Although the idea of tailoring or adaptation of practices causes concern for some agile practitioners (and they have some good reasons for that concern), the common need for adaptation has been discussed by influential thought leaders in the agile community.</p>
<blockquote><p>
You can use the principles to understand the practices better and to improvise complementary practices when you don&#8217;t find one that suits your purpose. While the statement of practices is intended to be clear and objective (&#8220;write a test before changing code&#8221;), understanding how to apply the practice in your context may not be obvious. The principles give you a better idea of what the practice is intended to accomplish. Also, no fixed list of situated, context-dependent practices cover all of software development. You will create new practices occasionally to fill your specific needs. Understanding the principles gives you the opportunity to create practices that work in harmony with your existing practices and your overall goals. <br />&#8211; Kent Beck, Extreme Programming Explained, Second Edition.
</p></blockquote>
<p>Martin Fowler also wrote&#8230;</p>
<blockquote><p>
One of the biggest issues with XP, and indeed with any agile method, is how to do the essential local adaptation where you alter the process to fit the local conditions. The principles help provide some guidelines on what bits of adaptation will work, and which go against the XP grain. <br />Martin Fowler, <a href="http://www.martinfowler.com/bliki/PrinciplesOfXP.html">Bliki, Principles of XP</a>
</p></blockquote>
<p>So why does adaptation create so much concern? The documented XP values and practices can be difficult to understand. Some values look like principles and vice versa. Some of the principles seem more like practices. The values and principles describe a model, but only vaguely. This description is not enough to really understand why and how the practices will work in specific contexts. One benefit of trying the practices as documented for awhile is that you will be more likely to develop and understand the model underlying the XP principles. Reading an XP book or two is not enough to gain that understanding. On the other hand, someone who has not read any of the XP books might have a similar model based on their own experience and thinking over the years.</p>
<p>As an example of potential sources of confusion, in Extreme Programming Explained (first edition), feedback is listed as a value and rapid feedback is a principle. In the second edition, rapid feedback was dropped as a principle. Is feedback (rapid or otherwise) a value, a principle, or what? It&#8217;s a little more clear if the principle is rephrased as &#8220;people tend to learn better with a shorter time interval between action and feedback&#8221;. That&#8217;s fine, but why is learning important? Learning is a form of adaptation. Maybe the principle is more general: &#8220;people tend to adapt more effectively with rapid feedback&#8221;. Combined with the principle that &#8220;adaptation can be an effective strategy for being successful in dynamic and uncertain environments&#8221;, we can conclude that rapid feedback will often help us be more effective in business and technology contexts that change frequently and where we have incomplete knowledge. I&#8217;ve intentionally used qualifiers like &#8220;tend to [have this effect]&#8221; and &#8220;will often [have this effect]&#8221; because principles must be considered in context. Here&#8217;s some other meta principles that might be useful: &#8220;principles are only valid in context&#8221;, &#8220;understanding the context where a principle applies will allow a person to apply it more effectively&#8221;, &#8220;looking for counterexamples for a principle can help to understand in which context a principle applies or not&#8221;. For feedback, we might review the principles of cybernetics and where feedback leads to problems. We can also evaluate our own experience for counterexamples. The risk of the latter is that it can be very difficult to remain objective when evaluating personal experience.</p>
<p>If you rely on the XP documented values and principles it can be very confusing. You really must think about it more deeply and define your own values and principles, possibly using the XP suggestions as a rough starting point. If your resulting values and principles are consistent with XP, then consider using some or all of the XP practices. Otherwise, find or create practices that are a better fit for your world view.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2006/12/23/xp-values-principles-and-local-adaptation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Debt: The Threshold of Acceptable Pain</title>
		<link>http://blog.technoetic.com/2006/09/19/threshold-of-pain/</link>
		<comments>http://blog.technoetic.com/2006/09/19/threshold-of-pain/#comments</comments>
		<pubDate>Tue, 19 Sep 2006 15:25:40 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2006/09/19/technical-debt-the-threshold-of-acceptable-pain/</guid>
		<description><![CDATA[Why do some teams allow technical debt to accumulate and others are better at recognizing the debt and actively reducing it? One possibility is a skill difference. This skill difference could be the result of differing experience or differences in intelligence. In any case, the theory is that a more experienced, skilled team will generally [...]]]></description>
			<content:encoded><![CDATA[<p>Why do some teams allow technical debt to accumulate and others are better at recognizing the debt and actively reducing it? One possibility is a skill difference. This skill difference could be the result of differing experience or differences in intelligence. In any case, the theory is that a more experienced, skilled team will generally be better at managing the quality of their software. This is certainly logical. However, I think there may be another aspect to consider. <span id="more-104"></span></p>
<p>An effective team may accumulate some debt from time to time, but they are good about not allowing it to become excessive. My own experience is that I start noticing technical debt when it starts causing me some form of pain. The pain might be caused by code that&#8217;s difficult to reuse or refactor or it might be bugs or poor performance of either the production or the tests. It could also be code that&#8217;s difficult to read or is overly complicated (also related to reuse and refactoring in some cases). When I start clearly feeling the pain of technical debt, I become motivated to clean it up. Sometimes, just the thought of the pain of technical debt is enough to keep me disciplined to use development practices intended to prevent that technical debt from even being created. However, there are other developers and teams that don&#8217;t seem to feel the same pain I do in similar contexts and I&#8217;m curious about that.</p>
<p>What if we are seeing the effects of a difference in sensitivity rather than a difference in skills? I&#8217;ve known people who were very skilled in various aspects of software development but still wrote code that was difficult to understand, refactor, extend and maintain. I sometimes wonder if the key difference here is that these other people and teams have a different threshold of acceptable pain than I do. They don&#8217;t feel the pain that I do from that form of software source code. And likewise, I&#8217;m assuming there are people who have a lower threshold of pain than I do and that the code I write would cause them some degree of discomfort.</p>
<p>If this theory is true at all, then I have many questions. What&#8217;s the real source of the pain? What are the side-effects of very high or very low thresholds of pain? What&#8217;s the most productive level of sensitivity? And on and on.</p>
<p>As for the source, I&#8217;m sure it differs according to the individual. Some people feel pain when they see dynamic languages without type checking. Others feel pain when see code with excessive, useless comments. Others feel pain when see minimally commented code, regardless of the readability of the code itself. Speaking for myself, I tend to feel pain when I know that the existing code is going to slow me down in the future &#8212; or is currently reducing my ability to move forward. That&#8217;s why I feel less pain when I read code that&#8217;s well structured, with meaningful naming, well-written tests, and useful comments that don&#8217;t duplicate what the code already communicates.</p>
<p>What if someone has a very high threshold of pain? I&#8217;d expect to see lots of crud (technical debt) in their code and although the original author might (maybe) understand the code, most other people probably wouldn&#8217;t understand it very easily. The high threshold developer doesn&#8217;t mind spending weeks on new features that would otherwise require days or hours with clean code. And they don&#8217;t mind staying at work all night fixing bugs before a major release or spending countless hours babysitting the production system after it&#8217;s been released. It doesn&#8217;t seem to bother them to spend significant time away from family and friends or to have limited time or other interests and hobbies. In extreme cases, not only do these developers not feel much pain from this situation but they sometimes experience pleasure at being the &#8220;hero&#8221; who saved the company from the bugs they created. These developers might complain, but the complaining just reduces the pain &#8212; removing a potential motivating force to improve their productivity.</p>
<p>If a high threshold of pain can be a problem, what about a very low threshold of pain? I have less experience with this situation but I suspect that it might lead to pedantic, overly critical and rigid behaviors that serve as a defense mechanism for their high sensitivity. This might lead to excessive refactoring or testing that provides increasingly diminishing returns. It might also lead to an overly idealistic perspective on software development if the messy realities become too much to bear.</p>
<p>I know my own pain threshold varies over time as I&#8217;m guessing it does for everybody. Some days I am more numb than others. That&#8217;s one benefit I&#8217;ve seen from pair programming. It tends to average people&#8217;s thresholds so that code quality is more consistent. I&#8217;ve also found it useful to be able to intentionally modify my threshold (or intentionally ignore the pain) in certain situations.</p>
<p>As you may have guessed, I believe the most productive threshold is somewhere between the extremes &#8212; high enough to minimize technical debt, but low enough that courage and flexibility is not reduced too much. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2006/09/19/threshold-of-pain/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile Methods Incompatible with Human Psychology?</title>
		<link>http://blog.technoetic.com/2006/09/11/agile-method-criticism/</link>
		<comments>http://blog.technoetic.com/2006/09/11/agile-method-criticism/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 20:11:06 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2006/09/11/agile-method-criticism/</guid>
		<description><![CDATA[Kevin Brady claims they are in his recent blog article &#8220;AGILE /SCRUM Fails to get to grips with Human Psychology&#8220;. After reading his article, it seems it should have been named something like &#8220;Agile Methods Do Not Cure Dysfunctional Organizations&#8221;. I believe the latter is true. I think agilists understand this at some level and [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.technoetic.com/wp-content/gavel.jpg" alt="[gavel]" hspace="12" vspace="8" align="right"/>Kevin Brady claims they are in his recent blog article &#8220;<a href="http://www.claretyconsulting.com/it/comments/agile-scrum-fails-to-get-to-grips-with-human-psychology/2006-08-17/">AGILE /SCRUM Fails to get to grips with Human Psychology</a>&#8220;. After reading his article, it seems it should have been named something like &#8220;Agile Methods Do Not Cure Dysfunctional Organizations&#8221;. I believe the latter is true. I think agilists understand this at some level and that why they focus so much on the &#8220;agile attitude&#8221;. My belief is that this &#8220;attitude&#8221; is a psychological prerequisite of a potentially agile team. Agile methods can&#8217;t reliably <em>create </em> this psychological state, but they definitely require it. Without an agile attitude (focus on business value over politics, people-centric, empowering, &#8230;), it&#8217;s not surprising that organizations would experience the Orwellian effects that Brady describes &#8212; no matter what software development process they chose to use.</p>
<p>However, it also appears that Brady has a limited understanding of the agile methods he criticises. <span id="more-103"></span>To make his point he focusses on Scrum teams that apparently had weak development practices and who operated within a dysfunctional organizational environment. Other agile methods, like XP, tend to focus more on development practices but even XP is doomed if it&#8217;s attempted in a highly dysfunctional organization.</p>
<p>Brady describes a 6 person team that he says failed with Scrum (athough he appears to be claiming a more general failure of agile methods). He lists the results of that project.</p>
<ol class="post_list">
<li><strong>&#8220;Project closed, business case closed and £30 million loss quietly absorbed and forgotten.&#8221;</strong> Was this project closure <em>caused </em> by the use of agile methods? At this point, it&#8217;s not clear. Would a heavier process have saved it? Again, it&#8217;s not clear.</li>
<li><strong>&#8220;Testing was impossible with such limited up front requirements.&#8221;</strong> It&#8217;s not clear if the up front requirements were limited <em>because nobody knew the requirements</em> or because the requirements were not fully documented up front. In either case, it&#8217;s not clear why the requirements that were identified could not have been tested. Agile methods generally recommend incrementally developing the tests in parallel with with code. In other words, create a large well-tested system by starting with a small, well-tested system and evolving it.</li>
<li><strong>&#8220;Acceptance criteria impossible to define because the requirements were never defined until too late in the programme.&#8221;</strong> No requirements were defined until (too) late in the project? That definitely sounds like a problem, but agile methods don&#8217;t recommend that approach. They recommend not waiting to define all requirements up front since requirements and context often change during development of a project. I&#8217;ve worked on very large, global development projects with formal requirements processes and requirements were still being defined late in the project. That&#8217;s reality. The world changes and we learn. In any case, assuming at least <em>some</em> requirements were known earlier in the project, they could have had acceptance tests written for them. Brady also says,<br />
<blockquote><p>
The system would only run to 3 concurrent users. Not suitable for a system to be used by 1000s of people daily but who’s to grumble AGILE says this is OK to start building databases and systems without detail like this. Just keep moving forward is all that matters in this cloud of confusion. &#8212; Kevin Brady
</p></blockquote>
<p> Apparently, no refactoring practices were used on this project. Given the weak testing approach, this is not surprising. It&#8217;s difficult to refactor effectively without tests even for the known requirements. Agile methods definitely do not say that forward motion in a cloud of confusion is all that matters. However, forward motion in a dynamic environment <em>is possible</em>, but requires a strong collection of practices to support it. It sounds like using agile methods in this organization was like putting a powerful engine in an automobile with a weak suspension, brakes, and tires. It&#8217;s a recipe for disaster, but that doesn&#8217;t prove all automobiles are flawed. It&#8217;s far from obvious that <em>any</em> other development method would have been more successful in the context Brady describes.</li>
<li><strong>&#8220;Ran out of budget without early warning because no one could see more than 28 days ahead or new the full scope with unmitigated and uncontrolled changes in scope.&#8221;</strong><br />
At least some agile methods (XP) suggest a release plan giving a longer range view of development activities. I don&#8217;t know enough about Scrum to know if this is true or not. I do know that a product backlog exists in Scrum that gives a view beyond 28 days. Why nobody could see farther than one spring is not at all clear. (All of these issues point to more fundamental problems than whether the team used agile methods or not.)</li>
<li><strong>&#8220;Some of the worst usability I have ever seen because the user flows could not be tested up front because the requirements were at feature level&#8221;.</strong> It&#8217;s not clear, but it appears that Brady may be confusing the equivalent of XP user stories (a placeholder for development/client discussion about requirements) with feature level &#8220;requirements&#8221;. It is very true that defining user stories and never following up with the conversation to define specific requirements like user flows (and documenting those as test cases) could well be disastrous. However, agile methods don&#8217;t recommend this latter practice.</li>
<li><strong>&#8220;A horrid final system. Because iterative development methods were used with each part of the system independently designed without a broad view of the full requirements.&#8221;</strong>The phrase &#8220;independently designed&#8221; sounds like a euphemism for designed with <em>ineffective communication between the developers</em>. It&#8217;s also clear there was no continuous integration practices. I not seeing any relationship between these problems and iterative development, as Brady claims.</li>
</ol>
<p>I don&#8217;t have a strong objection to Brady&#8217;s beliefs about human nature although I believe they have little or no relationship to his criticism of agile methods. We need to find ways to heal &#8220;sickly&#8221; (Brady&#8217;s description) IT organizations so they can use more effective development methods the way the methods were intended to be used &#8212; agile or otherwise.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2006/09/11/agile-method-criticism/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agility and Effective Communication</title>
		<link>http://blog.technoetic.com/2006/09/11/effective-communication/</link>
		<comments>http://blog.technoetic.com/2006/09/11/effective-communication/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 10:05:46 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2006/09/11/effective-communication/</guid>
		<description><![CDATA[Agile coach and trainer Mishkin Berteig recently wrote a blog article called &#8220;The Seven Core Practices of Agile Work&#8221; where he highlighted the importance of effective (&#8220;powerful&#8221;) communication. I agree. In my experience, effective communication is often the most important factor in project success. However, my views about the nature of effective communication are different. [...]]]></description>
			<content:encoded><![CDATA[<p>Agile coach and trainer Mishkin Berteig recently wrote a blog article called &#8220;<a href="http://www.agileadvice.com/archives/2006/09/practices_of_ag.html">The Seven Core Practices of Agile Work</a>&#8221; where he highlighted the importance of effective (&#8220;powerful&#8221;) communication. I agree. In my experience, effective communication is often the most important factor in project success. However, my views about the nature of effective communication are different. Berteig wrote:</p>
<blockquote><p>
To Communicate Powerfully, a team needs to prefer in-person communication over distributed communication. Synchronous over asynchronous communication. High-bandwidth over low-bandwidth communication. Multi-mode communication over single-mode communication. &#8212; Mishkin Berteig
</p></blockquote>
<p>These suggestions sound agile on the surface, but it could also be just a different variation of the &#8220;process over individuals&#8221; perspective. <span id="more-102"></span>For example, the suggestions doesn&#8217;t consider the vastly different ways that various groups of individuals interact. Why not just prefer &#8220;effective communication&#8221; for a specific team and context without requiring <em>a priori</em> preferences about how that communication will be implemented? In my experience, a combination of communication styles and strategies including a mix of both face-to-face, synchronous communication and distributed, asynchronous communication have generally been the most effective. I believe it&#8217;s a false dichotomy, but if a team must choose between one extreme of <em>always</em> having distributed, asynchronous communication or <em>always</em> communicating face-to-face, then I would prefer the latter. I also believe it would probably not be the most effective way to communicate compared to a combination of the two styles, where the balance is tailored to a specific team&#8217;s personality, preferences, and other contextual aspects. Of course, in some contexts the balance might be close to one extreme or the other.</p>
<p>It may appear to be more difficult to discover the proper combination of communication styles  than to accept predefined communication preferences. However, I&#8217;m confident that if a team wants effective communication and they use techniques like retrospectives to fine tune their behavior based on experience, they will succeed in finding what works best for them and become increasingly skilled at adjusting those approaches as project context changes. This feedback and adaptation is a key aspect of agile team behavior.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2006/09/11/effective-communication/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>We&#8217;ll Be Agile Later</title>
		<link>http://blog.technoetic.com/2006/09/11/deferred-agility/</link>
		<comments>http://blog.technoetic.com/2006/09/11/deferred-agility/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 09:08:39 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Dev.]]></category>

		<guid isPermaLink="false">http://blog.technoetic.com/2006/09/11/deferred-agility/</guid>
		<description><![CDATA[James Shore wrote an interesting blog article called &#8220;Voluntary Technical Debt&#8220;. He and Dave Woldrich are developing a commercial service called cardmeeting.com to support distributed agile teams. Shore describes how he and Dave cut corners with their initial implementation, intended to be a &#8220;spike&#8220;, because of time pressure to demonstrate the software at the Agile [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.technoetic.com/wp-content/indexcards.jpg" alt="Index cards" hspace="8" vspace="8" align="right"/> James Shore wrote an interesting blog article called &#8220;<a href="http://www.jamesshore.com/Blog/CardMeeting/Voluntary-Technical-Debt.html">Voluntary Technical Debt</a>&#8220;. He and Dave Woldrich are developing a commercial service called <a href="http://www.cardmeeting.com/">cardmeeting.com</a> to support distributed agile teams. Shore describes how he and Dave cut corners with their initial implementation, intended to be a &#8220;<a href="http://www.c2.com/cgi/wiki?SpikeDescribed">spike</a>&#8220;, because of time pressure to demonstrate the software at the Agile 2006 conference. In other words, they intentionally created <a href="http://c2.com/cgi/wiki?TechnicalDebt">technical debt</a> to meet a marketing deadline. The team is now taking the time to repay that technical debt &#8212; with interest.  Shore reports that the debt has caused delays in developing new features but he believes he made the right decision.</p>
<p>I&#8217;m not questioning whether this was the right decision or not. However, this is a classic development pattern for non-agile teams. <span id="more-101"></span> The managers (who are the same as the development team in Shore&#8217;s case) define a marketing event as a development deadline. The developers decide to build a prototype or spike solution to minimize technical risk when developing the production code. The managers see the prototype and declare it &#8220;good enough&#8221; to serve as the foundation of the production code. At that point, the developers are pressured into creating relatively low quality code to meet the deadline. There are a few differences between the cardmeeting.com scenario and the more common scenario. First, the cardmeeting.com team apparently doesn&#8217;t have another impending marketing event so they can invest the time to pay back the technical debt. Secondly. they are a very small team with a management team (themselves) who understand the importance of paying back the debt. Most teams are not that fortunate.</p>
<p>I think Shore&#8217;s article describes an excellent example of what happens when agile idealism meets the everyday realities of software development. I greatly appreciate that he has written about that experience rather than quietly covering it up. What are some conclusions we might draw from that experience report?</p>
<ul class="post_list">
<li><strong>Agile practices slow down development</strong>. At least, it appears that the cardmeeting.com team believed this was true in the short term. I believe agility is not primarily about speed, but about the ability to effectively respond to change and uncertainty. A near term reduction in development can be a good investment for increasing long term project productivity. However, if there are near term deadlines, or a long series of near term deadlines, the forces against using agile practices can be difficult to resist.</li>
<li><strong>Paying back technical debt requires &#8220;interest&#8221; payments.</strong>. This has also been my experience. Shore isn&#8217;t very specific about what type of interest payment is required for the debt. What I&#8217;ve seen is that it&#8217;s more difficult to write tests after the production code has been written. With a small team, paying off the technical debt means that few or no new features are developed for some period of time. This can hurt the forward momentum, motivation, and focus of the developers. There&#8217;s also marketing interest to be paid. Potential customers tire of waiting for new features that important to them and lose interest or go to a competitor. It can be difficult to win back customers once they have formed a negative opinion.</li>
<li><strong>When Agility and Reality clash, bet on Reality to prevail.</strong> Yes, this will probably be a controversial statement to the extent that &#8220;Reality&#8221; is at least partially subjective. However, the reality in this situation is that a team consisting of experienced agile developers (including a coach and award winning agile thought leader) made the same non-agile choices as many teams make in similar circumstances. And they believe those choices were correct (and very well may have been). It seems to me that people who sell agile approaches often believe the reason that teams reject their suggestions is because of ignorance, stubborness, fear or something similar. Often these teams reject agile practices (at least, in the short term) for the same reason as the cardmeeting.com team. They did it intentionally and believe it was the right decision given their specific context.</li>
<li><strong>Consider timing when introducing agile practices.</strong> The cardmeeting.com team is now paying back their technical debt. They don&#8217;t have another near term deadline so this is a good time to do it. Unfortunately, for some teams, there appears to never be a right time and the debt continues to increase.</li>
</ul>
<p>I recommend reading Shore&#8217;s original article. I&#8217;m also interested in hearing about other people views of what happens when there is apparent clash between Agility and Reality. I should also be clear that this contrast between agility and reality is not a criticism of agility, but about the more extreme forms of agile idealism. I&#8217;ve used similar comparison between reality and the prevailing development strategies on several teams to convince the management to adopt more agile behaviors rather than continuing with their current development idealism (waterfall/phasist, management by wishful thinking, or whatever).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.technoetic.com/2006/09/11/deferred-agility/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

