<?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>Building Better Software &#187; Requirements</title>
	<atom:link href="http://www.stellman-greene.com/category/requirements/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stellman-greene.com</link>
	<description>because people want their software to work</description>
	<lastBuildDate>Sat, 05 Nov 2011 14:19:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nonfunctional Requirements Q&amp;A</title>
		<link>http://www.stellman-greene.com/2010/02/17/nonfunctional-requirements-qa/</link>
		<comments>http://www.stellman-greene.com/2010/02/17/nonfunctional-requirements-qa/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 17:47:50 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Q&A]]></category>
		<category><![CDATA[Quality]]></category>
		<category><![CDATA[Requirements]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=436</guid>
		<description><![CDATA[Non-functional requirements Q&#38;A: We answer questions from readers about using nonfunctional requirements on a real software project, and how to use them on a real software project. Non-functional requirements: Planning out how well your software will work A couple of months ago I wrote a post called Using nonfunctional requirements to build better software. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><em>Non-functional requirements Q&amp;A: We answer questions from readers about using <strong>nonfunctional requirements</strong> on a real software project, and how to use them on a real software project.</em></p>
<p><em><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/jeez.-lady.png"><img class="alignnone size-full wp-image-402" title="Jeez, lady" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/jeez.-lady.png" alt="" width="550" height="346" /></a></em></p>
<h3>Non-functional requirements: Planning out how well your software will work</h3>
<p>A couple of months ago I wrote a post called <a id="aptureLink_KwUExBHA6H" href="../../2009/10/03/using-nonfunctional-requirements/"><em>Using nonfunctional requirements to build better software</em></a>. It&#8217;s basically a step-by-step guide for creating an easy, practical technique to use nonfunctional requirements on a real software project, treating them in a way that&#8217;s similar to how a lot of Agile teams treat user stories, scenarios and other functional requirements: by sticking them on index cards and using them to do some lightweight planning.</p>
<p>Since then, I&#8217;ve gotten a lot of questions about nonfunctional requirements (or, as some people call them, non functional requirements, behavioral requirements, quality attributes, and probably half a dozen other names). Based on the questions I&#8217;ve been getting, a lot of people really seem to want a solid overview of exactly what they are:</p>
<ul>
<li>What are nonfunctional requirements?</li>
<li>What goes into a <em>good</em> nonfunctional requirement?</li>
<li>Is there a nonfunctional requirements checklist that I can use?</li>
<li>How do I write down a nonfunctional requirement? Is there a nonfunctional requirements template I can use?</li>
</ul>
<p>Luckily, Jenny and I addressed exactly those questions in our first book, <a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a>, and I&#8217;ve gotten feedback over the years from people who read it (and other <a href="../../category/requirements/">writing I&#8217;ve done about requirements</a>), and tell me it helped them get a handle on the concepts behind nonfunctional requirements. So I&#8217;ll do a little requirements Q&amp;A and address those questions one by one, drawing from the book where possible. And I&#8217;ve posted an O&#8217;Reilly Community blog post called <a href="http://broadcast.oreilly.com/2010/02/nonfunctional-requirements-how.html">Understanding nonfunctional requirements</a> with some additional information, which should also help get to the bottom of the issue.</p>
<h3>Q: What are non-functional requirements?</h3>
<p>Non-functional requirements &#8212; or behavioral requirements, or quality attributes &#8212; describe how well a system performs its function. This is fundamentally different than the typical functional requirements that most of us are used to, which describe what that system does.</p>
<p>Here&#8217;s a quick example. Whenever I&#8217;m talking about requirements, I like to use a &#8220;search and replace&#8221; feature in a word processor or text editor as an example, because we&#8217;re all familiar with how it works. So while a functional requirement for &#8220;search and replace&#8221; might describe how the case-sensitive matching works: &#8220;If the original text was all uppercase, then the replacement text must be inserted in all uppercase.&#8221; A nonfunctional requirement, on the other hand, might describe the performance (&#8220;it must be able to replace 1000 search terms in a 3MB document in under 250ms on one of our standard test VMs running at 50% load&#8221;).</p>
<h3>Q: What goes into a <em>good</em> nonfunctional requirement?</h3>
<p>A <em>good</em> nonfunctional requirement is one that makes it clear to everyone on the project &#8212; including the user (or someone who really understands what the user needs) &#8212; exactly how the software has to perform. Remember, a good requirement (functional or nonfunctional) is about understanding and addressing the needs of a user.</p>
<p>Here&#8217;s what Jenny and I wrote about nonfunctional requirements in our first book:</p>
<blockquote><p>Users have implicit expectations about how well the software will work. These characteristics include how easy the software is to use, how quickly it executes, how reliable it is, and how well it behaves when unexpected conditions arise. The nonfunctional requirements define these aspects about the system.<em> — <a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a>, p113 (O&#8217;Reilly 2005)</em></p></blockquote>
<p>It&#8217;s really easy for non functional requirements to be unclear or ambiguous. The best way to make sure a nonfunctional requirement is clear and easy to use is to <em>quantify</em> it. So instead of saying that a task must be done quickly, write down the maximum number of seconds it must take to perform a task. The maximum size of a database on disk, the number of hours per day a system must be available, and the number of concurrent users supported are examples of requirements that the software must implement but do not change its behavior.</p>
<h3>Q: Is there a nonfunctional requirements checklist that I can use?</h3>
<p>We put together a nonfunctional requirements checklist that I&#8217;ve used many times on real projects. It&#8217;s based on a list of nonfunctional requirements we included in <em>Applied Software Project Management</em>.</p>
<p>Here&#8217;s one thing to keep in mind about this (or any other) non functional requirements checklist: as you&#8217;re reading it, you&#8217;ll probably find yourself thinking, &#8220;Wait a minute, all my software needs to be flexible (or efficient, or robust, etc.).&#8221; Yes, that&#8217;s true, of course. But are there <strong>specific</strong> non-functional requirements that affect your project in particular, above and beyond what you do on every project? That&#8217;s what this checklist is for, and that&#8217;s what you should be thinking about when you write down nonfunctional requirements.</p>
<ul>
<li>Availability: Are their constraints on the system&#8217;s availability or uptime?</li>
<li>Efficiency: Are there resources the system needs to be careful about monopolizing?</li>
<li>Flexibility: Will the system need to be altered after deployment?</li>
<li>Portability: How easy it is to move to another platform?</li>
<li>Integrity: How sensitive is the project to data security, access, and privacy?</li>
<li>Robustness: Do error conditions need to be handled gracefully?</li>
<li>Scalability: Will the system need to handle a wide range of configuration sizes?</li>
<li>Usability: Are there specific constraints on how the users will understand, learn and use the software?</li>
</ul>
<p>If you&#8217;re interested in using this on a real project , you can read more about it in that <a href="http://broadcast.oreilly.com/2010/02/nonfunctional-requirements-how.html">O&#8217;Reilly Broadcast post about non-functional requirements</a>: I post a relevant excerpt from <em>Applied Software Project Management</em> that goes into more detail about each of these.</p>
<h3>Q: How do I write down a nonfunctional requirement? Is there a nonfunctional requirements template I can use?</h3>
<p>Yes. We put together a <a href="../../Software_requirements_specification">software requirements specification template</a>, and I&#8217;ve helped a lot of teams adopt it for their own projects over the years. When we put together our requirements templates, we put a lot of effort into streamlining them as much as possible. So this is a sort of &#8220;bare minimum&#8221; template for writing down use cases, functional requirements, and nonfunctional requirements.</p>
<p>Here&#8217;s an example of how we&#8217;d specify a functional requirement:</p>
<table border="1px">
<tbody>
<tr>
<td><strong>Name</strong></td>
<td>Nonfunctional requirement #7: Performance constraints for search-and-replace</td>
</tr>
<tr>
<td><strong>Summary</strong></td>
<td>The search-and-replace feature must perform a search quickly.</td>
</tr>
<tr>
<td><strong>Rationale</strong></td>
<td>If a search is not fast enough, users will avoid using the software.</td>
</tr>
<tr>
<td><strong>Requirements</strong></td>
<td>A case-insensitive search-and-replace performed on a 3MB document with twenty 30-character search terms to be replaced with a different 30-character search term must take under 500ms on one of our standard testing VMs at 50% CPU load.</td>
</tr>
<tr>
<td><strong>References</strong></td>
<td>See use case #8: <em>Search</em></td>
</tr>
</tbody>
</table>
<p>And that gets back to the blog post I mentioned earlier, <a id="aptureLink_KwUExBHA6H" href="../../2009/10/03/using-nonfunctional-requirements/"><em>Using nonfunctional requirements to build better software</em></a>. If you&#8217;re working on a team that uses an agile process to build software, there&#8217;s a good chance that you already write down a lot of your requirements on index cards. In that post, I outline a method that I&#8217;ve had a lot of success with in my own projects.</p>
<p>I went into a lot more detail in that post, but here&#8217;s a quick recap. First, I write the requirement itself on the front of an index card:</p>
<p><img src="http://broadcast.oreilly.com/2010/02/17/stellman/nf_index_card_front.jpg" alt="Nonfunctional requirement index card (front)" width="450" height="271" /></p>
<p>and on the back I&#8217;ll write a specific test to make sure the requirement is implemented:</p>
<p><img src="http://broadcast.oreilly.com/2010/02/17/stellman/nf_index_card_back.jpg" alt="nf_index_card_back.jpg" width="450" height="267" /></p>
<p>Then I use it for planning the project to make sure it actually gets included &#8212; you can see more about it in the post. As far as documenting nonfunctional requirements goes, that&#8217;s actually a really efficient way of doing it, and I&#8217;ve seen it work well on agile projects.</p>
<p>I hope that answers some of your questions about using nonfunctional requirements in software projects. Obviously, I&#8217;d be thrilled if you took a look at the requirements chapter in <a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a> &#8212; Jenny and I gave a lot of practical advice about how to use requirements on a software project. And I&#8217;ve got other <a href="../../category/requirements/">requirements posts on Building Better Software</a> as well. But if they don&#8217;t answer your questions, feel free to ask (or <a href="../../contact-us/">send them to us</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2010/02/17/nonfunctional-requirements-qa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using nonfunctional requirements to build better software</title>
		<link>http://www.stellman-greene.com/2009/10/03/using-nonfunctional-requirements/</link>
		<comments>http://www.stellman-greene.com/2009/10/03/using-nonfunctional-requirements/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 20:14:44 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Quality]]></category>
		<category><![CDATA[Requirements]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=397</guid>
		<description><![CDATA[Understanding nonfunctional requirements — which some people call software quality attributes or nonbehavioral requirements — can make a big difference when you&#8217;re building software. But a lot of people have trouble taking a somewhat theoretical idea and applying it to a real-life project. Luckily, we&#8217;ve got an easy, practical technique to use nonfunctional requirements on [...]]]></description>
			<content:encoded><![CDATA[<p><em>Understanding <strong>nonfunctional requirements</strong> — which some people call software quality attributes or nonbehavioral requirements — can make a big difference when you&#8217;re building software. But a lot of people have trouble taking a somewhat theoretical idea and applying it to a real-life project. Luckily, we&#8217;ve got an <strong>easy, practical technique</strong> to use nonfunctional requirements on a real software project.</em></p>
<p><img class="alignnone size-full wp-image-402" title="Jeez, lady" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/jeez.-lady.png" alt="Jeez, lady" width="550" height="346" /></p>
<h4>How well does your program do&#8230; well, whatever it does?</h4>
<p>I&#8217;ve wanted to write a post about <a href="http://en.wikipedia.org/wiki/Non-functional_requirement">nonfunctional requirements</a> for a while. But I&#8217;ve been trying to find a good angle for talking about them, because while they can be really practical and useful on a software project, it&#8217;s a little hard to get that practicality across in a useful way.</p>
<p>Luckily, I&#8217;ve been spending a lot of time lately talking about architecture, since Jenny and I are going to give our <a href="http://www.stellman-greene.com/2009/04/23/our-new-beautiful-teams-talk-at-boston-spin/">Beautiful Teams talk </a>at the <a title="IT Architects Conference 2009" href="http://www.iasahome.org/web/itarc/2009/NYC">ITARC New York conference</a> next week. And that&#8217;s got me thinking a lot about how architects work. I&#8217;ve been asked more than once recently about what, exactly, the term &#8220;architecture&#8221; refers to. The quick answer is the textbook definition — designing, documenting and verifying the structure, components and properties of a system. But I always want to go beyond that. Any time I come across an interesting idea (and software architecture is full of them!), I try to come up with a way that it can help a developer out today, on a project that developer is working on. In fact, I&#8217;ve got a quick technique to help you do exactly that — it&#8217;s at the end of this post. And like many great software practices, it involves index cards.</p>
<p>So I started thinking about some common problems that software architects run into, especially junior ones who are still building up their experience. And that leads me straight to a problem that I&#8217;ve seen over and over again. A lot of people jump into architecture and design by starting with the question, &#8220;What&#8217;s this system going to do?&#8221; We&#8217;ve got a lot of very useful tools for that (like <a href="http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/">user stories and use cases</a>). Obviously, you can&#8217;t design a system well without understanding what it does.</p>
<p>But I&#8217;ve had the opportunity to work with some very talented, very experienced software architects lately, and I&#8217;ve noticed something critically different about how they approach designing a system, and it&#8217;s really pointed me to an important difference that separates a senior architect from a junior one. When one of these guys gets started on a system, they don&#8217;t just think about what it&#8217;s going to do. They also think about <strong>how</strong> it&#8217;s going to do whatever it does.</p>
<p>That&#8217;s a really subtle point, and it&#8217;s a very easy one to overlook. But it&#8217;s very important. Important enough, in fact, to have a name: <strong>nonfunctional requirements</strong>.</p>
<p>Most of us have read about nonfunctional requirements. In fact, it&#8217;s a pretty common interview question: &#8220;Name a few nonfunctional requirements.&#8221; Someone who took a class in software architecture recently might be able to rattle a few of them off (usability, reliability, performance, scalability, availability&#8230;). And lots of project managers and business analysts I talk seem to be on an eternal quest for the perfect nonfunctional requirements template.</p>
<p>If you&#8217;re not familiar with nonfunctional requirements, here&#8217;s how Jenny and I defined them in our first book:</p>
<blockquote><p><em><span style="color: #003366;">Users have implicit expectations about how well the software will work. These characteristics include how easy the software is to use, how quickly it executes, how reliable it is, and how well it behaves when unexpected conditions arise. The nonfunctional requirements define these aspects about the system. (The nonfunctional requirements are sometimes referred to as &#8220;nonbehavioral requirements&#8221; or &#8220;software quality attributes.&#8221;)</span></em></p>
<p><em><span style="color: #003366;">– Andrew Stellman &amp; Jennifer Greene, </span></em><a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm"><em><span style="color: #003366;">Applied Software Project Management</span></em></a><em><span style="color: #003366;">, chapter 6 (O&#8217;Reilly 2005)</span></em></p></blockquote>
<p>And that&#8217;s a good starting point. But there&#8217;s an art to actually using nonfunctional requirements to make your software better. So how do we do that?</p>
<h4>Thinking &#8220;how well&#8221; from the start</h4>
<p>One of those senior architects I mentioned gave me a really good tip recently, one that really rings true. He told me, &#8220;Always think about performance from day one of your project, and test for it until you deliver.&#8221; Now, this particular person works on software tools used to design high-availability, high-performance server systems, so he thinks about performance a lot. But his point was that to design systems well, you need to think about performance — and other nonfunctional requirements — from the start.</p>
<p>Take a minute and think about that, because I think it&#8217;s an important point. I like it a lot for two reasons.</p>
<p>I like the fact that he&#8217;s thinking about how well the software works from the beginning of the project. I&#8217;m a firm believer in the old QA saying that &#8220;you can&#8217;t test quality in.&#8221; Yes, I know that saying rubs some people the wrong way because they think it sometimes lets people off the hook for testing at the end of the project. But there&#8217;s definitely a lot of truth in the idea that developers who think about quality from the beginning of the project build better software. If you design for performance, and if you then code for performance, then it&#8217;s pretty likely that you&#8217;ll end up with a more performant design than if only start thinking about performance at the very end of the project.</p>
<p>The other thing I like is that he didn&#8217;t say, &#8220;Think about performance, scalability, usability, robustness, etc., from the beginning of the project.&#8221; He narrowed it down to the single quality attribute that was most important to his particular project. I&#8217;ve talked to a lot of developers, project managers, designers, testers and business analysts over the years about nunfunctional requirements, and what I often find is that people seem overwhelmed. There are so many facets to quality beyond what the software does, and if you&#8217;re just trying to get started thinking about these things, it&#8217;s hard to know where to start.</p>
<p>Which leads me to my advice for developers. If you&#8217;re a programmer working on a project, here&#8217;s something that you can do today to improve the final product. Start with just three areas: availability, performance and reliability. I like these three because they&#8217;re easy to understand, it&#8217;s not hard to brainstorm examples of how they can go wrong.</p>
<p>Start with some definitions. Here are ones that Jenny and I gave in <a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a>:</p>
<blockquote><p><strong><em><span style="color: #003366;">Performance:</span></em></strong><em><span style="color: #003366;"> The performance constraints specify the timing characteristics of the software. Certain tasks or features are more time-sensitive than others; the nonfunctional requirements should identify those software functions that have constraints on their performance.</span></em></p>
<p><strong><em><span style="color: #003366;">Flexibility:</span></em></strong><em><span style="color: #003366;"> If the organization intends to increase or extend the functionality of the software after it is deployed, that should be planned from the beginning; it influences choices made during the design, development, testing, and deployment of the system.</span></em></p>
<div><strong><em><span style="color: #003366;">Reliability:</span></em></strong><em><span style="color: #003366;"> Reliability specifies the capability of the software to maintain its performance over time. Unreliable software fails frequently, and certain tasks are more sensitive to failure (for example, because they cannot be restarted, or because they must be run at a certain time).</span></em></div>
</blockquote>
<p>Now, make them <strong>practical and useful to your project</strong> by doing thee simple steps. To do this, you&#8217;ll need three index cards. Here&#8217;s what to do:</p>
<ol>
<li>On the front of each of the three index cards, write one a type of nonfunctional requirement at the top. So on the first card, write &#8220;Performance&#8221;. On the second one, write &#8220;Flexibility&#8221;. And on the third one, write &#8220;Reliability&#8221;. Write these words on the front and the back of the card. If bright colors grab your attention, use a bright-colored highlighter to highlight them. (Personally, they don&#8217;t really do anything for me.)</li>
<li>Take each of the cards. On each of them write down the name of one feature f your software and what this particular attribute means for that feature. I like to use <a href="http://www.stellman-greene.com/use_cases">Search and Replace</a> as an example whenever I talk about this sort of thing, because we&#8217;ve all used it and understand it. So on the Performance card I might write, &#8220;Search and replace: searching through a large document needs to be fast.&#8221;
<ul>
<li><img class="alignnone size-full wp-image-408" title="Performance index card" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/nf_index_card_front1.jpg" alt="Performance index card" width="450" height="271" /></li>
</ul>
</li>
<li>Here&#8217;s the hard part. On the back of each card, write down a single test that you can do to figure out how well your software meets that requirement. So on the back of the performance card I might write, &#8220;Replacing 100 occurrences of a 4-character string in a 25MB document has to take under 750 milliseconds.&#8221; (The more concrete you can make this test, the better this works.)
<ul>
<li><img class="alignnone size-full wp-image-406" title="Performance index card (back)" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/nf_index_card_back.jpg" alt="Performance index card (back)" width="450" height="267" /></li>
</ul>
</li>
</ol>
<p>Now that you&#8217;ve got those three cards, tack them up on your cubicle wall (or, even better, on your task board). Make sure the feature you wrote down in step #2 is facing forward. Make sure they&#8217;re someplace you&#8217;ll see them. Take just a minute or two each day to look at them and figure out if you&#8217;re headed in the right direction. What you&#8217;ll find more often than not is that as you&#8217;re designing your system, you won&#8217;t forget about those three things. Just spending a small amount of time writing down and thinking about these things can color your whole project.</p>
<p>Once you&#8217;ve moved from the design phase into the programming phase, flip the cards around so the test side is showing forward. (If you&#8217;re on an agile project with a three-week iteration, this might happen during the first week, but this works equally well for projects with a longer design phase.) As you&#8217;re writing the code for each of the features you wrote down, run that test by hand. It should only take a few minutes to do, and it will give you an idea of how well you&#8217;re doing. If you do this enough, you might end up figuring out a way to automate that test. If you do, and if you have a build server, then you can add it to the build. That way you&#8217;ll know any time you check in code that causes your project to see its performance (or reliability, or flexibility) degrade.</p>
<p>Try doing that on your next project, and what you should find is that you spend more time thinking about these things. When opportunities to improve those three specific things come up, you&#8217;ll recognize them and take them. And that&#8217;s a great way to build better software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/10/03/using-nonfunctional-requirements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Requirements 101: User Stories vs. Use Cases</title>
		<link>http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/</link>
		<comments>http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/#comments</comments>
		<pubDate>Sun, 03 May 2009 18:13:59 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=234</guid>
		<description><![CDATA[Here&#8217;s a question that I get over and over again: What&#8217;s the difference between user stories and use cases? — Ron K. Before I dive into an answer to that question, let&#8217;s rewind a little bit and talk about where user stories came from. I like them because they&#8217;re a great example of how the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-79" title="Writing requirements can be a challenge..." src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/08/business-analyst.png" alt="Business Analyst" /></p>
<p>Here&#8217;s a question that I get over and over again:</p>
<blockquote><p><em>What&#8217;s the difference between user stories and use cases?</em></p>
<p style="text-align: left;"><em>— Ron K.</em></p>
</blockquote>
<p>Before I dive into an answer to that question, let&#8217;s rewind a little bit and talk about where user stories came from. I like them because they&#8217;re a great example of how the Agile movement changed the software world. Programmers used to just dive right into software projects and start coding. Whenever one of those pesky users started to tell us what they needed, we&#8217;d stop them and say something like, &#8220;Don&#8217;t worry, I totally get it. I know what you need.&#8221; The Agile folks figured out that &#8220;<em>I know what you need</em>&#8221; is a nasty little trap that programmers — especially good ones — fall into. We&#8217;d spend the whole project thinking that we understood our users&#8217; needs, only to deliver software that they didn&#8217;t want. The Agile folks realized that if developers had to start <a href="http://agilemanifesto.org/principles.html">working with users throughout the project</a> to understand their needs if they wanted to avoid the code-and-fix trap.</p>
<div id="attachment_30" class="wp-caption alignright" style="width: 192px"><a href="http://www.stellman-greene.com/aspm/"><img class="size-full wp-image-30" title="ASPM-Cover.jpg" src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/04/aspm-cover.jpg" alt="" width="182" height="240" /></a><p class="wp-caption-text">Jenny and I teach you all about use cases and requirements in our first book, Applied Software Project Management (O&#39;Reilly, 2005).</p></div>
<p>And that&#8217;s why I think the user story is one of the most useful tools to come out of the Agile movement. A <a href="http://en.wikipedia.org/wiki/User_story"><strong>user story</strong></a> — some people call it a <strong>scenario</strong> — expresses one very specific need that a user has. It&#8217;s usually written out as a couple of sentences. Most user stories are written in the language of the users, so any user should be able to read a user story and immediately understand what it means. A lot of time, user stories are written on index cards, although I&#8217;ve put them in Word documents, Excel spreadsheets and Wiki pages (depending on how the particular project is run).</p>
<p>A <a href="http://www.stellman-greene.com/use_cases"><strong>use case</strong></a> is similar to a user story, because it also describes one specific interaction between the user and the software. When I&#8217;m training people to improve the way they write down their project&#8217;s requirements, I often describe the use case as a &#8220;deceptively simple tool&#8221; that helps us find and write down all of the ways users interact with the software.</p>
<p>Looking at those definitions, I can definitely see why there&#8217;s confusion about the difference between user stories and use cases. If you look at the last two paragraphs,  it might sound like I said the same thing twice! But while user stories and use cases are definitely similar, there are important differences between them. Each serves a distinct purpose, and I think they both have their place on a well-run software project.</p>
<p>I think the easiest way to understand the difference between use cases and user stories is to take a look at an example. Luckily, I&#8217;ve got one that I think helps make the difference clearer.</p>
<p>In our first book, <a href="http://stellman-greene.com/aspm">Applied Software Project Management</a>, Jenny and I spend a lot of time talking about how to develop use cases and use them to build better software. And as an example, we showed a use case for a software feature that everyone should be familiar with: a search and replace feature from a word processor. Comparing a user story for search and replace with a use case for the same feature helps highlight the differences.</p>
<p>It&#8217;s not hard to find lots of user story examples. There are lots of different ways you&#8217;ll see a user story formatted (although if you&#8217;re looking for a user story template, a 3&#215;5 index card should be a good starting point!). So what would a user story for search and replace look like? I took a stab at writing one:</p>
<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2009/05/search-and-replace-user-story-card.png"><img class="alignnone size-full wp-image-235" title="Search and Replace user story on an index card" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/05/search-and-replace-user-story-card.png" alt="search-and-replace-user-story-card" /></a></p>
<p>(One thing I like to do with user stories is to use &#8220;he&#8221; or &#8220;she&#8221;, rather than try to be gender-neutral. I think this makes the user in the story easier to connect with by personifying him a bit. It it also lets me write in a more conversational tone, which makes the user story friendlier and, I think, a bit easier to read and understand.)</p>
<p>Now, if you&#8217;re not familiar with user stories, you might think to yourself, &#8220;Wait a minute, my word processor&#8217;s search and replace feature does a lot more than that!&#8221; And that&#8217;s okay. A typical user story will have enough information to help the user understand what it is the software needs to accomplish, but it&#8217;s not meant to be a complete description of how the software works. I&#8217;m not going to try to give a long lesson in writing effective user stories here; I highly recommend reading <a title="Mike Cohn on user stories" href="http://www.mountaingoatsoftware.com/articles?tag=user%20stories">Mike Cohn&#8217;s excellent articles and posts aboout user stories</a>. (Mike, incidentally, is one of the software development veterans who contributed to our latest book, <a title="Beautiful Teams" href="http://oreilly.com/catalog/9780596518028/index.html">Beautiful Teams</a> [O'Reilly, 2009]. He has some really fascinating things to say about Agile planning.)</p>
<p>So what would a use case sample look like for search and replace? Here&#8217;s the use case example Jenny and I built to demonstrate how use cases work:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Name</strong></td>
<td><strong>UC-8: Search and Replace<br />
</strong></td>
</tr>
<tr>
<td>Summary</td>
<td>All occurrences of a search term are replaced with replacement text.</td>
</tr>
<tr>
<td>Rationale</td>
<td>While editing a document, many users find that there is text somewhere in the file being edited that needs to be replaced, but searching for it manually by looking through the entire document is time-consuming and ineffective. The search-and-replace function allows the user to find it automatically and replace it with specified text. Sometimes this term is repeated in many places and needs to be replaced. At other times, only the first occurrence should be replaced. The user may also wish to simply find the location of that text without replacing it.</td>
</tr>
<tr>
<td>Users</td>
<td>All users</td>
</tr>
<tr>
<td>Preconditions</td>
<td>A document is loaded and being edited.</td>
</tr>
<tr>
<td>Basic Course of Events</td>
<td>
<ol>
<li>The user indicates that the software is to perform a search-and-replace in the document.</li>
<li>The software responds by requesting the search term and the replacement text.</li>
<li>The user inputs the search term and replacement text and indicates that all occurrences are to be replaced.</li>
<li>The software replaces all occurrences of the search term with the replacement text.</li>
</ol>
</td>
</tr>
<tr>
<td>Alternative Paths</td>
<td>
<ol>
<li>In Step 3, the user indicates that only the first occurrence is to be replaced. In this case, the software finds the first occurrence of the search term in the document being edited and replaces it with the replacement text. The postcondition state is identical, except only the first occurrence is replaced, and the replacement text is highlighted.</li>
<li>In Step 3, the user indicates that the software is only to search and not replace, and does not specify replacement text. In this case, the software highlights the first occurrence of the search term and the use case ends.</li>
<li>The user may decide to abort the search-and-replace operation at any time during Steps 1, 2, or 3. In this case, the software returns to the precondition state.</li>
</ol>
</td>
</tr>
<tr>
<td>Postconditions</td>
<td>All occurrences of the search term have been replaced with the replacement text.</td>
</tr>
</tbody>
</table>
<p>Now, if I were a developer building a word processor or text editor, I&#8217;d actually be able to write a search and replace feature that implements that particular use case. (Just to be clear: there are many different use case formats; Jenny and I use this use case template in our book because it&#8217;s stripped down to the bare minimum sections that we think an effective use case should have.)</p>
<p>Here&#8217;s something about use cases that I think is interesting. While you were reading through our use case example, were you thinking of something that looks like the <em>Replace</em> dialog in Notepad or Microsoft Word, or the <em>Find</em> dialog in TextEdit? If so, take another look at the sample use case. It doesn&#8217;t have any words like &#8220;window,&#8221; &#8220;button,&#8221; &#8220;click,&#8221; &#8220;field&#8221; or &#8220;checkbox&#8221;. It&#8217;s all about what actions the user takes, and how the software responds. And there are many different ways that you could build software that implements the use case. Have you ever used the <a href="http://hacktux.com/vi/replace">search and replace feature in vi</a>? What about the <a href="http://www.redantigua.com/c-emacs-beginner.html#searchreplace">search and replace feature in Emacs</a>? They have very different user interfaces! Who knew there were so many ways you could implement search and replace? But if you compare each of them with this use case, they all follow the same basic course of events.</p>
<p>So now that we&#8217;ve gone through the use case and user story examples, what&#8217;s the difference between user stories and use cases? Here&#8217;s what I think are some of the key differences:</p>
<ul>
<li><strong>User stories are about needs.</strong> When you write a user story, what you&#8217;re describing is a &#8220;raw&#8221; user need. It&#8217;s something that the user needs to do in his day-to-day job. If you never build any software for him, then that need will still exist!</li>
<li><strong>Use cases are about the behavior you&#8217;ll build into the software to meet those needs.</strong> A developer who needs to build working software should be able to read a use case and get a good sense of what the software needs to do. It typically has a lot of detail, and describes everything that the developer needs to build in order to meet the user&#8217;s need. That&#8217;s why it needs to have a lot more detail, and be clear and unambiguous.</li>
<li><strong>User stories are easy for users to read.</strong> When you write a user story, what you&#8217;re concentrating on is writing something that anyone can understand, in the language of the users. We all know that developers have a lot more patience for talking about details of the software they&#8217;re building than users do, which is why user stories have to be brief. A user story needs to express a complete thought in just a couple of sentences. (That&#8217;s also why it&#8217;s good to put them on index cards: somehow, that makes it clearer that it&#8217;s self-contained and independent of the other user stories.)</li>
<li><strong>User cases describe a complete interaction between the software and users (and possibly other systems).</strong> When you&#8217;re doing use case analysis, what you&#8217;re doing is <em>designing a functional solution</em> that meets the users&#8217; needs. It needs to be something that developers can implement. It&#8217;s possible that one user story could spawn several use cases. And when you combine all of your use cases into one use case document, you&#8217;ll end up with a complete description of every interaction between the user and the software that you&#8217;re planning on building. And if your software has to interact with multiple systems, you may end up treating those other systems as actors in your use case.</li>
</ul>
<p>Once you get a sense of how user stories and use cases differ, you can start to see what purpose they can serve on your project. And if you only use user stories, or if you only use cases, then maybe on your next project you can try using them both.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Q&amp;A: How to succeed in business analysis without really trying</title>
		<link>http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/</link>
		<comments>http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 00:25:12 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Q&A]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Users]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/</guid>
		<description><![CDATA[Hi everyone! We&#8217;re back from a summer break &#8212; no, not to go off to some vacation paradise. We were crunching away on our next big O&#8217;Reilly release, Head First C#. We&#8217;ll post more about it as we get closer to publication which, according to its Amazon page, is due out in just a couple [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone! We&#8217;re back from a summer break &#8212; no, not to go off to some vacation paradise. We were crunching away on our next big O&#8217;Reilly release, Head First C#. We&#8217;ll post more about it as we get closer to publication which, according to <a title="Head First C# on Amazon.com" href="http://amazon.com/o/ASIN/0596514824/">its Amazon page</a>, is due out in just a couple of months.In the meantime, we&#8217;ll keep the new posts coming for our regular readers. We love you, readers! And we especially love readers who send us questions, because, as it turns out, Jenny and I get a lot of great questions sent to us. Here&#8217;s one we got a few days ago:</p>
<blockquote><p>Dear Jenny and Andrew,</p></blockquote>
<blockquote><p>I&#8217;ve been told by a couple of people &#8220;business analyst&#8221; positions were safe locally in the near future. I found &#8220;Applied Software Project Management &#8221; on the internet. I&#8217;m currently trying to improve some of my skills, in an effort to re-enter the local job market. I&#8217;ve been a developer, programmer, analyst for over twenty years. I love building new software. I know you have a number of books that would be helpful. I&#8217;m also reading some of the &#8220;Head First&#8221; books. Is &#8220;Applied Software Project Management&#8221; the best place to start to build these skills?</p></blockquote>
<blockquote><p>Thank you in advance for your time,</p></blockquote>
<blockquote><p>Eric D.<br />
Clemmons, NC   USA</p></blockquote>
<p>Now, this is an especially good question because it lets us plug our first book, <a title="Applied Software Project Management" href="http://stellman-greene.com/aspm">Applied Software Project Management</a>. More importantly, it&#8217;s a topic that&#8217;s near and dear to my heart, since I spent a few years managing a really incredible team of business analysts a while back. I learned an enormous amount from them, and I feel lucky that I can share a little of that with you, too.</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/08/business-analyst.png" alt="Business Analyst" /></p>
<p>It was near the tail end of the Silicon Alley dot-com days, although I was working at a decidedly <em>non</em>-dot-com company. At the time, I&#8217;d already been managing a team of software engineers &#8212; developers, architects and the like &#8212; for a few years at a New York-based financial software company. I felt a lot like Miles Silverburg on <a href="http://imdb.com/title/tt0094514/">Murphy Brown</a>: a relatively fresh-faced manager with a team of seriously seasoned and talented people who, to be honest, knew a lot more about the job than I did. Luckily, I&#8217;m a quick study, and I had some really great people to learn from.</p>
<p>First and foremost, I learned a lot more about what makes a good business analyst. Very few people start out as a business analyst &#8212; they usually move into the field from another area. Some of my team members started off as software engineers, others started off on the business side. What they all had in common was a deep understanding of users and how to make sure their needs were met. Throw in a healthy dose of project management knowledge, add a pinch of quality engineering, and top it off with a solid background in software requirements engineering tools and techniques, and you end up with a well-rounded, highly effective business analyst.</p>
<p>So that&#8217;s a tall order &#8212; and I should know, since I had to hire a whole team of people who fit that bill. I&#8217;ve gotten a lot of skepticism over the years from people who don&#8217;t believe that you really need someone who has such a broad background. And I&#8217;m sure that there are plenty of people with the title &#8220;business analyst&#8221; who can barely do their jobs&#8230; because there are people with <em>every title</em> in <em>every industry</em> who can barely do their jobs. But why does it take so much to be a <em>good</em> business analyst?</p>
<p>Consider what the real job of a business analyst is in a software project. She&#8217;s got to talk to users and figure out what their needs are. That&#8217;s a tough job, because users have a tricky habit of asking for things that don&#8217;t necessarily fit their needs. Time and time again I saw the people on my team tease the real needs out of users who, to be honest, didn&#8217;t really understand what they wanted. And that&#8217;s a really tough job. It requires some very solid elicitation skills, and a good familiarity with software requirements engineering tools and practices (like <a href="http://www.stellman-greene.com/use_case">this one</a>, <a href="http://www.stellman-greene.com/functional_requirement">this one</a> and <a href="http://www.stellman-greene.com/SRS">this one</a>). Because the other part of the business analyst&#8217;s job is taking those needs and turning them into a <strong>functional solution</strong> that can be implemented in software.</p>
<p>That&#8217;s one thing that Jenny and I spend a lot of time talking about in <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>. We go over exactly what it means to construct a functional specification, and how that&#8217;s <a title="Requirements vs. Design" href="http://www.stellman-greene.com/aspm/content/view/30/41/">different from designing software</a>. Just as importantly &#8212; and this is where a good understanding of quality engineering comes in &#8212; you need to make sure the users actually understand that solution, which means <a title="Review Practices" href="http://www.stellman-greene.com/reviews">holding lots of reviews</a>.</p>
<p>Finally, a good business analyst needs to be able to work with the rest of the engineering team to make sure that those needs and requirements actually get built into software. And that&#8217;s where a good understanding of project management comes in. She&#8217;ll have to work with the team to make sure they understand everything that needs to be built, and she&#8217;ll usually play a big role in the estimation &#8212; which means she needs a good understanding of <a title="Estimation chapter from Applied Software Project Management" href="http://stellman-greene.com/chapter3">estimation practices [PDF]</a>.</p>
<p>So to answer Eric&#8217;s original question, where should someone start building skills to get a job as a business analyst? If you looked at any of those links, then it probably won&#8217;t surprise you that I&#8217;d recommend <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a> to anyone who wants to get a head start as a business analyst. I also really like Karl Weigers&#8217; book, <a href="http://www.amazon.com/Software-Requirements-Second-Karl-Wiegers/dp/0735618798/">Software Requirements (2nd Edition)</a>. That book was a huge help to me when I was first learning about requirements engineering. I also learned a lot from <a href="http://www.amazon.com/Software-Requirements-Engineering-Richard-Thayer/dp/0818677384/">Software Requirements Engineering (2nd Edition)</a>, a compilation of classic IEEE papers edited by Richard Thayer and Merlin Dorfman &#8212; including the classic <a title="Dr. James Rumbaugh" href="http://en.wikipedia.org/wiki/James_Rumbaugh">Jim Rumbaugh</a> paper on use cases, which I consider one of the most important papers ever written about requirements engineering. The best book on use cases that I&#8217;ve found is <a href="http://www.amazon.com/Use-Cases-Requirements-Context-Second/dp/0321154983/">Use Cases: Requirements in Context (2nd Edition)</a> by Daryl Kulak and Eamonn Guiney. When I was hiring business analysts, I would definitely have been pleased with a candidate who was familiar with the concepts in these books.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Kitchen of the Future</title>
		<link>http://www.stellman-greene.com/2007/05/30/the-kitchen-of-the-future/</link>
		<comments>http://www.stellman-greene.com/2007/05/30/the-kitchen-of-the-future/#comments</comments>
		<pubDate>Wed, 30 May 2007 15:07:53 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Gold Plating]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Users]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/05/30/the-kitchen-of-the-future/</guid>
		<description><![CDATA[What is it with futuristic kitchens? I swear I&#8217;ve seen the same TV segment about the &#8220;kitchen of the future&#8221; repeated on different channels with different people at least twice a year for the last decade or so. This wired article seems to have a good description of the generic kitchen of the future: Kitchen [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/05/a-clear-need.png" alt="A clear need for a better kitchen" /></p>
<p>What is it with futuristic kitchens? I swear I&#8217;ve seen the same TV segment about the &#8220;kitchen of the future&#8221; repeated on different channels with different people at least twice a year for the last decade or so.</p>
<p>This <a title="Wired - NextFest: Imagination" href="http://www.wired.com/wired/archive/14.09/nextimagine.html">wired article</a> seems to have a good description of the generic kitchen of the future:</p>
<blockquote><p><strong>Kitchen of the future<br />
<em>General Electric</em></strong><br />
What if your appliances were so smart they took the drudgery out of meal preparation? &#8220;Your kitchen can basically be your sous chef,&#8221; says Marc Hottenroth, an industrial designer who helped create GE&#8217;s concept kitchen. Call home from work and your pantry and fridge – outfitted with RFID readers – will tell you what&#8217;s stocked, suggest meal options, and list the ingredients you&#8217;ll need to pick up at the grocer. (They&#8217;ll also remind you to buy milk when you&#8217;re almost out.) Craving a quiche? GE&#8217;s kitchen will guide you through assembling one and heat the oven to the optimal temperature. If, say, elderly Aunt Rosa is visiting from Italy and wants to whip up some gnocchi instead, the appliances can display text in larger type … and in Italian. What&#8217;s more, GE&#8217;s setup redistributes energy (such as using excess oven heat to warm dishwater) to lower power bills. Rather not cook tonight? The kitchen can find a number for pizza delivery.</p></blockquote>
<p>There you go! It&#8217;s got everything. It gives you recipes, tells you what&#8217;s in your fridge, and lets you look up phone numbers. All that, and it will remind you to buy milk.</p>
<p>Sounds great! So why does the kitchen of the future rub me the wrong way? And, more importantly, what lessons about building better software can we learn from the kitchen of the future?</p>
<p>Let&#8217;s put aside for a moment the fact that it&#8217;s pretty unlikely that your elderly Italian aunt Rosa doesn&#8217;t already how to make gnocchi. There&#8217;s one thing that&#8217;s true about every engineered product, whether it&#8217;s a stove, software or a slide rule: it&#8217;s built to <strong>meet someone&#8217;s needs</strong>. But there&#8217;s another thing that&#8217;s almost always true: <strong>some needs aren&#8217;t obvious</strong>. And it may just turn out that you&#8217;re building a kitchen that doesn&#8217;t actually meet real needs that people have.</p>
<p>Here&#8217;s an example. A hat seems like a pretty simple product that meets a straightforward need, right? It keeps the sun off your head. But wait a minute&#8230; plenty of people wear baseball caps inside, where there&#8217;s no sun to protect you from. And they&#8217;re not playing baseball. So hats fill another need &#8212; they help the wearer feel fashionable. And there are other needs, too. A baseball cap has a visor that&#8217;s placed in a way that shields your eyes from the sun, but it also advertises a sports team, and, when adorned with the proper Greek letters and bent in exactly the right way, makes frat boys look cool to other frat boys. Those are all important needs.</p>
<p>What about a toy program that you just threw together in your spare time because you were bored? Does that fill a need? Sure! You needed to kill some time, and it served that need perfectly.</p>
<p>So what does all this have to do with the kitchen of the future?</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/05/the-perfect-kitchen-gui.png" alt="The perfect kitchen GUI?" /></p>
<p>Take a minute and have a look at this excerpt from a <a title="CNN segment on the Kitchen of the Future" href="http://transcripts.cnn.com/TRANSCRIPTS/0705/12/oh.01.html">CNN transcript</a> of a segment about one particular kitchen of the future:</p>
<blockquote><p>TIM WOODS, VICE PRESIDENT, INTERNET HOME ALLIANCE: This is kind of a nerve center for the entire kitchen. In fact, it&#8217;s the nerve center for the home. This is the HP TouchSmart PC. And it&#8217;s kind of social computing, right, at its best.</p>
<p>But the idea here is, you put everything in one place at a touch point. There&#8217;s a middleware program on this from a company called Exceptional Innovation. And what that did is, it brought all of these elements like lighting and shade control and music, and put them all into one interface. Now, mom does about 80 percent of the input on any family calendar, but she wants the ability for dad to go in there, the kids to go in there, leave notes &#8211; do all of these things that really become tools for the family.</p></blockquote>
<p>Now, I don&#8217;t want to knock HP and Exceptional Innovation. I&#8217;m sure they worked hard on their software, and I certainly know what it&#8217;s like <a title="Note from the editors: Buy this book!" href="http://www.amazon.com/Head-First-PMP/dp/0596102348/">having a product to sell</a>. And they&#8217;re following the siren call of the Kitchen of the Future that plenty of people have followed before, and I can&#8217; blame them for that.</p>
<p>But really? Controlling the lights and keeping a family calendar &#8212; is a computer really the best way to do that? Most families have a dry-erase board or calendar stuck to the fridge. It meets their planning needs really well.  <strong>It&#8217;s much more Agile.</strong> (And, interestingly, it never crashes.) Think about it from a software development perspective: do you want to go through a whole bunch of screens in a touch-screen GUI to get to your calendar? Or do you just want to go scrawl a note with a marker? Which of those seems &#8220;heavyweight&#8221;? Which seems more agile?</p>
<p>The same goes for controlling the lights and the entertainment center. Most kitchens have a small handful of lights. I&#8217;ve yet to find a software interface that works better than a light switch or a dimmer on the wall. Plus, you can find a light switch in the dark when you&#8217;re half-asleep and looking for a midnight snack. I&#8217;d be surprised if <em>that&#8217;s</em> a need that most lighting control software developers realistically considered.</p>
<p>Which brings me to buying milk. Just about every Kitchen of the Future I&#8217;ve seen in the past ten years makes a point of being able to tell you that you&#8217;re out of milk. (On the video, the computer in the CNN segment showed an image of a Post-It note displaying a hand-written note that read, &#8220;Buy milk!&#8221; I have the feeling that showing a picture of a Post-It note seems, from a UI perspective, to be an admission of defeat.) Is it a real need? Yes, with the exception of or vegan friends, we do all need to buy milk.</p>
<p>But is it really so hard to figure out when you&#8217;re low on milk?And if it is, can we realistically expect the kitchen to know when we&#8217;re low on milk? Will we always need to put the milk on a special <a href="http://www.willbeta.com/lose-weight-exercise/"><span style="display:none;">Lose </span>Weight<span style="display:none;"> Exercise</span></a> sensor? Will I get a false alert when little Kaitlynne or Brandyn puts the milk back on the wrong spot in the fridge? Does it know when my milk&#8217;s gone bad, or only if it&#8217;s low? It all seems far more complex and error-prone than just having a stack of Post-Its and a marker next to the fridge. The simplest and most convenient solution to the problem is still scrawling &#8220;buy milk&#8221; on a Post-It and sticking it somewhere obvious.</p>
<p>And that&#8217;s my point. When you get down to it, the Kitchen of the Future is available to us today at a reasonable price. Why don&#8217;t we all have one? Because it doesn&#8217;t meet a need. It&#8217;s an <a href="http://www.willbeta.com/lose-weight-exercise/"><span style="display:none;">Lose Weight </span>Exercise</a> in <a href="http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29">gold-plating</a>. It&#8217;s a solution in search of a problem. And I <em>get it</em>. I&#8217;m a programmer at heart, and I love new applications of cool technology significantly more than the next guy. But we won&#8217;t find buyers for our products if they don&#8217;t fill a need.</p>
<p>And that&#8217;s the software lesson to learn here. Make sure your software always meets someone&#8217;s needs <strong>before </strong>you start building it. Because the last thing you want is to put your Kitchen of the Future out there, only to discover that the world&#8217;s just not ready for it yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/05/30/the-kitchen-of-the-future/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

