<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Agile Non-Functional Requirements</title>
	<atom:link href="http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/</link>
	<description>Software product success.</description>
	<lastBuildDate>Tue, 16 Mar 2010 02:37:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Column 2 : links for 2009-02-14</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-478001</link>
		<dc:creator>Column 2 : links for 2009-02-14</dc:creator>
		<pubDate>Sat, 14 Feb 2009 17:01:18 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-478001</guid>
		<description>[...] Agile Non-Functional Requirements &#124; Tyner Blain Addressing non-functional requirements in Agile development (tags: agile development) [...]</description>
		<content:encoded><![CDATA[<p>[...] Agile Non-Functional Requirements | Tyner Blain Addressing non-functional requirements in Agile development (tags: agile development) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Service Geist &#187; Blog Archive &#187; Agiles &#8220;Zeugs&#8221;</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477629</link>
		<dc:creator>Service Geist &#187; Blog Archive &#187; Agiles &#8220;Zeugs&#8221;</dc:creator>
		<pubDate>Thu, 12 Feb 2009 18:08:09 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477629</guid>
		<description>[...] mit zwei Artikeln, die sich mit dem Product Backlog befassen. Hier geht es einmal darum, wie sich Non-Functional Requirements praktisch mit Agilen Methoden managen lassen, denn diese passen normalerweise nicht sonderlich gut in irgendwelche User Stories. Die Idee ist [...]</description>
		<content:encoded><![CDATA[<p>[...] mit zwei Artikeln, die sich mit dem Product Backlog befassen. Hier geht es einmal darum, wie sich Non-Functional Requirements praktisch mit Agilen Methoden managen lassen, denn diese passen normalerweise nicht sonderlich gut in irgendwelche User Stories. Die Idee ist [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pawel Brodzinski</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477394</link>
		<dc:creator>Pawel Brodzinski</dc:creator>
		<pubDate>Wed, 11 Feb 2009 08:52:58 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477394</guid>
		<description>I can&#039;t say I fully agree with approach of adding one or a couple of non-functional requirements to each sprint. To keep the example with browsers, I would definitely think from the very beginning that application should support all target browsers. Win/OS X platform it&#039;s a bit easier since capabilities are pretty similar. However if you think of having a site accessed from mobile devices too it all becomes tricky. If you base mainly on javascript, well, it won&#039;t work on many terminals to throw just one example.

Pretty much the same is with performance-related non-functional requirements. Let&#039;s say our goal is 20k requests per hour (whatever a request is - it doesn&#039;t matter). At the moment application at the peak gets about 7,5k requests. If we put our milestones at 10k, 12,5k, 15k, 17,5k and finally at 20k for each consecutive sprint we risk that our current architecture will die in the middle of the march and whole work was useless. I would rather spend some effort in one of early sprints (possibly the very first) or at the beginning of a project to do extensive load testing and learn how far current performance can be pushed. If results weren&#039;t satisfactory I would start working on major changes enabling performance improvement from the beginning (hopefully the second iteration) instead of somewhere in the middle of process.

Non-functional requirements are always tricky to deal with, no matter if your project is done agile-way or you&#039;re waterfall zealot (are there any of them still?) because they&#039;re hard to pack into frames we use for functional requirements.</description>
		<content:encoded><![CDATA[<p>I can&#8217;t say I fully agree with approach of adding one or a couple of non-functional requirements to each sprint. To keep the example with browsers, I would definitely think from the very beginning that application should support all target browsers. Win/OS X platform it&#8217;s a bit easier since capabilities are pretty similar. However if you think of having a site accessed from mobile devices too it all becomes tricky. If you base mainly on javascript, well, it won&#8217;t work on many terminals to throw just one example.</p>
<p>Pretty much the same is with performance-related non-functional requirements. Let&#8217;s say our goal is 20k requests per hour (whatever a request is &#8211; it doesn&#8217;t matter). At the moment application at the peak gets about 7,5k requests. If we put our milestones at 10k, 12,5k, 15k, 17,5k and finally at 20k for each consecutive sprint we risk that our current architecture will die in the middle of the march and whole work was useless. I would rather spend some effort in one of early sprints (possibly the very first) or at the beginning of a project to do extensive load testing and learn how far current performance can be pushed. If results weren&#8217;t satisfactory I would start working on major changes enabling performance improvement from the beginning (hopefully the second iteration) instead of somewhere in the middle of process.</p>
<p>Non-functional requirements are always tricky to deal with, no matter if your project is done agile-way or you&#8217;re waterfall zealot (are there any of them still?) because they&#8217;re hard to pack into frames we use for functional requirements.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Locke</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477340</link>
		<dc:creator>David Locke</dc:creator>
		<pubDate>Tue, 10 Feb 2009 21:06:24 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477340</guid>
		<description>From your description of the scope of the impact of non-functional requirements, they sound like &quot;cross-cutting concerns.&quot; Aspect-oriented programming (AOP) was developed to deal with cross-cutting concerns. 

AOP works by intercepting interobject messaging doing some processing, and then sending the message to the original target object. It&#039;s a system of sideband consumption. 

You can use it as a means of extending your testing budget. To do this, you could code the core, and never change it. Instead, when you need it to change, you would build the change as an aspect. Since you didn&#039;t change the core code, you don&#039;t have to do regression on it. You might still do that until you are convinced, but most of the testing would be focused on the new code. 

In terms of non-functional requirements (NFR), you would write your core at some level of &quot;how well&quot;. Then, when you wanted to increase your &quot;how well&quot; by some factor, you would write an aspect to do that. It wouldn&#039;t effect the full scope of the non-functional requirement. It would effect only some small portion. You could then write another aspect for the next small portion. There is no need to break the whole thing, or to have the whole thing comply with a single metric NFR. 

There might even be a business case for tiered compliance with the NFR. Sure, it&#039;s nice if everything is operating on the same NFR levels, but it&#039;s more important that the premium functionality meets it, or maybe the base functionality depending on your pricing scheme, and segmentation. 

It might sound like a nightmare, but your NFRs would be encapsulated in an AOP approach where they are spread throughout your code today.</description>
		<content:encoded><![CDATA[<p>From your description of the scope of the impact of non-functional requirements, they sound like &#8220;cross-cutting concerns.&#8221; Aspect-oriented programming (AOP) was developed to deal with cross-cutting concerns. </p>
<p>AOP works by intercepting interobject messaging doing some processing, and then sending the message to the original target object. It&#8217;s a system of sideband consumption. </p>
<p>You can use it as a means of extending your testing budget. To do this, you could code the core, and never change it. Instead, when you need it to change, you would build the change as an aspect. Since you didn&#8217;t change the core code, you don&#8217;t have to do regression on it. You might still do that until you are convinced, but most of the testing would be focused on the new code. </p>
<p>In terms of non-functional requirements (NFR), you would write your core at some level of &#8220;how well&#8221;. Then, when you wanted to increase your &#8220;how well&#8221; by some factor, you would write an aspect to do that. It wouldn&#8217;t effect the full scope of the non-functional requirement. It would effect only some small portion. You could then write another aspect for the next small portion. There is no need to break the whole thing, or to have the whole thing comply with a single metric NFR. </p>
<p>There might even be a business case for tiered compliance with the NFR. Sure, it&#8217;s nice if everything is operating on the same NFR levels, but it&#8217;s more important that the premium functionality meets it, or maybe the base functionality depending on your pricing scheme, and segmentation. </p>
<p>It might sound like a nightmare, but your NFRs would be encapsulated in an AOP approach where they are spread throughout your code today.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Roger L. Cauvin</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477321</link>
		<dc:creator>Roger L. Cauvin</dc:creator>
		<pubDate>Tue, 10 Feb 2009 17:18:51 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477321</guid>
		<description>One of the ways you can iterate is by relaxing the nonfunctional requirements for a subset of the user stories, even if those nonfunctional requirements will apply to all of the user stories as the product matures.</description>
		<content:encoded><![CDATA[<p>One of the ways you can iterate is by relaxing the nonfunctional requirements for a subset of the user stories, even if those nonfunctional requirements will apply to all of the user stories as the product matures.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477319</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Tue, 10 Feb 2009 16:52:44 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477319</guid>
		<description>Thanks Roger!  I agree when the context of the non-functional requirement is scoped to the single story, then it really is an acceptance criterion.  But too many non-functional requirements affect all stories (support screen readers, scale to 100 concurrent users, be PCI compliant, encrypt traffic, etc).  I guess I&#039;m trying to call out the difference between &quot;verify that [story operates within parameter X]&quot; and &quot;all stories must operate within parameter X.&quot;</description>
		<content:encoded><![CDATA[<p>Thanks Roger!  I agree when the context of the non-functional requirement is scoped to the single story, then it really is an acceptance criterion.  But too many non-functional requirements affect all stories (support screen readers, scale to 100 concurrent users, be PCI compliant, encrypt traffic, etc).  I guess I&#8217;m trying to call out the difference between &#8220;verify that [story operates within parameter X]&#8221; and &#8220;all stories must operate within parameter X.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Roger L. Cauvin</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/comment-page-1/#comment-477316</link>
		<dc:creator>Roger L. Cauvin</dc:creator>
		<pubDate>Tue, 10 Feb 2009 16:20:19 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822#comment-477316</guid>
		<description>I like to attach the nonfunctional requirements to user stories.  If you&#039;re using index cards for user stories, you include acceptance criteria underneath the natural language description of the story.  These acceptance criteria express the nonfunctional requirements.

And you&#039;re right that you can spike or iterate on the stringency of the nonfunctional requirements.  It&#039;s very much like basing iterations on &lt;a href=&quot;http://cauvin.blogspot.com/2006/12/constraint-based-use-case-versions.html&quot; rel=&quot;nofollow&quot;&gt;constraint-based use case versions&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>I like to attach the nonfunctional requirements to user stories.  If you&#8217;re using index cards for user stories, you include acceptance criteria underneath the natural language description of the story.  These acceptance criteria express the nonfunctional requirements.</p>
<p>And you&#8217;re right that you can spike or iterate on the stringency of the nonfunctional requirements.  It&#8217;s very much like basing iterations on <a href="http://cauvin.blogspot.com/2006/12/constraint-based-use-case-versions.html" rel="nofollow">constraint-based use case versions</a>.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
