<?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>Liz Keogh&#039;s blog &#187; feature injection</title>
	<atom:link href="http://lizkeogh.com/tag/feature-injection/feed/" rel="self" type="application/rss+xml" />
	<link>http://lizkeogh.com</link>
	<description>Software, Training, Coaching, Writing</description>
	<lastBuildDate>Thu, 17 May 2012 18:05:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Feature Injection and handling technical stories</title>
		<link>http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/</link>
		<comments>http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 15:12:58 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[stories]]></category>
		<category><![CDATA[feature injection]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=380</guid>
		<description><![CDATA[Technical stories don&#8217;t make sense
As I learn more about stories and how they get written, I occasionally come across odd things that don&#8217;t make sense.
One of these is the technical story. Here&#8217;s an example:
As a developer,
I want an automated build
So that I can be sure my code works.
Of course, we&#8217;re resistant to letting developers have [...]]]></description>
			<content:encoded><![CDATA[<h2>Technical stories don&#8217;t make sense</h2>
<p>As I learn more about stories and how they get written, I occasionally come across odd things that don&#8217;t make sense.</p>
<p>One of these is the technical story. Here&#8217;s an example:</p>
<p><code>As a developer,<br />
I want an automated build<br />
So that I can be sure my code works.</code></p>
<p>Of course, we&#8217;re resistant to letting developers have their own stories. So sometimes, instead, the technical story becomes:</p>
<p><code>As a business user,<br />
I want developers to have an automated build<br />
So that they can be sure their code works.</code></p>
<p>This doesn&#8217;t make sense to me either. Surely &#8220;working code&#8221; is part of another story, for any part of that story? Of course, the QAs are busy checking that code works! So why do we even need a build?</p>
<p>If there&#8217;s no benefit to the business, the chances are that a technical story isn&#8217;t really appropriate.</p>
<p><code>As a business user<br />
I want the developers to refactor the UglyClass<br />
So that... um...</code></p>
<p>Maybe not. In this situation, refactoring of UglyClass should happen when it enables some other piece of functionality to be delivered.</p>
<h2>Feature injection helps us talk about the business benefit</h2>
<p>There are some technical stories, though, which really do deliver something the business care about. You can find this out by asking, &#8220;Who cares if I don&#8217;t do this? Who cares if I don&#8217;t have an automated build? If I don&#8217;t write unit tests? If I don&#8217;t write acceptance tests?&#8221;</p>
<p>This is where the feature injection comes in. I&#8217;m flexing <a href="http://abc.truemesh.com/">Chris Matts&#8217;s</a> template a bit to do this; here&#8217;s how mine reads:</p>
<p><code>In order to &lt;deliver some business benefit&gt;<br />
&lt;these people&gt;<br />
will need &lt;these features&gt;.</code></p>
<p>Now we can start working out why it is that we write the automated build.</p>
<p><code>In order to minimize support costs due to poor code quality<br />
The development team will need<br />
To write scenarios and automate them.</code></p>
<p><code>In order to stop wasting money coding things that don't work in production<br />
The development team will need<br />
Automatic integration with a production-like environment.</code></p>
<p><code>In order to minimize the risk of our production environment falling over<br />
The development team will need<br />
Automated performance testing.</code></p>
<h2>Users aren&#8217;t stakeholders</h2>
<p>Interestingly, the people who care most about these things aren&#8217;t always the development team! The maintenance team care about support costs. The business stakeholders care about wasting money on code that doesn&#8217;t work. They also care about the production environment falling over.</p>
<p>We sometimes see this in normal stories too: that the user isn&#8217;t always the person who cares about the story.</p>
<p><code>As a user<br />
I want to fill in a captcha box<br />
so that... what? No! What a waste of my time!</code></p>
<p>Using &#8220;In order to&#8230;&#8221; we can turn this around:</p>
<p><code>In order to stop bots from spamming the site<br />
Users will need<br />
to fill in a captcha box.</code></p>
<p>Now it might be obvious that the beneficiary of this story is the person who has to moderate the site, or the commercial team whose adverts would become worthless in a morass of spam. But just in case it isn&#8217;t, we can capture both the stakeholder and the user:</p>
<p><code>In order to &lt;deliver some business benefit&gt;<br />
As a &lt;role&gt; I want &lt;some other role&gt;<br />
to &lt;do something, or use or be restricted by some feature&gt;.</code></p>
<p><code>In order to stop bots from spamming the site<br />
As a member of the commercial team, I want users<br />
to fill in a captcha box.</code></p>
<h2>Feature injection helps us remove the implementation detail</h2>
<p>So, going back to our technical stories:</p>
<p><code>In order to stop wasting money on code that doesn't work in production<br />
As the budget owner, I want the development team<br />
to integrate their code regularly with a production-like environment.</code></p>
<p>You might notice that when we word technical stories this way, the implementation detail &#8211; <em>how</em> the development team integrate their code &#8211; tends to fall away. All that&#8217;s important is that we do it; if automating that is the easiest way then we&#8217;ll do it that way.</p>
<p>(Interestingly, <a href="http://jbehave.org">JBehave2</a> was developed with no automated builds. Running them manually was enough.)</p>
<h2>Now we can talk about the business benefit of our stories</h2>
<p>We can also see that there are three different things we can do with our new build, for three different stakeholders. Because we&#8217;re splitting up our technical stories appropriately, we can ask each of the stakeholders to help prioritise the stories, and to give us clear acceptance criteria.</p>
<p><code>In order to minimize the risk of our production environment falling over<br />
As the person in charge of advertising revenue, I want the development team<br />
to be able to verify the performance figures.</code></p>
<p>Now you know who you need in the story workshop, too.</p>
<p>&#8220;So, I want 90% of pages to load within 1 second, and it should be able to cope with the Christmas sales.&#8221;</p>
<p>Of course, the language still isn&#8217;t quite perfect, so you can now have the conversations about the <em>real</em> business benefit (maximising advertising revenue and user experience, minimizing the risk of the brand being stigmatized by an embarrassing failure) and splitting up the stories (situation normal vs. peak time).</p>
<p>&#8220;But, you know what? We&#8217;re not going to be able to do this until after we&#8217;ve finished the first internal release and have some idea of what the real content&#8217;s going to look like and which agencies we&#8217;re going to use for the adverts. Can we delay it till then?&#8221;</p>
<p>No problem. Let&#8217;s work on that first release.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>RIP As a&#8230; I want&#8230; So that&#8230;</title>
		<link>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/</link>
		<comments>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/#comments</comments>
		<pubDate>Wed, 14 May 2008 08:06:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[stories]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[feature injection]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[If you&#8217;re more interested in the results than the conversation, skip to the summary.
Recently, I&#8217;ve realised that a lot of BDD has been very dev-focused. There&#8217;s a reason for that. Dan&#8217;s a dev, I&#8217;m a dev and most of the people who helped to evolve BDD are devs.
BDD&#8217;s about the interaction between the business and [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re more interested in the results than the conversation, skip to <a href="#summary">the summary</a>.</p>
<p>Recently, I&#8217;ve realised that a lot of BDD has been very dev-focused. There&#8217;s a reason for that. Dan&#8217;s a dev, I&#8217;m a dev and most of the people who helped to evolve BDD are devs.</p>
<p>BDD&#8217;s about the interaction between the business and the technical people in software. I want to know how it&#8217;s working from the other side. So, I&#8217;ve been learning more about the customers, and particularly, more about BAs and their role. I had the recent fortune to run into Angela Martin at <a href="http://agileindia.org/agilemumbai08/index">Agile India</a>, where she taught me the art of grouping stories into coherent releases, while still keeping the stories granular enough that progress can be measured and delivery made regular and predictable.</p>
<p>Last night at <a href="http://www.xpdeveloper.net/xpdwiki/Wiki.jsp?page=XtC">XtC</a> I met up with Chris Matts (of <a href="http://www.infoq.com/articles/real-options-enhance-agility">Real Options</a> fame) who told me we&#8217;re doing it all wrong. &#8220;It&#8217;s not an art, it&#8217;s a process,&#8221; he said. &#8220;You&#8217;re focused on the stories; that&#8217;s why you think it&#8217;s an art form. The focus should be the value you&#8217;re releasing.&#8221;</p>
<p>&#8220;Right&#8221;, I say. &#8220;So, when we originally planned the stories that would deliver the value, we knew what would contribute to that value. But we&#8217;ve lost sight of that. Changes have been made. As devs, all we have are those narratives &#8211; the &#8216;As a &lt;role&gt;, I want &lt;a feature&gt;, so that &lt;some benefit is achieved&gt;&#8217;. So we need to work out which of the benefits add up to the value we&#8217;re aiming for. That helps us work out which stories we should try to complete for a release. The QAs are helping us work out what&#8217;s ready; the BAs are helping us work out what&#8217;s important.&#8221;</p>
<p>&#8220;That&#8217;s the problem,&#8221; says Chris. &#8220;You&#8217;re putting the role first. It&#8217;s the value that&#8217;s most important. Try this: In order to &lt;deliver some value&gt;, as a &lt;role&gt;, I want &lt;some feature&gt;. Instead of working out why people want a feature, and whether it contributes to the value, now we&#8217;re working out who needs a feature, then assigning the story. So our stories are much more focused. If all the stories that contribute to a value are ready, we release.&#8221;</p>
<p>I guess if we get to the point where we can release with only some of the stories ready, we didn&#8217;t break down our values into granular enough elements. And when we want to work out what goes in a release, it&#8217;s easy. The word &#8216;release&#8217; is more meaningful. There&#8217;s some untapped money out there &#8211; some market share, some cost saving, some battle against a competitor. All the features we produce go towards releasing that value for our customers to use &#8211; and it&#8217;s the <i>value</i> we&#8217;re releasing, not the features.</p>
<p>Thanks, Chris, for that.</p>
<p>I need to also thank Dave for giving me a better understanding of what a <a href="http://www.agilemanagement.net/Articles/Weblog/PrioritizingRequirements.html">value</a> is.</p>
<p><a name="summary">In summary</a>: my preferred narrative now reads:</p>
<p><b>In order to</b> &lt;achieve some value&gt;<br />
<b>As a</b> &lt;role&gt;<br />
<b>I want</b> &lt;some feature&gt;.</p>
<p>Because, in order for my work to have any meaning, as a dev, I want to know why you want it.</p>
<p><b>Edit:</b> Chris said he posted this to the <a href="http://finance.groups.yahoo.com/group/kanbandev">Kanban</a> group on Yahoo, but they aren&#8217;t responsible for it. Sorry, Chris, didn&#8217;t mean to misaappropriate! See you on there soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

