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

<channel>
	<title>casperfabricius.com &#187; agile</title>
	<atom:link href="http://casperfabricius.com/site/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://casperfabricius.com/site</link>
	<description>expert ruby on rails development</description>
	<lastBuildDate>Sun, 06 Jun 2010 08:43:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Notes and impressions from RailsConf 2009</title>
		<link>http://casperfabricius.com/site/2009/05/08/notes-and-impressions-from-railsconf-2009/</link>
		<comments>http://casperfabricius.com/site/2009/05/08/notes-and-impressions-from-railsconf-2009/#comments</comments>
		<pubDate>Fri, 08 May 2009 19:49:24 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/cfp/casperfabricius.com/site/wp-content/plugins/autometa/autometa.php</b> on line <b>324</b><br />
		<category><![CDATA[agile]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[railsconf]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/site/?p=217</guid>
		<description><![CDATA[I&#8217;d never have guessed that the first time I&#8217;d visit Las Vegas, the gambling and the drinking, the shows and the shopping would be a minor thing, something that I&#8217;d squeeze in between what really mattered. But RailsConf 2009 had such a comprehensive and interesting program that this ended up being the case. From the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d never have guessed that the first time I&#8217;d visit Las Vegas, the gambling and the drinking, the shows and the shopping would be a minor thing, something that I&#8217;d squeeze in between what really mattered. But RailsConf 2009 had such a comprehensive and interesting program that this ended up being the case. From the casual networking at breakfast and lunch over packed keynotes and high-quality talks to late-night Birds Of a Feather sessions, RailsConf did give the attendants any reason to step out if the air-conditioned Hilton and into the sun and lights of the Strip.</p>
<p>We did that anyway, obviously, but mostly we were learning, tweeting, chatting, coding, emailing and taking notes at a conference where the wifi actually worked and power strips were easily available. I&#8217;m not going to reference all the talks that I went to here, but I have uploaded my notes <a href="http://casperfabricius.com/site/wp-content/uploads/2009/05/">here</a>. Also, I&#8217;ve written a detailed summery of David Heinemeier Hansson&#8217;s keynote and a few select talks that I attended for <a href="http://railsmagazine.com/issues/2">RailsMagazine</a>, <strike>but the free PDF-edition won&#8217;t be available for another two weeks</strike> now freely available for download &#8230; slides from all the presentations can be found <a href="http://www.scribd.com/group/74983-railsconf-2009">here</a>.</p>
<p><span id="more-217"></span></p>
<p>So what did I take away from RailsConf from the top of my head? The first that springs to mind, is that I got to try <a href="http://www.jetbrains.com/ruby/index.html">RubyMine</a>, a new IDE for Ruby on Rails. At first glance this might look like another Aptana or Netbeans, but the <a href="http://railsenvy.com/">Rails Envy</a> guys gave a stunning demonstration of the power of this new IDE: From TextMate keymapping and navigation, over code completion and refactoring that actually works, to automatic diagramming of models and their relationships, this product looks like a real productivity booster. I&#8217;m going to try it out the minute I get home.</p>
<p><i>Rack</i> kept popping up everywhere. Lots of talks on Rack and Rails Metal (which is really just a wrapper for a &#8220;raw&#8221; Rack handler), and now Rack suddenly doesn&#8217;t feel so scary anymore. It just a way to do cool things on a raw request and/or response without the (full) overhead of the Rails stack. <i>JRuby</i> was another popular topic, as well as <i>clouds</i> &#8211; how to deploy to server environment that will seamlessly scale with your needs.</p>
<p>I have been following IronRuby with great interest since the project was started 2-3 years ago, and I was a bit disappointed to hear that the .NET implementation of Ruby is still nowhere near completed. I asked Jimmy Schementi from the Microsoft IronRuby team what took them so long (to be honest, I was a bit rude, sorry Jimmy), and asked that things simply took time. He said that JRuby had been 6 years underway. The positive news, however, was that the IronRuby team is still very committed to making their implementation fully Ruby 1.8 compliant, and that are using Rails to measure their success against.</p>
<p>I&#8217;d love to tell you more, but my plane is leaving soon, so you will have to make do with <a href="http://casperfabricius.com/site/wp-content/uploads/2009/05/">my notes</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2009/05/08/notes-and-impressions-from-railsconf-2009/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Introductions to Ruby on Rails</title>
		<link>http://casperfabricius.com/site/2009/04/22/introductions-to-ruby-on-rails/</link>
		<comments>http://casperfabricius.com/site/2009/04/22/introductions-to-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 07:45:03 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/cfp/casperfabricius.com/site/wp-content/plugins/autometa/autometa.php</b> on line <b>324</b><br />
		<category><![CDATA[agile]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[railsconf]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/site/?p=212</guid>
		<description><![CDATA[You have at least two chances to get introduced to Ruby on Rails by yours truly this year. I do a presentation on Rails with a focus on ActiveRecord, the ORM of Rails, on Commity Day 2009 in Copenhagen. I am also teaching Rails used with agile methods at Copenhagen Business School this fall.
Community Day [...]]]></description>
			<content:encoded><![CDATA[<p>You have at least two chances to get introduced to Ruby on Rails by yours truly this year. I do a presentation on Rails with a focus on ActiveRecord, the <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> of Rails, on <a href="http://communityday.in/copenhagen/">Commity Day 2009</a> in Copenhagen. I am also teaching Rails used with agile methods at <a href="http://cbs.dk/">Copenhagen Business School</a> this fall.</p>
<p>Community Day 2009 is free 1-day event May 28 in Copenhagen sponsored by Danish developer communities. Besides my two cents, it also features presentations on Android, Flex, Air, Silverlight, LINQ, Drupal, jQuery and ASP.NET MVC &#8211; in other words it looking to be a lot of buzzwords and popular technologies explained. As if that wasn&#8217;t enough, the day also include three geek-friendly meals, friendly competitions and lots of free beer.</p>
<p>The course I will be teaching at Copenhagen Business School is called Agile Development in Practice, and builds upon a theoretic platform of agile methods. The course focus is on giving the students practical experience with Scrum and Ruby on Rails through a combination of traditional teaching and working with real-life examples. The course is free to attend for all Danish students, and counts for either 7,5 or 15 ETCS points. Others can also enroll in the course for a fee. The course description is not yet available on the CBS homepage, but I will link to here as soon as it is ready.</p>
<p>But before all that, I myself will hopefully learn many new and useful things about Ruby, Rails and all things geeky at <a href="http://en.oreilly.com/rails2009/">RailsConf</a> in Las Vegas. See you there? :)</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2009/04/22/introductions-to-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mary Poppendieck: Agile theses and mistakes</title>
		<link>http://casperfabricius.com/site/2008/06/25/mary-poppendieck-agile-theses-and-mistakes/</link>
		<comments>http://casperfabricius.com/site/2008/06/25/mary-poppendieck-agile-theses-and-mistakes/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 20:45:48 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
				<category><![CDATA[agile]]></category>

	<!-- AutoMeta Start -->
	<category>mary</category>
	<category>poppendieck</category>
	<category>agile</category>
	<category>copenhagenrb</category>
	<category>essential</category>
	<category>tension</category>
	<category>fad</category>
	<category>silver</category>
	<category>bullet</category>
	<category>mistakes</category>
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/blog/?p=66</guid>
		<description><![CDATA[On June 24th Mary Poppendieck gave a free talk at the IT University in Copenhagen arranged by BestBrains. The title of the talk was &#8220;Is Agile a Fad?&#8221; with the subtitle &#8220;Will Agile Software Development End Up On the Dumping Grounds of History?&#8221;. This dramatically titled talk gathered more than a 100 agile enthusiasts in [...]]]></description>
			<content:encoded><![CDATA[<p>On June 24th <a href="http://www.poppendieck.com/">Mary Poppendieck</a> gave a free talk at the <a href="http://www.itu.dk">IT University</a> in Copenhagen arranged by <a href="http://www.bestbrains.dk/">BestBrains</a>. The title of the talk was &#8220;Is Agile a Fad?&#8221; with the subtitle &#8220;Will Agile Software Development End Up On the Dumping Grounds of History?&#8221;. This dramatically titled talk gathered more than a 100 agile enthusiasts in a packed auditorium, and I spotted several members from <a href="http://daug.nordija.dk/">Danish Agile User Group</a> and <a href="http://copenhagenrb.dk/">Copenhagen Ruby Brigade</a>, as well as both students and teachers from <a href="http://www.cbs.dk">Copenhagen Business School</a> and, of course, ITU.</p>
<p>Mary Poppendieck started her talk with a story about the dot-com bubble of the 1800&#8217;s: <a href="http://en.wikipedia.org/wiki/Plank_road">Plank roads</a>. She ended the story by asking: Is agile development a plank road? Is agile development just another fad that gets everyone exited for a time, but doesn&#8217;t <i>really</i> solve anything in the long run? Poppendieck never really answered this question, but she went on to go through software development from the 1960&#8217;s up to our century, concluding that for each decade and each new software development paradigm, large software projects (over a year) was still late, over budget and full of bugs &#8211; even today this is the case. She did, however, point out that the opportunity to do small software projects (around 3 months) has increased greatly during these decades, and that large projects is falling out of favor.</p>
<p><span id="more-63"></span></p>
<p>Why is software development so hard to manage? Why have we passed through so many paradigms in such a short time span? Poppendieck had three theses on why this might be so:</p>
<p><b>Thesis 1: Silver Bullet Thinking</b><br />
People has a tendency to believe that a certain process, method or tool is so great that it will magically solve the problems right away for anyone who use it. They tend to ignore the details of this silver bullet, and just try to apply it directly to their company or project while ignoring what the real world is like. When this happens, the &#8220;silver bullet&#8221; will just be a fad, and it won&#8217;t work.</p>
<p><b>Thesis 2: Different Contexts</b><br />
Extremely different approaches to software development exists, from the very rigorous and structured to the very people-driven and agile, and both extremes and a lot between seem to work in different contexts. One approach might be good for one kind of software, but not necessarily for another kind of software. There is no single answer, no single method that works for all contexts.</p>
<p><b>Thesis 3: Essential Tension</b><br />
There is an essential tension between getting started with development (coding) right away versus planning and spending time doing design and architecture. The first might get you fast results and early feedback, while the latter might save you from major refactoring and incoherent software. Spending time planning is good, but following a plan you created when you where most ignorant is not. Maybe there is a fundamental tension between these two poles, and maybe projects need to be in the middle, driven by essential tension.</p>
<p>Mary Poppendieck went on to describe how to fail with agile. She listed four mistakes that people are likely to do when trying to adapt agile processes, but she also listed four principles that should be followed to avoid these mistakes:</p>
<p><b>Mistake #1: Copy What Successful Companies are Doing</b><br />
Poppendieck referred a lot to the book <a href="http://www.amazon.com/Wisdom-Crowds-James-Surowiecki/dp/0385721706/">The Wisdom of Crowds</a>, and quoted the notion of &#8220;the instinct to imitate&#8221; from book in connection with this mistake. If we let ourselves be influenced too much by existing practice, we will believe the same things are right and make the same mistakes. The solution is to maintain indepence and think for yourself. Don&#8217;t believe in all success stories, but look for the flaws and mistakes in them. Just because it is the textbook&#8217;s way of doing it, it doesn&#8217;t mean that way  is good for you. You don&#8217;t get world class development by copying best practice, but by inventing it.</p>
<p><b>Mistake #2: Insist that Everyone Follow a Standard Process</b><br />
Different people have different views of the world, and different processes will work best for them. For this reason, the agile process should draw on local knowledge, letting people fit the process to their needs locally and constantly improve this process. Again, there is no such thing as a &#8220;best practice&#8221; for everyone.</p>
<p><b>Mistake #3: Limit Agile Implementation to Software Development</b><br />
Poppendieck quoted The Wisdom of Crowds for its notion of &#8220;the value of cognitive diversity&#8221;. Having a team with software developers only is not very diverse, so you need to gather a group of people from all parts of the organization &#8211; creative, testers, operations, etc. The solution is to widen the boundaries and accept that &#8220;IT&#8221; is part of &#8220;The Business&#8221; and not outside of it. The team should be responsible for business success, not just technical success, which has no value in itself.</p>
<p><b>Mistake #4: Avoid Tension</b><br />
There is a natural tension, not just between programming and planning, but also between marketing people who wants the job finished right now, and developers who want to develop forever. Many other examples could be found. Tension, even conflicts, is what provides a balanced solution, and consensus decisions is nothing to strive for.</p>
<p>Mary Poppendieck concluded her talk by explaining, that if we want to make agile something more than a fad, we must recognize all three theses &#8211; stop silver bullet thinking, recognize different contexts and welcome essential tension &#8211; while avoiding the common mistakes.</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2008/06/25/mary-poppendieck-agile-theses-and-mistakes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Cool Jim Highsmith quote on agility</title>
		<link>http://casperfabricius.com/site/2007/01/02/cool-jim-highsmith-quote-on-agility/</link>
		<comments>http://casperfabricius.com/site/2007/01/02/cool-jim-highsmith-quote-on-agility/#comments</comments>
		<pubDate>Tue, 02 Jan 2007 16:14:27 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
				<category><![CDATA[agile]]></category>

	<!-- AutoMeta Start -->
	<category>flexibility</category>
	<category>consistency</category>
	<category>repeatability</category>
	<category>agilists</category>
	<category>highsmith</category>
	<category>processes</category>
	<category>jim</category>
	<category>dysfunctionality</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/blog/2007/01/02/cool-jim-highsmith-quote-on-agility/</guid>
		<description><![CDATA[
Agilists believe that good practices and processes can improve consistency but that repeatability &#8211; in the statistically controlled feedback loop sense of the term &#8211; is a fantasy. Unfortunately, it is a fantazy that many corporate executives believe in, and that belief exacerbates the dysfunctionality between product development and management. Executive management has been told [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Agilists believe that good practices and processes can improve consistency but that repeatability &#8211; in the statistically controlled feedback loop sense of the term &#8211; is a fantasy. Unfortunately, it is a fantazy that many corporate executives believe in, and that belief exacerbates the dysfunctionality between product development and management. Executive management has been told that they <i>can</i> have it all, and they want to believe it. They are then disappointed when plans don&#8217;t work out. Their solution: more processes and more standards. Are traditionalists willing to commit to this view of repeatability as a problem rather than a solution? Agilists believe that change must be adapted to, that it can&#8217;t be planned away. You can have flexibility, or consistency, or some blend of both. But expecting a process or methodology to provide ultimate flexibility and complete predictability at the same stretches the limits of credulity.</p>
<p align="right"><i><a href="http://en.wikipedia.org/wiki/Jim_Highsmith">Jim Highsmith</a>, <a href="http://www.amazon.com/Agile-Software-Development-Ecosystems-Highsmith/dp/0201760436/ref=pd_rhf_f_1/104-5152703-4458336">Agile Software Development Ecosystems</a></i></p>
</blockquote>
<p>Happy new year!</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2007/01/02/cool-jim-highsmith-quote-on-agility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 steps to becoming agile</title>
		<link>http://casperfabricius.com/site/2006/11/23/9-steps/</link>
		<comments>http://casperfabricius.com/site/2006/11/23/9-steps/#comments</comments>
		<pubDate>Thu, 23 Nov 2006 21:06:04 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
				<category><![CDATA[agile]]></category>

	<!-- AutoMeta Start -->
	<category>rothman</category>
	<category>agile</category>
	<category>steps</category>
	<category>presentation</category>
	<category>johanna</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/blog/2006/11/23/9-steps/</guid>
		<description><![CDATA[This post describes nine steps you company or department can take towards more agile development. If the title seems familiar, it is because the suggestions in this post are not my own, but rather the wisdom of an American woman who calls herself a pragmatic consultant; Johanna Rothman. Rothman did a presentation at Agile Israel [...]]]></description>
			<content:encoded><![CDATA[<p>This post describes nine steps you company or department can take towards more agile development. If the title seems familiar, it is because the suggestions in this post are not my own, but rather the wisdom of an American woman who calls herself a <i>pragmatic consultant</i>; <a href="http://www.jrothman.com">Johanna Rothman</a>. Rothman did a presentation at <a href="http://www.teamagile.com/">Agile Israel user group</a> in March 2005 with this very title, and was generous enough to let the user group record and publish her presentation as a <a href="http://www.teamagile.com/mainpages/Interviews.html">podcast</a>. Recently I did a presentation in my Agile Methods class at <a href="http://www.cbs.dk">school</a> summarizing Rothman&#8217;s nine steps, and since it seems she hasn&#8217;t written a specific article herself about this good advice, I thought I would do it. I know the podcast is almost two years old, but believe me;  this stuff is still highly relevant.</p>
<blockquote><p>
The gap between the agile practices and where you are now, feels so big, that it seems impossible to get there.
</p></blockquote>
<p>If you are working with some kind of software development, you have probably considered going agile. Maybe you are in a big, rigid, bureaucratic development methodology today, maybe you are just doing the good old code&#8217;n'fix, or perhaps you are working in some kind &#8220;agile-ish&#8221; way. If you are perfectly happy with how your development process is today, or if you are already doing the real agile thing with XP, Scrum or something else, then this post is not for you.</p>
<p>The nine steps are steps that even very big and heavy organizations can take take towards becoming agile. You don&#8217;t become agile overnight &#8211; it takes time; especially because agile development, as opposed to many other methodologies, is all about having the right values embedded in the company culture, and less about making documentation in a specific way or using the right tools.</p>
<p>The steps are ordered so they should get harder and harder to implement, but still possible in most organizations. The first four steps are mostly technical, while the other five steps are mostly about better project management. All of them are steps to become agile.</p>
<h5>1. Daily builds</h5>
<p>Also known as continuous integration, daily builds are all about integrating, linking and compiling the entire code base of the development project automatically. If a full build is very time consuming and resource demanding; this can be done overnight, but if its lighter; it can be done even more often, preferable every time new files are committed to the code base.</p>
<blockquote><p>
Developers develop and develop and develop and 6 months later they finally try to put everything together.
</p></blockquote>
<p>The advantages of daily builds are great for projects of a size where individual developers can&#8217;t build everything themselves at their leisure. It results in very early feedback to the developers, and the less time that has passed since the developer wrote code that broke the build, the less expensive is the error to fix, because the developer is still available to the project and has the code in fresh in mind. This is also why big bang integration is such a bad thing &#8211; if you only test everything together near the end of the project, you are asking for trouble.</p>
<h5>2. Automated smoke tests</h5>
<p>If you don&#8217;t do test-driven development, if you don&#8217;t do any serious unit testing; then automated smoke tests are a place to start. A smoke test can run automatically and will always return either <i>passed</i> or <i>failed</i>. Passed doesn&#8217;t mean that code is fantastic or has all the correct logic, it just signals that:</p>
<blockquote><p>
This software is not bad enough to reject
</p></blockquote>
<p>It&#8217;s not easy to understand how automated smoke are different from unit tests, but the difference is really just this: They are simpler. If you are already unit-testing with JUnit, NUnit or similar testing frameworks, you are already past automated smoke tests. If you are only testing from you GUI, smoke tests can be a place to start.</p>
<p>Smoke tests are the next early warning layer building upon the daily build. You software might build, but then a smoke test might fail, and you get rapid feedback once again with all its benefits. There is a rule of thumb that says that customers mainly use 20 % of the functionality in the software &#8211; your smoke tests should cover these 20 %, and nothing more, really.</p>
<h5>3. Implementation by feature</h5>
<p>While many large software companies organize and implement each layer in the typical 3-tier architecture by itself, implementation by feature (or by <i>slice</i>) will often be much more efficient. In the typical bottom-up development cycle, architects and developers try to predict every possible need the upper layers might have, which in the end most often results in some of the functionality not being used, and other functionality still lacking, since requirements are constantly changing.</p>
<p>By implementing by feature, that is; developing a slice of user functionality through all layers in the software, you get something done, finished and working, and you don&#8217;t write a lot of code you don&#8217;t need. If your company is organized around architectural departments, you can try to setting up <a href="#step9">cross-functional teams</a> for implementing specific features.</p>
<h5>4. Test earlier and more often</h5>
<p>All serious software developers test their software to a certain extent, but too often, testing is something that doesn&#8217;t get started until just before implementation ends, because implementation just keeps going on. This doesn&#8217;t give testers a fair chance to test to the software thoroughly, and when they find bugs, the developers will have forgotten most of the rationale behind the buggy code.</p>
<p>While agile methods suggest pair programming as one way to produce code of much higher quality, Rothman suggest a much less time-consuming technique that can be used if pair programming is not a viable option; the <i>develop-test technique</i>:</p>
<ol>
<li>Take two developers that works on similar code (i.e. they can understand each others code)</li>
<li>Let them work independently as usual for, say, two hours</li>
<li>Then let them hand off the code to each other for a review</li>
<li>The developers must each create unit tests for the other persons code, and comment on its general quality</li>
<li>Now the code is all unit tested, and each developer has gotten some constructive and early feedback</li>
</ol>
<p>Again, much more subtle techniques of course exists, but this can be a place to start.</p>
<h5>5. Timeboxing requirements</h5>
<p>This is one of my favorites. A typical project might take 10 months, and out of that, developers will spend 5 months on requirements and 5 months of design, implementation, testing and all the other tasks that are part of development. It is wrong to use all that time on requirements.</p>
<p>Why? Because even when you spend that much time on the requirements, you will never be a 100 % right. Probably not even 50 % right. Even after 5 months. The solution? Timebox your requirements phase.</p>
<blockquote><p>
<b>Timeboxing:</b> You spend as much time as you have decided to spend on a particular activity, and by definition; you are done.
</p></blockquote>
<p>So make a decision. Set a deadline. If you allocate 3 weeks to gathering requirements, then you are done after these 3 weeks, and hopefully, this has forced you to focus on the important requirements. You can&#8217;t gather requirements by yourself either, you have to do it collaboratively with &#8211; preferably &#8211; representations from all stakeholders present. Perhaps in a <a href="#step9">cross-functional team</a>.</p>
<h5>6. Rank the requirements</h5>
<p>It is much better to rank you requirements (1, 2, 3, 4, 5 &#8230;) than to just categorize them (high, medium, low). Why? Because when the requirements are just categorized, we often even doesn&#8217;t get through all the requirements in the &#8220;high&#8221; category, and we might just do few from the &#8220;medium&#8221; category, just because they are easier to implement.</p>
<blockquote><p>
Ranking requirements explains exactly the order the requirements has to be implemented.
</p></blockquote>
<p>A good technique for setting your requirements list in a prioritized order, is to use pairwise ranking. You simply sit down with the important stakeholders and compare the requirements in pairs &#8211; is this requirement more or less important than the other?  Then, when you have the prioritized list, you could, for instance, freeze requirements 1-10 and implement these, allowing the rest of list to be rearranged and changed. If you go in that direction, you are in fact already in your way to use Scrum.</p>
<h5>7. Rolling wave planning</h5>
<blockquote><p>
I wish I had a crystal ball. I wish I could see out past two or three weeks. But I&#8217;m not very good at that.
</p></blockquote>
<p>With rolling wave planning, you put up major milestones as far as you have to, but you only do detailed planning for the next 3-6 weeks. Rothman recommends 4-5 weeks of detailed planning, since most people like to know what they are doing for the next month or so. The benefit is that you have much easier time when your environment and requirements suddenly change. Let me put in a few more quotes from Rothman&#8217;s presentation, since she really explains it much better than I:</p>
<blockquote><p>You can&#8217;t adapt a change, if your plan is set in concrete, but you can adapt a change, if you plan for change</p></blockquote>
<blockquote><p>What if the client wants to see a plan? You can make up fiction! You can give the client anything they want &#8211; it&#8217;s not accurate!</p></blockquote>
<h5>8. Milestones based on deliveries &#8211; not functions</h5>
<p>When you setup you milestones for the project, they should based on deliveries, that is; code that satisfies given requirements, instead of functions, that is; code that completes certain aspects of the software architecture. This way, you know exactly how far you are from customers point of view, since the customer doesn&#8217;t really care about your architecture and layers, but just wants to see his or hers requirements implemented.</p>
<p>The worst thing you can do is to do reporting based on how many percent done the project is. 90 % done is very bad place to be, and you can end up setting there for a long time. So look at deliveries instead. Say: We have delivered code that satisfies the demands for feature XX.</p>
<p><a name="step9"></a></p>
<h5>9. Cross-functional teams</h5>
<p>Cross-functional teams has been recommended as a solution several times in this post. Functional teams has blind spots, i.e. architectural teams doesn&#8217;t think about how their code interfaces with other peoples code, not because they are bad developers &#8211; they just don&#8217;t think about it.</p>
<p>Cross-functional teams are very helpful at preventing other people from ignoring what&#8217;s really going on in the system. When you put people with different areas of expertise together, they are able to create a more holistic solution and do a full delivery.</p>
<p>While it&#8217;s probably unrealistic to try to convince the top management in your company that all the development teams should be reorganized to fit to agile development, it is not that hard to put cross-functional teams together across a locked organization structure.</p>
<h5>Conclusion</h5>
<p>Agile methods sounds great when you read about them &#8211; and they probably are great once they are fully implemented into an organization. But it&#8217;s not easy to get there. These nine steps are a place to start. I&#8217;ll try to convince the smart guys and girls at <a href="http://kraftvaerk.net">my company</a> that we should become agile, and these steps can hopefully help me.</p>
<p>I will also be attending the next meeting in the <a href="http://aug.nordija.dk/">Danish Agile User Group</a> which takes place at November 27th. Join the group if you are in the Greater Copenhagen area and finds this stuff interesting :)</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2006/11/23/9-steps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile lessons from Obie and Ole</title>
		<link>http://casperfabricius.com/site/2006/10/14/agile-lessons/</link>
		<comments>http://casperfabricius.com/site/2006/10/14/agile-lessons/#comments</comments>
		<pubDate>Sat, 14 Oct 2006 15:39:00 +0000</pubDate>
		<dc:creator>Casper Fabricius</dc:creator>
				<category><![CDATA[agile]]></category>

	<!-- AutoMeta Start -->
	<category>agile</category>
	<category>lessons</category>
	<category>methods</category>
	<category>teacher</category>
	<category>inspirational</category>
	<category>discuss</category>
	<category>practitioners</category>
	<category>hear</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://casperfabricius.com/blog/2006/10/14/agile-lessons-from-obie-and-ole/</guid>
		<description><![CDATA[I have a great class in school called Agile Methods, but while our teacher keeps the lessons interesting by letting us discuss a lot, I find learning about agile development really inspirational when I get the opportunity to hear about actual agile development projects from real-life practitioners. I&#8217;ve had two such opportunities recently and have [...]]]></description>
			<content:encoded><![CDATA[<p>I have a great class in <a href="http://www.cbs.dk">school</a> called <i>Agile Methods</i>, but while our teacher keeps the lessons interesting by letting us discuss a lot, I find learning about agile development really inspirational when I get the opportunity to hear about actual agile development projects from real-life practitioners. I&#8217;ve had two such opportunities recently and have met <a href="http://www.jroller.com/page/obie">Obie Fernandez</a>, a Rails and agile practitioner from <a href="http://www.thoughtworks.com/">ThoughtWorks</a>, and <a href="http://www.olejepsen.dk/English%20overview.htm">Ole Jepsen</a>, freelance agile consultant and co founder of <a href="http://www.apln.org/">Agile Project Leadership Network</a>.</p>
<div style="text-align:center;">***</div>
<p><a href="http://www.flickr.com/photos/jesper/tags/copenhagenrb/"><img src="http://static.flickr.com/119/262175652_792fa9eb1c_m_d.jpg" alt="Obie Fernandez in Copenhagen" align="right" style="margin-left:10px" /></a>When Obie Fernandez was in Denmark to speak at <a href="http://www.jaoo.dk">JAOO</a>, he also <a href="http://copenhagenrb.dk/2006/10/2/obie-fernandez">met up</a> with a bunch of us from <a href="http://copenhagenrb.dk/">Copenhagen Ruby Brigade</a> at a café in central Copenhagen. While most of the evening was spent completely relaxed just talking, Obie also gave his presentation from RailsConf Chicago, which I missed when I was there &#8211; glad I got the chance to hear it in my own hometown.</p>
<p>The presentation was mainly a collection of case stories about projects, where ThoughtWorks has successfully used Ruby on Rails and agile development, with a lot of good points mixed in. To be honest, I can&#8217;t recount too many of these points, since <a href="http://justaddwater.dk/">Jesper Rønn-Jensen</a> kept buying rounds of drinks to everyone and it was very late in the evening, but I think most of what he said related to Rails can be found in <a href="http://www.jroller.com/page/obie?entry=my_railsconf_2006_talk_summarized">his own summary</a>.</p>
<p>I don&#8217;t think the actual presentation material can be found online, since it contains information about clients that&#8217;s not 100 % cleared, and it&#8217;s a pity, since a lot of what I got out the presentation was from seeing the images of real developers working on real agile development. When I read texts by Kent Beck, Jim Highsmith or some of the other agile gurus, I keep thinking that it sounds almost to good to be true. That no one could actually be doing this stuff for real, because it is just so wonderfully different from how we normally develop software. That&#8217;s why it&#8217;s nice to see images of people pair programming or having stand-up meetings, while stories on post-its hangs on the whiteboard in the background &#8211; people <i>are</i> doing this!</p>
<p>Now, two valuable things I do remember Obie saying, are that:</p>
<ol>
<li>The only really good way to do pair programming, is have a setup with one computer, two mirrored screens and two sets of keyboards and mice that works simultaneously. This way none of the two developers has to sit and twist their neck to see the screen, they can select their own distance to each other and most importantly; they can switch between the coder and observer roles instantaneously. (This later made me think of how ironic the image on the front page of <a href="http://www.pairprogramming.com/">www.pairprogramming.com</a> is.)</li>
<li>Traditional unit testing is not a very good fit for many Rails-applications, at least not if they are basically just <a href="http://casperfabricius.com/blog/2006/06/25/railsconf-dhh/">CRUD-applications</a> without any advanced business logic. This is due to the fact that ActiveRecord &#8211; which does the actual crudding &#8211; is already thoroughly tested, and that mainly controllers and user interface is added. For this reason, Obie recommended <a href="http://rubyforge.org/projects/rubyselenium/">Selenium</a> as the way to test your application, or &#8211; better yet &#8211; as a way to do test driven development. Selenium allows you test your user interface and application flow in an automated way through your browser, using JavaScript to control the tests.</li>
</ol>
<div style="text-align:center;">***</div>
<p><img src="http://static.flickr.com/87/262175202_4c26130adc_m_d.jpg" alt="Me hacking at Kassen" align="left" style="margin-right:10px" /><b>Ole Jepsen</b>, a Danish expert in agile development (which I don&#8217;t have a picture of, so I put myself in instead &#8211; just imagine that I&#8217;m talking notes while Ole is talking), gave a lesson at my <i>Agile Methods</i> class in a very agile way. After a short introduction of himself and his view on development, he asked us &#8211; the students &#8211; to come up with subjects about agile development we wanted him talk about. Then each of use got three votes, and the subjects where prioritized after number of votes. &#8220;These are our stories as you &#8211; the customers &#8211; has prioritized them, and I &#8211; the supplier &#8211; will try do as many of them in this time box as possible, starting out with the most important.&#8221; Ole said. Although I have pretty comprehensive notes, I will only dig into what I found was Ole&#8217;s most important points:</p>
<p><b>Pitfalls of agile development in practice</b><br />
Just like waterfall methods doesn&#8217;t work like the text books say they will (at all!), agile methods of course also have their problems and pitfalls  when you take them out of (say) Kent Beck&#8217;s comfortable descriptions and into the Real World<sup>TM</sup>. Ole had an example from a big Danish telecommunication company, where a project which had failed several times, switched to use agile methods (&#8220;it has to hurt before they go agile!&#8221; was another of Ole&#8217;s points) &#8211; but not without problems:</p>
<ul>
<li>The customer (that is; the user of the system being developed) and the developers do not automatically communicate well, just because you put them in the same room. In this project, the customer and the lead architect held long meetings where customer explained the problem domain. Then the architect would spend two days writing Word documents and afterwards show them to the customer (which was in the same room), asking: &#8220;Is this right?&#8221;, and would get the answer: &#8220;No no, that&#8217;s completely wrong!&#8221;. In the end, the project manager had to ask the customer to take responsibility of <i>really</i> explaining the needs so the developers could understand it, and the developers, in turn, has to <i>really</i> listen.</li>
<li>The project was planned in three main iterations, and near the end a fourth was added to catch up with postponed stories. After each iteration, a demonstration was done for the customer so they could see the progress. However, when the third iteration was nearing its end, the developers on the team persuaded the project manager to skip the demonstration, because work at that point was very hectic to finish up the project. They skipped the demonstration, but as a result; the customer started asking questions: Had they made progress? The point is; that in order work without a specific requirements specification, customer and supplier has to trust each other, and the customer has to be able to track the progress.</li>
</ul>
<p><b>When go agile, and when to use waterfall</b><br />
Ole explained that many people like to view the options for choosing a development method as two extremes:</p>
<ul>
<li>A large, predictable, complex project where requirements can be specified up front: Waterfall</li>
<li>A smaller, dynamic (often web-) project: Agile</li>
</ul>
<p>In Ole&#8217;s experience, though, there are no projects that won&#8217;t benefit from agile methods one way or another, while there are projects that will just never work with a waterfall model, because requirements are changing all the time. He also pointed out that if your project might fail, it should fail as early as possible.</p>
<p><b>Architecture in agile development projects</b><br />
One of the big concerns of experienced developers considering going agile, is what happens to the architecture of the system being developed. Traditionally, one or more architects have laid the groundwork in designing the entire object model before the programmers where allowed to begin their part of the work. A traditional architect would consider it an embarrassment if his design has to be changed because of flaws or unforeseen things, but agile development does not allow much time for BDUF (Big Design Up Front).</p>
<p>The argument against BDUF is another acronym; YAGNI (You Ain&#8217;t Gonna Need It), which stresses the point that in trying to make a design that covers any conceivable aspect of the system, you are actually wasting a lot time designing &#8211; and often also implementing &#8211; stuff that will never be used. However, Ole explained, agile methods are in no opposed to architecture, it is just that the architect design, drawings and diagrams becomes less important, while the architects themselves becomes much more important.</p>
<p>Some agile practitioners are of the opinion that no dedicated architects are needed at all; all programmers are architects and visa versa. The purpose is that everyone &#8220;owns&#8221; the entire code base, so everyone is capable of making changes anywhere. Ole, however, does not like the idea of everyone making architecture decisions jointly &#8211; he prefers that a chief architect makes the final decisions and is responsible for keeping the design consistent and clear.</p>
<div style="text-align:center;">***</div>
<p>The above is just a fraction of all the exciting stuff I&#8217;m learning about agile development at the moment, and remember: You are not agile just because you code ad-hoc without planning your stuff in a code-and-fix way. Agile development requires both discipline and experience.</p>
<p>Anyway, I&#8217;m off to London for the next week and I&#8217;m not bringing my laptop, since I&#8217;m afraid of something happening to my precious, yet fragile Macbook Pro &#8211; so I&#8217;ll be offline for a week&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://casperfabricius.com/site/2006/10/14/agile-lessons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
