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

<channel>
	<title>Agile Focus</title>
	<atom:link href="http://agilefocus.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://agilefocus.com</link>
	<description>A group weblog for and about Agile software development</description>
	<pubDate>Mon, 26 Apr 2010 15:05:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Lean Startup Kanban board</title>
		<link>http://agilefocus.com/2010/04/26/the-lean-startup-kanban-board/</link>
		<comments>http://agilefocus.com/2010/04/26/the-lean-startup-kanban-board/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:04:10 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=485</guid>
		<description><![CDATA[In my last post, &#8220;Responsible Technical Debt: Not an Oxymoron&#8220;, I said I&#8217;d propose a way to responsibly handle technical debt in a Lean Startup context, where a substantial number of your units of work are experimental, and unlikely to be kept as first written. That way follows. I should explain that although I haven&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post, &#8220;<a href="http://agilefocus.com/2010/04/25/responsible-technical-debt-not-an-oxymoron/">Responsible Technical Debt: Not an Oxymoron</a>&#8220;, I said I&#8217;d propose a way to responsibly handle technical debt in a Lean Startup context, where a substantial number of your units of work are experimental, and unlikely to be kept as first written. That way follows. I should explain that although I haven&#8217;t seen in practice, it&#8217;s one I&#8217;ll be trying soon in my very own startup, so I&#8217;ve given it a fair bit of thought. My thanks to the many Lean Startup and Kanban people who have inspired this.</p>
<h2>Standard Kanban boards</h2>
<p>The core notion of a software development Kanban board is that you represent visually the state of various units of work. These units of work are pretty small, generally a few person-days. A basic one looks something like this:</p>
<p style="text-align: center;"><img class="size-full wp-image-488    aligncenter" title="kanban-normal" src="http://agilefocus.com/wp-content/uploads/2010/04/kanban-normal.png" alt="normal" width="512" height="158" /></p>
<p style="text-align: left;">Stories flow in from the backlog on the left. After they are worked on (D-E) and reviewed (F), they are released and put in the file of finished stories, rarely to be looked at again. There are generally limits, so that a team will only have a certain number of stories in each stage at one time. Because the code could be around for years, we need to make sure to write it in a sustainable way, and the Agile movement, especially the Extreme Programming end of it, has discovered and promoted a lot excellent techniques for making code that lasts.</p>
<p style="text-align: left;"><strong>This flow makes a lot of sense when you are using Agile techniques to solve a known problem</strong>, and have pretty high confidence that the things you build will last indefinitely.</p>
<h2>Lean Startups are different</h2>
<p>However, in software startups, and especially <strong>when following the Lean Startup approach, you are solving an unknown problem</strong>. The goal, especially in the early stages, isn&#8217;t to build software; it&#8217;s to discover needs and wants that people will pay you to satisfy.</p>
<p>The standard startup approach, typified by <a title="Wikipedia's article on Webvan" href="http://en.wikipedia.org/wiki/Webvan">dot-bomb Webvan</a>, is known in the Lean Startup community as the &#8220;field of dreams&#8221; approach. You build a complete product in the hope that when you finish, your customers will come. The Lean Startup approach instead requires that you identify your hypotheses about your customers, your market, and your products, and test those hypotheses as early as possible, partly by trying a lot of things out and seeing how they work.</p>
<p>Another way to look at this comes from Eric Ries:</p>
<p><a href="http://www.slideshare.net/startuplessonslearned/2010-04-23-startup-lessons-learned-conference-welcome-slides-by-eric-ries-sllconf"><img class="aligncenter size-medium wp-image-489" title="The Lean Startup Loop" src="http://agilefocus.com/wp-content/uploads/2010/04/the_ls_loop-300x255.png" alt="The Lean Startup Loop" width="300" height="255" /></a></p>
<p>Anything that makes that loop longer is worse. Technical debt can surely do that. But if you write something to last the ages and then remove it next week, that can also slow down your feedback loop.</p>
<p>My answer is to explicitly accept there will be two kinds of code in the system. There will be sustainable code, the kind that Agilists have spent the last 15 years learning how to create properly. And<strong> there will be temporary code, code that we explicitly plan to throw away.</strong> I still think the <a title="My post on &quot;The 3 Kinds of Code&quot;" href="http://agilefocus.com/2009/06/22/the-3-kinds-of-code/">third kind of code</a>, half-assed code, has no place in a serious software project. But there&#8217;s a risk, one many of us have lived: what if the temporary code sneaks into the permanent side, putting the project on the road to a technical debt bankruptcy?</p>
<h2>Lean Startup Kanban boards</h2>
<p>My solution to this is to expand the Kanban board to explicitly represent the flow of experiments. Below, experiments are represented in blue:</p>
<p><a href="http://agilefocus.com/wp-content/uploads/2010/04/kanban-startup.png"><img class="aligncenter size-full wp-image-490" title="kanban-startup" src="http://agilefocus.com/wp-content/uploads/2010/04/kanban-startup.png" alt="kanban-startup" width="627" height="262" /></a>For the early part of their lifecycle, experiments and regular features share a pretty similar path. They hang around in a backlog until the are put on deck (C). They get worked on by the team as part of the regular flow (E), and accepted by product managers (G). But then, after release <strong>instead of being put in the released-and-forgotten box, those stories are tracked as active experiments</strong> (H-M).</p>
<p>When the experiment is concluded, then the feature might be accepted permanently, in which case the code will need to be cleaned up, and the rest of the system refactored to accommodate the new code. More likely, the code will be removed. Possibly because the feature turned out to be a bad idea, at least in its current form.</p>
<p>Or possibly it was a good idea, but not good enough in its current form to keep.  Often the first approach to a feature (or to its implementation) isn&#8217;t  the right one; it can be better to remove the experiment and its code in favor of an  upcoming correct implementation. In which case, it will yield a number of new story cards for the backlog.</p>
<p>I think this approach will mitigate the biggest risk of accepting any temporary code: you forget that it&#8217;s temporary, and suddenly you&#8217;ve got technical debt in your system and no scheduled time to clean it up. There are other risks, some of which I hope to write about over the coming weeks and months.</p>
<p>Have thoughts on this? Have you tried something similar? I&#8217;d love to hear about it. Leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2010/04/26/the-lean-startup-kanban-board/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Responsible technical debt: not an oxymoron</title>
		<link>http://agilefocus.com/2010/04/25/responsible-technical-debt-not-an-oxymoron/</link>
		<comments>http://agilefocus.com/2010/04/25/responsible-technical-debt-not-an-oxymoron/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 22:37:17 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=483</guid>
		<description><![CDATA[Kent Beck&#8217;s recent talk at the excellent Startup Lessons Learned conference has created some controversy. As somebody who attended the conference and who has been involved in startups for many years, I agree with some things on each side of the argument, and I want to give my take on how to be responsible with [...]]]></description>
			<content:encoded><![CDATA[<p>Kent Beck&#8217;s recent talk at the excellent <a href="http://www.sllconf.com/">Startup Lessons Learned conference</a> has created some controversy. As somebody who attended the conference and who has been involved in startups for many years, I agree with some things on each side of the argument, and I want to give my take on how to be responsible with technical debt.</p>
<h2>The Agile reaction</h2>
<p>In the dark days of waterfall, code bases had only two states: being re-written or slowly getting worse. The project would start out with great hope. People would write something beautiful, launch a 1.0, and then spend their time patching it. Inevitably, and despite initial efforts to resist, the code base would go slowly downhill. Gradually increasing technical debt would lead to technical bankruptcy, forcing a big rewrite. Then the agonizing cycle would start again.</p>
<p>One of the key insights of the Agile movement, one crystallized by Martin Fowler&#8217;s book Refactoring, was that decay was not inevitable. We could clean things up incrementally as we went, without needing periodic giant rewrites. Another key insight comes via Kent Beck&#8217;s Extreme Programming: if we worked iteratively and refactored all the time, then we could start clean and stay clean, forever, ending the cycle of giant rewrites.</p>
<p>As easy as that sounds, it&#8217;s actually very hard; every solid Agile practitioner has spent time developing a nose for technical debt, and a hate of it. So when Kent Beck suggested that startups could responsibly create some technical debt, it caused a lot of strong reactions: to some people it sounded like the pope saying that premarital sex and adultery were occasionally fine.</p>
<h2>But startups are about learning</h2>
<p>For this to make sense, you have to understand two things:</p>
<ol>
<li>Startups—even software startups—are businesses, not software development projects.</li>
<li>The point of a startup isn&#8217;t to create a software product; it&#8217;s to discover a sustainable business model.</li>
</ol>
<p>In a startup, software development isn&#8217;t an art for its own sake; what makes sense from a pure engineering perspective may not make sense more broadly. That&#8217;s true for any business really, but it&#8217;s especially true for a startup. That&#8217;s because the main goal of a startup is to discover a valuable business. Discovery requires experimentation, and the amount you can learn is a function of the cost of your experiments.</p>
<p>So suppose I have a new idea for a game. I believe it will be A) fun and B) a moneymaker. I could take a number of months and design it, develop it, polish it, and publish it. Then the market would tell me whether my beliefs were correct. Or I could make a very crude version with 1 level, have some people play it, and see if the core gameplay is enjoyable. That&#8217;s my first experiment to examine hypothesis A, fun. If it works, I could put it up on the web, buy a few ads, and see if the game sounds interesting enough to click through and try it. That would be my first test for hypothesis B, making money with the game.</p>
<p>Now if these tests fail, then my code base may be pretty short lived. They say that hard work pays off eventually, while laziness pays off now. The same is true for good development practices. A lot of Agile practices get you long-term sustainability, but they cost you in the short term. For sufficiently small and short-lived pieces of code, worrying about technical debt does not make business sense. Better to invest in more experiments.</p>
<h2>Danger Will Robinson!</h2>
<p>At this moment, some of my readers are leaping up to say &#8220;But! But! But!&#8221; That&#8217;s what I wanted to do during Kent&#8217;s talk, anyhow. Because when businesspeople hear that they can have something quicker, they will often interrupt to say, &#8220;Yes! Do that!&#8221; As I explain in &#8220;<a title="3 kinds of code" href="http://agilefocus.com/2009/06/22/the-3-kinds-of-code/">The 3 Kinds of Code</a>&#8220;, a lot of business/engineering fights arise because engineers are more aware of the long-term costs of short-term thinking. I have seen good teams, even ones otherwise well-versed in Agile techniques, give in to that business pressure again and again, creating giant messes.</p>
<p>So hacking things together, and the resultant technical debt is extremely dangerous, but sometimes very powerful. What should a responsible team do?</p>
<p>I believe there are good ways to handle this dilemma, and <a title="The Lean Startup kanban board" href="http://agilefocus.com/2010/04/26/the-lean-startup-kanban-board/">will propose one approach in my next post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2010/04/25/responsible-technical-debt-not-an-oxymoron/feed/</wfw:commentRss>
		</item>
		<item>
		<title>9 Signs of Bad Team Spaces</title>
		<link>http://agilefocus.com/2010/02/15/9-signs-of-bad-team-spaces/</link>
		<comments>http://agilefocus.com/2010/02/15/9-signs-of-bad-team-spaces/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 06:17:47 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=270</guid>
		<description><![CDATA[One of the most popular articles here is 10 Rules For Great Development Spaces, so I thought I&#8217;d follow up by  explicitly listing signs of bad spaces. These are my top 9, but I&#8217;d love to hear what others people have noticed.

People wearing headphones. Part of the reason to sit together is to listen [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most popular articles here is <a title="10 Rules for Great Development Spaces" href="http://agilefocus.com/2009/04/20/10-rules-for-great-development-spaces/">10 Rules For Great Development Spaces</a>, so I thought I&#8217;d follow up by  explicitly listing signs of bad spaces. These are my top 9, but I&#8217;d love to hear what others people have noticed.</p>
<ol>
<li><strong>People wearing headphones.</strong> Part of the reason to sit together is to listen to one another. If team members are wearing headphones, they can&#8217;t do that. Don&#8217;t blame them, though; figure out what noise or distraction drives people to do that and eliminate the root problem. And if they aren&#8217;t part of the team, move them elsewhere.</li>
<li><strong>Stale artifacts on the walls.</strong> Every artifact on the wall should be there for a reason. If there are a lot of stale plans, charts, or lists on the walls and whiteboards, that&#8217;s a sign of trouble. Immediately prune the junk!</li>
<li><strong>Workspace as information desert.</strong> Development teams turn knowledge into software products. Rather than requiring effort to find things out, a good workspace requires effort to avoid knowing what&#8217;s going on. Bare walls often indicate low collaboration or high confusion.</li>
<li><strong>Minimal interaction. </strong>If team members sit near one another and never talk, it&#8217;s often a sign of an underlying problem. I&#8217;ve seen this caused by bad relationships, code silos, excess division of labor, too-long release cycles, excess schedule pressure, and plain old shyness.</li>
<li><strong>Furniture as barrier.</strong> Furniture should help you work, not get in the way. Barriers are great to reduce noise and chaos at team boundaries, but true teams should be able to share space and collaborate effectively.</li>
<li><strong>Sad or ugly spaces. </strong>You will likely spend more waking hours in this room than any other. Shouldn&#8217;t it be nice?</li>
<li><strong>Seating by job description.</strong> Agile approaches require cross-functional teams to make whole products. If people are grouped by job description, that is at least a barrier to collaboration, and often a sign of unhelpful silos. Group people by project instead.</li>
<li><strong>Space and furniture as status markers. </strong>In some companies, being distant from the action is a sign of status. On Agile teams, that&#8217;s a mistake. Instead of using rooms and desks to indicate hierarchy, give people the tools they need to do their jobs.</li>
<li><strong>No laughter, no fun.</strong> This is a big one for me. Every really productive team I&#8217;ve visited enjoys the work and their fellow team members. Money can make people show up, but it&#8217;s joy that gets the best results.</li>
</ol>
<p>That&#8217;s my list. What&#8217;s yours?</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2010/02/15/9-signs-of-bad-team-spaces/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Proactive versus reactive</title>
		<link>http://agilefocus.com/2010/02/02/proactive-versus-reactive/</link>
		<comments>http://agilefocus.com/2010/02/02/proactive-versus-reactive/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 15:12:05 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=478</guid>
		<description><![CDATA[Somebody recently asked me if Agile approaches aren&#8217;t essentially reactive, with Waterfall being proactive. It&#8217;s a good question, and I&#8217;m sure there are a lot of interesting answers. Here&#8217;s my take.
Proactively reactive

 In terms of product produced, you can be more proactive in an Agile context than you can in a Waterfall context. With Waterfall [...]]]></description>
			<content:encoded><![CDATA[<p>Somebody recently asked me if Agile approaches aren&#8217;t essentially reactive, with Waterfall being proactive. It&#8217;s a good question, and I&#8217;m sure there are a lot of interesting answers. Here&#8217;s my take.</p>
<h2><span class="text">Proactively reactive</span></h2>
<h2></h2>
<p><span class="text"> In terms of product produced, you can be more proactive in an Agile context than you can in a Waterfall context. With Waterfall methods, you just have to hope your designs and plans are correct, reacting massively after each large release. With Agile approaches you can continually test your assumptions and hypotheses, allowing you to eliminate bad ideas early and invest more resources in areas that have been proven to deliver more long-term value.</p>
<p>Some Agile shops may end up stuck in purely reactive cycles, with no long-term plans. (I don&#8217;t see that much.) But the good ones are continuously updating their plans based on the new information that you can only gain if you can release frequently. It has been said that Waterfall is plan-driven, while Agile methods are planning-driven. Having tried both, I think frequent plan improvement is much more proactive.</span></p>
<h2><span class="text">The Agile conversation<br />
</span></h2>
<p><span class="text">Another way to look at it is that Agile approaches proactively take advantage of people&#8217;s reactive skills by creating situations where their reactions will be maximally useful.</span></p>
<p><span class="text">Conversations are in some sense essentially reactive: you say something, I respond to it, you respond in turn. But we can proactively decide to have a conversation and expect to get something useful, perhaps novel out of it.</span></p>
<p><span class="text">Agile approaches have conversations with markets and user communities, using new releases to advance the discussion. We release something and say, &#8220;How about this?&#8221; People respond: they love X, they hate Y, and how did you miss Z! We release another thing and say, &#8220;Is this better for you?&#8221; And so the conversation goes, week after week.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2010/02/02/proactive-versus-reactive/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Defining developer productivity</title>
		<link>http://agilefocus.com/2009/09/17/defining-developer-productivity/</link>
		<comments>http://agilefocus.com/2009/09/17/defining-developer-productivity/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 16:00:40 +0000</pubDate>
		<dc:creator>Steve Bockman</dc:creator>
		
		<category><![CDATA[Metrics]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=451</guid>
		<description><![CDATA[Can you measure the productivity of an individual developer or team of developers? Do you really want to? If the answers to these questions are &#8220;yes&#8221;, the first thing you&#8217;re going to want is a clear definition of productivity.
(I was inspired to write this article by a thread in the scrumdevelopment Yahoo! group titled Executives Tracking Individual [...]]]></description>
			<content:encoded><![CDATA[<p>Can you measure the productivity of an individual developer or team of developers? Do you really want to? If the answers to these questions are &#8220;yes&#8221;, the first thing you&#8217;re going to want is a clear definition of <em>productivity</em>.</p>
<p><em>(I was inspired to write this article by a thread in the </em><a href="http://groups.yahoo.com/group/scrumdevelopment/" target="_blank"><em>scrumdevelopment</em></a><em> Yahoo! group titled</em> Executives Tracking Individual Developer Productivity?<em>  The originator of the thread wrote about a real issue in his company that had to do with the CEO wanting to measure the productivity of the company&#8217;s developers based on the principle that  &#8220;you can&#8217;t manage what you can&#8217;t measure.&#8221;)</em></p>
<h3>Productivity good!</h3>
<p>We can probably agree that productivity (in the abstract) is a good thing, but can we agree about what it means concretely? For starters, what are the &#8220;units&#8221; of productivity for individual people or teams?</p>
<p>For example, we can compare the gas mileage of vehicles to each other in units of  &#8220;miles per gallon&#8221;, and we would probably agree that vehicles with higher numbers are more productive.</p>
<p>What units could we use to compare individuals or teams in a similar fashion? One commonly-employed notion from our past, and one that we have thankfully left behind, is that developer productivity could be measured in lines of code produced in a given period of time. But if that&#8217;s behind us, what are we left with?</p>
<h3>Productivity defined</h3>
<p>The business novel <a href="http://isbn.nu/9781565114241" target="_blank"><em>The Goal</em></a> defines productivity as follows:</p>
<p><em>&#8220;Productivity is the act of bringing a company closer to its goal. Every action that brings a company closer to its goal is productive. Every action that does not bring a company closer to its goal is not productive.&#8221;</em></p>
<p>Sounds simple enough. Now all we have to do is to figure out what the company&#8217;s goal is, and we&#8217;re there.</p>
<p>Do you know what your company&#8217;s goal is? Not its mission statement, but its goal? Is your company in business for a profit, or do you work for a non-profit concern? Most of us, I believe, work for companies interested in making a profit. And if that is so, then most companies&#8217; goals might very well be as simple as making a certain amount of profit per year.</p>
<p>But we&#8217;ll probably want to measure the productivity of our developers more frequently than once per annum, so we might express the productivity of an individual or team in terms of &#8220;profits earned per iteration&#8221;.</p>
<p>The thing is, can we actually measure the contribution to profits made by an individual developer or even a team of developers? Offhand I&#8217;d say that this is a difficult proposition, at best.</p>
<p>However, I contend that if we cannot correlate the productivity of an individual or team with profits, then there really isn&#8217;t much point in trying to assess that productivity in the first place.</p>
<h3>Looking where the light is better</h3>
<p>There&#8217;s on old joke about a man who is searching the area around a corner streetlight. A second man comes along and asks him what he&#8217;s doing, and the first man replies, &#8220;I&#8217;m looking for a quarter that I dropped.&#8221; The second man joins in the search, but neither man is able to spot the lost coin. Finally the second man thinks to ask, &#8220;are you sure you dropped it here?&#8221; The first man replies, &#8220;no, I dropped it in the alley, but the light&#8217;s better here.&#8221;</p>
<p>In a for-profit company, attempting to measure the productivity of a developer in any terms other than contribution to profits amounts to looking where the light is better. In other words, don&#8217;t measure something just because it&#8217;s convenient to measure.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/09/17/defining-developer-productivity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The myth of &#8220;undesigned&#8221;</title>
		<link>http://agilefocus.com/2009/09/14/the-myth-of-undesigned/</link>
		<comments>http://agilefocus.com/2009/09/14/the-myth-of-undesigned/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 18:06:24 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=445</guid>
		<description><![CDATA[Some teams talk as if design is something you can add to software later, saying, &#8220;Oh, that interface we built hasn&#8217;t been designed yet.&#8221; That way of thinking is based on a fundamental error.
The problem
Many real-world teams treat certain kinds of design, including visual design, user interface design, and interaction design, as quantities that you [...]]]></description>
			<content:encoded><![CDATA[<p>Some teams talk as if design is something you can add to software later, saying, &#8220;Oh, that interface we built hasn&#8217;t been designed yet.&#8221; That way of thinking is based on a fundamental error.</p>
<h2>The problem</h2>
<p>Many real-world teams treat certain kinds of design, including visual design, user interface design, and interaction design, as quantities that you can add later. Often this is done with the best of intentions.</p>
<p>For example, the team&#8217;s designer may be unavailable, so the rest of the team will get to work on a story, building an obviously rough interface. If, by the time they&#8217;re done, the designer still isn&#8217;t available, the product owner might accept the story as complete, making a mental note to come back later, perhaps much later.</p>
<p>When somebody external comments on the ugly interface, the<strong> developers might say, &#8220;Oh, that hasn&#8217;t been designed yet.&#8221; They&#8217;re wrong.</strong></p>
<h2>Software is nothing but design</h2>
<p>People often talk about software with an implied analogy to industrial production. One group of people makes up some blueprints, and then an entirely different group of people makes physical objects. That second group is judged not by the utility of the objects, but by conformance to the design. This can sometimes be a useful analogy, but in an important way it&#8217;s entirely false.</p>
<p>In truth,<strong> the creation of software is 100% design</strong>. The computer does all the work of making things happen in the real world. The software is just the blueprint the computer uses to decide what to do. In the same way that a good manufacturer is one that follows the instructions well, a good computer is one that executes the software faithfully and reliably.  All the humans participating in the creation of software are involved in a joint design activity.</p>
<h2>&#8220;Not designed&#8221; is badly designed</h2>
<p>So if software is pure design, then what&#8217;s going on with the ugly interface? The notion that it is somehow &#8220;not designed&#8221; is wrong. It&#8217;s just badly designed. Why does that matter? Because good design isn&#8217;t something you can spray on later like a new coat of paint.</p>
<p>Programmers already know that for the kinds of design they appreciate. Good developers try hard to avoid  spewing out reams of confusing, badly organized code that they hope to clean it up later. They know that&#8217;s wasteful, and likely to hide tricky problems. Tactically, they may choose to leave certain things messy for a short period. But experienced developers do that judiciously, painfully aware of how easily a controlled low-quality situation can turn into an uncontrolled one.</p>
<p>Teams should have the same attitude about every kind of design that matters for their project. <strong>Each story should be well designed from every perspective before it is declared complete.</strong> That sounds like it could be a lot of work, but it needn&#8217;t be. As with the software architecture, other sorts of design can be approached incrementally and iteratively.</p>
<p>The only hard part is making sure that you have all key contributors working together. The easy way to do that? Put them all in a room, and have them release something every week. They&#8217;ll figure it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/09/14/the-myth-of-undesigned/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software engineering isn&#8217;t</title>
		<link>http://agilefocus.com/2009/08/24/software-engineering-isnt/</link>
		<comments>http://agilefocus.com/2009/08/24/software-engineering-isnt/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 20:29:30 +0000</pubDate>
		<dc:creator>Steve Bockman</dc:creator>
		
		<category><![CDATA[Becoming Agile]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=440</guid>
		<description><![CDATA[There’s a long tradition (since 1968, according to Wikipedia) of looking at software development as an engineering discipline. But calling software development engineering is something like adhering to the letter of the law, rather than to the spirit
Software development is about acquiring knowledge
If you think of software development as strictly an engineering discipline, you might [...]]]></description>
			<content:encoded><![CDATA[<p>There’s a long tradition (since 1968, according to <a href="http://en.wikipedia.org/wiki/Software_engineering" target="_blank">Wikipedia</a>) of looking at software development as an <em>engineering</em> discipline. But calling software development engineering is something like adhering to the letter of the law, rather than to the spirit</p>
<p><strong>Software development is about acquiring knowledge</strong></p>
<p>If you think of software development as strictly an engineering discipline, you might be inclined to believe that the job of a <em>software engineer</em> is to apply his or her previous knowledge and training toward solving a particular problem. And you’d be right, to a point, because knowledge and training are important aspects of software development.</p>
<p>But you’d also be missing the key factor, that software development is mostly about acquiring new knowledge. Software developers are always engaged in the following pursuits:</p>
<ul>
<li>Discovering what to build</li>
<li>Discovering how to build it</li>
</ul>
<p>This goes a long way toward explaining why so much software is <em>custom</em> software. If software development were entirely an engineering discipline, it is conceivable that we would be able to construct just about any software application by plugging together the proper parts, chosen from a catalog of well-known, existing components. The fact that we aren’t even close to being able to do that is an indication that we still have a lot of discovery ahead.</p>
<p><strong>Discovering what to build</strong></p>
<p>How do we discover what to build? By working closely (and continually, if possible) with the customer. By getting feedback as often as possible from real users, and by constantly applying that feedback to the product under development.</p>
<p><strong>Discovering how to build it</strong></p>
<p>From the developer&#8217;s perspective, this is a career-long pursuit, as new techniques for building software are always appearing. As software developers, we can provide the greatest benefit to our clients by being aware of new developments in the field, but tempering that with the client&#8217;s needs to meet specific schedules and cost targets.</p>
<p>For any particular product, we can practice Test Driven Development (TDD) and encourage <em>emergent design</em>, so that we avoid imposing our own pre-conceived (engineering) notions on the product, and instead develop just what the client needs (and no more).</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/08/24/software-engineering-isnt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Avoiding the knowledge transfer bottleneck</title>
		<link>http://agilefocus.com/2009/08/17/avoiding-the-knowledge-transfer-bottleneck/</link>
		<comments>http://agilefocus.com/2009/08/17/avoiding-the-knowledge-transfer-bottleneck/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 15:00:03 +0000</pubDate>
		<dc:creator>Steve Bockman</dc:creator>
		
		<category><![CDATA[Agile Principles]]></category>

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

		<guid isPermaLink="false">http://agilefocus.com/?p=425</guid>
		<description><![CDATA[In software development there are many ways to transfer the knowledge about how to build a product to the people who do the actual building. Production can be severely hampered, however, if that knowledge is being produced more rapidly than it can be consumed. This is the knowledge transfer bottleneck.
I recently hosted a workshop that [...]]]></description>
			<content:encoded><![CDATA[<p>In software development there are many ways to transfer the knowledge about how to build a product to the people who do the actual building. Production can be severely hampered, however, if that knowledge is being produced more rapidly than it can be consumed. This is the <strong>knowledge transfer bottleneck</strong>.</p>
<p>I recently hosted a workshop that let participants experience three different ways of transferring knowlege in a production environment. The product, in this case, was a paper airplane of unusual design. The idea was to try different ways of transferring the knowledge about how to build the airplane from the &#8220;chief designer&#8221; (me) to the production workers, and to compare the relative productivity of the different methods, which were:</p>
<ul>
<li><strong>Documentation</strong> - The workers were given written instructions (22 steps worth) for building the airplane.</li>
<li><strong>Reverse Engineering</strong> - The workers were given a completed airplane which they could study in order to reproduce the steps required to build it.</li>
<li><strong>Mentoring</strong> - The &#8220;chief designer&#8221; built an airplane step by step and the workers replicated each step as it was performed.</li>
</ul>
<p>The experiment was conducted in two phases. In the first phase, all 8 participants used the <em>Documentation</em> method. In the second phase, one team of 4 tried <em>Reverse Engineering</em>, while the other team of 4 tried <em>Mentoring</em>.</p>
<p>The results were interesting. Using the <em>Documentation</em> method, only one person out of a total of 8 came close to being able to build the airplane at all in the 5-minute period allotted.</p>
<p>Using the <em>Reverse Engineering</em> method, 1 person out of a total of 4 produced a completed airplane in 5 minutes.</p>
<p>Using the <em>Mentoring</em> method, each of 4 team members produced a completed airplane, and in less than the 5 minutes available.</p>
<p><strong>The knowledge transfer bottleneck in software</strong></p>
<p>In a software development effort, knowledge transfer takes place all the time, and it&#8217;s easy to imagine a software developer in the &#8220;chief designer&#8221; role described in the exercise above.</p>
<p>Let&#8217;s say I&#8217;m a developer who has discovered, and written the code to implement, a technique for binding some data to the controls in a user interface, and that this technique forms a pattern that my fellow developers want to know about. If you were one of my fellow developers, would you rather I (a) gave you a document I had written about the technique, (b) told you where the code was and suggested you figure it out for yourself, or (c) paired with you to implement the pattern for a new set of data?</p>
<p>Now, certainly, pairing with you takes more of my time, and might seem less efficient from my viewpoint. After all, I could be off designing the next pattern, and the one after that. But the  productivity of the team as a whole, rather than my personal productivity, is what&#8217;s important. And mentoring helps increase the team&#8217;s productivity by avoiding <strong>knowledge transfer bottlenecks</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/08/17/avoiding-the-knowledge-transfer-bottleneck/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Slow down to boost profits</title>
		<link>http://agilefocus.com/2009/07/14/slow-down-to-speed-up/</link>
		<comments>http://agilefocus.com/2009/07/14/slow-down-to-speed-up/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 15:55:45 +0000</pubDate>
		<dc:creator>Steve Bockman</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=387</guid>
		<description><![CDATA[A team in which everyone works at top capacity has got to be the most productive, right? This article explains why it ain&#8217;t necessarily so.
(Note: I didn&#8217;t invent the exercise described here. I first saw something like it presented at the Agile2006 conference by Ashley Johnson and Rich Phillips of Valtech Technologies, Inc.)
The assembly line [...]]]></description>
			<content:encoded><![CDATA[<p>A team in which everyone works at top capacity has got to be the most productive, right? This article explains why it ain&#8217;t necessarily so.</p>
<p><em>(Note: I didn&#8217;t invent the exercise described here. I first saw something like it presented at the Agile2006 conference by Ashley Johnson and Rich Phillips of Valtech Technologies, Inc.)</em></p>
<p><strong>The assembly line analogy</strong></p>
<p>I recently conducted an exercise with the folks at North Bay Agile in which two teams formed assembly lines for folding paper airplanes. Each assembly line consisted of a number of distinct operations, as follows:</p>
<ul>
<li>Operation 1 - Get raw material (a sheet of paper) from stock.</li>
<li>Operation 2 - Fold inward lengthwise, then unfold.</li>
<li>Operation 3 - Fold top corners inward.</li>
<li>Operation 4 - Fold sides inward, fold in half, fold wings down.</li>
</ul>
<p>In the first shift, every member of each team worked at top capacity. The result: Each team produced about a dozen airplanes in 5 minutes.</p>
<p>But then I had each team fill out a &#8220;profit and loss&#8221; statement. They got credit for &#8220;selling&#8221; all planes produced, but they were also debited for the labor and material costs of uncompleted airplanes (which stacked up in front of Operation 4, the <em>bottleneck</em>). The financial news: Both teams incurred a loss.</p>
<p>In the second shift, the teams were instructed to slow down to match the rate of the slowest operation. This was accomplished by creating a &#8220;buffer zone&#8221; before each operation and following a rule which said, &#8220;you can&#8217;t pass your work on to the next operation until that operation&#8217;s buffer zone is empty.&#8221; The result: Each team still produced around a dozen airplanes in 5 minutes.</p>
<p>When the profit and loss statements were filled out a second time, each team showed a profit. This was directly due to the fact that no work-in-process inventory built up, thus reducing the amount spent on materials and labor.</p>
<p>The most obvious difference in the overall activity of the assembly lines from shift to shift was that, in the second shift, the upstream operations were sometimes idle. By slowing the upstream operations to match the rate of the slowest operation, both assembly lines increased their productivity.</p>
<p><strong>Increasing productivity stepwise</strong></p>
<p>After the first shift in the exercise, the inclination of several participants was to try to find ways to improve the performance of the slowest operation. As the second shift demonstrates, however, a simpler first step is to just slow down all of the upstream operations to match the rate of the slowest operation.</p>
<p>The business novel <a title="The Goal" href="http://isbn.nu/9781565114241" target="_blank"><span style="color: #225588;"><em>The Goal</em></span></a> outlines a process for increasing the productivity of a manufacturing system:</p>
<ul>
<li>Step 1 - Identify the system&#8217;s bottlenecks.</li>
<li>Step 2 - Decide how to exploit the bottlenecks <em>(e.g. don&#8217;t let a bottleneck be idle)</em>.</li>
<li>Step 3 - Subordinate everything else to the above decision <em>(e.g. throttle back the upstream operations)</em>.</li>
<li>Step 4 - Elevate the system&#8217;s bottlenecks <em>(e.g. speed up a slow operation)</em>.</li>
<li>Step 5 - If, in a previous step, a bottleneck has been broken <em>(i.e. a bottleneck is no longer a bottleneck)</em> go back to Step 1.</li>
</ul>
<p> As you can see, the recommendation is to slow down all non-bottleneck operations <em>before</em> trying to speed the bottlenecks up.</p>
<p><strong>How does the assembly line exercise relate to software development?</strong></p>
<p>Although software development is not the same as manufacturing, there are situations in development that exhibit the characteristics of an assembly line. Suppose, for example, that you are a developer building components for use by other developers. If you (the upstream operation) produce components at a rate faster than the other developers (the downstream operations) can understand and use them, you can create a bottleneck, causing excess &#8220;inventory&#8221; to build up.</p>
<p><strong>Software development is about creating and sharing knowledge</strong></p>
<p>Here are some simple things to remember when considering whether it is more profitable to work at top capacity or to be idle part of the time:</p>
<ul>
<li>Knowledge is the <em>inventory</em> of software development</li>
<li>People consume knowledge at their own rate</li>
<li>Creating knowledge faster than it can be consumed causes excess inventory</li>
<li>Excess inventory reduces profits</li>
</ul>
<p>In other words, working at your own top capacity may not be the positive thing you think it is. If you&#8217;re producing software components at a rate greater than the rate at which they can be put to use, you could be hurting the bottom line.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/07/14/slow-down-to-speed-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fad-proofing your Agile adoption</title>
		<link>http://agilefocus.com/2009/07/06/fad-proofing-your-agile-adoption/</link>
		<comments>http://agilefocus.com/2009/07/06/fad-proofing-your-agile-adoption/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 17:00:41 +0000</pubDate>
		<dc:creator>William Pietri</dc:creator>
		
		<category><![CDATA[Agile Principles]]></category>

		<guid isPermaLink="false">http://agilefocus.com/?p=360</guid>
		<description><![CDATA[As Agile methods become more popular, they risk turning into a pointless fad. Here are my tips for avoiding that trap on your own projects.
Agile is the new black
A friend of mine is a founder at a startup that&#8217;s very Agile: weekly iterations, releasing 2-10 times a month, heavy test coverage, and lots of pair [...]]]></description>
			<content:encoded><![CDATA[<p>As Agile methods become more popular, they risk turning into a pointless fad. Here are my tips for avoiding that trap on your own projects.</p>
<h2>Agile is the new black</h2>
<p>A friend of mine is a founder at a startup that&#8217;s <a href="http://agilefocus.com/2009/02/agile-versus-agile/">very Agile</a>: weekly iterations, releasing 2-10 times a month, heavy test coverage, and lots of pair programming. He met for coffee with a friend of a friend, an executive in charge of building his company&#8217;s first significant piece of software. Part of the conversation went like this:</p>
<blockquote><p><strong>My friend: </strong>So, how are you developing your software?</p>
<p><strong>Executive:</strong> We&#8217;re doing Agile!</p>
<p><strong>My friend:</strong> That&#8217;s great! We started out two years ago with a typical Extreme Programming set of practices, but since then we&#8217;ve made a number of significant changes, including [list of new and modified practices]. And we&#8217;re still continuously improving. How about you?</p>
<p><strong>Executive: </strong>We&#8217;re doing Agile!</p>
<p><strong>My friend: </strong>[Sighs, shakes his head sadly.] Nice weather we&#8217;re having, isn&#8217;t it?</p></blockquote>
<p>In my experience, this is becoming more and more common: somebody hears that Agile is what all the cool kids are doing, so they take a very shallow understanding of what that means and run with it. This rarely works out well, and always puts me in mind of somebody who goes to a buffet restaurant and makes a meal out of the desserts. <strong>It&#8217;s theoretically appealing, but the long-term costs are fearsome.</strong></p>
<h2>Fad-proofing your Agile adoption</h2>
<p>Agile methods have become popular because there&#8217;s real value to them. However,<strong> just jumping on the bandwagon won&#8217;t do you any good</strong>. Take the time to think through what you&#8217;re trying to achieve. Do an Agile adoption poorly and people may become cynical enough that you won&#8217;t have another chance. Here are 10 things you can do to help:</p>
<ol>
<li><strong>Focus on what works</strong> - Your team isn&#8217;t there to create process or make software. You&#8217;re there to deliver sustainable long-term value via software. Use that as your primary ruler to measure success.</li>
<li><strong>Don&#8217;t expect miracles</strong> - <em>There are no silver bullets!</em> Agile methods don&#8217;t fix your problems for you; they mainly make the problems obvious quickly, so you can solve them yourselves.</li>
<li><strong>Give yourself room</strong> - Thinking that &#8220;doing Agile&#8221; must be quick and easy, many teams don&#8217;t allow enough time to learn how to make the practices work well for them. Allow for an initial productivity hit, one that will get paid back richly down the road.</li>
<li><strong>Don&#8217;t get suckered</strong> - Now that &#8220;Agile&#8221; is a big buzzword, there&#8217;s an equally big incentive for consultants and authors to sell you Agile lite, the software process equivalent of cotton candy. Don&#8217;t fall for it!</li>
<li><strong>Don&#8217;t just &#8220;do Agile&#8221;</strong> - I&#8217;ll tell you a secret: there is no &#8220;Agile&#8221; that you can do. There is a collection of Agile methods; you can do any one of them. There are a whole host of practices to adopt. But unless you know enough to tell them apart, you don&#8217;t know enough to do any of them well.</li>
<li><strong>Get help from people who have done it</strong> - As a coach, I&#8217;m probably a little biased, but I think everybody who tries an Agile approach should involve somebody who&#8217;s done it before. Whether that&#8217;s a key player, a manager, or a coach doesn&#8217;t matter much. But it&#8217;s hard to learn Agile methods from books, let alone a couple of articles on the web.</li>
<li><strong>Track and pay down your debt</strong> - Part of an Agile adoption is raised standards. That leaves most people with a lot of cleanup to do. Make a list of all your <a title="definition of code debt" href="http://en.wikipedia.org/wiki/Technical_debt">code debt</a> and testing debt, and have a plan for paying it off.</li>
<li><strong>Push power down</strong> - Agile methods do best in a context where teams are given broad latitude to solve problems on their own. Focus on supporting rather than directing your Agile teams.</li>
<li><strong>Improve continuously</strong> - An Agile method isn&#8217;t something like a turbocharger that you bolt on once and then use forever. If you aren&#8217;t having regular retrospectives and continually improving your process, you&#8217;re not Agile.</li>
<li><strong>Use your ignorance for good</strong> - One of the biggest mistakes people make is thinking that even though they&#8217;ve never used an Agile approach, they know enough to make big changes to it from day 1. Instead, accept that you&#8217;re trying something truly new to you, and act like it.</li>
</ol>
<h2>Feedback wanted</h2>
<p>Have any war stories about the dangers of being fashionably Agile? How about tips on doing it right? <strong>I&#8217;d love your comments, and other readers would, too.</strong></p>
<p>P.S. Hat tip to my old pal Christopher DeJong for the phrase &#8220;Agile is the new black&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilefocus.com/2009/07/06/fad-proofing-your-agile-adoption/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
