<?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>select * &#187; process</title>
	<atom:link href="http://aptoma.com/select.star/category/process/feed/" rel="self" type="application/rss+xml" />
	<link>http://aptoma.com/select.star</link>
	<description>web-development, and other issues we really, really care about</description>
	<lastBuildDate>Thu, 22 Apr 2010 19:53:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Limit Work to Capacity</title>
		<link>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/</link>
		<comments>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 19:50:18 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[Monday School]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1233</guid>
		<description><![CDATA[Hard work does not pay off. At least not if your ultimate goal is to improve at what you do. And not if what you do is quality product development.
In that case you need to build in slack for learning into the system. You want everyone to have time for sharing, improving and learning continuously, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cheese-burger.net/"><img class="alignright size-medium wp-image-1248" title="Picture 1" src="http://aptoma.com/select.star/wp-content/uploads/2010/04/Picture-1-300x179.png" alt="" width="300" height="179" /></a><a href="http://olvemaudal.wordpress.com/2010/02/12/hard-work-does-not-pay-off/">Hard work does not pay off</a>. At least not if your ultimate goal is to improve at what you do. And not if what you do is quality product development.</p>
<p>In that case you need to build in slack for learning into the system. You want everyone to have time for sharing, improving and learning continuously, and you want to be able to come home from work with energy to pursue your goals for personal skill development even further.</p>
<p>It&#8217;s great fun to be good at what you choose to spend your life doing.</p>
<p>Since the primary raw materials in software product development are skills and intellect, rapid learning is the prime goal and the capital for product development. Fail to invest in raw materials for your business, and you&#8217;ll soon run out of stock. Don&#8217;t <em>allow</em> for time to learn, rather, <em>require</em> it.</p>
<h3>Running a system at 100% yields all sorts of problems.</h3>
<p>Symptoms include</p>
<ul>
<li>You stop talking to each other. &#8220;Sorry, can&#8217;t help, have to go do this thing that is  really urgent&#8221;</li>
<li>You start building technical debt. &#8220;If I just skip to write that test (it&#8217;s really hard to write), then I can save 2 hours today to get to the next thing I have to do.&#8221;</li>
<li>Shallow bug-fixing. &#8220;Need to fix this bug real fast, in order to get the other 4 bugs done, too! No time for digging further&#8221; Root cause analysis and regression testing get skimped on.</li>
<li>Useful, although sometimes inconclusive and somewhat directionless, discussions plainly stops happening.</li>
<li>Stress activates your lizard brain, which numbs the rational being. You are in survival mode.</li>
<li>Work gets less inspiring and fun, which slows things down. Inspiration is high-octane fuel.</li>
<li>People get exhausted, and energy-level is low during, and after work hours. You need to &#8220;relax&#8221; on Facebook at work and in front of the TV at home, instead of doing inspirational learning.</li>
</ul>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2010/04/congestion.jpg"><img class="alignnone size-full wp-image-1243" title="congestion" src="http://aptoma.com/select.star/wp-content/uploads/2010/04/congestion.jpg" alt="" width="550" height="306" /></a></p>
<p style="text-align: right;"><span style="color: #808080;">(Picture from </span><a href="http://en.wikipedia.org/wiki/File:Moscow_traffic_congestion.JPG"><span style="color: #808080;">Wikimedia commons</span></a><span style="color: #808080;">)</span></p>
<p>If you have trouble grasping the concept, picture a congested highway. If you remove a small percentage of the cars, you get a magnitude of improvement in throughput and speed. <a href="http://en.wikipedia.org/wiki/Traffic_congestion">This is a fact</a>.</p>
<p>Did you ever try to squeeze a washing machine 100% full? No clothes get cleaned. Remove 10 or 20% of the clothes, and you have a winner.</p>
<h3><strong>Don&#8217;t maximize utilization.<br />
Build in time for learning, improving and sharing.</strong></h3>
<p>If you, as we have been, find yourself in this mess. There are several ways to get out of it.</p>
<ol>
<li><strong>Say no.</strong> If you never say no, you don&#8217;t have a strategy &#8212; say no to the least important stuff. Saying no is hard, scary and extremely useful.</li>
<li><strong>If you work for a consultancy firm, give up</strong>. Incentives for maximizing utilization is too high in consultancy companies, as they get paid for &#8220;productive hours&#8221; only. Quit your job, and go to work in a product development company, or a skilled in-house team. Anything but most consultancy firms, they will cannibalize you.</li>
<li><strong>Scale up capacity to meet demand</strong>. What can I say, <a href="http://aptoma.com/career">we are hiring</a>.</li>
</ol>
<h3><strong>Quantified</strong></h3>
<p>This is no science, but if I would be forced to put some numbers on this, I&#8217;d say that:</p>
<ul>
<li>Build in approximately 20% learning/sharing time during normal work hours. Yes, that&#8217;s one whole day a week. We use it for our <a href="http://aptoma.com/select.star/category/monday-school/">monday school</a>, impulsive discussions, reading, friday meeting (our arena for general discussions on processes) and blogging, to mention some activities.</li>
<li> If you want, you can probably &#8220;work&#8221; 60 hours a week or more without any danger of burning out, but <em>only as long as</em> that time is spent balanced and having fun, learning and improving/being productive &#8212; and only if personal situation allows for it without sacrificing time spent on other important values, like your kids.</li>
<li>Don&#8217;t build overtime into your standard operating procedures. Required overtime doing &#8220;productive&#8221; work should be the rare exception, not the default.</li>
</ul>
<p>Find a sustainable pace where you are balancing learning, improving, being productive and all of the time having fun. That&#8217;s an important ingredient in the recipe for success.</p>
<p>By the way, did I mention that <a href="http://aptoma.com/career">we&#8217;re hiring</a> or that <a href="http://aptoma.com/career">we&#8217;re hiring</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/04/22/limit-work-to-capacity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Scrum, No More</title>
		<link>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/</link>
		<comments>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:11:59 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[retrospect]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1158</guid>
		<description><![CDATA[After listening to Olve Maudal at the Lean  Meetup in Oslo yesterday, and after reading some of his tweets today (@olvemaudal)  I realized that we never informed our readers that we are not doing  Scrum anymore. I don&#8217;t think we have for 9 months or more. We were quite  elaborate, if [...]]]></description>
			<content:encoded><![CDATA[<p>After listening to Olve Maudal at the Lean  Meetup in Oslo yesterday, and after reading some of <a id="z1-s" title="his tweets today" href="http://twitter.com/olvemaudal/status/8899445418">his tweets today</a> (@<a id="trp5" title="olvemaudal" href="http://twitter.com/olvemaudal">olvemaudal</a>)  I realized that we never informed our readers that we are not doing  Scrum anymore. I don&#8217;t think we have for 9 months or more. We were quite  elaborate, if not evangelical, about our experiments with it <a id="f_ph" title="here on  this blog" href="http://aptoma.com/select.star/?tag=scrum">here on this blog</a>, so I figured it&#8217;s over due to let you  know.</p>
<p>It&#8217;s official: <strong>We&#8217;re not doing Scrum anymore.</strong></p>
<p>I  will take the time to elaborate on why, and I&#8217;ll reflect on what we&#8217;ve  learned from our experiences.</p>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2010/02/scrum-period-overview1.jpg"><img class="alignnone size-full wp-image-1166" title="scrum-period-overview" src="http://aptoma.com/select.star/wp-content/uploads/2010/02/scrum-period-overview1.jpg" alt="" width="550" height="205" /></a></p>
<h3>Why are we not scrumming?</h3>
<p>The  shortlist:</p>
<ol>
<li><strong>Iterations were too long</strong> &#8211; It would  sometimes feel like a waterfall in miniature. Reality for most development teams is that circumstances change constantly, and developing the capacity to adapt to these changes are more important than planning iterations carefully, which is just a form of guesswork.</li>
<li><strong>Too much  overhead</strong> &#8211; Sprint planning felt a bit forced. We had to decide what  to do for days or weeks to come, and ended up with requirements churn.  Beyond a certain point during planning, we went into congestion, and  stopped caring about the details.</li>
<li><strong>Our sprints are too diverse</strong> &#8211; Sprint goals ended up  so diverse sometimes that we ended  up more often than not with the sprint goal of &#8220;<em>Finish all tasks</em>&#8221; which  was a quite uninspiring goal. (We tried very hard to create good sprint goals)</li>
<li><strong>Demos  not often enough</strong> &#8211; We need to show off the feature we just made <em>right now</em>,  not in 14 or 30 days at the demo. That is way to late for us. Demoing should  be an integral part of each feature or improvement you make. You need to  be close to, and intimate, with real users. If we had investors or any other formal  committee of sponsors that  needed to approve everything we did, we would  see the use of such &#8220;demo roundups&#8221; at regular intervals.</li>
<li><strong>Too long release  cycles</strong> &#8211; The scrum process batches a lot of changes, improvements,  bugfixes and new features into periodical releases. We are working on <a id="j2e6" title="continuous deployment" href="../2010/01/21/notes-on-continuous-deployment/">continuous deployment</a> with a  steady stream of product improvements, which allows for more predictable releases and better fail-tolerance.</li>
<li><strong>&#8220;Scrum is just the easy parts of XP&#8221;  &#8211; </strong>It&#8217;s a quote from Kent Beck, although he does not like to be quoted on that one.  This is why most are doing Scrum in combination with XP of course. I think you in many cases are  better off with XP without Scrum, but that&#8217;s another story. We&#8217;re not  doing XP in its purest form, either. Even though  XP has much stricter coding practices, XP also has its limitations. The  <a id="l.fx" title="lean startup movement" href="http://www.startuplessonslearned.com/2008/09/lean-startup.html">lean startup movement</a> (which  Kent Beck himself seems to be quite interested in) complements the  weaker parts of XP &#8212; the customer feedback part, especially in the  initial phases of product development.</li>
</ol>
<p>You might see a  pattern here: We&#8217;re still doing most, or all, scrum practices, just more  often and in smaller chunks. This brings us closer to Lean.</p>
<h3>What  did we learn from it?</h3>
<p><strong>You should have a Product Backlog</strong>, and  it should be a very simple sortable list. The emphasis should be on  keeping it short, however. A long list of features becomes an  administrative overhead. We found ourselves sifting through much of the same  tasks from sprint planning to sprint planning. Too much got captured in  the sprint backlog. We are still using product backlogs actively.</p>
<p><strong>You  should hold sprint planning meetings.</strong> The problem with the  scrum-format of it is that it has more emphasis on creating a plan up  front (i.e. the waterfall comparison), than it has on the planning  itself. If planning is a monthly activity (or bi-weekly, or whatever  your sprint length is in scrum), you end up reading your plan more than  you spend time planning. We find that planning is at its best a  continuous, on demand, activity. Do more of it, often, but in smaller  chunks, and keep less of it lying around. I will have to agree with <a id="lk75" title="the Dwight" href="http://en.wikipedia.org/wiki/Dwight_D._Eisenhower">the Dwight</a> on this one : <em>Plans are nothing;  planning is everything.</em></p>
<p><strong>Daily scrums solves a non-existing  problem</strong> &#8211; I&#8217;m sure that it is not hard to find team that would  benefit from daily scrums. If you are such a team, chances are you are  not communicating enough. We find that by hanging out on the project  IRC-channel doing continuous micro-coordination and sharing information, and by hooking up on Skype to discuss challenges and  problems on-screen <em>as they arise</em> we have nothing left to coordinate or  discuss on the daily scrums. Everyone is in the loop on what is happening.</p>
<p><strong>Retrospects  are pure beauty.</strong> Again, the problem with scrum for us is not that it is has  bad practices (it has the best of practices, actually). The problem is  that it is performed to seldom to have the desired effect. Retrospect is  not an activity, it is a mindset, and has to permeate everything you  do, and should be done on a continuous basis. Ask these questions about  every little project, task and experiment you run. What went well? What  could be better? What will I focus on improving? It&#8217;s key to learning, and learning is essential.</p>
<h3>Under what  circumstances would we consider scrum?</h3>
<p>If we ever find ourselves in a  multi-team environment with quite large teams (5-10 per team), with  sponsors that needed formal updates and demos, we would be sure to  consider both scrums and scrum of scrums.</p>
<h3><strong>So, was all our  Scrumming just a waste of time?</strong></h3>
<p>No way. It was a learning  experience.</p>
<p>Never forget this: <strong>There is no silver bullet</strong>.  You should try different stuff, be critical and analytical in the  process, ask why to just about everything, and you will learn a lot. Shed each practice that fails to materialize into concrete value for your development process. In the end, no process formalities will save you, your  diverse experience will.</p>
<h3>What will we do differently?</h3>
<p>We will  continue to draw inspiration from Scrum, Lean, XP, Lean Startup,  Customer Development, Continuous Deployment, etc. But instead of changing ourselves to  fit the process (as was much the case with our scrum-efforts), we will look at the core of their ideas, extract their  essence and see how they could apply to our existing and intuitive way  of doing things;</p>
<p><em><strong>If being a keen student of processes and  development theory has taught us only one thing, it is that we should  trust our gut feeling, our sense of what is purposeful and what is common  sense, and that most of our current practices are worth keeping, and improving. </strong></em></p>
<p>I advise you to try to improve the quality of how  your team already, and intuitively go about doing the work. Do not change the way you work entirely in an attempt to magically  achieve quality and speed. This way you can better preserve what you already got figured out, and at the same time be improving continuously.</p>
<h3>In plain words, what are we doing now?</h3>
<p>We still do a lot of the scrum practices. We just do them more often, and in smaller chunks. You might even say continuously, to some extent. We have learned to cherish planning over plans, and a retrospective mindset over bi-weekly formal retrospects. We write less plans, we take less notes. Communication flows more freely instead of formally in batches.</p>
<p>We get more done, and with increased quality, and we also have Scrum to thank for it, but definitely not only Scrum.</p>
<p>One of our biggest ongoing project nowadays is our establishment of <a href="http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/">Continuous Deployment</a> practices, and all the discipline that goes with such a strategy. (It requires some coordination when you have servers deployed all over Europe, as we do) You will need to optimize the entire value stream to achieve this. We&#8217;ll keep you posted on how it evolves, and the benefits our customers and we reap from it.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/02/11/no-scrum-no-more/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Notes on Continuous Deployment</title>
		<link>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/</link>
		<comments>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 22:00:50 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1073</guid>
		<description><![CDATA[Scenario: A customer has a problem with your software. His questions makes you think and you get an idea for a feature improvement. A good one! Act on it.

Plan it
Code it
Test it
Commit it
Deploy it

Nothing out of the ordinary, it seems. The seemingly new thing about continuous deployment is that we remove all the waiting in [...]]]></description>
			<content:encoded><![CDATA[<p>Scenario: A customer has a problem with your software. His questions makes you think and you get an idea for a feature improvement. A good one! Act on it.</p>
<ul>
<li>Plan it</li>
<li>Code it</li>
<li>Test it</li>
<li>Commit it</li>
<li>Deploy it</li>
</ul>
<p>Nothing out of the ordinary, it seems. The seemingly new thing about continuous deployment is that we remove all the waiting in between each of these steps. That is, we don&#8217;t batch changes before to testing them. You test immediately what you just coded. You commit it. Not to a branch due for merging in a week. No, directly to trunk. And you even deploy it at once to production. Done. Clear your mind of it, enjoy, relax, spend some time doing something proactive.</p>
<p>Develop, test, commit, deploy. One feature, bug-fix or improvement at a time. That is the mantra for continuous deployment.</p>
<p>Some developers, and perhaps particularly managers, will find the idea crazy at first. Release immediately? Omigod. But frequently this sensation of safety in postponing something, is not rooted in any real benefits, and there seems to be no rational answer to the question of: why wait? Did your code ever get better during the night? Some will even argue that big feature releases is a marketing invention, invented to squeeze more money out of customers frustrated with the bugs in the current version. This practice of batching changes in releases in turn got embraced by the industry as the professional way of conducting business. I could easily add this to my list of <a href="http://aptoma.com/select.star/2010/01/03/3-major-problems-with-the-software-industry/">major problems with the software industry</a>.</p>
<p>Wouldn&#8217;t it be nice to deliver a bug-fix the same day it was reported? The same hour, even? It might just be possible if you are continuously deploying product improvements like this, kaizen-style.</p>
<h3><strong>Where does this idea come from?</strong></h3>
<p>The idea of continuous deployment comes from the lean school of thought. In the mindset of lean kanban pull systems &#8212; where you are constantly looking to remove waste and minimize your batch-sizes &#8212; grouping a lot of big software changes together in big batches and big releases makes no sense.</p>
<p>Even <a href="http://code.flickr.com/blog/2009/12/02/flipping-out/">Flickr is doing continuous deployment</a> these days.</p>
<p>The whole idea is to respond to customer &#8220;pull&#8221;. The customer needs something now. The clock starts ticking. Is the feature more useful if you wait a bit before you start coding it? No. Then start now. Is the feature better if you wait with testing after coding it? No. Then test now. Wait until tomorrow to integrate into version system? Is that better? No. Then integrate. Does thing get better if we wait to deploy that new feature? No. Then deploy it. Stop your clock. The shorter the time, the better for the customer. And better for quality, it seems. And the better for you, the coder. Unreleased code is stressful. Released, working code, is stress free. The code works. It&#8217;s proven.</p>
<blockquote><p><em>After a few iterations, our fear level was actually lower than how we used to feel after a staged release. Because we were committing less code per release, we could correlate issues to a release with certainty. (From <a href="http://www.startuplessonslearned.com/2010/01/case-study-continuous-deployment-makes.html">Case Study: Continuous deployment makes releases non-events</a>)</em></p></blockquote>
<p>Bugs that are not discoverable in testing are easier to find and fix if you released only one feature, than if you batched a months worth of changes together in one big bang release. Or so the lean school of thought states. I agree. You would have written the code hours ago, and probably say &#8216;a-ha!&#8217; the second you hear about it. 20 minutes later, a bug-fix is released. Why wait?</p>
<p><strong>A few resources on lean from Amazon:</strong></p>
<ul>
<li><a href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783">Software Development: An Agile Toolkit</a></li>
<li><a href="http://www.amazon.com/Implementing-Lean-Software-Development-Concept/dp/0321437381/ref=pd_bxgy_b_img_b">Implementing Lean Software Development: From Concept to Cash</a></li>
<li><a href="http://www.amazon.com/Lean-Thinking-Corporation-Revised-Updated/dp/0743249275/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1264106246&amp;sr=1-1">Lean Thinking: Banish Waste and Create Wealth in Your Corporation</a></li>
<li><a href="http://www.amazon.com/Toyota-Way-Jeffrey-Liker/dp/0071392319">The Toyota Way</a></li>
</ul>
<h3>What does it take?</h3>
<p>Not surprisingly, continuous deployment requires a high level of team discipline. No goofing off and no more fixing everything <em>mañana</em> in testing. Practices such as <a href="http://www.shmula.com/987/jeff-bezos-5-why-exercise-root-cause-analysis-cause-and-effect-ishikawa-lean-thinking-six-sigma">5 Why root cause analysis</a>, extensive testing and automation will be required. But it will all lead you to better quality and higher iteration speed. <a href="http://aptoma.com/select.star/2010/01/08/quality-and-speed-a-primer-in-team-design/">Speed and quality</a>, it is all related.</p>
<p>Eric Ries writes on O&#8217;Reilly Radar about &#8220;<a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html">Continuous Deployment in 5 easy steps</a>&#8220;. Eric Ries has gotten a lot of traction with his <a href="http://www.startuplessonslearned.com/2008/09/lean-startup.html">Lean Startup movement</a> lately. And you can follow his thoughts and reports on personal experience on continuous deployment on his blog <a href="http://www.startuplessonslearned.com/">http://www.startuplessonslearned.com/</a></p>
<h3>Look ahead</h3>
<p>Will we pursue this issue of continuous deployment any further? In the name of delivering a high quality experience to our customers and users now, when they still need it: <em>yes we will.</em></p>
<p>If you will join us in this, please follow <a href="http://feeds.feedburner.com/aptoma/selectstar">this blog on RSS</a> or follow <a href="http://twitter.com/aptoma">the company</a> or <a href="http://twitter.com/geirber">the author</a> on twitter. If you digg it, then <a href="http://digg.com/programming/Notes_on_Continuous_Deployment">digg it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/01/21/notes-on-continuous-deployment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Great Software : A Definition</title>
		<link>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/</link>
		<comments>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 15:00:19 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=1043</guid>
		<description><![CDATA[Defining what great software is, is not a complex endeavor. I prefer to boil it down into two distinct characteristics.
a) Ease of Use
The software solution walks you gently through the process of solving your problems as intended. No distractions, no unnecessary decisions to make, no confusions, always heading towards the goal. In short : A [...]]]></description>
			<content:encoded><![CDATA[<p>Defining what great software is, is not a complex endeavor. I prefer to boil it down into two distinct characteristics.</p>
<h3>a) Ease of Use</h3>
<p>The software solution walks you gently through the process of solving your problems as intended. No distractions, no unnecessary decisions to make, no confusions, always heading towards the goal. In short : A great user experience.</p>
<h3>b) Quality of Craft</h3>
<p>Quality of Craft means that the software solution is easy to maintain, it&#8217;s easy to modify so that it&#8217;s always accurate in solving the ever changing problems it&#8217;s going after (and by that I don&#8217;t just mean in configuration, but easy to change the code of), it&#8217;s easy to move about (i.e. from server to server), it performs great, it responds immediately when interacted with and it scales, or can be modified to scale, in order to handle the traffic it will attract.</p>
<p><img class="alignnone size-full wp-image-1056" title="aalesund" src="http://aptoma.com/select.star/wp-content/uploads/2010/01/aalesund.jpg" alt="" width="560" height="143" /></p>
<p style="text-align: right;">Photo by <a href="http://www.flickr.com/photos/toffiloff/4257711728/">toffiloff</a></p>
<p>Isn&#8217;t that an intuitive definition?<br />
The definition is common sense in software product development.<br />
Perhaps a &#8220;<em>Software Product 101</em>&#8221; should start out with such a definition.</p>
<p>Thus, we should assume that everyone get&#8217;s this nailed down from the start, or through a little experience, no?</p>
<p>I&#8217;m sorry to report that surprisingly few players in the industry is able to see this.<br />
And even fewer is able to execute it.<br />
<em></em></p>
<p><strong><em>It&#8217;s always either or, never both. The tendency is quite prominent.</em></strong></p>
<p>It seems as start-ups create great solution accuracy and a good user experience using customer oriented development<em> </em>methods<em>,</em> and in general a lean start-up methodology. Growth, however, turns them in the direction of stability and the need for predictability. Sadly this usually leads to a loss of the qualities in a) in favor of a few of the more stabilizing qualities in b).</p>
<p>As much as I agree that as a start-up turns into an enterprise, the need for operations stability and predictable performance increase. I do not, however, believe that this is achieved best by sacrificing the ability to adapt and to keep the software usable and accurate.</p>
<p>I believe that while sacrificing qualities in a) might seem to be the <em>easiest path</em>, it is not the <em>only path, </em>not to mention that it in no way is the <em>right path.</em></p>
<p>I am part of a small, growing, start-up company, and we&#8217;re focusing our resources at keeping on the right path, maintaining the agility of a start-up, and the stability and predictability of an enterprise. It is possible &#8212; this path exists.</p>
<p>It&#8217;s hard to find. But we&#8217;ll find it, or die trying.</p>
<p><strong>Related posts</strong></p>
<ul>
<li>A <a href="../2008/09/16/dont-expect-our-buildings-to-work-they-are-pieces-of-art/">post about buildings</a> (and software quality).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2010/01/16/great-software-a-definition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Pair Programming?</title>
		<link>http://aptoma.com/select.star/2009/05/27/why-pair-programming/</link>
		<comments>http://aptoma.com/select.star/2009/05/27/why-pair-programming/#comments</comments>
		<pubDate>Wed, 27 May 2009 04:00:10 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=742</guid>
		<description><![CDATA[I am a sucker for rationale. I&#8217;ve been struggling with rationale on the Extreme Programming (XP)-practice of pair programming for quite some time. What at first looks like one person writing code, and the other one watching, has admittedly been very counter intuitive to me. Let me share my current thoughts of benefits and disadvantages [...]]]></description>
			<content:encoded><![CDATA[<p>I am a sucker for rationale. I&#8217;ve been struggling with rationale on the Extreme Programming (XP)-practice of pair programming for quite some time. What at first looks like one person writing code, and the other one watching, has admittedly been very counter intuitive to me. Let me share my current thoughts of benefits and disadvantages of so called pairing.</p>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/pair-of-feet.jpg"><img class="alignnone size-full wp-image-743" style="border:0" title="pair-of-feet" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/pair-of-feet.jpg" alt="pair-of-feet" width="560" height="318" /></a></p>
<h3>Disadvantages of Pair Programming</h3>
<p><strong>Don&#8217;t four hands produce more code than two?<br />
</strong></p>
<p>If you are a carpenter, you can hit more nails with four hands than with two. If you are a brick-layer you can lay more bricks with four hands than with two. If you are a developer you can write more production code with four hands than with two. Or wait. This is based on the assumption that the bottleneck in software development is a mechanical one ; the speed of which you can type on the keyboard. My 10 years as a developer and 5 years as a program manager tells me otherwise. The bottlenecks in somewhat innovative projects (non-repetitive) rarely or never include typing speed. Bottlenecks <em>do </em>include hesitation (doubting your own solution), introducing bugs and having to go back to fix it, suboptimal design that deserves a refactoring, lack of needed knowledge for the task, loss of focus and so on.</p>
<p>A small disclaimer before I go on : We have not been experimenting with Pair Programming for more than a few months, and my above observations are based on observing teams develop from a managerial point of view and from reflecting upon my own coding habits as a team member.</p>
<h3>Benefits of Pair Programming</h3>
<p><strong>Amplify learning</strong></p>
<p>The speed of learning in pair programming is overwhelming. Once you enter a topic one party has more experience in, you are in for a ride. I have never experienced learning at such a pace as when this occurs.</p>
<p><strong>Prevent bugs</strong></p>
<p>Bugs are cheapest when they are prevented  from being introduced with measures that does not put restraints on your risk-taking and innovation. Pairing keeps you innovating, and will still help you spot errors more frequently. You will be more critical of your own code, and you will have someone constantly looking for possible improvements in your code, such as stopping a bug in the making, or having an idea for an even better test.</p>
<p><strong>Continuous improvement</strong></p>
<p>Pair programming is a dialogue between two people trying to simultaneously program, and understand how to program better.</p>
<p><strong>Articulating ideas</strong></p>
<p>Pair programming forces you to put words to your thoughts. This will through constant practice improve your skills in articulating your ideas.</p>
<p><strong>Share frustrations</strong></p>
<p>The responsibility on one single programmer can be huge at times. It is relieving to carry the load together. A teams strength and robustness is greater than the sum of strengths.</p>
<p><strong>Avoid hesitation</strong></p>
<p>When exhausted for ideas or new angles, it can lead to hesitation to implement what you suspect is a sub-optimal solution. The union of ideas and angles between the two developers makes this a rarer incident, and the resulting discussions will usually help remove the knots causing hesitation.</p>
<p><strong>Distributed resources<br />
</strong></p>
<p>From a managers point of view, a migration of people between project modules, and even between projects, becomes vastly easier. This is a dream come true. Nobody is the sole &#8220;owner&#8221; of code anymore, and developers can move more freely between code sections and projects, simplifying the complex task of resource scheduling. Starting out on unfamiliar code means that you should be pair programming with someone with a lot of domain knowledge in the start.</p>
<h3>How to do pair programming</h3>
<p>Pair programming is two people using one keyboard to write code. Here are some important best-practices to go along with that description.</p>
<ol>
<li>Choose a suitable partner for pair programming the given task during <a href="http://aptoma.com/select.star/2008/08/15/the-sprint-part-22-the-daily-scrum/">the daily scrum.</a></li>
<li>Sit side by side with only one keyboard and one mouse. Both should have a good view of the monitor.</li>
<li>It must be easy to slide the keyboard from person to person. Switch roles from typer to observer every so often.</li>
<li>Discuss and have a good time.</li>
</ol>
<p>So, these are my reflections on the subject so far. <a href="http://feeds.feedburner.com/aptoma/selectstar">I will be sure to update you (RSS)</a> on any changes of opiniton as we continue to improve our development practices.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/27/why-pair-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your Rights as a Customer</title>
		<link>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/</link>
		<comments>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/#comments</comments>
		<pubDate>Wed, 20 May 2009 04:00:23 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[customer]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=727</guid>
		<description><![CDATA[
The Software Management Manifesto *)
You have the right to an overall plan. The team should tell you what they could accomplish in the next year or two, and tell you how much that would cost.
You have the right to see progress. From the very beginning of the project, the team should be producing functionality that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/good-news.jpg"><img class="alignnone size-full wp-image-732" style="border:0" title="good-news" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/good-news.jpg" alt="good-news" width="560" height="159" /></a></p>
<h3>The Software Management Manifesto *)</h3>
<p><strong>You have the right to an overall plan</strong>. The team should tell you what they could accomplish in the next year or two, and tell you how much that would cost.</p>
<p><strong>You have the right to see progress</strong>. From the very beginning of the project, the team should be producing functionality that you care about. The functionality should be in the form of a running system, proven to work by passing repeatable tests that you specify.</p>
<p><strong>You have the right to change your mind</strong>. As software development proceeds, you should be able to substitute new functionality for old. You should be able to change the relative priorities of the features of the system, dictating what should be done first and what should be done later.</p>
<p><strong>You have the right to be informed of schedule changes</strong>. Since some things will turn out to be easier than expected and some things harder, the schedule is going to change. You have the right be informed of such changes as soon as the programmers know about them. You have the right to exercise your business judgment by choosing among options for reducing scope so as to restore the original date. You have the right to cancel further development at any time and be left with a useful, working system that reflects your investment up to that date.</p>
<p><strong>*) From <a href="http://c2.com/cgi/wiki?SoftwareManagementManifesto">Software Management Manifesto</a></strong></p>
<p>Does your process ensure your customers these rights?</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/20/your-rights-as-a-customer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 Usual Suspects &#8212; What could be improved?</title>
		<link>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/</link>
		<comments>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/#comments</comments>
		<pubDate>Wed, 13 May 2009 04:00:59 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[continuous improvement]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[retrospect]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=704</guid>
		<description><![CDATA[
One of the more useful activities of Scrum involves a bit of self-reflection &#8212; namely the retrospect. Admit that what you did yesterday could be done better today, and you are on the way to continuous improvement &#8212; a goal in and of itself.
Scrum tells you to ask &#8220;What could be improved for the next [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/05/a-dude.jpg"><img class="alignnone size-full wp-image-718" style="border:0" title="a-dude" src="http://aptoma.com/select.star/wp-content/uploads/2009/05/a-dude.jpg" alt="a-dude" width="560" height="231" /></a></p>
<p>One of the more useful activities of Scrum involves a bit of self-reflection &#8212; namely the retrospect. Admit that what you did yesterday could be done better today, and you are on the way to continuous improvement &#8212; a goal in and of itself.</p>
<p>Scrum tells you to ask &#8220;<em>What could be improved for the next sprint</em>?&#8221; at each retrospect. It is usually hard to think of good answers to this question. In this post I make an effort to compile a list of the most usual suspects, and I also suggest some remedies we have seen to work.</p>
<h3>If you are anything like us, your usual suspects would be:</h3>
<p>Presented in no particular order, these are suggestions for improvement that we have discovered.</p>
<h4>1. Complex and / or undocumented code</h4>
<p>Did you stumble upon any code that were hard to understand and even the comments did not help you out? If you did, you know how time consuming and frustrating this is fixing such code. It is a giant waste of time &#8212; and you have to spend a lot of time understanding the whole picture in order to refactor it to simpler, documented code. <em><strong>Andidote</strong> : Refactor mercilessly. Stop writing legacy code.</em></p>
<h4>2. Untested code</h4>
<p>Did you ever struggle to track down a bug in code, only to find that it could have easily have been pinpointed in milliseconds if a test had existed? Did you ever fear improving a piece of code because you did not trust the tests to cover enough to tell you if you broke anything? This and similar kinds of project mistrust is a real killer for productivity. <em><strong>Antidote</strong> : Stop writing legacy code. If you have to use legacy code, write tests for the code you are about to use, first.<br />
</em></p>
<h4>3. 90% done</h4>
<p>Did you ever start coding on some functionality, only to find that it depends on something that is <em>almost</em> finished, but not quite? Obviously you&#8217;ll have to finish the 90% done item. And it takes a lot of time, you have to dig into it (losing the context of the current functionality you are working on) in order to complete it properly. <strong><em>Antidote</em></strong><em> : Schedule work one user-story at a time</em><em>,  and bring all code to 100% completion &#8212; i.e make it pass all unit-tests and acceptance tests (customer tests) &#8212; before proceeding to the next feature.<br />
</em></p>
<h4>4. &#8220;Iterating quality in&#8221;</h4>
<p>Thinking of iterations in form of &#8220;write incomplete code now&#8221; and the next iteration (whenever that is) &#8220;I&#8217;ll make it right(er)&#8221;, will bring you into all sorts of trouble. This kind of mentality leads to both 1, 2 and 3 above. <strong><em>Antidote</em></strong><em> : Add more discipline to your iterations. All iterations should end in all commited code being 100% done. Iterations are lovely and necessary, and you will improve existing code during each of them, but you should do your best the first time, as well.</em></p>
<h4>5. You tested what?!</h4>
<p>Did you just receive feedback on stuff you did a month / two months / three months ago? Delaying acceptance-testing (customer testing) until a developer has forgotten all about the code is very waterfallish. <strong><em>Antidote</em></strong><em> : Keep cycle time from checked in code until testing, deploying and feedback as low as possible (hours or days, not weeks or months).</em></p>
<h4>6. Setting architectural goals, instead of functional goals</h4>
<p>Setting out to &#8220;<em>Create world-saving fancy-schmancy plug-in-environment</em>&#8221; instead of &#8220;<em>Allow programmer to paste text-data through a plugin-api</em>&#8221; (much smaller and better defined) will usually lead us into creating a lot of code that will not be used any time soon. Also, it is much harder to measure &#8220;done&#8221; in &#8220;Create fancy plugin-environment&#8221; and the goal in itself is likely to bee too big for one sprint. It leads us into the &#8220;90% done&#8221;-problem. <strong><em>Antidote</em></strong><em> : Deliver value continuously and in increments by splitting the problem into smaller user stories, each with a value for the customer. The user stories will be much smaller, allowing feedback and quality into the process.</em></p>
<h4>7. Big-bang integrations</h4>
<p>Branching for a while is not a problem when you keep your branch synchronized to trunk all the time. Merging to trunk becomes a breeze. The problem is created for the other guy(s) that have another active branch (god forbid). When you merge to trunk, they are (when synchronizing) smacked in the face with your last week of changes. <strong><em>Antidote</em></strong><em> : Branch only when you must in order to keep commiting daily changesets which would otherwise make the trunk unstable. Merge to trunk as soon as you have a state of passing all tests. Aim for worst-case scenarios of day(s) between merging to trunk, not weeks.<br />
</em></p>
<h4>8. The future is strangling the present</h4>
<p>If you are spending a lot of time in requirements (user-stories) the future is killing the present. You are probably going into details too early.  <strong><em>Antidote</em></strong><em> : Add <a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">just-in-time discipline</a> to your process.</em></p>
<p><strong>9. New functionality, but no users<br />
</strong></p>
<p>Have you ever launched a new functionality that no-one were delighted to have immediately? This is a waste of time, and best-case scenario someone will start using it in 3 months and lead you into what resembles #5 above. <strong><em>Antidote</em></strong><em> : Your planning process is broken, <a href="http://aptoma.com/select.star/2009/05/05/whos-next-how-to-prioritize-your-product-backlog/">involve real users in planning</a>, make sure you are not planning to far ahead.</em></p>
<p>The &#8220;<a href="http://www.projectsmart.co.uk/docs/chaos-report.pdf">Standish Group Report &#8211; Chaos</a>&#8221; (1995) points out a key difference between bridge building projects and software development projects (a difference besides the 3000 years of experience in building bridges). The key difference is that when a bridge falls down, it is investigated and a report is written on the cause of the failure. This is not so in the computer industry, where failures are covered up, ignored, and/or rationalized. As a result, we keep making the same mistakes over and over again.</p>
<p>Consequently, do not judge anyone by their mistakes, but by their ability to recover and learn from them. Ultimately this will determine your success.</p>
<p>Seeking to continuously improve materializes in admitting that the last time you did it, you did not do it as well as you could be doing it today. Finding out why, is the key. Today you can be better than yesterday, tomorrow you can be better than today, and so on. This is true if you are willing to take a honest and sincere look at your mistakes.</p>
<p>What could you have been doing better in your previous projects?<br />
Do you recognize any of our usual suspects?</p>
<p><a href="http://feeds.feedburner.com/aptoma/selectstar">Stay tuned with RSS</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/13/9-usual-suspects-what-could-be-improved/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Who&#8217;s Next?  &#8212; How to Prioritize Your Product Backlog</title>
		<link>http://aptoma.com/select.star/2009/05/05/whos-next-how-to-prioritize-your-product-backlog/</link>
		<comments>http://aptoma.com/select.star/2009/05/05/whos-next-how-to-prioritize-your-product-backlog/#comments</comments>
		<pubDate>Tue, 05 May 2009 20:00:10 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=655</guid>
		<description><![CDATA[
If we are to do just-in-time user stories, we better know what is next, so we are not wasting any time on detailing stories way ahead. In this post we will look into how we will know what is next in line.
If you have only one, or just a few, users, you can certainly gather [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/04/istock_000007836340small1.jpg"><img class="alignnone size-full wp-image-665" style="border:0" title="Business people standing in a row against white background" src="http://aptoma.com/select.star/wp-content/uploads/2009/04/istock_000007836340small1.jpg" alt="Business people standing in a row against white background" width="560" height="362" /></a></p>
<p>If we are to do <a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">just-in-time user stories</a>, we better know what is next, so we are not wasting any time on detailing stories way ahead. In this post we will look into how we will know what is next in line.</p>
<p>If you have only one, or just a few, users, you can certainly gather them all in a room and ask them to arrange the product backlog in the order that would suit them best, considering each story&#8217;s estimate. A lot of products, however, have a lot of users, and we might want to listen to more of them than we can easily coordinate in a single room.</p>
<h3>Outline of Procedure</h3>
<ol>
<li>Prepare by writing coarse user-stories.</li>
<li>Survey users about how much they would like a feature, <em>and</em> how much they would have missed it if it were not there.</li>
<li>Do a simple cost vs. benefit analysis based on the answers.</li>
</ol>
<h3>1. Prepare</h3>
<p>Write coarse user stories. Refer to <a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">my last post on the subject</a>. Ensure that all items in the product backlog are coarsely defined user stories, or groups (themes) of similar user stories. Do not go into details, as this will only complicate the process of prioritizing them, and thus hurt our overall goal of planning project properly. Add estimates on a best guess basis. We usually use the Fibonacci sequence from 1 through 21 on ideal developer days.</p>
<p>Mandatory user stories (that is, user stories the product cannot do without) are put on top. Do not waste time scientifically managing mandatory stuff.</p>
<h3>2. Survey Users</h3>
<p>If you want a cookbook approach to prioritizing, view <a href="http://www.infoq.com/presentations/prioritizing-your-product-backlog-mike-cohn">this presentation by Mike Cohn</a>. I will only present the main principles right here.</p>
<p>Do a user survey. Ask open questions &#8212; and ask them both ways.<br />
On a scale of 0-9 &#8230;</p>
<ul>
<li> .. how much would you like to have this feature?</li>
<li>.. how much would you miss this feature, if it were not in such an application?</li>
</ul>
<p>Asking the question both ways will teach us more about the real impact of the user story. If a user is 5 on both, it will have a larger impact to leave it out, than a story with 7 on how much the user would like to have the feature, and 0 (zero) on the how much a user would miss the feature. In relative terms the difference is bigger. Use this information to prioritize between stories.</p>
<h3>3. Use Estimates and Surveys to Prioritize (Cost / Benefit analysis)</h3>
<p>Finally, this benefit analysis is used together with <a href="http://aptoma.com/select.star/2008/10/10/estimation-using-planning-poker/">the estimates</a> (i.e. costs) on each user story to do final priority between each user story, or user story &#8220;themes&#8221;. Feel free to &#8220;go mathematical&#8221; on the final approaches. I suggest using &#8220;Relative Weighting&#8221; as explained by Mike Cohn in <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.scrumalliance.org%2Fresource_download%2F338&amp;ei=7YLzSY_TOouR_Qb9-7XmCQ&amp;rct=j&amp;q=product+backlog+relative+weighting&amp;usg=AFQjCNGnwZ0cu0GdEsHxMmT6-zXd0ZWK3Q">slide 25 (page 15) at this pdf</a>.</p>
<h3>When To Do This?</h3>
<p><em>Grooming the Product Backlog</em> should be an ongoing activity. The clue is to carefully introduce new items into the Product Backlog, and make sure you are not just throwing ideas in there as a mental dumping ground. Ensuring such grooming, and holding mid-sprint surveys and user discussion panels, are some of the measures we are attempting at Aptoma these days.</p>
<h3>Importance</h3>
<p>This is important in order to</p>
<ol>
<li><strong>Always work on the most important stories</strong>, thus delivering as much business value as possible to the stakeholders in each iteration.</li>
<li><strong>Facilitate &#8220;<a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">Just-in-Time User Stories</a>&#8220;.</strong> By breaking up and adding details to the stories on top of the product backlog, we are now only discussing details where necessary &#8212; just-in-time.</li>
</ol>
<p>Get going.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/05/05/whos-next-how-to-prioritize-your-product-backlog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scrum, XP, Lean &#8230; Who Are All These People?</title>
		<link>http://aptoma.com/select.star/2009/04/29/scrum-xp-lean-who-are-all-these-people/</link>
		<comments>http://aptoma.com/select.star/2009/04/29/scrum-xp-lean-who-are-all-these-people/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 05:00:55 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=673</guid>
		<description><![CDATA[The Agile movement *) has a lot of buzzwords. Keeping track of them, and knowing what is what is not always that simple.

Questions you might ponder may include

What is the difference between Scrum and XP?
Why are some using Scrum and some XP, and why are some using both?
What does XP have that Scrum is missing?
And, [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.agilemanifesto.org/">Agile movement</a> *) has a lot of buzzwords. Keeping track of them, and knowing what is what is not always that simple.</p>
<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/04/scrum-crop.jpg"><img class="alignnone size-full wp-image-691" style="border:0" title="scrum-crop" src="http://aptoma.com/select.star/wp-content/uploads/2009/04/scrum-crop.jpg" alt="scrum-crop" width="560" height="225" /></a></p>
<p><strong>Questions you might ponder may include</strong></p>
<ul>
<li>What is the difference between Scrum and XP?</li>
<li>Why are some using Scrum and some XP, and why are some using both?</li>
<li>What does XP have that Scrum is missing?</li>
<li>And, to add to the confusion, what is Lean?</li>
<li>Is Lean agile? Are all agile? What the hey?</li>
</ul>
<h3>Shortest possible explanation</h3>
<p>They are all agile, and cover most of the same principles.</p>
<h3>A little longer explanation</h3>
<p>Scrum is more managerially focused, XP has more technical practices incorporated into it. You need the technical practices to make Scrum work properly, and thus many tend to use both even though they overlap significantly.</p>
<p>Lean seems to be the &#8220;next thing&#8221;, and it is probably because the Poppendiecks has been more wholistic in their approach to agile than has Scrum or XP. In my opinion their principles and practices covers better all the aspects of true agile software development.</p>
<h3>What do we do at Aptoma?</h3>
<p>We call it Scrum even though we cover the technical practices of XP as well. However, we will never admit to doing Extreme Programming due to its silly, silly name. (&#8220;Extreme&#8221; wouuu). There is absolutely nothing extreme or remarkable about agile. It&#8217;s just down to earth Common Sense Results Focused Tight Development)  I&#8217;ll rather admit to being a Scrum based or Lean software development organization any day.</p>
<p>Lean = The XP + Scrum combination, better explained and without the silly naming.</p>
<h3>Even more information</h3>
<p>I&#8217;m not going to go more into it, but you can <a href="http://martinfowler.com/bliki/FlaccidScrum.html">read more at Martin Fowler&#8217;s blog</a> (one of the agile manifesto signatories). His post on Scrum made me realize that more people should be introduced to the relation between the agile processes, and thus I wrote this post.</p>
<p>Don&#8217;t get hung up on whether you want to use Scrum, XP or Lean, but be sure to develop both good managerial and technical practices based on Agile principles. We been studying all these processes, and we seem to have implemented something, and learned a lot from all of them &#8212; none of which seems to conflict with each other.</p>
<h3>Some links</h3>
<ul>
<li>*) <a href="http://www.agilemanifesto.org/">Agile manifesto</a> &#8211; Agile is a set of software development methodologies (such as XP and Scrum) that put emphasis on having a process with frequent inspection and adaptation in a process where change late in the development process is cheap and expected. This is in opposition to the &#8220;old&#8221; way of doing (or naïvely believing you could do) deterministic scope and planning in details up front.</li>
<li><a href="http://www.poppendieck.com/">Lean Software Development</a> &#8212; the process with <a href="http://www.recumbents.com/wisil/porter/images2004/porterRWD1.jpg">recumbent bikes</a> on the book-covers</li>
<li><a href="http://www.extremeprogramming.org/">Extreme Programming</a> &#8212; the meaningful process with the silly name.</li>
<li>Scrum &#8211; <a href="http://aptoma.com/select.star/2008/09/12/scrum-basics-now-with-goobledygook-an-image-and-references/">our own introduction</a> (bliki format) and <a href="http://www.mountaingoatsoftware.com/scrum">Mike Cohn&#8217;s mountaingoat</a> resources.</li>
</ul>
<p>Good luck.</p>
<p><strong>PS. </strong>Next week we&#8217;ll talk about prioritizing your product backlog, which is a follow up from the <a href="http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/">recent post on user stories</a>. <a href="http://feeds.feedburner.com/aptoma/selectstar">Hang on to the RSS</a> to be notified upon its release.</p>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/04/29/scrum-xp-lean-who-are-all-these-people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Just-in-Time User Stories (in the Product Backlog)</title>
		<link>http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/</link>
		<comments>http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 09:03:36 +0000</pubDate>
		<dc:creator>Geir Berset</dc:creator>
				<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://aptoma.com/select.star/?p=607</guid>
		<description><![CDATA[
In our summary post of Scrum, we refer to the Product Backlog as &#8220;a list of functional and non-functional requirements sorted by importance&#8220;. This post aims to improve and add to this definition. We have decided to go with user stories in the Product Backlog.
A user story is a short description of a functionality which [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aptoma.com/select.star/wp-content/uploads/2009/04/man-on-watch.jpg"><img class="alignnone size-full wp-image-634" style="border:0" title="Appointment Time" src="http://aptoma.com/select.star/wp-content/uploads/2009/04/man-on-watch.jpg" alt="Appointment Time" width="560" height="289" /></a></p>
<p>In our <a href="http://aptoma.com/select.star/2008/09/12/scrum-basics-now-with-goobledygook-an-image-and-references/">summary post of Scrum</a>, we refer to the Product Backlog as &#8220;<em>a list of functional and non-functional requirements sorted by importance</em>&#8220;. This post aims to improve and add to this definition. We have decided to go with <em>user stories </em>in the Product Backlog.</p>
<p>A user story is a short description of a functionality which is of value to the user or the customer (Product Owner).</p>
<h3>Summary</h3>
<ol>
<li>Start out with a product backlog with coarse descriptions. Think of stories in it as short topics for discussion with the customer. (I.e &#8220;A user can launch a rocket with one click of the mouse&#8221;).</li>
<li>As the story advances in priority, it might be broken into even smaller stories &#8211; thus in effect increasing granularity.</li>
<li>As a story is up for implementation, it is discussed in detail with the customer. The customer is helped with writing acceptance tests to clarify all details and to obtain a definition of &#8220;done&#8221; to the story.</li>
<li>Keep the customer available for further details during the sprint planning and the sprint.</li>
</ol>
<p>This is how to best work with user-stories, adding details just as they are needed &#8212; relying heavily on face-to-face discussions. Some more details follow.</p>
<h3>Coarse User Stories as Discussion Topics</h3>
<p>Start out by writing super short user stories in the Product Backlog. They might even be too big for any realistic release planning purposes at this stage, but provides a very good overview of the system. Let us imagine that we are planning the project &#8220;RMS&#8221;, or &#8220;Rocket Management System&#8221;. Let us start out planning the project together with the customer with coarsely defined stories like this one</p>
<blockquote><p>- A user can launch a rocket with one click</p></blockquote>
<p>Seeing a coarsely defined story like this, you probably know how tempting it is to start talking about how this could be achieved through hooking up the button with an XML-push to the rocket-launching system and stuff like that. Don&#8217;t think of these things right now. Let us put in a few more stories.</p>
<blockquote><p>- A user can launch a rocket with one click</p>
<p>- A user can abort a rocket launch.</p>
<p>- An administrator can issue a &#8216;rocket list of the day&#8217;.</p>
<p>- An administrator can plan a series of automated strategic missile-attacks up front for the weekend when he is out fishing.</p>
<p>(And for good measure, being a rocket system and all, let&#8217;s add the following: )</p>
<p>- A user must log in to the system.</p>
<p>- A user must re-verify when launching a rocket.</p></blockquote>
<h3>Break a story into smaller stories</h3>
<p>It is normal for a story that has reached high priority in the product backlog to be broken into more stories as focus on its details increase. By smaller we refer to <a href="http://aptoma.com/select.star/2008/10/10/estimation-using-planning-poker/">how big their estimates</a> will be. This in effect adds to the level of detail. The story &#8220;A user can launch a rocket with one click&#8221; might be broken into the following stories as we start thinking more detailed on it.</p>
<blockquote><p>- A user can select a rocket impact destination.</p>
<p>- A user can launch a rocket with one click</p>
<p>- A user can change rocket impact destination mid-flight.</p>
<p>- A user can detonate a rocket mid-flight.</p>
<p>- A user can set the rocket on pause.</p>
<p>&#8230;</p></blockquote>
<p>This means that the stories that are closer to implementation will normally be smaller than the ones that are further into the future. This is just as it should be. Using this technique we have a coarsely defined Product Backlog, which serves as a good a specification as the most beautifully crafted requirements document that you can imagine. Why is this so?</p>
<h3>Face-to-face</h3>
<p>By deferring details on each story until the last responsible moment, keeping them on the level of topics for discussion, we are forcing developers and customers together for face-to-face discussions. Certainly no developer would be so foolish as to start developing a &#8220;Rocket Management System&#8221; with the current level of detail we have in our Product Backlog.</p>
<p>Bringing them together we are all set up for transferring tacit knowledge about requirements and system expectations in moderate sized portions; we will only discuss the stories which are due for implementation. Tacit knowledge, as we know, does not transfer through requirements documents.</p>
<p>The importance of face-to-face discussions cannot be stressed enough.It is all too tempting to think that a fat requirements document is the safe and professional path, but a good old sit-down with face-to-face discussions are transferring information that a requirements document could never dream of conveying.</p>
<p>Developers use details from this session to create any documentation they need for remembering the details. Details are very welcome at this stage, as we are just about to make use of them.</p>
<h3>Acceptance tests (customer tests)</h3>
<p>It is important that details in the requirements are testable. This way we know when the implementation of a story is done. At this stage we write acceptance tests together with the customer. The top priority story  &#8220;A user can launch a rocket with one click&#8221;, needs the following tests, according to the customer:</p>
<blockquote><p>- A user can launch a rocket with one click</p>
<ol>
<li>Test that not one in 10 new inexperienced users mistakenly launch the wrong rocket or launch the right rocket at the wrong destination.</li>
<li>Test that the rocket is fired within 10 seconds of clicking the button.</li>
<li>Test that even after clicking &#8220;launch&#8221; but before the rocket has launched, the user can hook off other options (such as &#8220;Land softly&#8221; or &#8220;Go twice as fast as usual&#8221;).</li>
<li>Test that on nuclear scale rockets, a confirm dialogue must appear. &#8220;Really destroy all humans?&#8221;.</li>
</ol>
</blockquote>
<p>Writing these acceptance tests together with the customer allows developer to ask questions that might strengthen tests, and remove ambiguity in test-formulations.</p>
<h3>Root out assumptions</h3>
<p>Having discussed the story details with the customer, the development team goes off on sprint planning to lay out how to proceed with this information. Using the story text, the added details and acceptance tests, the team can define how to get <em>to done</em>. The customer should be available to answer questions that <em>will </em>arise during development, thus rooting out the need for the developer team to make any unnecessary assumptions during the implementation.</p>
<h3>Summary, once more, even shorter</h3>
<ol>
<li>Start with coarse stories.</li>
<li>Break into smaller stories as we get closer to implementing them.</li>
<li>Discuss all thinkable details with customer upon committing to implementing a story. Add acceptance tests.</li>
<li>Focus on the communication! Keep up the talk with the customer during the implementation.</li>
</ol>
<h3>Notes</h3>
<ol>
<li><strong>Recommended reading</strong> : <a href="http://www.amazon.com/User-Stories-Applied-Development-Addison-Wesley/dp/0321205685/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1240346715&amp;sr=8-1">User Stories Applied: For Agile Software Development (Addison-Wesley Signature Series)</a> <span class="ptBrand">by Mike Cohn</span><span class="binding"> (<span class="format">Paperback</span> &#8211; Mar 11, 2004)</span></li>
<li><span class="binding"><strong>1h:14m long talk held at Agile2008 by Mike Cohn about <a href="http://www.infoq.com/presentations/prioritizing-your-product-backlog-mike-cohn"><em>Prioritizing the Product Backlog</em></a></strong>, a talk in which he very much enters the subject of user stories. He introduces and elaborates on how user stories can be packeted into &#8220;themes&#8221; and how future stories start out as big &#8220;epics&#8221; as he calls them.<br />
</span></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://aptoma.com/select.star/2009/04/23/just-in-time-user-stories-in-the-product-backlog/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
