<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-19668182</atom:id><lastBuildDate>Mon, 23 Jan 2012 11:00:12 +0000</lastBuildDate><category>grails</category><category>branching</category><category>tools</category><category>agile</category><category>build</category><category>refactoring</category><category>planning</category><category>books</category><category>programming</category><category>deployment</category><category>scm</category><category>design</category><category>XML</category><category>events</category><category>testing</category><category>writing</category><category>management</category><title>Accidental Simplicity</title><description>Thoughts about agile software development, software configuration management and the intersection between them.</description><link>http://steveberczuk.blogspot.com/</link><managingEditor>noreply@blogger.com (Steve Berczuk)</managingEditor><generator>Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AccidentalSimplicity" /><feedburner:info uri="accidentalsimplicity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>AccidentalSimplicity</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/AccidentalSimplicity" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FAccidentalSimplicity" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1203754035908386046</guid><pubDate>Mon, 23 Jan 2012 11:00:00 +0000</pubDate><atom:updated>2012-01-23T06:00:12.208-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Do we care whether it's Software Engineering or Craft?</title><description>Much like a tenet of agile software development is that "planning is more important than the plan," there are some questions about software development that are useful to explore, even if you can't suggest a good answer. One of these these is whether what we, as software developers do, is (or can be) engineering.&lt;br /&gt;
&lt;br /&gt;
I was talking with a colleague about a comment someone made about a &lt;a href="http://www.techwell.com/blogs/accidental-simplicity/agility-and-learning-opportunities-everywhere" target="_blank"&gt;post&lt;/a&gt; about lessons that software engineers can learn from artists. In this comment the poster raised an issue that comes up a lot when someone uses the phrase "software engineer." The question was, in essence:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;Is what we do when we build software "engineering" or "craft?"&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
My colleague, who has a background in Naval Engineering and who is engaged to an Electrical Engineer (who designs and builds hardware) suggested that the difference is that one rule of thumb might be:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;It's engineering if you need to use calculation (about physical constraints).&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
An example was that to build a bridge you need to do calculations to determine if the bridge, as designed, will support the load you want to support. Many of the "classical" engineering disciplines (Mechanical, structural, electrical) fit that criterion. But by that definition, some things which most would agree that are crafts, such as carpentry, involve calculations. So there is probably more to it that that.&lt;br /&gt;
&lt;br /&gt;
On the other hand, I don't think that all work that is in a discipline that we might call "engineering" is engineering. A good friend designs test equipment for a living. When he builds a sensor to measure the performance of his home heating system is he doing engineering, or is that activity more like a hobby or craft?&lt;br /&gt;
&lt;br /&gt;
As I think of the question, and the frequency at which it comes up, I wonder:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;Why does it matter whether we are software engineers or software craftsmen?&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Engineering, to me, implies a certain level of discipline are repeatable process, and all of the classic engineering disciplines are grounded in physical laws that we are fairly confident in for the scales at which they apply.&lt;br /&gt;
&lt;br /&gt;
If the "software engineering" question is important to you, take a minute to understand why you are asking the question, as the reason for asking may affect the answer. &amp;nbsp;You can bring discipline to building something you regardless of whether or not you are engineering. I don't think that the question of how (or whether) to make software into an engineering discipline is an unimportant one. But I do think that it is often asked in a vacuum, much like the an attempt at a user story that is missing the "so that..." clause.&lt;br /&gt;
&lt;br /&gt;
To me, as a professional, it's more important that I bring discipline to what I do. I want to build useful, quality, software where the definition of "quality" that is often most appropriate is Jerry Weinberg's from &lt;a href="http://www.amazon.com/gp/product/0932633722/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0932633722"&gt;Quality Software Management: Systems Thinking&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0932633722" style="border: none !important; margin: 0px !important;" width="1" /&gt;:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;Quality is Value to Some Person.&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
It might be fair to say that we're not always "crafting" or "engineering" software when we sit down at an IDE and program. Sometimes we're just coding (or hacking, or programming). But if you (and your team) are committed to building software that meets your customers needs, and you are always working to learn how to work better, you're doing a good thing. And you don't need to call it engineering to acknowledge that.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1203754035908386046?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ctM1gulZ65n5YV1JoOSiPjdMquo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ctM1gulZ65n5YV1JoOSiPjdMquo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ctM1gulZ65n5YV1JoOSiPjdMquo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ctM1gulZ65n5YV1JoOSiPjdMquo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/xzesq2RKQio" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/xzesq2RKQio/do-we-care-whether-its-software.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2012/01/do-we-care-whether-its-software.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-4142196915091696559</guid><pubDate>Sat, 14 Jan 2012 20:00:00 +0000</pubDate><atom:updated>2012-01-14T15:03:26.316-05:00</atom:updated><title>Agility (and Learning Opportunities) Everywhere</title><description>People often ask "can I apply agile methods to something other than software development?" Since the basic appeal of agile methods is to acknowledge uncertainty by planning in increments, evaluating where you are relative to the plan and other forces, and planning the next increment, it seems like there should be no obstacle to following an agile approach for any project. The lurking question many have is "but can my type of project really be structured in an incremental way?"&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
While in general, I tend to believe that the answer is "yes," it's always good to have examples. So I was intrigued to head a segment on the radio show &lt;a href="http://www.loe.org/" target="_blank"&gt;Living On Earth&lt;/a&gt;, where the rapper Baba Brinkmann described his approach to developing &lt;a href="http://www.loe.org/shows/shows.html?programID=12-P13-00001#feature7" target="_blank"&gt;The Rap Guide to Evolution&lt;/a&gt; as "Performance, Feedback, Revision," which is a very concise way to describe an agile approach. This meta-aspect of this also intrigued me, as Brinkman used the performance, feedback, revision theme in the evolution rap as well.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is also another reminder of how software developers can learn much from many seemingly unrelated domains. As Rob Austin and Lee Devin explore in &lt;a href="http://www.amazon.com/gp/product/0130086959/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0130086959"&gt;Artful Making: What Managers Need to Know About How Artists Work&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0130086959" style="border: none !important; margin: 0px !important;" width="1" /&gt;
managers, including software managers, can learn from theatre, and in &lt;a href="http://www.amazon.com/gp/product/0201550601/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201550601"&gt;Computers as Theatre&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0201550601" style="border: none !important; margin: 0px !important;" width="1" /&gt;
 Brenda Laurel discusses what interaction designers can learn from theatre.&lt;br /&gt;
