<?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>Maccherone &#187; Scrum</title>
	<atom:link href="http://maccherone.com/larry/tag/scrum/feed/" rel="self" type="application/rss+xml" />
	<link>http://maccherone.com/larry</link>
	<description>Like photography, the impact of data visualization, is a function of perspective, focus, and illumination.</description>
	<lastBuildDate>Sun, 11 Mar 2012 12:47:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Top 10 questions when using Agile on hardware projects</title>
		<link>http://maccherone.com/larry/2010/02/23/top-10-questions-when-using-agile-on-hardware-projects/</link>
		<comments>http://maccherone.com/larry/2010/02/23/top-10-questions-when-using-agile-on-hardware-projects/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 19:46:11 +0000</pubDate>
		<dc:creator>Larry Maccherone</dc:creator>
				<category><![CDATA[Software craftsmanship]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://maccherone.com/larry/?p=178</guid>
		<description><![CDATA[Recently, I have had the chance to work closely with a number of projects that were not pure software. They all had some software or firmware component but they also included an electronics or even mechanical design aspect. Below are &#8230; <a href="http://maccherone.com/larry/2010/02/23/top-10-questions-when-using-agile-on-hardware-projects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--S-ButtonZ 1.1.5 Start-->
<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2010/02/23/top-10-questions-when-using-agile-on-hardware-projects/";
		var dzone_title = "Top 10 questions when using Agile on hardware projects";
		var dzone_style = "1";
		var dzone_blurb = "Recently, I have had the chance to work closely with a number of projects that were not pure software. They all had some software or firmware component but they also included an electronics or even mechanical design aspect. Below are the top ten questions...";
		//-->
		</script><br />
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div>
<p><!--S-ButtonZ 1.1.5 End-->Recently, I have had the chance to work closely with a number of projects that were not pure software. They all had some software or firmware component but they also included an electronics or even mechanical design aspect. Below are the top ten questions I recorded when working with these teams and the answers on how the teams effectively answered them.</p>
<p><strong>1.    Are Agile practices and processes effective when conducting non-software projects (firmware, electronic, mechanical, etc.)?</strong></p>
<p><strong>Absolutely</strong>. Some of the XP engineering practices are not directly applicable or need to be modified based upon industry or your particular situation. However, surprisingly minor adjustments are all that is necessary for the Scrum process framework to be highly effective… even compared to processes that evolved specifically for hardware.</p>
<p><strong>2.    What adjustments need to be made to make to the Scrum process framework work well for these projects?</strong></p>
<p><strong>Surprisingly few.</strong> The primary adjustments center around expectations in two general areas: (1) minimal marketable feature/emergent design/thin vertical slices, and (2) user stories.</p>
<p><strong>3.    What adjustments need to be made to our expectations around minimal marketable feature, emergent design, and thin vertical slices?</strong></p>
<p><strong>Focus on feedback. True, the break even point between thinking versus building encompasses more thinking for non-software projects. Even so, push to build something sooner and even when you are working on early design and infrastructure, get feedback on some “product” each iteration&#8230; and get that feedback from a source as close to the user as possible.</strong> In software, it’s almost always less expensive and more effective to build something rapidly, get feedback on it from an actual user, and change it, than it is to think longer about how to build it expecting to avoid later rework. This is the primary reason why Agile practices encourage you to break up the work into increments of minimal marketable features (MMF). Agile software projects try to build as little infrastructure as necessary to implement the current MMF and let the design emerge from those increments rather than nail down all the requirements and design up front. You are encouraged to build the system in thin vertical slices where all levels of the product experience changes with each increment.</p>
<p>When confronted with this idea, even software-only teams push back. Software teams want an architecturally sound base upon which to build their features. However, I have found that if the team thinks on it for a bit, they can often find a way to build usable features and start to get feedback much sooner than the team originally imagined. Those projects are able to deliver a marketable feature even in the first few iterations and they move rapidly to a mode where very little of each iteration is spent on infrastructure. The primary difference for hardware projects is that you have a different cost structure for manufacturing so the break even point for thinking versus building encompasses a bit more thinking. This means that it may take longer to get into the mode of designing several MMFs each iteration.</p>
<p>Remember, the primary benefit of this approach is to get the most valuable possible feedback as often as possible. So even when it is hard to use thin vertical slices to accomplish that, you should still seek out opportunities to enhance the richness and frequency of the feedback you receive by producing something to get feedback upon during EVERY iteration. The next step down from demonstrating an MMF is producing a prototype but even that can be hard to do every iteration of a hardware project. So when the thing you produce is only a document, a design, or an experiment, make an effort to maximize the value by choosing to get your feedback from a source as close to the customer as possible.<br />
<strong><br />
4.    What adjustments to our expectations need to be made around user stories?</strong></p>
<p><strong>Understand that the “user” in user stories only hints at one of four good reasons to manage requirements with user stories… and it’s not the most important reason, &#8220;conversations.&#8221; Maybe they should be called &#8220;conversational stories.&#8221; </strong>The big hang-up of hardware teams managing requirements with user stories focuses around the word “users”. That’s unfortunate because I don’t think that is the most important benefit that Agile teams (even software teams) get from the practices surrounding user stories.</p>
<p>The benefits come from four aspect: (1) WHO, (2) WHAT, (3) WHY, and (4) conversations. This last one, conversations, is the most valuable so I’ll talk about it first.</p>
<p>Even when drafts of requirements documents are shared with the development team for early feedback, the development team doesn’t internalize them until they start working with them. By having the team size, and often write user stories, you force them to start this internalization much sooner. The early conversation between the development team and stake holders around the requirements allows for implementation costs to be factored into requirements tradeoff decisions. The ongoing conversation throughout the project lifecycle, provides a high-fidelity communication channel and continuous vision alignment.</p>
<p>Now, let’s address the other three beneficial aspects one at a time. The traditional user story format is, “As a WHO, I want to WHAT, so that I can WHY.” All three of these, WHO, WHAT and WHY, provide benefits. The tension of trying to always make the WHO be an end user is not unique to hardware. Even in the most Agile of software-only teams, there are times when the end user is only indirectly the beneficiary of a particular backlog item. For instance, the most direct beneficiary of a research activity, a mockup, or a prototype (collectively referred to as a “spike” in the agile world) is the development team and not the end-user. In those cases, specifying the WHO does not encourage you to think about the product from the end user’s perspective. If every user story were this way, then we wouldn’t call them “user stories”. The “user” is in the phrase to remind us to get the user perspective involved as often and as soon as possible but just like MMFs, this practice is harder to do as often especially early in a hardware project.</p>
<p>I will not dwell on the WHAT because this element is present in all approaches to requirements management, except to mention that it is important for the what to not drift over into the HOW so the development team has flexibility in how they meet the identified need. Note: The Rally tool’s entity for “user stories” is really more of a generic backlog item. There is nothing in the tool that enforces or even makes awkward, the use of this entity in a traditional work breakdown mode.</p>
<p>On the other hand, the WHY is somewhat unique to the practice of user stories and can be very valuable. Understanding why someone wants something empowers the development team to be creative about satisfying a need… sometimes even by explicitly not satisfying the WHAT of the user story.  If a team is told that it must implement a data layer with sub-millisecond response, they may blindly go about accomplishing that… at great cost. My first response to a user story written like that is that it crossed the border from WHAT and into the realm of HOW. Nevertheless, even if you give a team a user story like that but you also tell them that the reason for this “requirement” is the responsiveness of the user interface, they may take steps to provide low latency to user input even when the data does not make it all the way to the data layer for a second or more… saving cost AND improving the product.</p>
<p><strong>5.    What about prioritizing user stories strictly by value to the end user?</strong></p>
<p><strong>Prioritize by overall business value, not end user value. </strong>Even in software-only projects, user stories should be prioritized by overall value to the business, not the end user. Often that is the same thing and certainly, the end user’s needs are the biggest factor in prioritizing any user story with an end-user as the WHO. However, a feature that is desirable to the end user but not saleable might not be valuable to your business. Similarly, valuable features that are too costly (either to produce or as tradeoff for against other desirable features) might not be good decisions.</p>
<p>Apple has been criticized for excluding multi-tasking from the iPhone. They realized that multi-tasking negatively impacted battery life and user interface responsiveness and explicitly left it out of product. They made a business decision that they could still sell the iPhone even without this high profile feature.</p>
<p>However, before they made this decision, they needed some information. How much did background tasks hurt battery life and responsiveness? How amenable will potential customers be to purchasing a product without it? Apple can easily justify investments in research to determine the extent of this impact on both the usability and marketability of the product. This information is of no direct benefit to the end-user but the work necessary to gather it, was of immense benefit to the business.</p>
<p>Development projects of all kinds benefit from good design and marketing decisions. Backlog items focused solely on these outcomes are of value to the business and should get appropriate prioritization. Similar to the above discussion on MMFs and the WHO in user stories, it just may be that non-software projects experience more of these tradeoff analysis backlog items early in the project and they keep seeing them longer into the development cycle.<br />
<strong><br />
6.    Should user stories be our only tool for requirements management?</strong></p>
<p><strong>Not usually for hardware/mixed projects.</strong> There are many reasons why you might want some other mechanism to compliment your user story practice. For instance, the concept of abuse cases is often part of a larger security review. Safety reviews often have a parallel mechanism. Protocols and other interfaces are best defined by other means. Hardware typically have requirements associated with the operating environment. Etc.<br />
<strong><br />
7.    But user stories are not even an official requirement of Scrum so why shouldn’t we just use our traditional requirements practices?</strong></p>
<p><strong>Consider alternatives but remember all four valuable aspects of user stories. </strong>It is true that the official definition of Scrum simply calls for there to exist a backlog of work. It only mentions user stories in a sidebar and even then, the sidebar also mentions other approaches like use cases. The essence of Agile is (1) self-organize, (2) do something, and (3) inspect and adapt. The definition of Scrum is just one step more detailed than this essential definition of Agile and is intentionally minimalistic so any iterative agile approach would fit.</p>
<p>User stories have emerged as a common and valuable practice because of the reasons mentioned above but it is not strictly required. Your team should feel empowered to consider alternatives.</p>
<p>However, if your team chooses another approach to doing requirements management, you should not deviate from the agile practice of allowing the development team to do the estimating. Also, I encourage you to think about the reasons the practices surrounding user stories are valuable (other than the emphasis on the user) as described above and enable as much of those reasons as possible, starting with the conversation aspect.</p>
<p><strong>8.    What about when we need to send a board (or prototype part) out for manufacturing and it will not be done within an iteration?</strong><br />
<strong><br />
Push for rapid prototyping but adapt to your capability. </strong>This is a very specific question that comes up often when folks are told that they need to produce something upon which to get feedback during each iteration. What if the time it takes to get prototype parts back from manufacturing is longer than an iteration?</p>
<p>My first response is to ask yourself, “Is there ANYTHING that we can do so that we CAN produce a prototype in a iteration?“ The world of prototyping has attempted to keep up with the ever-increasing pace of change. There now exist component suppliers that allow you to upload a part design in the morning so that they can produce and ship it overnight. Those services are expensive but so is the time of your team. Failing some solution like that, “Is there a different way to produce something to get the answers and feedback we need for  decisions within a single iteration?”</p>
<p>If you still cannot think of a way to produce it within one sprint, you can handle it by breaking the backlog item down. The first portion includes whatever work is necessary to place the order for the part. The later portion includes any evaluation activities. Collectively, they have value to the business.<br />
<strong><br />
9.    What about dependencies and critical path analysis?</strong></p>
<p><strong>Supplement when needed but ask if it is really needed. </strong>Dependencies are considered by the product owner and the development team when choosing stories for a particular iteration. However, the consideration of dependencies is informal and not explicit like in a Gantt chart format (think Microsoft Project). I have worked with teams where explicitly and continuously conducting this sort of critical path analysis is…. well…  critical to their success; but I have worked with many more teams where the use of a Gantt chart is merely the default and what they are used to. For those projects, the most important thing is for each team member to know what they should be working on right now and have a sense of urgency about getting it done-done! The mechanisms in the Scrum framework are highly effective at accomplishing this. If you do need to conduct critical path analysis at some point, I suggest that you do it only as needed.</p>
<p>Note: The Rally tool includes functionality for you to record dependencies so that they are readily available when you are making decisions about what to work on next.<br />
<strong><br />
10.    Maybe we don’t need continuous critical path analysis, but we still have specialists that are not permanently dedicated to the team. How do we deal with that?</strong></p>
<p><strong>Favor cross-training and using generalist team members but fall-back to explicit allocation and coordination when necessary. </strong>The Agile approach is to fully dedicate as many of these specialists to the team as possible. Even when you know it’s not a full-time job for a particular specialty, it still might be better to supplement those specialists’ workloads with team tasks that are outside of their specialty. We find that becoming Agile tends to encourage more generalists (or at least multi-specialists) to emerge. This cross-training is generally positive on its own merit but double so when you factor in the cost of task switching and the productivity befits you get once a team learns how best to work together (think Forming-Storming-Norming-Performing).</p>
<p>Even so, there may still be some centralized functions that your teams will need to consult. It is often possible to handle these situations by leveraging the team’s approach to dealing with outside suppliers.</p>
<p>When you move the solid line from a functional manager to a team lead and make the functional manager the dotted line, it will bring up many issues like personnel reviews and career counseling. The coaches at Rally have experience with companies making these transitions and can help you with those tough issues but you will have to work through them. “Agile is easy. Implementing Agile is a bit more difficult.”
<div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://maccherone.com/larry/2010/02/23/top-10-questions-when-using-agile-on-hardware-projects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ports, Components, and Connectors: the next great abstraction?</title>
		<link>http://maccherone.com/larry/2009/03/30/ports-components-and-connectors-the-next-great-abstraction/</link>
		<comments>http://maccherone.com/larry/2009/03/30/ports-components-and-connectors-the-next-great-abstraction/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 20:39:12 +0000</pubDate>
		<dc:creator>Larry Maccherone</dc:creator>
				<category><![CDATA[Software craftsmanship]]></category>
		<category><![CDATA[Abstractions]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://maccherone.com/larry/?p=56</guid>
		<description><![CDATA[My friend George Fairbanks is trying to make the case that the abstractions provided by ports, connectors, and components are the next escalation in the war against complexity and scale. George, First, the good news&#8230; Unfortunately (or maybe fortunately for &#8230; <a href="http://maccherone.com/larry/2009/03/30/ports-components-and-connectors-the-next-great-abstraction/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--S-ButtonZ 1.1.5 Start-->
<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2009/03/30/ports-components-and-connectors-the-next-great-abstraction/";
		var dzone_title = "Ports, Components, and Connectors: the next great abstraction?";
		var dzone_style = "1";
		var dzone_blurb = "My friend George Fairbanks is trying to make the case that the abstractions provided by ports, connectors, and components are the next escalation in the war against complexity and scale.George,First, the good news&#8230;Unfortunately (or maybe fortunately...";
		//-->
		</script><br />
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div>
<p><!--S-ButtonZ 1.1.5 End-->My friend George Fairbanks is <a href="http://rhinoresearch.com/content/engineering-activities-vs-management-activities">trying to make the case</a> that the abstractions provided by ports, connectors, and components are the next escalation in the war against complexity and scale.</p>
<p>George,</p>
<p>First, the good news&#8230;</p>
<p>Unfortunately (or maybe fortunately for you), many start Scrum without good engineering practices. I&#8217;m planning a talk with Noopur Davis at <a href="http://agile2009.agilealliance.org/node/2602">Agile2009 </a>about this. Excerpt: &#8220;Simon, Struggling Agilist. Simon and his team have been using SCRUM and some agile practices for several iterations. They started out with great enthusiasm, but are now struggling as estimates are not improving, quality problems persist, and technical debt accumulates. Simon and his team want specific guidance on what they need to change.&#8221; We have data on a team that started with Scrum and added engineering practices of design, design review and code review. Their velocity went up and their defects/KLOC numbers improved significantly.</p>
<p>There is a tidal wave of folks who started Scrum without good engineering practices and now realize that they need them. You might try to ride that wave. Your best shot is with the Scrum folks who are now struggling. Lots of other folks are advocating more requirements and design work (iteration zero). You have another take on that.</p>
<p>Now the bad news&#8230;</p>
<p>Agilest will argue that feedback from actual running code is the best way to battle complexity and scale. Tighten the feedback loop with actual code. You can make more rapid progress by building something, even the wrong thing, and re-building it, than you can by wasting time modeling it and thinking about it because the assumptions you make when thinking about it always miss something important. You&#8217;ll call that something an insignificant detail. They&#8217;ll say, it&#8217;s the details that end up getting you.</p>
<p>I think you will lose the argument if someone comes up with a story about how Google&#8217;s (substitute, amazon web services, apache, or some other well known &#8220;big&#8221; system) massively scalable (although arguably not complex) system was created iteratively without any serious architecture work. Then, your approach to architecture is no longer design; it&#8217;s archeology, a concise way to document a system after a real engineer built it. I suspect that Eclipse was built with a more structured approach. Do you know if they followed an architecture approach?</p>
<p>Another way to lose the argument is by frameworks. I know architects whose job is mostly done once they decide what framework to use. Can you make the case that your approach could be used for them to make this decision? Be careful, most folks make the choice based upon things like how little boilerplate it makes you write, and the syntax of the templating language (<a href="http://mdp.cti.depaul.edu/examples/static/web2py_vs_others.pdf">Exhibit A</a>). I see tons of discussion and thought go into the difference between SQLAlchemy and Hibernate&#8217;s approach to ORM versus RoR&#8217;s or Django&#8217;s. Can you address these things with your approach?</p>
<p>Alternatively, can you make the case that your approach could help in designing these frameworks? If that&#8217;s your goal, you limit your audience terribly and I&#8217;m still not convinced. Because for most design issues, I think most developers will prefer to use object-oriented terms and supplement that with OO design pattern terms when necessary. For instance, I recently worked on a team where we had to expand our system to support a remote service for storage (Amazon S3), whereas the system currently supported a local embedded storage. The conversation we had went something like this:</p>
<ul>
<li>Developer A: Let&#8217;s just put a remote proxy in front of the embedded storage interface with the same methods as the current embedded storage API. We can block on calls to S3.</li>
<li>Developer B: Yeah, and if that&#8217;s too slow, we can add pre-fetch to the remote proxy.</li>
<li>Developer C: I disagree. By doing that, any code calling this might not anticipate the delay. The more general model is the async one. Let&#8217;s bite the bullet now and implement a pub-sub &#8220;observer&#8221; eventing system and create our own internal async interface for storage. Let&#8217;s look at Dojo&#8217;s storage API for ideas on generality. Then when using the local storage, we&#8217;ll just immediately trigger the callback event.</li>
</ul>
<p>We all agreed with Developer C and that&#8217;s what we did. How would you address this conversation with ports, connectors, and components? Is that approach any more concise or revealing? If your response is that you are really targeting higher level issues, then you&#8217;ve greatly limited your audience because (other than deciding what stack/framework to use) this scenario is and example of the highest level issues that most developers deal with.</p>
<p>What about massively parallel designs? Can you help there?</p>
<p>I&#8217;m not sure what the right answer is for you. I&#8217;ve never been much of a believer myself. I hate to say that without reading the other draft chapters. I&#8217;ll probably do that some time but I don&#8217;t have the time right now.</p>
<p>Maybe if you started with the patterns/styles and thought of the connectors, ports, and components as merely ways to express the styles, that would be more palatable to the average developer.</p>
<p>I don&#8217;t want to throw your own words back at you but do you remember writing this?</p>
<p style="padding-left: 30px;">First, it had been assumed by many, including the architecture group,<br />
that software architecture would be a readily teachable skill. This project<br />
uncovered six competent, experienced developers who showed little aptitude<br />
for creating architectural models.</p>
<p style="padding-left: 30px;">Second, if this finding generalizes then it limits the way companies can use<br />
software architects. The traditional approach to adopting a new technique is<br />
simply to train people to use it, but this pilot shows that a software<br />
architecture training program may be ineffective.</p>
<p>If you still believe what you wrote, then maybe you should be targeting architects not general developers. More bad news for you is that I think the use of the title &#8220;architect&#8221; is diminishing. Those folks still exist but they have new titles now. Or do you think you now have a better way to bring them along and make more &#8220;architects&#8221;?</p>
<p>Sorry to be so glum. I kept going because I was hoping to come up with a good angle for you. Instead, I just ended up with a long depressing discussion.</p>
<p>Your friend,</p>
<p>Larry
<div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://maccherone.com/larry/2009/03/30/ports-components-and-connectors-the-next-great-abstraction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adopting Agile doesn&#8217;t mean forgetting what you&#8217;ve learned</title>
		<link>http://maccherone.com/larry/2009/02/25/adopting-agile-doesnt-mean-forgetting-what-youve-learned/</link>
		<comments>http://maccherone.com/larry/2009/02/25/adopting-agile-doesnt-mean-forgetting-what-youve-learned/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 22:27:54 +0000</pubDate>
		<dc:creator>Larry Maccherone</dc:creator>
				<category><![CDATA[Software craftsmanship]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://maccherone.com/larry/?p=28</guid>
		<description><![CDATA[Agile is particularly attractive to two very different groups: 1) those whose organizations don&#8217;t already have evolved practices, and 2) those whose processes have grown to become burdensome. In both cases, there is a tendency to make your first Agile &#8230; <a href="http://maccherone.com/larry/2009/02/25/adopting-agile-doesnt-mean-forgetting-what-youve-learned/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--S-ButtonZ 1.1.5 Start-->
<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2009/02/25/adopting-agile-doesnt-mean-forgetting-what-youve-learned/";
		var dzone_title = "Adopting Agile doesn&#8217;t mean forgetting what you&#8217;ve learned";
		var dzone_style = "1";
		var dzone_blurb = "Agile is particularly attractive to two very different groups: 1) those whose organizations don&#8217;t already have evolved practices, and 2) those whose processes have grown to become burdensome. In both cases, there is a tendency to make your first...";
		//-->
		</script><br />
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div>
<p><!--S-ButtonZ 1.1.5 End-->Agile is particularly attractive to two very different groups: 1) those whose organizations don&#8217;t already have evolved practices, and 2) those whose processes have grown to become burdensome. In both cases, there is a tendency to make your first Agile sprints have a bare minimum process. After all, that&#8217;s what Agile says to do, right?&#8230;</p>
<p>Not right! It&#8217;s a common misconception, but minimum weight is not the controlling function for Agile adoption.</p>
<p>The controlling idea of Agile is learning (visibility and inspection/retrospection) and applying that learning (adaptation). Agile practices are predicated on the idea that trying to apply someone else’s process template to your situation is rarely ideal and often counterproductive. Rather, the agile approach is principled-based, allowing you to adapt as you learn and your situation changes.</p>
<p>So what does this mean? Well, if you currently have over evolved processes, don&#8217;t throw the baby out with the bath water. If your organization has experienced problems in the past and the situation hasn&#8217;t changed in a way that invalidates that &#8220;learning&#8221;, don&#8217;t necessarily throw out all process elements that resulted from those experiences. Similarly, if you are just getting started, don&#8217;t be afraid to learn from others who have gone before. In fact, using what you&#8217;ve learned is the foundation of the Agile approach.</p>
<p>Let me give you a concrete example. It&#8217;s no coincidence that every strong team that I&#8217;ve ever seen has mandated some means to get another set of eyeballs on the code. In some organizations, this means &#8220;formal inspections&#8221;. You may believe that formal inspections cost more than it&#8217;s worth for your situation and I won&#8217;t disagree with you, but even XP advocates pair programming. Open source development has the &#8220;many eyeballs&#8221; effect built into their licensing and  commit practices. For closed source practitioners, what I&#8217;m starting to see more is some form of asynchronous peer review using tools like <a href="http://www.google.com/enterprise/marketplace/viewListing?productListingId=5143210+12982233047309328439" target="_blank">Google Code Reviews</a>.</p>
<p>Why do all these strong practitioners utilize some form of peer review? Because we&#8217;ve shown time and again, in various and sundry quantitative research, as well as in qualitative studies, that it&#8217;s the single most efficient thing we can do to remove defects from the code. In general, it&#8217;s more efficient than testing at removing all kinds of defects PLUS it allows you to systematically address things that testing cannot like maintainability/evolvability (code smell issues), as well as things that are nearly impossible to find with testing including certain kinds of security and concurrency issues. Why then do I see Agile teams going through their first few sprints without any form of peer review?</p>
<p>Similarly, there is a tendency to swing too far on the issue of design. Sure, I&#8217;m a firm believer in YAGNI and that the best way to improve the design is to evolve working code. I&#8217;ve suffered the paralysis of analysis. I&#8217;ve even been the guilty party. However, <a href="http://www.infoq.com/news/2009/02/Refactoring-Is-Not-Design" target="_blank">refactoring is not a substitute for design</a>. It&#8217;s very difficult to achieve certain non-functional requirements (scalability, security, etc.) without some architecture work up front. Similarly, depending upon your situation, appropriate requirements elicitation and documentation practices can save much more than they cost.</p>
<p>The good news is that Agile supports doing these things in its &#8220;definition of done&#8221;. Furthermore, if you fail to do them, it provides the feedback loops that will highlight the need for them later. However, do yourself a favor, when you are trying to settle on your FIRST &#8220;definition of done&#8221;, include at least some form of peer review for your code.
<div style="clear:both;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://maccherone.com/larry/2009/02/25/adopting-agile-doesnt-mean-forgetting-what-youve-learned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