&lt;br /&gt;
So, yes, you can be agile if you are doing something other than software, and if you are developing software you can learn how to build software better by looking at other disciplines.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS1=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=0130086959" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS1=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=0201550601" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=B005CKI9VU" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-4142196915091696559?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TRIPpak9q3xGYMur0QbuZRVM1yg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TRIPpak9q3xGYMur0QbuZRVM1yg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TRIPpak9q3xGYMur0QbuZRVM1yg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TRIPpak9q3xGYMur0QbuZRVM1yg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/9HjJoZENudQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/9HjJoZENudQ/agility-and-learning-opportunities.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2012/01/agility-and-learning-opportunities.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-8144121264675312652</guid><pubDate>Thu, 08 Dec 2011 16:00:00 +0000</pubDate><atom:updated>2011-12-08T11:00:06.629-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><title>Questioning before Answering</title><description>The other day I came across a &lt;a href="http://www.youtube.com/watch?v=gd3oYFS9g9I" target="_blank"&gt;short video&lt;/a&gt; in which a parent is faced with answering a unexpected question posed by her young child. I found this video amusing because, being the parent of a kindergartener, I expect to be faced with many awkward moments like this in the future. I also found it an interesting metaphor for software requirements gathering.&lt;br /&gt;
&lt;br /&gt;
In the video the &amp;nbsp;parent could have answered the question a whole lot more simply has she just asked taken a moment to try to understand what the real question was, and not taken the question at face value. (I'm being purposely vague at this point in case anyone wants to watch the video.)&lt;br /&gt;
&lt;br /&gt;
Most of us have been on projects where much effort has been spent in an attempt to solve a customer's stated problem, only to discover that that either:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The program didn't actually solve any of the customer's real problems.&lt;/li&gt;
&lt;li&gt;The team didn't solve the problem that the customer wanted solved.&lt;/li&gt;
&lt;li&gt;There was a much simpler solution.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
I'm not suggesting that exhaustive requirements capture is the answer. Nor am I suggesting that you should not start building software until you have complete understanding of a problem. The reason that agile methods work well is that they &amp;nbsp;acknowledge uncertainty, and provide a simple path to refining understanding: evaluating working software.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Acknowledging uncertainty does not mean ignoring information. In some cases customers might not really understand what they need, and the best way for a team to progress is to take a guess based on the information they have, and iterate on a working system. &amp;nbsp;In many cases a customer will know the reason they want to do something, but may not be able to step back enough to express it. In these cases, but not trying to ask "why?" your team is ignoring information &amp;nbsp;that can help them do their work.&amp;nbsp;In more cases than not, a customer can fill in the pieces of &amp;nbsp;&lt;a href="http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template" target="_blank"&gt;the user story template&lt;/a&gt;:&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
As a (ROLE) I want to (DO SOMETHING) so that (REASON)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
and provide insight into the problem that she wants to solve. This will save time, effort, and help the team deliver a better system.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If your team takes customer requirements statements at face value without exploring the reasons why a customer wants a piece of functionality, they aren't holding up their end of the collaboration part of agile software development.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Had the parent in the video though to ask why the child asked the question that she did, the process of answering might have been simpler.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-8144121264675312652?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F9SsblT8f4OAyXA6HnHdQ4GMZY4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9SsblT8f4OAyXA6HnHdQ4GMZY4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F9SsblT8f4OAyXA6HnHdQ4GMZY4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9SsblT8f4OAyXA6HnHdQ4GMZY4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/fp6G51tAVEc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/fp6G51tAVEc/questioning-before-answering.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/12/questioning-before-answering.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-2734532355900372561</guid><pubDate>Mon, 05 Dec 2011 14:00:00 +0000</pubDate><atom:updated>2011-12-05T09:51:50.124-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">scm</category><title>SCM Tool as Collaboration Tool</title><description>&lt;br /&gt;
A few weeks ago I had the opportunity to give a &lt;a href="http://www.youtube.com/watch?v=p06fF_IXDLM" target="_blank"&gt;virtual talk at a product launch&lt;/a&gt; for an SCM Tool vendor. &amp;nbsp; The theme of the talk was basic branching strategies, and preparing for the talk led me to reflect on what &amp;nbsp;Brad and I wrote in the SCM Patterns Book. This post is based on those thoughts.&lt;br /&gt;
&lt;br /&gt;
When Brad Appleton and I wrote &lt;a href="http://www.amazon.com/gp/product/0201741172/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201741172"&gt;Software Configuration Management Patterns&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0201741172" style="border: none !important; margin: 0px !important;" width="1" /&gt;
 I wanted to focus on how to use Software Configuration Management and Version Control &amp;nbsp;to improve productivity and collaboration.&amp;nbsp;&amp;nbsp;In many organizations SCM processes, procedures, and policies are focused on stakeholders other than those who rely on the system most: developers.&lt;br /&gt;
&lt;br /&gt;
A good SCM process can help you to work better as a team, and help your team be more agile. An ineffective one can slow down development, and be an obstacle to progress. Likewise the tools you use, while secondary to the decisions about the way you work, can affect how effective your SCM process is.&lt;br /&gt;
&lt;br /&gt;
Tools are important. A good SCM tool helps you work more effectively as a team and allows you to focus on your work and not the mechanics of the SCM process. But the process needs to come first to use SCM effectively. Here are some brief thoughts on what I think are the core issues to consider when designing an SCM process.&lt;br /&gt;
&lt;h2&gt;

Code Lines&lt;/h2&gt;
While there are many aspects to Software Configuration Management, the first concept that comes to mind for many is version control.&amp;nbsp;Developers commit changes to a code line, and update their workspaces from a code line.&amp;nbsp;The main role of an SCM process is to facilitate integration, and you want commits and updates to be frequent to avoid complicated integrations.&lt;br /&gt;
&lt;br /&gt;
Frequent commits also give developers the full benefit of having a history of their work so that it is easy to revert to a known state when a coding experiment goes wrong. So you want processes and policies that encourage frequent integration.&lt;br /&gt;
&lt;br /&gt;
The simplest SCM model is to commit changes into a single code line.&amp;nbsp;Working on a single code line is simple in some ways. But it requires discipline to keep a single code line, with frequent commits, stable.&lt;br /&gt;
&lt;br /&gt;
A code line where people have practices such as tests and a discipline of pre-commit builds in place, is an &lt;i&gt;Active Development Line.&amp;nbsp;&lt;/i&gt;Not every team can maintain this discipline. And even for those who can there are legitimate reasons to work on more than one code line.&amp;nbsp;Once developers realized the challenges of working on a single codeline, they quickly become interested in the &amp;nbsp;way a tool supports branching.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 24px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;

Branching&lt;/h2&gt;
The first question people often ask about a tool is how it supports branching, this question is best answered in the context of &amp;nbsp;understanding why you want to branch.&amp;nbsp;Branching is a technique for enabling parallel development. When you branch you create code line that is a copy of its parent and it can evolve independently. A Branch allows you to work on variation of the code without affecting or being affected by, changes in &amp;nbsp;the parent code line.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
The ability to work in parallel can be an effective tool for enhancing productivity. It can also be a cause of bottlenecks and frustration. The difference between the two results depends on whether you follow branching patterns that address the problem that you are trying to address.&lt;br /&gt;
&lt;br /&gt;
Branching can be a very useful mechanism for making your development process more effective if you do it the right ways, with the right tools, and for the right reasons. A poorly applied branching strategy can have the opposite effect, decreasing your velocity and making it harder for team members to work together. So while how a tool supports branching is important, it's more important to understand why you are branching, and if branching is as helpful as you'd like. As I explain in more detail in &lt;a href="http://agile.techwell.com/articles/weekly/branching-distraction" target="_blank"&gt;a article on TechWell&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;Branches are helpful if the enable you to work more quickly than a single code line would.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
To make this concrete, here are some examples of solutions to a "fix the release" scenario:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Use a Release Line:&amp;nbsp;A common branching pattern is to create a branch when you release software, The Release line allows you to deliver fixes to the released software quickly without having to worry about the impact of new development work on the code.&amp;nbsp;Most of the time a release branch is the right choice for managing changes to a release. There are alternatives, but each adds its own cost.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Defer the fix until the next release is scheduled. This will only be a viable option if the problem isn't critical, or if the team releases software frequently. In many cases, teams don't release software frequently enough to do this.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Fix the problem in the existing code base and release early. This can work only if you have a continuous quality assurance cycle that insures that your code is always ready for release, While many teams strive to do this, few are able to.&lt;/li&gt;
&lt;/ul&gt;
So, in many cases, the traditional Release Line pattern is the right choice. &lt;a href="http://steveberczuk.blogspot.com/2009/07/finding-and-evaluating-options.html" target="_blank"&gt;But it's good to be aware of alternatives&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;

Distraction&lt;/h2&gt;
While branches can be useful, they have costs that you need to be aware of. Team Software development is a balance between integration and isolation. Branching can be a powerful tool for isolating change.&lt;br /&gt;
&lt;br /&gt;
But be aware that not all changes are are isolated as they first appear. For example, much of the time when you fix a problem on released code, you will also want to address the problem in your new development code line. So by working on a branch you have created the need to do the same work twice. And the more branches you have, the greater &amp;nbsp;the risk of distraction, and reduced velocity.&lt;br /&gt;
&lt;br /&gt;
Software configuration management practices and tools are part of a developer's basic toolkit. Like all tools, the right tool used correctly they can help you get your job done. The wrong one used without understanding can distract you from your goal.&lt;br /&gt;
&lt;br /&gt;
Branching can help improve your velocity, but be sure to be aware of the reasons you are branching, and always ask your self if the branch will &amp;nbsp;deliver enough value to justify the cost. and always test and integrate frequently to avoid surprises.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that the real goal of an SCM environment is to help your team to work effectively.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-2734532355900372561?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uOvJ1O24p_mmQTX6_zdwEBDPxgc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uOvJ1O24p_mmQTX6_zdwEBDPxgc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uOvJ1O24p_mmQTX6_zdwEBDPxgc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uOvJ1O24p_mmQTX6_zdwEBDPxgc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/UN3mWMVN_HI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/UN3mWMVN_HI/scm-tool-as-collaboration-tool.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/12/scm-tool-as-collaboration-tool.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-4429078434022049240</guid><pubDate>Tue, 22 Nov 2011 13:30:00 +0000</pubDate><atom:updated>2011-11-22T08:30:01.473-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><title>Definitions</title><description>The other day a colleague use the phrase &lt;i&gt;open interva&lt;/i&gt;l to refer to time periods that included their endpoints. This didn't sound like the definition that I'd learned in analysis class, which I will admit was not my favorite subject in grad school, so I searched for a &lt;a href="http://mathworld.wolfram.com/OpenInterval.html"&gt;definition&lt;/a&gt;&amp;nbsp;and found:&lt;br /&gt;
&lt;blockquote&gt;
An open interval is an interval that &lt;i&gt;does not &lt;/i&gt;include its end points.&lt;/blockquote&gt;
This led to a brief, but interesting, discussion about why my mathematically-minded colleague flipped the meanings. It came down to the feeling that the definition didn't make sense in terms of common english usage (when you open a door, or a group, for example, you're being inclusive).&lt;br /&gt;
&lt;br /&gt;
Definitions add precision, but when you use words that have meanings in multiple contexts, you can find yourself in confusing conversations. Consider a term like normal, which can be &lt;a href="http://en.wikipedia.org/wiki/Normality_(behavior)"&gt;defined&lt;/a&gt; as:&lt;br /&gt;
&lt;blockquote&gt;
a lack of significant deviation from the average&lt;/blockquote&gt;
This sounds pretty benign, but people often carry around more that just definitions when they hear words. Using "normal," for example, in conversation can get tricky if the group you are in has not established a baseline context; &amp;nbsp;even though there is no value judgement inherent in the word, people might assign values to being more than a certain distance from the average. And then rather than than discussing the problem at hand you get distracted by a meta conversation.&lt;br /&gt;
&lt;br /&gt;
The same is true when you're adopting new engineering practices. Consider a word like &lt;a href="http://steveberczuk.blogspot.com/2011/11/refactoring.html"&gt;refactoring&lt;/a&gt;, which has a precise meaning and that people often use to mean "change." When adopting agile methods, you might have a discussion about how many of the practices that you need to follow to be able to say that you are using a method. Can you do Extreme Programming as a solo programmer when &lt;a href="http://www.extremeprogramming.org/rules/pair.html"&gt;Pair Programming&lt;/a&gt; is a practice, for example?&lt;br /&gt;
&lt;br /&gt;
The discussion is very interesting and useful, as it leads to an understanding about what is useful about XP practices. But from a definitional sense, I would err on the side of saying "No, XP is defined as the practices, but you can be doing something XP-inspired." &amp;nbsp;The question you want to ask is "why does it matter if I'm doing XP (or Scrum, or another process)?" Maybe it doesn't. Unless you want to learn the value (and limits) of a practice.&lt;br /&gt;
&lt;br /&gt;
The discussions get more interesting when it comes to concepts like "agile" which are very overloaded in different contexts. You can be more agile from a business perspective, yet not follow a defined agile software development method, for example. But if you want to say that your team is agile, be sure that you understand what your definition is.&lt;br /&gt;
&lt;br /&gt;
Doing an "inspired by" process can be good if you are getting the results you want. When you are learning a process, it's &lt;a href="http://steveberczuk.blogspot.com/2010/03/are-you-agile-enough.html"&gt;important not to customize the practices&lt;/a&gt; until you understand why they are in place. And when communicating with others, being a bit fussy on the definitions (or qualifying your description) can be helpful.&lt;br /&gt;
&lt;br /&gt;
Definitions help us to communicate. It's a useful default to stick with the definition in the domain. Then apply value judgements as needed. It seems better to say that you aren't agile, yet getting better results than you were, than to morph the definition of agile so that it fits your practices. Making "Agile" a checklist item itself is counter to the principles of agile. Define what you do in terms of your practices and evaluate effectiveness in terms of your results.&lt;br /&gt;
&lt;br /&gt;
Words and definitions help with communication. And it's hard to come up with an unambiguous word. But try hard to use words as they are defined in your context. That will help you to communicate, set expectations, and maybe even be more agile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-4429078434022049240?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-NxhIOmmHUlo0i8VBcutPeZpYCw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-NxhIOmmHUlo0i8VBcutPeZpYCw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-NxhIOmmHUlo0i8VBcutPeZpYCw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-NxhIOmmHUlo0i8VBcutPeZpYCw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/YCczYoYQppw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/YCczYoYQppw/definitions.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/11/definitions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-3648787352973966123</guid><pubDate>Sun, 20 Nov 2011 15:00:00 +0000</pubDate><atom:updated>2011-11-23T09:56:39.718-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">refactoring</category><title>Refactoring</title><description>Frank Buschmann wrote a 2-part article in the &lt;a href="http://www.computer.org/csdl/mags/so/2011/04/mso2011040092-abs.html"&gt;July/August&lt;/a&gt;  and &lt;a href="http://www.computer.org/csdl/mags/so/2011/05/mso2011050021-abs.html"&gt;September/October&lt;/a&gt; issues of IEEE Software that covered an important aspect of software development: refactoring.&lt;br /&gt;
&lt;br /&gt;
Yes, &amp;nbsp;you'll hear the word "refactoring" spoken often in any development team, but most developers rarely discuss what refactoring is, and whether they are refactoring or doing something else, like "reengineering" or even re-writing.&lt;br /&gt;
&lt;br /&gt;
I won't repeat what Frank said, as he said it quite well, &amp;nbsp;but as I read the article I realized that there are some points that get lost in many teams and are worth emphasizing:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Refactoring does not mean "any kind of changing." It means changing the structure of existing code to preserve functionality. In principle you are making the code "better."&lt;/li&gt;
&lt;li&gt;To refactor you need a way to validate that you have preserved functionality. Automated tests are probably the best way to do this. I suggest that you can't refactor without having a test plan in place. And from a practical perspective, this means automated tests.&lt;/li&gt;
&lt;li&gt;Refactoring is a way to improve code quality, but &lt;a href="http://steveberczuk.blogspot.com/2009/06/value-of-agile-infrastructure.html"&gt;like other things a development teams spends time on&lt;/a&gt;, &amp;nbsp;you you should refactor when it provides business value.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Being precise about when a change is refactoring and when it's reengineering, a rewrite, or simply changing code to add a feature helps set expectations with stakeholders and helps you as a developer better understand when you'll &lt;a href="http://steveberczuk.blogspot.com/2011/10/being-done.html"&gt;be done&lt;/a&gt;. And by thinking in terms of refactoring continuously you can deliver code more quickly, and avoid the need for reengineering or re-writing, and better be able to evaluate functionality with incremental delivery.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Refactoring is good. Not all good coding is refactoring.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-3648787352973966123?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Sao-SMwWml8b-hDwLojus8AYPv4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sao-SMwWml8b-hDwLojus8AYPv4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Sao-SMwWml8b-hDwLojus8AYPv4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sao-SMwWml8b-hDwLojus8AYPv4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/g59KX6YcVzU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/g59KX6YcVzU/refactoring.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/11/refactoring.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-2506042837868868630</guid><pubDate>Wed, 19 Oct 2011 13:00:00 +0000</pubDate><atom:updated>2011-10-19T09:00:10.518-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">planning</category><title>Agile or Not: How to Get Things Done</title><description>Agile software development always felt intuitive to me. Developing software incrementally, in close collaboration with the customer is the obvious way to deal with the uncertainty inherent in both software requirements and implementation. The technical practices of&amp;nbsp;automating necessary but time consuming tests, and deploying, early and often are the obvious ways to give an team the ability to evaluate the &amp;nbsp;functionality you have and to to decide if the software works as expected. And it's also important to decide if what you built still makes sense given the current environment. Agile isn't the only way that people build software, and it may not be a perfect approach, but it's one of the best ways of dealing with a system that has unknowns.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agile software development acknowledges uncertainty. The ability of agile methods to make it very obvious very quickly when a project, or even a process, is failing makes people uncomfortable. The visibility of the failure leads to a desire to return to more "traditional" processes. For example, a common complaint is that agile organizations don't create "good enough" specifications. Someone might blame an unforeseen problem on the lack of a spec that mentioned it. This is possible, but it's only true if the person writing the spec could have foreseen the problem.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The desire to point back to a lack of specification also points to a lack of buy-in to a fundamental premise of agile: it's a collaboration between the business and the engineering team. Some other possible causes of the problem could be:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;The development team didn't test thoroughly enough.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The code was not agile enough, so the bad assumptions were embedded into the code so deeply they were difficult to address.&lt;/li&gt;
&lt;li&gt;Communication was bad.&lt;/li&gt;
&lt;/ul&gt;
More complete specifications that address all of the issues a system might encounter are one way to build software. But the best that people can do is to write specifications that address &lt;i&gt;what they know&lt;/i&gt;. Quite often no one has complete advance knowledge of what a system needs to do.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are projects where things are known with enough certainty that a waterfall process can work. People can write good specs, the team can implement to those specs, and the end result is as exactly what everyone wanted. &amp;nbsp;I've worked on projects where this was true, and in these cases, the specifications were reviewed and tested as much as code might.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Even &amp;nbsp;projects that seem suited to waterfall fail. For any method to be successful:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;Everyone involved needs to be committed to the approach and&amp;nbsp;&lt;/li&gt;
&lt;li&gt;There needs to be a feedback loop to correct errors in time.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
The second is point is more important than the first, since people will make mistakes. But being committed to the process is what lets people accept and offer constructive feedback.&amp;nbsp;The reason that waterfall projects have such a bad reputation is that many are implemented in a way that results in problems surfacing late.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agile methods when done well have the advantage of having built in feedback loops, so &amp;nbsp;that customers and teams have ways of identifying problems early. When agile projects fail it's often because people ignore the feedback and let things degrade for longer than necessary. (Failing fast can be considered success!)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, Agile or not, your process will only work for you if everyone works within the framework to the best of their abilities, and if you have mechanisms in place to help people do the right things. Otherwise you can blame your process, but odds are, that's not where (most of) the fault lies.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-2506042837868868630?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C6H_8t6d1YMZt6ZTjPZ8JEeBglM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C6H_8t6d1YMZt6ZTjPZ8JEeBglM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C6H_8t6d1YMZt6ZTjPZ8JEeBglM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C6H_8t6d1YMZt6ZTjPZ8JEeBglM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/iudIB2kvTco" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/iudIB2kvTco/agile-or-not-how-to-get-things-done.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/10/agile-or-not-how-to-get-things-done.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1983771403668650737</guid><pubDate>Sun, 16 Oct 2011 13:00:00 +0000</pubDate><atom:updated>2011-10-16T11:24:13.187-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">planning</category><title>More on Being Done</title><description>Continuing the conversation from last week, Andy Singleton followed up on &lt;a href="http://steveberczuk.blogspot.com/2011/10/being-done.html"&gt;my post &lt;/a&gt;on being done with &lt;a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/69440/On-the-Importance-of-Being-Released.aspx"&gt;this post&lt;/a&gt;. Which is good as this is one of those questions that sounds simple in theory, but in practice contains some subtlety.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
While I was advocating a good definition of "Done" to enable you to measure progress along a path, Andy's point seems to be that many teams don't establish enough of a path. He says:&lt;br /&gt;
&lt;blockquote&gt;
In my opinion, most agile teams aren't doing "Test Driven Development", and they aren't doing scrum iterations where they plan everything in advance.  Instead, they are doing "Release Driven Development."  They focus on assembling releases, and they do a lot of planning inside the release cycle.&lt;/blockquote&gt;
&lt;div&gt;
This is probably true in more cases than not, though one could argue whether if you are not doing iterations or TDD whether you are, in fact, doing agile. But even if can concede (which I'm not sure if I am) that you can do agile without planning and acceptance criteria of some sort, what Andy describes above still sounds like it has an element of plan, execute, adjust, though perhaps in a more chaotic way than a "textbook" scrum process, and and perhaps at a smaller scale. So knowing having a clean definition of what you want to do is still important. In the&lt;a href="http://steveberczuk.blogspot.com/2010/02/indivisible-task.html"&gt; Indivisible Task&lt;/a&gt; I discussed how teams get stuck with planning because it's difficult to think of tasks that are small, discrete, and which produce useful work. It is possible to do so, but it is hard.&lt;br /&gt;
&lt;br /&gt;
Perhaps the disagreement here is more of a misunderstanding. I consider being able to measure progress in terms of completed work items an essential part of gathering the data you need to improve your process and understand how to be more agile. While doing it at a macro (sprint) level is good, &amp;nbsp;doing it on a day-to-day or hour-to-hour basis is essential. If you do this at a fine-grained enough level, and have a good testing infrastructure, you can release software more frequently. So, at the limit, perhaps Andy and I are talking about the same thing.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Since I only summarized, I encourage you to read &lt;a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/69440/On-the-Importance-of-Being-Released.aspx"&gt;what Andy has to say&lt;/a&gt; for yourself. And I look forward to hearing comments both from Andy and other readers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1983771403668650737?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vGz5i8dnrx_C5xUcNILSf769PSg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vGz5i8dnrx_C5xUcNILSf769PSg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vGz5i8dnrx_C5xUcNILSf769PSg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vGz5i8dnrx_C5xUcNILSf769PSg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/saxuN_6d5EA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/saxuN_6d5EA/more-on-being-done.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/10/more-on-being-done.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1040537559634186649</guid><pubDate>Wed, 12 Oct 2011 13:00:00 +0000</pubDate><atom:updated>2011-10-16T13:16:35.589-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">planning</category><title>Being Done</title><description>&lt;a href="http://www.agilenewengland.org/"&gt;Agile New England&lt;/a&gt; (which used to be called the New England Agile Bazaar, and which was started by Ken Schwaber) , has this wonderful activity before the main event each month: they host Agile 101 sessions, where people who know something about agile lead a short (30 minutes) small (about 10 people) class on agile basics for those who want to learn more about some aspect of agile. From time to time I lead a session on Agile Execution, where the goal is to help people understand how to address the following questions:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;How can software and other project elements be designed and delivered incrementally? What set of management and technical practices would enable this?&lt;/li&gt;
&lt;li&gt;How do you know whether your Agile project will complete on schedule?&lt;/li&gt;
&lt;/ul&gt;
When I lead the sessions, I tend to focus on tracking, defining stories in terms of vertical slices and the importance of continuous integration and testing to making your estimates trackable. Since the classes are so small and since the attendees have diverse experiences, the classes are sometimes more of a conversation than a lecture, and I find that I learn a lot, and sometimes find myself rethinking what I know (or at &amp;nbsp;least exploring things that I thought I understood well enough).&lt;br /&gt;
&lt;br /&gt;
During the October 2011 meeting I found myself reconsidering the value of defining "done" when writing &lt;a href="http://steveberczuk.blogspot.com/2009/12/uncertainty-and-agile-requirements.html"&gt;User Stories&lt;/a&gt;. I always have thought that &lt;a href="http://manage.techwell.com/articles/weekly/what-are-you-doing"&gt;defining done is essential to tracking&lt;/a&gt; progress. But &lt;a href="http://steveberczuk.blogspot.com/2010/08/are-you-done-yet.html"&gt;what done means is still a difficult question&lt;/a&gt;. Andy Singleton of &lt;a href="http://www.assembla.com/"&gt;Assembla&lt;/a&gt; suggested that&lt;br /&gt;
&lt;blockquote&gt;
The only useful definition of done is that you approved it to release, in whatever form&lt;/blockquote&gt;
While the goal of agile methods is releasing software, I find that this definition, while appealing in its simplicity, misses some things:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Agile methods have a goal of continuously shippable code. Of course, "shippable" might not mean "ready to release" and cane mean something closer to "runnable," but you can get there by doing no work since the end of the last release. That isn't the goal of agile.&lt;/li&gt;
&lt;li&gt;With that large scale definition of "done" you have no way of tracking progress within a sprint.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Without an agreement on what you're going to, it's hard to know when you are changing direction. And acknowledging change is an important part of being agile.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The last point about acknowledging change isn't just about "blame" for things not working out. It's about evaluating how well you understand both the business and technical aspects of your project, and it forms the basic for improvement.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
True, having incremental definitions of done that you can use to track progress does help manage budgets. But that really is the least important aspect of having a good definition of done. Even if I were on a project with an infinite time and money budget, I'd want to have a sense of what our goals are.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Having an agreement among all of the stakeholders on what being "done" means lets me:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Improve communication among team members and between team members and business stakeholders.&lt;/li&gt;
&lt;li&gt;Evaluate my understanding of the problem and help me identify what I can improve.&lt;/li&gt;
&lt;li&gt;Set expectations so that it's easier to develop trust between stakeholders and the engineering team that the team can, and will, deliver.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
"Ready for Release" is a key component of "done" and and essential part of being agile. But it's not enough.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;hr/&gt;
See &lt;a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/69440/On-the-Importance-of-Being-Released.aspx"&gt;Andy's response&lt;/a&gt;, and read more in &lt;a href="http://steveberczuk.blogspot.com/2011/10/more-on-being-done.html"&gt;Part 2&lt;/a&gt; of this conversation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1040537559634186649?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/apqfculxgLqTj1AnkRd8qajxz1w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/apqfculxgLqTj1AnkRd8qajxz1w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/apqfculxgLqTj1AnkRd8qajxz1w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/apqfculxgLqTj1AnkRd8qajxz1w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/cxdL-krlTOU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/cxdL-krlTOU/being-done.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/10/being-done.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-6433389289150097746</guid><pubDate>Mon, 10 Oct 2011 13:00:00 +0000</pubDate><atom:updated>2011-10-10T09:00:07.056-04:00</atom:updated><title>Continuous Learning, Coaching, and Learning from Others</title><description>There was an article in the Boston Globe this week by Scott Kirshner: &lt;a href="http://www.bostonglobe.com/business/2011/10/08/staying-competitive-workplace/6uMEaIn24Vn6W7i4OCrMkN/story.xml?s_campaign=sm_tw"&gt;Staying Competitive in the Workplace&lt;/a&gt;&amp;nbsp;that emphasized &lt;a href="http://steveberczuk.blogspot.com/2011/07/experience-and-learning.html"&gt;the importance of keeping your skills up to date&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0312427654&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;It's a short article and worth a read. Some of the activities Kirshner suggests are similar to those Atul Gawande makes in the appendix of his book &lt;a href="http://www.amazon.com/gp/product/0312427654/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=0312427654"&gt;Better: A Surgeon's Notes on Performance&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0312427654&amp;amp;camp=217145&amp;amp;creative=399373" style="border: none !important; margin: 0px !important;" width="1" /&gt;.&lt;br /&gt;
&lt;br /&gt;
Related to this theme is a New Yorker article by Gawande, &lt;a href="http://www.newyorker.com/reporting/2011/10/03/111003fa_fact_gawande"&gt;Personal Best&lt;/a&gt;, &amp;nbsp;on the advantages of challenges of engaging someone to coach you in your profession. I continue to be amazed at how much I'm learning from Gawande, a surgeon, about how to be a better software engineer. I suspect that I first realized this when I started learning about Patterns. (The short post,&amp;nbsp;&lt;a href="http://www.metropolismag.com/pov/20111007/the-pattern-technology-of-christopher-alexander"&gt;The Pattern Technology of Christopher Alexander&lt;/a&gt;&amp;nbsp;by Michael Mehaffy and Nikos Salingaros discusses how an architect influences the software development community.)&lt;br /&gt;
&lt;br /&gt;
Maybe the common theme of all these writings is that it's important to be ready to learn, and you can learn from the people you least expect to.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-6433389289150097746?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6haJCxti2dvlMmrjb5DN5WDymiI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6haJCxti2dvlMmrjb5DN5WDymiI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6haJCxti2dvlMmrjb5DN5WDymiI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6haJCxti2dvlMmrjb5DN5WDymiI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/VAB7S7N0bb0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/VAB7S7N0bb0/continuous-learning-coaching-and.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/10/continuous-learning-coaching-and.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-6581205257300634212</guid><pubDate>Sun, 09 Oct 2011 19:00:00 +0000</pubDate><atom:updated>2011-10-09T15:00:03.182-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">scm</category><title>SSQ Article on SCM and Tools</title><description>I recently was interviewed for an article &amp;nbsp;on SCM and Tools that &lt;a href="http://bedellcommunications.com/"&gt;Crystal Bedell&lt;/a&gt; wrote for&lt;a href="http://searchsoftwarequality.techtarget.com/"&gt;&amp;nbsp;Search Software Qualit&lt;/a&gt;y.&amp;nbsp;&lt;a href="http://searchsoftwarequality.techtarget.com/feature/Updating-tools-and-processes-key-to-overcoming-SCM-challenges"&gt;Updating tools and processes key to overcoming SCM challenges&lt;/a&gt;&amp;nbsp;is brief, and makes some good points about the relative value of tools compared to understanding what you are trying to accomplish with your process.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=0201741172" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;
&lt;br /&gt;
The best SCM tool, from a day-to-day perspective is the one that is the most invisible to developers, and the best tool really can't help you much if you have a process that just makes it hard to collaborate. This article was also validation that trying to be too agnostic when Brad Appleton and I wrote the SCM Patterns book was a good idea. While some tools make some practices easier, a tool can't replace having an understanding of the reasons to use (or more important, not use) techniques.&lt;br /&gt;
&lt;br /&gt;
Read the article, and if you want to learn some basic SCM practices read the book. For those who want a very comprehensive discussion of branching (which seems to be, for better or worse, the topic that people most struggle with when using SCM tools), &amp;nbsp;&lt;a href="http://www.cmcrossroads.com/bradapp/acme/branching/"&gt;Streamed Lines&lt;/a&gt; is a good place to star.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-6581205257300634212?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kgqHcwYKI3ym4Vi1yI41YMLnVHE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kgqHcwYKI3ym4Vi1yI41YMLnVHE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kgqHcwYKI3ym4Vi1yI41YMLnVHE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kgqHcwYKI3ym4Vi1yI41YMLnVHE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/tFnysuKXDSA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/tFnysuKXDSA/ssq-article-on-scm-and-tools.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/10/ssq-article-on-scm-and-tools.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-3417021592216562157</guid><pubDate>Sun, 18 Sep 2011 23:00:00 +0000</pubDate><atom:updated>2011-09-18T19:00:05.291-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">books</category><title>Thoughts on The Lean Startup</title><description>&amp;nbsp;I had the opportunity to get a review copy of &lt;a href="http://www.amazon.com/gp/product/0307887898/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=0307887898"&gt;The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0307887898&amp;amp;camp=217145&amp;amp;creative=399373" style="border: none !important; margin: 0px !important;" width="1" /&gt;&amp;nbsp;by Eric Ries. I learned a few things from the book, but the most surprising thing was that what, on the surface is a book targeted at business people, entrepreneurs in particular, actually had a lot to offer developers and project and product managers who work at all sorts of companies. In addition to reviewing many of the lean principles and practices familiar to anyone who takes agile software development seriously, this book also makes a case for how practices that work for developers (like testing) also make a great deal of sense at the business level. To be sure the tests are different, but the idea of having measurable expectations is something all agile developers who have written a unit or integration test should be familiar with. Eric Ries shows how this same approach makes sense for determining the direction a business should take.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0307887898&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_top&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=FFFFFF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt; &lt;br /&gt;
This book  provides guidance on the tools to use to answer the question "are you building the right product" quickly. Even if you are on a team in an established company -- even if your are building tools for internal use -- concepts like the &lt;a href="http://en.wikipedia.org/wiki/Minimum_viable_product"&gt;Minimum Viable Product&lt;/a&gt; can be useful to you immediately.&lt;br /&gt;
&lt;br /&gt;
In spite of the book's business oriented focus, it makes clear the importance of good engineering practices to build a sustainable product development environment. This book can benefit those who work in startups and anyone who works on a team that wants to have the impact of a startup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-3417021592216562157?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tjUBsaJhh3KYHsvxKKWYKMu-7mg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tjUBsaJhh3KYHsvxKKWYKMu-7mg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tjUBsaJhh3KYHsvxKKWYKMu-7mg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tjUBsaJhh3KYHsvxKKWYKMu-7mg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/ZfRpH009Q1w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/ZfRpH009Q1w/thoughts-on-lean-startup.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/09/thoughts-on-lean-startup.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-957023608083249812</guid><pubDate>Mon, 05 Sep 2011 19:00:00 +0000</pubDate><atom:updated>2011-09-05T15:36:50.887-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">scm</category><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">books</category><title>Why SCM Patterns is in Patterns Format</title><description>I recently had an opportunity to speak to an undergraduate software engineering class. The professor for that class, &lt;a href="https://netfiles.uiuc.edu/dig/www/"&gt;Danny Dig&lt;/a&gt; has a very interesting practice of asking practitioners to speak to the class over Skype when an appropriate topic presents itself. Danny invited me to join then when they were discussing software configuration management and version control.&lt;br /&gt;
&lt;br /&gt;
During the session Danny asked me why we used pattern form for the material in &amp;nbsp;&lt;a href="http://www.amazon.com/Software-Configuration-Management-Patterns-Integration/dp/0201741172?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0201741172" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;was in pattern format. At the time I might have quickly answered that I was interested in patterns and the book was based on patterns we'd written. But aside from being a too flippant, and not terribly profound. that answer isn't actually right.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0201741172&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;
There are two aspects of patterns that make them well suited for software configuration management practices, especially those at a team level:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;Patterns describe things people have done successfully, and we wanted to document the practices that worked well, and which, when they were missing, caused problems. We wanted to catalog the things that we found ourselves explaining again and again in different organizations. If you read the book, &amp;nbsp;much of what you read will sound obvious. But it's only obvious if you know it, and may people don't.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;The pattern form makes it very clear than everything fits into a context, which includes other decisions you've made and the environment your working in. &amp;nbsp;People often get captivated by solutions without really thinking about whether the solution is right for he problem they have, and what else you need to do before and after to ensure success.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Too often people associate SCM with tools. and techniques without considering what techniques work well for the team. SCM Patterns puts the solutions in context with your organization, process, and architecture and (hopefully) provides you with some guidance on the steps to build an environment where people can code together effectively.&lt;br /&gt;
&lt;br /&gt;
The other thing I realized shorty after writing the book is that, while the book was in it's final stages just as the &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;&amp;nbsp;was being worked on, the book had a lot to say about agile collaboration.&amp;nbsp;The SCM Patterns book, to me, is really about how to work together more effectively. SCM is just the means.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-957023608083249812?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6pQKGq7_cP1h5bElKSYANTXH8cQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pQKGq7_cP1h5bElKSYANTXH8cQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6pQKGq7_cP1h5bElKSYANTXH8cQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pQKGq7_cP1h5bElKSYANTXH8cQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/2aKyzkwOlHw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/2aKyzkwOlHw/why-scm-patterns-is-in-patterns-format.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/09/why-scm-patterns-is-in-patterns-format.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-9183716934212301922</guid><pubDate>Mon, 11 Jul 2011 11:00:00 +0000</pubDate><atom:updated>2011-07-11T07:00:03.025-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">management</category><title>Experience and Learning</title><description>In the past few months I've heard a couple of stories about (in effect) the disadvantages of experience when it comes to innovation and productivity. A &lt;a href="http://www.wbur.org/2011/07/05/young-entrepreneurs"&gt;Story on WBUR&lt;/a&gt; on July 5, 2011&lt;br /&gt;
discussed how venture capitalists tend to favor young entrepreneurs, as having never learned the wrong things in business they don't know what's possible or impossible. &amp;nbsp;In one quote a VC said:&lt;br /&gt;
&lt;blockquote&gt;One thing I love about these people is they don’t know what they don’t know. They don’t fear failure. They don’t mind risk...&lt;/blockquote&gt;&lt;br /&gt;
A March 6, 2011 &lt;a href="http://www.npr.org/2011/03/06/134271342/raising-the-retirement-age-can-it-balance-budgets"&gt;story on NPR&lt;/a&gt; on the pros and cons of raising the retirement age made reference to to an article in &lt;a href="http://www.foreignpolicy.com/articles/2011/01/02/unconventional_wisdom?page=0,7"&gt;Foreign Policy&lt;/a&gt; which asserted that younger workers have advantages in the workforce since they learned more recent technology in school.&lt;br /&gt;
&lt;br /&gt;
While new skills and new perspectives can add a lot to a team, is the best way to get these skills to simply hire people who know only what they learned in school? Is anyone you know who is a successful, productive, software developer only working with skills and perspectives that they had when they graduated school? I suspect that the answer is "no." And do people who are new to a field fall often fall into avoidable traps because they don't have the experience to know that the traps were lurking? &lt;br /&gt;
&lt;br /&gt;
In any field it's important to be continually learning. I've worked with recent grads who seems to now be aware of important, new technical subjects, and with people with 30+ years of experience who were the people I learned many new things from. &lt;br /&gt;
&lt;br /&gt;
The important thing in both of these cases isn't "new-ness or experience" but an ability to keep an open mind, learn, and "embrace change" (to borrow an expression from an agile software development method).&lt;br /&gt;
&lt;br /&gt;
In the book &lt;a href="http://www.amazon.com/Cat-Who-Walks-through-Walls/dp/0441094996?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Cat Who Walks through Walls&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0441094996" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;, the subject of the title could walk through walls because she was too young to know that she could not. While having this mindset is useful, there are ways to achieve it without being inexperienced or ignorant. &lt;br /&gt;
&lt;br /&gt;
As the WBUR story concluded: "In this day and age, forget about age. All you need to start is a fresh idea."&lt;br /&gt;
&lt;br /&gt;
To be a successful agile team you need a mix of perspectives and experiences and a willingness to learn from each other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-9183716934212301922?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nEXx_n3XQ2jY5AaYBcM-NcSQ15g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nEXx_n3XQ2jY5AaYBcM-NcSQ15g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nEXx_n3XQ2jY5AaYBcM-NcSQ15g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nEXx_n3XQ2jY5AaYBcM-NcSQ15g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/VbgcSis-79A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/VbgcSis-79A/experience-and-learning.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/07/experience-and-learning.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-6910916113375341987</guid><pubDate>Thu, 07 Jul 2011 11:00:00 +0000</pubDate><atom:updated>2011-07-07T07:00:09.874-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">management</category><title>Happiness and Agility</title><description>Agile development practices at their core, have a common theme of making better use of the time spent developing software. This starts at the project level and continues down to the developer day-to-day-activities. Consider an agile iteration. The team starts the iteration with a clear sense of the priorities for the sprint, and pretty good understanding of the project scope. &amp;nbsp;Having estimated and committed to getting the work done, &amp;nbsp;the team also has a sense that the goal is attainable. The team members then collaborate to get the work done as a team.&lt;br /&gt;
&lt;br /&gt;
While we can see how this might make for an efficient delivery process, consider how agile practices relate to enjoyment and morale on the team. In the paper &lt;a href="http://ssrn.com/abstract=1706968"&gt;If Money Doesn't Make You Happy, Consider Time&lt;/a&gt;, &amp;nbsp;Jennifer Aaker, &amp;nbsp;Melanie Rudd, and Cassie Mogilner discuss&amp;nbsp;five principles for spending time in a&amp;nbsp;&amp;nbsp;happiness-maximizing way. Some of these seem like a bit of as stretch, but there is a lot to be said about the relationship between a workplace using agile practices agile, and the teams being effective and happy. Consider how the 5 principles could map to agile practices:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;Spend your time with the right people&lt;/i&gt;. If you on a collaborative, self organizing team, &amp;nbsp;committed to reaching a common goal, it's hard to argue that you are with the wrong people.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Spend your time on the right activities&lt;/i&gt;. The authors of the paper also use the phrase &lt;i&gt;maximizing the value of the present moment&lt;/i&gt;. &amp;nbsp;If you've done your planning right, you have a good sense of what you are working on both for the sprint and each day. If your team is working on a project with an involved product owner, then you know that you are working on something useful.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Enjoy the experience without spending the time&lt;/i&gt;. The premise here is that one can feel pleasure by thinking of a good result. Activities ranging from planning, to test driven development to retrospectives seem to fit here.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Expand your time&lt;/i&gt;. This principle is about having control over your time. Since the team is self organizing and decides how to get work done, you should have a fair amount of control over what you are working on and when.&lt;/li&gt;
&lt;/ul&gt;Using an agile process can't guarantee happiness, or even that you team does all of these things. You can have a poorly defined product backlog, a less than collaborative team environment, or a micromanaging product owner or manage, for example.&lt;br /&gt;
&lt;br /&gt;
But agile is more &amp;nbsp;than just a product planning process that increases predictability It can also increase productivity and (as &lt;a href="http://www.exampler.com/ease-and-joy.html"&gt;Brian Marick&lt;/a&gt; said during an Agile 2008 Keynote) &lt;i&gt;Joy&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-6910916113375341987?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/boFDT6hOYijtJtsA1otdB-Wg86U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/boFDT6hOYijtJtsA1otdB-Wg86U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/boFDT6hOYijtJtsA1otdB-Wg86U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/boFDT6hOYijtJtsA1otdB-Wg86U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/nw1eFDVKfGE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/nw1eFDVKfGE/happiness-and-agility.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/07/happiness-and-agility.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1164686726070116502</guid><pubDate>Mon, 04 Jul 2011 14:00:00 +0000</pubDate><atom:updated>2011-07-04T10:00:05.780-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Specialization, Generalization, and Effectiveness in Software Teams: Clinical Metaphors</title><description>I was thinking about the relative value&amp;nbsp;to a team&amp;nbsp;of a developer with specific skills (say UI development) versus adding someone who was more of an end-to-end developer. Two stories about medical practice that provided some insight into the question.&lt;br /&gt;
&lt;br /&gt;
I recently read&amp;nbsp;&lt;a href="http://www.amazon.com/Better-Surgeons-Performance-Atul-Gawande/dp/0312427654?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Better&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0312427654" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;, Atul Gwande's book about improvement in medical professions. In this book he relates a story of a clinic in rural India that is poorly staffed and funded, and where doctors manage to successfully perform procedures that are outside the realm of their training. They are able to practice these skills effectively and saved lives.&lt;br /&gt;
&lt;br /&gt;
A story on &lt;a href="http://www.thisamericanlife.org/radio-archives/episode/437/old-boys-network"&gt;This American Life&lt;/a&gt;, discussed a doctor &amp;nbsp;in Kermit, Texas who practices in areas beyond his stated training, with poor results. In the end nurses who worked with the doctor filed complaints against him for mistreating patients.&amp;nbsp;This doctor worked alone, and collected information from questionable sources, and ignored the availability of better qualified resource near by.&lt;br /&gt;
&lt;br /&gt;
In both situations doctors practiced beyond their training, yet in one case this improved care, in the other it degraded care. &amp;nbsp;Two of the key differences seemed to be that the doctors in India frequently met to discuss each other's cases and learn from each other, and&amp;nbsp;&amp;nbsp;the doctors in india worked beyond their area of specialization in order to keep the clinic functioning and performing useful work. There was no way to wait for a specialist to do the work, and still keep the patient alive.&amp;nbsp;&amp;nbsp;Gawande credits the camaraderie of the group in India as well as their daily discussions of their cases, their decisions, and why they made those decisions, for their ability to improve their range of practice.&lt;br /&gt;
&lt;br /&gt;
Even though the dynamics in software teams differ from those in a hospital, there are lessons&amp;nbsp;from these stories that&amp;nbsp;software teams can apply to better develop teams of generalizing specialists, and more effective agile developers:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;An ethic of continual learning, both from outside resources and each other can help a team of&amp;nbsp;generalizing specialists to be effective; Having the ability to work across a stack isn't as important as a willingness and ability to learn how to fill gaps in knowledge.&lt;/li&gt;
&lt;li&gt;The flow of the project is &amp;nbsp;important &amp;nbsp;to consider when deciding who should work on a task, consider the overall flow of the project. If the specialist is available, there you may as well have the "expert" work on the task (after the team agrees on an approach ). But if waiting for the specialist would delay the project, and there are other people on the team who don't have a full backlog of work, consider having someone else work on it. The specialist can provide advice, and perhaps improve on the work later. But you will have functional software sooner.&lt;/li&gt;
&lt;li&gt;It's important to take time to review and discuss decisions as a cross-functional team to understand what you did, and what you can do better next time.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;So it seems like it's best add to a person to a team who has a skill that the team might be weak in, but who enjoy working on the whole application when the team thinks it makes sense. Self-organizing, cross-functional teams are a central part of agile practice, and the combination is important. Just having cross functional people doesn't work; they need to work as part of a team working towards a common goal.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1164686726070116502?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HU-zRaXL8R4uZ8Oy8uHvfHGRG40/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HU-zRaXL8R4uZ8Oy8uHvfHGRG40/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HU-zRaXL8R4uZ8Oy8uHvfHGRG40/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HU-zRaXL8R4uZ8Oy8uHvfHGRG40/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/ZmgeF9fNRNU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/ZmgeF9fNRNU/specialization-generalization-and.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>1</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/07/specialization-generalization-and.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-4607955063254249356</guid><pubDate>Tue, 28 Jun 2011 14:15:00 +0000</pubDate><atom:updated>2011-06-28T10:15:00.662-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">management</category><title>Tips, Habits, Customs and Agility</title><description>I was listening to a&amp;nbsp;&lt;a href="http://www.npr.org/blogs/money/2011/06/24/137346289/why-we-tip"&gt;Planet Money Podcast about tipping&lt;/a&gt;&amp;nbsp;recently. According to the story, the custom of tipping has persisted even though the reasons that the practice was established no longer apply. According to the Planet Money story both waiters and customers think that tipping is useful, evidence to the contrary aside. The discussion led me to think about practices some teams do in the name of following a process.&lt;br /&gt;
&lt;br /&gt;
Habits and routines are useful because they free you to focus on the important tasks. &amp;nbsp;Rituals and processes take a somewhat irrelevant decisions out of your hands, and conventions make it easier for others to understand code and other artifacts. &amp;nbsp;And when you are starting a new approach to work, following the rules by rote can help you understand the method. But circumstances change, and when the reason for the ritual has changed, there are a few possibilities:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The practice is still useful, for reasons you didn't anticipate when you started it.&lt;/li&gt;
&lt;li&gt;The practice adds less value, but it doesn't add any overhead so there is no harm in continuing.&lt;/li&gt;
&lt;li&gt;The practice leads the team to spend energy addressing a problem that does not exist any more and causes waste.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
To avoid instances of the last case that take up too much of you time, it is important to periodically reflect on why you are doing what you are doing, and it it still makes sense in your environment.&amp;nbsp;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0201741172" style="border-bottom-style: none !important; border-color: initial !important; border-left-style: none !important; border-right-style: none !important; border-top-style: none !important; border-width: initial !important; cursor: move; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;" width="1" /&gt;&amp;nbsp;As your team adopts new tools, new practices, take time to think about whether what you are doing still makes sense. Periodic&amp;nbsp;&lt;a href="http://steveberczuk.blogspot.com/2009/06/feeback-writers-workshop-style.html"&gt;retrospectives&lt;/a&gt;&amp;nbsp;are one way to capture this, so it's important to set aside time to review how you work. (And even to set aside time to review how you do retrospectives!)&lt;br /&gt;
&lt;br /&gt;
Lots of teams (and individual) follow process &amp;nbsp;steps with good intentions, yet they end up causing unnecessary overhead. For example&amp;nbsp;coding conventions that made perfect sense in the days of fixed length variable names, and text editors that add overhead when you have refactoring IDEs and follow clear naming conventions.&lt;br /&gt;
&lt;br /&gt;
The podcast also reminded me of &amp;nbsp;one&amp;nbsp;of of my favorite Gerry Weinberg quotes (which I referenced in&amp;nbsp;&lt;a href="http://www.amazon.com/Software-Configuration-Management-Patterns-Integration/dp/0201741172?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Software Configuration Management Patterns&lt;/a&gt;):&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&amp;nbsp;S&lt;i&gt;urvival Rules are not stupid; they are simply over-generalizations or rules we once needed for survival. We don't don't to simply throw them away. Survival rules can be transformed into less powerful forms so that we ca still use their wisdom without becoming incongruent&lt;/i&gt;&lt;/div&gt;&amp;nbsp;(from&amp;nbsp;&lt;a href="http://www.amazon.com/Quality-Software-Management-First-Order-Measurement/dp/0932633242?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Quality Software Management: First-Order Measurement&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0932633242" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;)&lt;br /&gt;
&lt;br /&gt;
Traditions and habits have their place. But if you are doing something simply out of habit you can benefit from acknowledging that fact.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-4607955063254249356?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZqxbadN93eUgeHfhlvwo4QLUC7M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqxbadN93eUgeHfhlvwo4QLUC7M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZqxbadN93eUgeHfhlvwo4QLUC7M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqxbadN93eUgeHfhlvwo4QLUC7M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/iJhMTm-PGf0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/iJhMTm-PGf0/tips-habits-customs-and-agility.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/06/tips-habits-customs-and-agility.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-8116051806961514873</guid><pubDate>Mon, 30 May 2011 18:40:00 +0000</pubDate><atom:updated>2011-05-30T14:41:11.747-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">books</category><category domain="http://www.blogger.com/atom/ns#">management</category><title>Better: More Parallels between Medicine and Agile Software</title><description>I recently finished reading the book&amp;nbsp;&lt;a href="http://www.amazon.com/Better-Surgeons-Performance-Atul-Gawande/dp/0312427654?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Better: A Surgeon's Notes on Performance&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0312427654" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;by Atul Gawande. Having read&amp;nbsp;&lt;a href="http://www.amazon.com/Checklist-Manifesto-How-Things-Right/dp/0312430000?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Checklist Manifesto: How to Get Things Right&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0312430000" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;&amp;nbsp;(which I commented on&amp;nbsp;&lt;a href="http://steveberczuk.blogspot.com/2010/03/checklist-manifesto-as-agile-primer.html"&gt;earlier&lt;/a&gt;) I expected to learn not just about medical practice, but also about parallels between medicine and software development. Much of what Gawande says about performance in medical environments has can be said to apply to agile software teams, in particular, the need to focus on core practices, the value of retrospectives, and the value of generalists.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=steveberczuk&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0312427654&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;A discussion of how&amp;nbsp;&lt;a href="http://steveberczuk.blogspot.com/2009/11/silver-bullets-and-simple-solutions.html"&gt;hand washing&lt;/a&gt;, a simple technique that is vital to infection control but that also requires culture change to implement with the discipline required to be effective, brought to mind how the challenges teams have being agile often center on the challenges of having teams begin to apply basic practices, without customization.&lt;br /&gt;
&lt;br /&gt;
In the discussions of Polio vaccination and malpractice were excellent non-software examples of how we can benefit from &lt;a href="http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;retrospective&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0977616649" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; practice, especially the &lt;a href="http://www.retrospectives.com/pages/retroPrimeDirective.html"&gt;prime directive&lt;/a&gt;, which reminds us that to improve we can't focus on blame, but rather on how decisions we made and how to make them better. A discussion of medical practice in war zones provided excellent anecdotes to relate when someone says that they can't gather data to measure performance and thus improve; &amp;nbsp;Gawande relates how combat doctors, those with the best excuses to not have time to do "paperwork" somehow find time to enter the data needed to track and improve the care of soldiers, while gathering data in hospitals seems to be hard.&lt;br /&gt;
&lt;br /&gt;
In a profession where specialization is valued, Gawande discusses time spent in India, where understaffed hospitals mean that surgeons can't afford to specialize and yet get do well by collaboration, cross-training, and discussion; in short, how "generalizing specialists" help to eliminate roadblocks and help get the most value from a team.&lt;br /&gt;
&lt;br /&gt;
Like all metaphors and comparisons, there are gaps. Doctors and Software Developers do different things, and work under different constraints. But by focusing on the differences you miss an opportunity to learn from those around you. This, to me, is the key lesson in&amp;nbsp;&lt;a href="http://www.amazon.com/Better-Surgeons-Performance-Atul-Gawande/dp/0312427654?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Better&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-8116051806961514873?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KUcKjzFGvmiTZKa8Xdnu1AVlxMY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KUcKjzFGvmiTZKa8Xdnu1AVlxMY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KUcKjzFGvmiTZKa8Xdnu1AVlxMY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KUcKjzFGvmiTZKa8Xdnu1AVlxMY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/PpwUd9cVL_4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/PpwUd9cVL_4/better-more-parallels-between-medicine.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>1</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/05/better-more-parallels-between-medicine.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1414523691988215023</guid><pubDate>Wed, 11 May 2011 23:00:00 +0000</pubDate><atom:updated>2011-05-11T19:00:01.177-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">deployment</category><category domain="http://www.blogger.com/atom/ns#">build</category><category domain="http://www.blogger.com/atom/ns#">grails</category><title>Displaying Build Numbers in Grails Apps</title><description>Being a fan of &lt;a href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Continuous Delivery&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321601912" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;, identifiable builds, and &lt;a href="http://www.amazon.com/Continuous-Integration-Improving-Software-Reducing/dp/0321336380?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Continuous Integration: &lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321336380" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; I like to deploy web apps with a visible build number, or some other way of identifying the version. For example, having the build number on the login screen for example. In the &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;/Java world, this is &lt;a href="http://steveberczuk.blogspot.com/2009/12/versions-in-maven-and-source.html"&gt;straightforward&lt;/a&gt;. Or at least I know the idioms. I struggled with this a bit while working on a &lt;a href="http://www.grails.org/"&gt;Grails&lt;/a&gt; app, &amp;nbsp;and wanted to share my solution. There may be other, better, solutions, but the ones I found approaches that didn't quite work they way that I'd hoped.&lt;br /&gt;
&lt;br /&gt;
My requirements were:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;To display a build number from my CI tool, where the number was passed in on the command line. In &lt;a href="http://www.atlassian.com/software/bamboo/"&gt;Bamboo&lt;/a&gt;, for example you might configure a grails build as &lt;br /&gt;
&lt;code&gt;-Dbuild.number=${bamboo.buildNumber} war&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;To only change build artifacts and not any source files.&lt;/li&gt;
&lt;li&gt;To not misuse the app version, or change the names of any artifacts.&lt;/li&gt;
&lt;li&gt;To be simple and idiomatic.&lt;/li&gt;
&lt;/ul&gt;I realized that that Grails itself changes the application metadata (application.properties) when it does a build. So I modeled this approach after code in one the &lt;a href="http://gant.codehaus.org/"&gt;gant&lt;/a&gt; scripts in the Grails distribution.&lt;br /&gt;
The steps are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Hook into a build event to add a property in to application.properties.&lt;/li&gt;
&lt;li&gt;Access the property using the &lt;g:meta&gt; gsp tag.&lt;/g:meta&gt;&lt;/li&gt;
&lt;li&gt;&lt;g:meta&gt;Pass the value into the the grails war command using a Java property.&lt;/g:meta&gt;&lt;/li&gt;
&lt;/ul&gt;To create the event hook, create a file in your project/scripts directory called &lt;code&gt;_Events.groovy&lt;/code&gt; that contains a method like:&lt;br /&gt;
&lt;pre&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;
eventCreateWarStart = { warName, stagingDir -&amp;gt;
    def buildNumber = System.getProperty("build.number", "CUSTOM")
    println("Setting BUILD_NUMBER to "\+ buildNumber)
    ant.propertyfile(
       file:"${stagingDir}/WEB-INF/classes/application.properties") {
         entry(key:"build.number", value:buildNumber)
   }
}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
Then you can access the property with a GSP tag like this&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;lt;g:meta name="build.number"&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
And you can now display build numbers (or any other properties that you want to pass in from you CI system) in your Grails app. This worked for me with Grails 1.3.7. The only down sides are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;This works on a per-project basis (That is probably easily fixable)&lt;/li&gt;
&lt;li&gt;The properties that we set are hard coded. (this could be fixed with a convention &amp;nbsp;that iterates through all of the system properties that start with "build" for example).&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;I welcome any suggestions for improving this, or alerts that I'm using the entirely wrong idiom :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1414523691988215023?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rVLnpMkW2RTYkeENHRyJIZ2Uee0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rVLnpMkW2RTYkeENHRyJIZ2Uee0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rVLnpMkW2RTYkeENHRyJIZ2Uee0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rVLnpMkW2RTYkeENHRyJIZ2Uee0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/iIDzM2tYXmQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/iIDzM2tYXmQ/displaying-build-numbers-in-grails-apps.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>6</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/05/displaying-build-numbers-in-grails-apps.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-6077545082241068701</guid><pubDate>Mon, 14 Mar 2011 23:00:00 +0000</pubDate><atom:updated>2011-03-14T19:00:08.666-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">tools</category><title>Using Issue Tracking Systems Well</title><description>Many of us in the agile community have mixed emotions about issue tracking and issue tracking systems. Tracking is good, but issue tracking systems can become time sinks if not used well. I shared some thoughts on this topic in &lt;a href="http://www.stickyminds.com/s.asp?F=S16706_COL_2"&gt;an article on Sticky Minds.com&lt;/a&gt;. Enjoy, and please comment (either here, or on the Sticky Minds site.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-6077545082241068701?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/854H34FQHwYNsoAzteX5ZFaM6zU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/854H34FQHwYNsoAzteX5ZFaM6zU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/854H34FQHwYNsoAzteX5ZFaM6zU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/854H34FQHwYNsoAzteX5ZFaM6zU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/N_8w8X0iPdw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/N_8w8X0iPdw/using-issue-tracking-systems-well.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/03/using-issue-tracking-systems-well.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-1766858404244882849</guid><pubDate>Mon, 28 Feb 2011 23:29:00 +0000</pubDate><atom:updated>2011-02-28T19:03:43.312-05:00</atom:updated><title>Recent Writings (Dev Ops and Testing)</title><description>I recently wrote a couple of articles that might be of interest to those who read this Blogs.&lt;br /&gt;
&lt;br /&gt;
On&amp;nbsp;&lt;a href="http://www.stickyminds.com/"&gt;Sticky Minds.com&lt;/a&gt;, (a &lt;a href="http://www.techwell.com/"&gt;TechWell&lt;/a&gt; community) I wrote about unit testing, and how to overcome the inertia that stops people from testing in&amp;nbsp;&lt;a href="http://www.stickyminds.com/s.asp?F=S16601_COL_2"&gt;The Value of Really Dumb Tests&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I also wrote an &lt;a href="http://www.cmcrossroads.com/cm-articles/275-articles/13919-agile-teams-care-about-dev-ops"&gt;article&lt;/a&gt; for &amp;nbsp;&lt;a href="http://www.cmcrossroads.com/"&gt;CM Crossroads&lt;/a&gt;&amp;nbsp;that gives an overview of DevOps.&lt;br /&gt;
&lt;br /&gt;
If you read the articles and find them useful (or not) please comment here at the article site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-1766858404244882849?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZwClFtI5mKeeLXxq-wBlp3EuGcs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZwClFtI5mKeeLXxq-wBlp3EuGcs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZwClFtI5mKeeLXxq-wBlp3EuGcs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZwClFtI5mKeeLXxq-wBlp3EuGcs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/kpSabhB22tc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/kpSabhB22tc/recent-writings-dev-ops-and-testing.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2011/02/recent-writings-dev-ops-and-testing.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-8040123040613126041</guid><pubDate>Thu, 23 Dec 2010 17:30:00 +0000</pubDate><atom:updated>2010-12-23T12:30:01.692-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">deployment</category><category domain="http://www.blogger.com/atom/ns#">books</category><title>Continuous Delivery</title><description>&lt;a href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img align="left" alt="Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0321601912&amp;amp;tag=steveberczuk" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321601912" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;If you didn't already know that the key to reliably deploy quality software is to take a cross-functional, full-lifecycle approach, Jez Humble and David Farley's book&amp;nbsp;&lt;a href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321601912" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;will help you to understand.&amp;nbsp;Much like Jim Coplien describes in &amp;nbsp;&lt;a href="http://www.amazon.com/Lean-Architecture-Agile-Software-Development/dp/0470684208?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Lean Architecture: for Agile Software Development&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470684208" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;the "secret" to successful lean projects is to work with&amp;nbsp;"Everyone, All Together, from Early On." &lt;br /&gt;
&lt;br /&gt;
While the authors have experience in, an a pre-disposition for, agile techniques, the principles described in &amp;nbsp;this book apply to any organization, whatever the process, &amp;nbsp;though if you take the approach to heart, you will find yourself becoming more agile, which is to say, more responsive to customer needs.&lt;br /&gt;
&lt;br /&gt;
The book &amp;nbsp;covers the full lifecycle from requirements, and design, and coding, to acceptance testing, deployment and operations. There are even discussions on test design, data migration and performance optimization and capacity planning. All of this underscores the point that the goal of building software is delivering it to users, a point which some other books understate. Continuous Delivery develops the concept of a &lt;i&gt;Deployment Pipeline&lt;/i&gt;, showing you the impact development and testing practices have on deployment and operations, and emphasizing the value of involving the operations team early in the development process.&lt;br /&gt;
&lt;br /&gt;
There is a lot of material here, but there are also pointers to other resources. In the SCM and release management are, the authors build on works including&amp;nbsp;&lt;a href="http://www.amazon.com/Software-Configuration-Management-Patterns-Integration/dp/0201741172?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0201741172" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;,&amp;nbsp;&lt;a href="http://www.amazon.com/Release-Production-Ready-Software-Pragmatic-Programmers/dp/0978739213?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0978739213" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;and &lt;a href="http://www.amazon.com/Configuration-Management-Best-Practices-Practical/dp/0321685865?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Configuration Management Best Practices: Practical Methods that Work in the Real World&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321685865" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;.&lt;br /&gt;
&lt;br /&gt;
Not only do you walk away from &amp;nbsp;this book with an understanding of how to start implementing a continuous deployment pipeline, you may also find yourself writing down a list of things to try, and tools to use. While not a tool-centric book, the authors provide many examples of tools to help you implement each phase of the process.&lt;br /&gt;
&lt;br /&gt;
Having written about the version and release management process before, and how it relates to architecture and organization, I was excited get a review copy and see the authors give a thorough discussion of how the SCM and Release Management practices relate to the rest of the software development ecosystem.&lt;br /&gt;
&lt;br /&gt;
While having a lot of material, the book is well organized and written. It's not a quick read, and you'll want to have a notebook or post-its handy to capture the idea it helps you to generate, but if you are interested in improving your deployment process you will find this book very valuable, whether you are a developer, tester, release engineer, or someone who manages people in those roles. When you finish this book you will not only have knowledge about how to implement a deployment pipeline, but &amp;nbsp;also the encouragement to know that it is possible, no matter how complex your project might seem.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321601912" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-8040123040613126041?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k1ML_m-qYKL-oIcFgPMTlddoNoQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1ML_m-qYKL-oIcFgPMTlddoNoQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k1ML_m-qYKL-oIcFgPMTlddoNoQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1ML_m-qYKL-oIcFgPMTlddoNoQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/_x5Jj0qoSMk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/_x5Jj0qoSMk/continuous-delivery.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>1</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2010/12/continuous-delivery.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-2929009745063526661</guid><pubDate>Sun, 28 Nov 2010 23:45:00 +0000</pubDate><atom:updated>2010-11-28T18:45:00.233-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">testing</category><title>What Agile QA Really Does: Testing Requirements</title><description>Teams transitioning to agile struggle with understanding the role of QA. Much of what you read about agile focuses developer testing. &amp;nbsp;Every project I've worked on which had good QA people had a much higher velocity, and higher quality. And there are limits to what developer Unit Testing can test.&lt;br /&gt;
&lt;br /&gt;
In an "ideal" agile environment a feature goes from User Story, to Use Case, to implementation. With tests along the way, you should be fairly confident that by the time you mark a story done that it meets the technical requirements you were working from. If someone is testing your application after this point, and the developer tests are good, it seems like they should be testing something other than the code, which has already been tested.&lt;br /&gt;
&lt;br /&gt;
Even though it's important that your QA team does not become the place where "testing is done" as that will sidetrack an agile project very quickly, it is &amp;nbsp;possible that the QA Team is testing (ideally in collaboration with developers) things that the team decided that developers could not test completely. Also, in practice, &amp;nbsp;problems sometimes slip through developer tests, &amp;nbsp;and the QA team is then testing the developer tests to give feedback on the types of things the developer tests need to be better at. &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Aside from "catching the errors that slipped through" a QA team doing exploratory testing is also exploring novel paths through the application, and may discover problems during some of these paths. In this case the team and stakeholders need to have a conversation about whether the error is something that users will see and care about, or whether it is something that isn't worth fixing.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;i&gt;In effect, exploratory testing is testing the requirements for completeness.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
If you have a QA team, and they are doing exploratory testing, they are really testing:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Requirements: Finding interactions between features and components that were not defined or understood when coding and developer testing began.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Developer Tests: Identifying where developer tests were not as good as they could have been (and how they could be better). This is a good use of automated "integration" tests.&lt;/li&gt;
&lt;li&gt;Systems tests that might be hard to test in a developer context.This might be the one set of tests that are the primary domain of QA.&lt;/li&gt;
&lt;/ul&gt;And, as I've said in other places, &amp;nbsp;QA team can be extremely valuable testing user stories and requirements before they make it into a sprint backlog, by providing feedback about testability and precision. The QA team can also add value by testing how useful a product that meets the specification actually is.&lt;br /&gt;
&lt;br /&gt;
Of course, this is an idealization.&amp;nbsp; But if you are disciplined about doing developer testing, you can still get a lot of value from exploratory testing, whether the people doing them are dedicated QA people, or people who are filling the role.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-2929009745063526661?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4q4cDRIRG1T5NwmmM_aP9oJBJ7g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4q4cDRIRG1T5NwmmM_aP9oJBJ7g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4q4cDRIRG1T5NwmmM_aP9oJBJ7g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4q4cDRIRG1T5NwmmM_aP9oJBJ7g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/Yj9Rp2HXLGE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/Yj9Rp2HXLGE/what-agile-qa-really-does-testing.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2010/11/what-agile-qa-really-does-testing.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-8902580523845299835</guid><pubDate>Mon, 22 Nov 2010 14:00:00 +0000</pubDate><atom:updated>2010-11-22T09:00:04.591-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">testing</category><title>Risks of Manual Integration Testing in the Context Rapid Change</title><description>You have probably come across a situation like this: It's close to a release deadline. The QA team is testing. Developers as testing and fixing problems, and everyone is focused on getting the best product they can out the door on time. During this time, you may notice that someone on the QA team, while working late has found an interesting problem. And they clearly spent a lot of time investigating the problem, identifying the expected results, and the details of why what's happening is wrong. If this is a data intensive application, there may well be SQL queries included to allow you to pinpoint the issue quickly. In short, an ideal problem report.&lt;br /&gt;
&lt;br /&gt;
Except for one thing. Your team found and fixed the problem hours before. &amp;nbsp;And the effort to find and document the problem could have been spent on something else.&lt;br /&gt;
&lt;br /&gt;
It's hard to avoid this kind of overlap when you don't have a complete end-to end automated testing process. And it's probably impossible (for now, anyway) to create an automated test process that will completely replace exploratory &amp;nbsp;testing. Any manual testing process has to balance the timeliness with the "flow" of the testers. If you update a deployment hourly, then you'll reduce the risk of redundant bug reports, &amp;nbsp;but the testers will experience too many interruptions. If you have a paradigm where you code, deploy, and stop coding until you see the next set of issues, but that means time wasted, and probably reduced quality. The answer is better communication between the the testers and developers about the state of the application. Under ordinary circumstances, you might have this sort of exchange in your daily scrum.&lt;br /&gt;
&lt;br /&gt;
You're still early in adopting agile, you'll likely have a week or two at the end of a project where you'll have more effort put into manual testing, and that manual testing will find errors. So the simple thing to do is &amp;nbsp;to query among the team before spending too much time documenting an issue.&lt;br /&gt;
&lt;br /&gt;
Some of the options are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Searching the issue tracking system. This sound like a good idea, but sometimes it's hard to find the right query. And it's possible that something got fixed without and issue being generated.&lt;/li&gt;
&lt;li&gt;Asking. &amp;nbsp;Yelling out a question, sending and email, or posting a message in a team chat room gives you the benefit of being able to be a bit vague in your query.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;I tend to prefer the "ask the room" approach. But this isn't effective when you're working in different time zones, or at different hours. On the other hand, since software development is a collaborative activity, you'll need to address the question of how yo collaborate across time. (The simple answer is to try to avoid close coupling between activities that are likely to happen when the teams are on different schedules).&lt;br /&gt;
&lt;br /&gt;
Situations like the one that I described can happen. But it's worth figuring out how often they happen, and if there are simple ways to reduce their incidence and impact. Good communication channels are importanty and sometimes the lower tech ones work better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-8902580523845299835?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YlRBTJEyR3LVBqwoChX1W8hjfZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YlRBTJEyR3LVBqwoChX1W8hjfZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YlRBTJEyR3LVBqwoChX1W8hjfZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YlRBTJEyR3LVBqwoChX1W8hjfZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/GophmO97GoM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/GophmO97GoM/risks-of-manual-integration-testing-in.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2010/11/risks-of-manual-integration-testing-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19668182.post-4925354649399389104</guid><pubDate>Sun, 14 Nov 2010 20:30:00 +0000</pubDate><atom:updated>2010-11-14T15:30:00.048-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><title>To Scrum, Prepare</title><description>Agile methods have some sort of daily all-team checkpoint meeting as part of &amp;nbsp;the process. The idea behind the Daily Scrum (Scrum) or Daily Standup (XP) is good: &amp;nbsp;replace status meetings (or someone walking around asking about status) with one short daily meeting&amp;nbsp;where everyone has a chance to communicate about what they are doing and what they need help with. This ensures that there is at least one chance each day for everyone to understand the big picture of the project, and to discover unexpected dependencies.&lt;br /&gt;
&lt;br /&gt;
But just having everyone in the room doesn't make for an effective, focused scrum. You need to be be prepared. Once I was on a team where the scrums started going off track. They took longer. People's updates were often "I don't remember what I did yesterday," or they became long unfocused rambles that didn't convey much information.&amp;nbsp;&amp;nbsp;I suggested that we all take a few minutes before Scrum to organize our thoughts. This got a lot of resistance. "It feels like a pre-meeting meeting, and with Scrum we're supposed to spend less time in meetings."&lt;br /&gt;
&lt;br /&gt;
While Daily Scrum's are meant to be lightweight, it's respectful of everyone else's time to think about what 's worth sharing with the team. Most days you might just be working on one thing, in which case a quick glance at the Scrum board might be enough. But if you want to do what's best for your team, why not take 2 minutes before Scrum (either in the morning, or even the day before) jotting down what you want to share with the team that addresses the questions:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;What did I do yesterday?&lt;/li&gt;
&lt;li&gt;What do I plan to do today?&lt;/li&gt;
&lt;li&gt;What were my roadblocks?&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Starting each day with a clear picture in your head of the answers those questions is probably not a bad thing from a professional development perspective anyway.&lt;br /&gt;
&lt;br /&gt;
Sure, everyone will have off days where they don't get around to this, but if your Scrum's are losing focus frequently, consider:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Posting a sign that reminds people of the agenda of the scrum (as Tabaka suggests in&amp;nbsp;&lt;a href="http://www.amazon.com/Collaboration-Explained-Facilitation-Software-Project/dp/0321268776?ie=UTF8&amp;amp;tag=steveberczuk&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Collaboration Explained: Facilitation Skills for Software Project Leaders&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=steveberczuk&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321268776" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;)&lt;/li&gt;
&lt;li&gt;Whether there are people participating who aren't needed.&lt;/li&gt;
&lt;li&gt;Whether your work isn't being structured in a way that moves the team towards the sprint goal.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;The Daily Scrum (or standup) is a useful tool for being agile and responsive, but just being in the room does not mean that you are having a Scrum.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19668182-4925354649399389104?l=steveberczuk.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SyGpf7Pl1X4B5YDFf6laHD7NoLs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SyGpf7Pl1X4B5YDFf6laHD7NoLs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SyGpf7Pl1X4B5YDFf6laHD7NoLs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SyGpf7Pl1X4B5YDFf6laHD7NoLs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalSimplicity/~4/e_etdE3XKmE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AccidentalSimplicity/~3/e_etdE3XKmE/to-scrum-prepare.html</link><author>noreply@blogger.com (Steve Berczuk)</author><thr:total>0</thr:total><feedburner:origLink>http://steveberczuk.blogspot.com/2010/11/to-scrum-prepare.html</feedburner:origLink></item></channel></rss>

