<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Building Better Software</title>
	
	<link>http://www.stellman-greene.com</link>
	<description>because users want their software to work</description>
	<lastBuildDate>Sat, 31 Jul 2010 18:57:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BuildingBetterSoftware" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="buildingbettersoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Our obsessive project tracking problem</title>
		<link>http://www.stellman-greene.com/2010/07/31/our-obsessive-project-tracking-problem/</link>
		<comments>http://www.stellman-greene.com/2010/07/31/our-obsessive-project-tracking-problem/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 18:43:14 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=450</guid>
		<description><![CDATA[As a group, we developers have a project tracking problem: the problem is that we constantly, almost obsessively want to track our projects, and it’s made worse by the fact that it’s so easy to abuse otherwise great tools like JIRA and Bugzilla. Unfortunately, while tracking projects may feel useful and productive, for most teams it’s just busywork – and it can lead to a self-imposed exercise in needless bureaucracy that just wastes our time. But with a few ground rules, you can escape the project tracking trap and use a tracking tool effectively.]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Calibri, sans-serif; font-size: x-small;"> </span></p>
<p><em>As a group, we developers have a project tracking problem: the problem is that we constantly, almost obsessively want to track our projects, and it’s made worse by the fact that it’s so easy to abuse otherwise great tools like <a href="http://www.atlassian.com/software/jira/">JIRA</a> and <a href="http://www.bugzilla.org/">Bugzilla</a></em><em>. Unfortunately, while tracking projects may feel useful and productive, for most teams it’s just busywork – and it can lead to a self-imposed exercise in needless bureaucracy that just wastes our time. But with a few ground rules, you can escape the project tracking trap and use a tracking tool effectively.</em></p>
<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2010/07/project-tracking.png"><img class="alignnone size-full wp-image-453" title="Better code through project tracking" src="http://www.stellman-greene.com/blog/wp-content/uploads/2010/07/project-tracking.png" alt="" width="550" height="529" /></a></p>
<p><strong>Who needs Big Brother?</strong></p>
<p>About five years ago, a small company brought me in for a few months to help them do better project management. For about a year before I got there, they’d put a couple of their best developers on the problem, and they came up with an ingenious solution for tracking projects. The team built a database to keep track of all the projects they were working on, typically about a dozen and a half simultaneous projects running at any time. This tool gave them the ability to figure out exactly what tasks had been done, who did them, and how long they took. If you wanted to know what any specific programmer was working on eight weeks ago on Tuesday afternoon, their tool would be able to tell you that.</p>
<p>And it all worked perfectly.</p>
<p>Except that their projects were still late and full of bugs, and the users were losing their last shred of patience. This team had promised their users that things would get better with their fantastic new project tracking system. But even though the system was working exactly as advertised, the software still had serious problems, and everyone was unhappy.</p>
<p>I’ve been thinking a lot about that company lately because I’ve been doing a lot of work with <a href="http://www.atlassian.com/software/jira/">JIRA</a>. And while JIRA is a really good tool – one that can have a very positive effect on how you manage a project – it seems to really tempt a lot of good developers down the same project tracking trap that the small company fell into.</p>
<p>Programmers normally hate it when their time is tracked, which is obvious to anyone who makes the mistake of suggesting to a programming team that they should start filling out timecards that list out exactly what each person did that day. That happened at my first programming job after college: the boss, a newly minted MBA, told the programmers to fill out timecards that listed what project they were working on hour by hour, and there was nearly a rebellion. But for some reason, <a href="http://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems">JIRA, Bugzilla, and other issue tracking systems</a> cause programmers to step up and volunteer for exactly that treatment. It&#8217;s an odd phenomenon, and I think it has an interesting explanation.</p>
<p>Let’s get something straight, here: I really like JIRA a lot. It’s a great issue tracking tool, and a very good workflow tool when it’s used right. I’ve spent some time building JIRA plugins, and the plugin API is intuitive and easy to use. Sure, I’ve got a couple of nitpicks here and there (I’m not so happy with the user interface or the filters in version 3.x, although it’s definitely improved in JIRA 4). But for the most part, JIRA is one of the best issue management and workflow tools I’ve ever used.</p>
<p>When it’s used right.</p>
<p>But when you take a perfectly good tool and abuse it, you&#8217;re bound to get bad results. And that&#8217;s especially true when it comes to project tracking tools.</p>
<p><a href="http://www.stellman-greene.com/blog/wp-content/uploads/2010/07/nail-screwdriver-fail.png"><img class="alignnone size-full wp-image-456" title="FAIL" src="http://www.stellman-greene.com/blog/wp-content/uploads/2010/07/nail-screwdriver-fail.png" alt="" width="550" height="492" /></a></p>
<p><strong>Tracking projects is not a useful goal</strong></p>
<p>JIRA suffers from a problem that a lot of really good issue tracking tools suffer from. It’s really good at tracking things. And for a lot of developers, that causes a “when you’re holding a hammer, everything looks like a nail” problem. Actually, scratch that. It causes a &#8220;you&#8217;re holding a screwdriver, but for some reason you want to pound nails with it&#8221; problem. It&#8217;s odd when you step back from it, but it really seems to make sense at the time.</p>
<p>What happens is that some developers – and I admit that I&#8217;ve been guilty of this at least once or twice myself – see a tool that gathers information about what happened on a project, and this causes something to click for us. We  start tracking everything, from requirements to goals to user requests to every little ten-minute task that needs to be done. We become our own &#8220;big brother,&#8221; doing what amounts to voluntarily filling out the most detailed timecards possible.</p>
<p>The &#8220;big brother&#8221; style of project tracking is especially bad when the “pointy haired boss” type of managers pick up on it. Suddenly, the team is being nagged to start entering more and more granular estimates and updating dates in tickets. For a boss who’s nervous about delivering something, it seems like the right thing to do is to start nagging programmers about every little task that’s entered into the system, or chasing down anyone who’s got a task assigned without a due date.</p>
<p>Which is especially bad, because that’s not really what those tools are for. There’s a big difference between tracking a task or a bug so it doesn’t slip between the cracks and tracking every little thing that a the programmers do for posterity. I think it’s especially ironic that developers often volunteer for this themselves. I think it’s because we see a tool that can track something and it causes us to want to use it. “It tracks tasks? Then it should track <em>all the tasks</em>!”</p>
<p><strong>Better living through project tracking</strong></p>
<p>A while back the New York Times ran a story on people who use everyday tools like Foursquare and Twitter, blogs, spreadsheets, and datebooks to <a href="http://www.nytimes.com/2010/05/02/magazine/02self-measurement-t.html">obsessively track data about themselves</a>. I think this excerpt is telling, especially the bit at the very end (emphasis mine):</p>
<blockquote><p>At the center of this personal laboratory is the mobile phone. During the years that personal-data systems were making their rapid technical progress, many people started entering small reports about their lives into a phone. Sharing became the term for the quick post to a social network: a status update to <a href="http://www.facebook.com/">Facebook</a>, a reading list on <a href="http://www.goodreads.com/">Goodreads</a>, a location on <a href="http://www.dopplr.com/">Dopplr</a>, Web tags to <a href="http://delicious.com/">Delicious</a>, songs to<a href="http://www.last.fm/"></a><a href="http://Last.fm" target="_">Last.fm</a>, your breakfast menu on Twitter. “People got used to sharing,” says David Lammers-Meis, who leads the design work on the fitness-tracking products at Garmin. “The more they want to share, the more they want to <em>have</em> something to share.” Personal data are ideally suited to a social life of sharing. You might not always have something to say, <em><strong>but you always have a number to report</strong></em>.</p></blockquote>
<p>I think that the sort of person who becomes a developer is especially susceptible to whatever it is that causes <a href="http://www.kk.org/quantifiedself/2010/02/a-remarkable-life-logging-proj.php">some people to obsessively track things about their lives</a>. My personal theory is that this is caused by the same itch causes us to want to obsessively collect every last episode of MST3K (or whatever it is we happen to want to obsessively collect). And like that giant collection of, say, legos or video game cartridges or Start Wars figures memorabilia or dice, at some point we can&#8217;t actually play with most of it. That&#8217;s fine for collections (assuming you have it in a cool display case, and not strewn all around your home in piles so high that they cause a fire hazard). But for tracking data from projects, it&#8217;s worse than useless, because it takes effort to keep up, and it can demoralize the software team because they start to feel like they&#8217;re creating more tickets than new lines of code.</p>
<p>Luckily, if you follow a few ground rules, you can break the obsessive cycle and start using project tracking the way it should be used. Here&#8217;s what I&#8217;ve recommended to people in the past, and it seems to get good results:</p>
<ul>
<li><strong>Figure out in advance what you want to track.</strong> Most teams use an issue tracker for bugs. A lot of teams use it to figure out what work the developers are going to do. Some use it for new feature requests. I&#8217;ve seen people try to use an issue tracker for managing requirements (although personally, I really dislike that use of it). All of that could be fine, but any of it can potentially become obsessive. Before you start your project or the next iteration, sit down with the team for a few minutes and write down what you&#8217;ll be tracking. Stick it on a Wiki page, and add a sentence or two explaining how each one of those things needs to be used. I&#8217;m always amazed at how just a little bit of planning like this keeps the way we use a tool from creeping into &#8220;big brother&#8221; territory.</li>
</ul>
<ul>
<li><strong>Use post-mortem reports to track your lessons learned.</strong> One reason that &#8220;big brother&#8221; style project tracking makes intuitive sense is that we want to keep track of the lessons we learned on this project in order to make the next one run better. But there&#8217;s very little you can learn from an overwhelming pile of tracking tickets. Instead, try <a href="http://www.stellman-greene.com/2009/07/24/taking-stock-of-a-failed-project/">running a project post-mortem</a> at the end of the project. And don&#8217;t just do it for projects that ran badly. Post-mortems are really good for making sure you take a good project and turn it into great habits for the team by writing down the lessons you learned.</li>
</ul>
<ul>
<li><strong>Focus on trends and simple metrics, not complete history.</strong> A good project tracking system can spit out a lot of reports. So many reports, in fact, that it&#8217;s hard to make any real sense of them. That&#8217;s why I like to try to simplify the kind of data I get out of the system. I&#8217;m a big fan of simple metrics like (% of engineering effort per project phase) that let you compare projects or iterations against each other. Also, burn-down charts or other earned value metrics can be really valuable in figuring out how your current project is going.</li>
</ul>
<p>The bottom line is that there&#8217;s a difference between project tracking and actually managing your project. If you really want to use JIRA for project management, use a tool like <a href="http://www.atlassian.com/software/greenhopper/">Greenhopper</a> that was built for it. (I&#8217;ve been using Greenhopper lately, and I like it a lot. But if someone has a pointer to an open source tool they really like that ties a task board or agile project management into their issue tracker, I&#8217;d love to hear about it.) The most important thing to remember is that tracking your project is a means to an end, and not a goal by itself.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/t8aqBtA7jDQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2010/07/31/our-obsessive-project-tracking-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing Head First C#, 2nd edition</title>
		<link>http://www.stellman-greene.com/2010/06/22/announcing-head-first-c-2nd-edition/</link>
		<comments>http://www.stellman-greene.com/2010/06/22/announcing-head-first-c-2nd-edition/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:17:36 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=478</guid>
		<description><![CDATA[Jenny and I are really proud to announce that the second edition of our bestselling C# learning book, Head First C#, went to press! We worked really hard on it, and we&#8217;re very happy with how it came out. Are you looking for the easiest way to become a great C# programmer? If want to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.headfirstlabs.com/books/hfcsharp/"><img title="Head First C#, 2nd Edition" src="http://covers.oreilly.com/images/0636920000679/lrg.jpg" alt="Head First C#, 2nd Edition" width="500" height="578" border="1" /></a></p>
<p>Jenny and I are really proud to announce that the second edition of our bestselling C# learning book, <a href="http://www.headfirstlabs.com/books/hfcsharp/"><em>Head First C#</em></a>, went to press! We worked really hard on it, and we&#8217;re very happy with how it came out.</p>
<p>Are you looking for the easiest way to become a great C# programmer? If want to get productive fast with C#, .NET and Visual Studio 2010, then this is the book you&#8217;re looking for. We show you how to learn C# by building over 100 different projects—including lots of games!—and solving dozens of puzzles.</p>
<p><em>Head First C#</em> is a complete learning experience for programming with C#, the .NET Framework, and the Visual Studio IDE. Built for your brain, this book covers C# and .NET 4.0 and Visual Studio 2010, and teaches everything from inheritance to serialization.</p>
<p>But don&#8217;t take our word for it! Download the <a href="http://www.headfirstlabs.com/books/hfcsharp/hfcsharp_free_book.pdf">free Head First C# eBook [PDF]</a>, which includes the first three chapters, complete. Or have a look at this <a href="http://www.headfirstlabs.com/books/hfcsharp/Build-a-typing-game-updated.pdf">typing game project [PDF]</a> from chapter 4 to get a preview of the kinds of projects you&#8217;ll build throughout the book.</p>
<p>So check out <em>Head First C#</em> today, and see what the buzz is all about! <a href="http://oreilly.com/catalog/0636920000679/">Available now from O&#8217;Reilly</a>, and wherever fine books are sold.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/_fIxSxyWENc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2010/06/22/announcing-head-first-c-2nd-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/Y5yit3VSFu0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2010/02/17/nonfunctional-requirements-qa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>When team members hate each other</title>
		<link>http://www.stellman-greene.com/2009/10/27/when-team-members-hate-each-other/</link>
		<comments>http://www.stellman-greene.com/2009/10/27/when-team-members-hate-each-other/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 13:58:39 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=430</guid>
		<description><![CDATA[We don&#8217;t always get to choose our teammates, especially at work. So what do you do when you just don&#8217;t get along with someone on your team? Not too long ago, I was doing our Beautiful Teams talk at a brown bag lunch for a big financial company here in New York. At the end [...]]]></description>
			<content:encoded><![CDATA[<p><em>We don&#8217;t always get to choose our teammates, especially at work. So what do you do when you just don&#8217;t get along with someone on your team?</em></p>
<p><img class="alignnone size-full wp-image-431" title="What's your point?" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/10/whats-your-point.png" alt="What's your point?" width="500" height="463" /></p>
<p>Not too long ago, I was doing our <a href="http://www.stellman-greene.com/2009/04/23/our-new-beautiful-teams-talk-at-boston-spin/">Beautiful Teams talk</a> at a brown bag lunch for a big financial company here in New York. At the end of the talk, I got a really good question:</p>
<blockquote><p><em>What do you do when you&#8217;re on a team with people who don&#8217;t get along?</em></p></blockquote>
<p>We don&#8217;t get to choose our teams, and while I&#8217;ve been on plenty of teams that gelled really well, I&#8217;ve definitely had to work with people who just rubbed me the wrong way or, worse, where the feeling was mutual. It&#8217;s a tough problem, but one that should be really familiar to anyone who&#8217;s been working with teams for a long time.</p>
<p>I have to admit that while I&#8217;ve had success working on teams with people who didn&#8217;t get along, there have definitely been a few times when I didn&#8217;t handle that situation as well as I could have. Luckily, those are the situations where we learn the most.</p>
<p>That&#8217;s actually one of the main reasons Jenny and I wanted to talk to Andy Lester when we were talking to contributors for <em><a href="http://www.amazon.com/Beautiful-Teams-Inspiring-Cautionary-Veteran/dp/0596518021/">Beautiful Teams</a></em>. Andy runs a great website called <a href="http://theworkinggeek.com/">The Working Geek</a>, where he talks about working life for programmers, sysadmins and other geek types. And he had some really interesting things to say about how people interact with each other — especially geeky types (like me), since we seem to be especially prone to interpersonal problems. (Imagine that!)</p>
<p>I really liked this quote from Andy, because I think it cuts to the heart of the matter:</p>
<blockquote><p><span style="color: #003366;">I was on a team once where I said, &#8220;At the very least, can we just have minimal respect for everyone here?&#8221; And I was asked quite seriously by someone else, &#8220;Well, what if not everybody on this team is worthy of respect?&#8221; And that&#8217;s baffling to me as a human, but it&#8217;s also not uncommon. And that minimal amount of respect is something that many just don&#8217;t get.</span></p>
<p><span style="color: #003366;">— <a title="The Working Geek" href="http://theworkinggeek.com/">Andy Lester</a>, <em>Beautiful Teams</em> (chapter 5)</span></p></blockquote>
<p>He&#8217;s right. When I look back over my own career, I find that many of my own conflicts with people on my team stemmed from a basic lack of respect. Since I was the top programmer on the team, I thought I knew better than everyone else about everything. Once someone got something wrong technically, I&#8217;d write that person off entirely because they didn&#8217;t have my respect.</p>
<p>Andy offers some really good personal advice for getting past those problems, both in his <em>Beautiful Teams</em> chapter and on his blog.</p>
<p>But I wanted to go a little further than that, because sometimes interpersonal problems aren&#8217;t going to be repaired. The person who asked me the question was in this situation: when I asked him about it, it sounded like some of his teammates were simply never going to get along with each other. So what do you do about that?</p>
<p>As it turns out, the answer I gave him comes from another part of <em>Beautiful Teams</em>. When Jenny and I were putting it together, we put a lot of thought into how to divide it into sections. And so many people talked explicitly about setting goals for projects that we ended up including an entire section called Goals.</p>
<p>So my answer to anyone who&#8217;s got insurmountable (at least, in the short run) conflicts between team members is to make sure that you&#8217;ve established what many of our contributors referred to as an &#8220;elevating goal.&#8221;</p>
<p>One of those contributors was <a href="http://www.stevemcconnell.com/">Steve McConnell</a>, who also happens to be one of my favorite authors. We asked another one of our favorite authors (and an old friend of mine), <a href="http://www.scottberkun.com/">Scott Berkun</a>, to interview him for the book, and out of that interview came this great quote:</p>
<blockquote><p><span style="color: #003366;">If you’re out digging ditches, that’s not very elevating or inspiring. But if you’re digging ditches to protect your town that’s about to be attacked by an enemy, well, that’s more inspiring, even though it’s the same activity. And so the leader’s job, really, is to try to determine or frame the activity in such a way that people can understand what the value is.</span></p>
<p><span style="color: #003366;">— <a href="http://www.stevemcconnell.com/">Steve McConnell</a>, Beautiful Teams (chapter 16)</span></p></blockquote>
<p>I think that really cuts to the heart of what it means to establish an elevating vision, and it should help show why that can help get past serious team problems. I have to admit that before working on this book, I hadn&#8217;t really given that much thought to establishing a vision. Yes, establishing a goal for a project is important, but I always thought about it in terms of the work that had to be done. I&#8217;d generally dismiss anything like an &#8220;elevating vision or goal&#8221; as a business-speak buzzword. A really valuable lesson for me was just how important it is to get everyone on the team on board with that one singular vision — and I mean actually understanding and embracing the vision for the project, and not just agreeing to some sort of lame mission statement.</p>
<p>What&#8217;s especially useful about getting everyone on the team to see the same vision is that you don&#8217;t need to be a manager or team lead to do it. All you need to do, minimally, is talk to people on your team. I&#8217;ve been brought onto projects where people on the team thought that there were serious architecture or requirements or quality problems. But once I started I talking to people, it turned out that everyone had a completely different idea of what they were building and why they were building it. I&#8217;ve found over and over again that just writing down what we&#8217;re building and who we&#8217;re building it for (using a <a title="Vision and Scope Document" href="http://stellman-greene.com/vision_and_scope">Vision and Scope Document</a>, for example) is enough to help the situation. It&#8217;s uncanny how often I&#8217;ve heard people say something like, &#8220;Wait, we&#8217;re building <em>what</em>? I thought we were doing something completely different!&#8221;</p>
<p>Anyone on the team can do that, and it&#8217;s a really valuable tool to help with serious teammate problems. The clearer everyone sees the real goal of the project, the easier it is to get past the disagreements and arguments and get on with the work. It&#8217;s something I&#8217;ve seen in real life many times, and it really does work: people are much more willing to settle disagreements and just get down to business if they can see that there&#8217;s a real end that they&#8217;re working towards.</p>
<p>When I look back at the times where I was able to successfully navigate serious team problems that were caused by people who didn&#8217;t like each other, I can see how this is exactly what I did. Even when people didn&#8217;t get along, I found that if I was able to get each person to see the bigger picture and work towards something he or she believed in, then most of the time they were able to put their problems on the back burner, at least long enough to get through, say, a meeting or a code review. And that was enough to save the project.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/wVMw__l7uWM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/10/27/when-team-members-hate-each-other/feed/</wfw:commentRss>
		<slash:comments>1</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>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/Q3xVRIAFmH4" height="1" width="1"/>]]></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>What makes architecture “better”?</title>
		<link>http://www.stellman-greene.com/2009/09/22/what-makes-architecture-better/</link>
		<comments>http://www.stellman-greene.com/2009/09/22/what-makes-architecture-better/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 14:45:04 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=388</guid>
		<description><![CDATA[I&#8217;ve got some news! Jenny and I are going to be doing our Beautiful Teams talk at the upcoming IT Architect Regional Conference. We spoke at last year&#8217;s ITARC, and I was really impressed with the quality of their speakers. There were some really good insights into software architecture. It&#8217;s a great group, and I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve got some news! Jenny and I are going to be doing our <em>Beautiful Teams</em> talk at the upcoming <a title="ITARC 2009 NYC" href="http://www.iasahome.org/web/itarc/2009/NYC">IT Architect Regional Conference</a>. We spoke at last year&#8217;s ITARC, and I was really impressed with the quality of their speakers. There were some really good insights into software architecture. It&#8217;s a great group, and I definitely recommend it to anyone looking to do a serious deep dive into software architecture.</p>
<p><img class="alignnone size-full wp-image-393" title="Better" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/09/Better.png" alt="Better" width="400" height="533" /></p>
<p>And that got me thinking about one of the important areas of architecture, one that I think a lot of people tend to overlook. Actually, what really got me started thinking about it was a Slashdot post, &#8220;<a href="http://news.slashdot.org/story/09/09/20/1444228/News-Content-As-a-Resource-Not-a-Final-Product">News Content As a Resource, Not a Final Product</a>,&#8221; which refers to <a href="http://www.paulgraham.com/publishing.html">this essay on publishing by Paul Graham</a>. At the very top of the article, Graham (unintentionally) brings up a point that I think is interesting:</p>
<blockquote><p><em>Publishers of all types, from news to music, are unhappy that consumers won&#8217;t pay for content anymore.  At least, that&#8217;s how they see it.</em></p>
<p><em>In fact consumers never really were paying for content, and publishers weren&#8217;t really selling it either.  If the content was what they were selling, why has the price of books or music or movies always depended mostly on the format?  Why didn&#8217;t better content cost more? </em></p>
<p><em>A copy of <em>Time</em> costs $5 for 58 pages, or 8.6 cents a page.   <em>The Economist</em> costs $7 for 86 pages, or 8.1 cents a page.  Better journalism is actually slightly cheaper.</em></p>
<p><em>— Paul Graham, <a href="http://www.paulgraham.com/publishing.html">&#8220;Post-Medium Publishing&#8221;</a><br />
</em></p></blockquote>
<p>I think that begs a basic question: what does &#8220;better&#8221; really mean when it comes to content? Is the Economist really better than Time? Our second book, <em><a href="http://www.amazon.com/Head-First-PMP-Brain-Friendly-Professional/dp/0596801912/">Head First PMP</a></em>, outsells our first book, <em><a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a></em>. Is one better than the other?</p>
<p>Like most questions of &#8220;better,&#8221; you have to understand how something&#8217;s going to be used before you can judge how good it is at its job. If you&#8217;re preparing for the PMP certification exam, <em>Head First PMP</em> is better for that job. If you&#8217;re trying to improve the way your team runs software projects, you&#8217;ll get a lot more mileage out of <em>Applied Software Project Management</em>. That&#8217;s a basic idea behind quality. You can&#8217;t judge the quality of a product without understanding the requirements, and how it&#8217;s going to be used to do a job. (I&#8217;ve been making that point on this blog for <a href="http://www.stellman-greene.com/2006/03/29/quality-really-is-free/">quite a while now</a>!) And when it comes to testing software, that has real-life, practical implications. For example, it means that you can make sure your testing is effective by concentrating your tests on how the software is going to be used.</p>
<p>But it also has an important impact on architecture. A lot of us run into a serious problem when we&#8217;re designing a complex system: how do you actually &#8220;test&#8221; your architecture? It&#8217;s not like you can write, say, JUnit or NUnit tests for it. And architecture poses some pretty daunting review challenges. While it&#8217;s certainly a good idea to do architecture reviews, a lot of the time yo&#8217;re more likely to end up doing UI design reviews, prototype walkthroughs, and deployment reviews. Or you&#8217;ll end up starting out trying to review your object model, but you&#8217;ll end up buried in implementation detail.</p>
<p>My goal, when I&#8217;m designing a new system, is to come up with the best architecture I can. What makes one object model or database design &#8220;better&#8221; than another? The best design is the design that does the job best. That&#8217;s why <a href="http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/">user stories</a> are so useful, and why I try to have them done before I start in on the architecture: because they help make sure my design is grounded in the way the system&#8217;s actually going to be used.</p>
<p>Try this the next time you&#8217;re at that point where you&#8217;ve got an initial software architecture laid out, but you haven&#8217;t started in on the coding and you&#8217;re looking for feedback. Instead of diving straight into the review, try starting out by giving an overview of the people who are going to use the system and the job they&#8217;ll be doing. I&#8217;ve found that simply grounding people in the actual goals and purpose of the system really focuses the feedback I get.</p>
<p><a href="http://www.iasahome.org/web/itarc/2009/NYC"><img class="alignnone size-full wp-image-389" title="IASA Speaker 2009" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/09/nyspeaker.jpg" alt="IASA Speaker 2009" width="200" height="138" /></a></p>
<p><em>Andrew and Jennifer will be giving their <strong>Beautiful Teams</strong> talk at the <a href="http://www.iasahome.org/web/itarc/2009/NYC">IT Architect Regional Conference</a> on October 12</em>.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/hcmRo1t9eiU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/09/22/what-makes-architecture-better/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile testing and understanding change</title>
		<link>http://www.stellman-greene.com/2009/08/23/agile-testing-and-understanding-change/</link>
		<comments>http://www.stellman-greene.com/2009/08/23/agile-testing-and-understanding-change/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 17:18:49 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=384</guid>
		<description><![CDATA[Tomorrow at the Agile 2009 conference, Abby Fichtner and Nate Oster are doing a workshop called Where Does Developer Testing End and Tester Testing Begin?. Jenny and I hope you can make it, because they&#8217;ll be doing a giveaway of autographed copies Beautiful Teams. Check out my O&#8217;Reilly Community posts for more information: Agile testing [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-118" title="What the..." src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/12/what-the.png" alt="What the..." width="484" height="486" /></p>
<p>Tomorrow at the <a href="http://agile2009.com/">Agile 2009 conference</a>, Abby Fichtner and Nate Oster are doing a workshop called <a href="http://agile2009.com/node/3205"><em>Where Does Developer Testing End and Tester Testing Begin?</em></a>. Jenny and I hope you can make it, because they&#8217;ll be doing a giveaway of autographed copies  <span id="apture_prvw1"><span style="background-position: right -1349px;"> </span><a href="http://www.amazon.com/gp/product/0596518021"><em>Beautiful Teams</em></a></span>. Check out my <a href="http://oreilly.com/community/">O&#8217;Reilly Community</a> posts for more information:</p>
<ul>
<li><a href="http://broadcast.oreilly.com/2009/08/agile-testing-and-beautiful-te.html">Agile testing and Beautiful Teams (giveaway)</a></li>
<li><a href="http://broadcast.oreilly.com/2009/08/agile-testing-why-good-develop.html">Agile testing: why good developers resist great habits</a></li>
</ul>
<p>In that second post, I spend a little time talking about some of the reasons that programmers resist great practices like test-driven development. Writing that post reminded me of something that Jenny and I wrote about change in <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>:</p>
<blockquote><p><span style="color: #333399;">Many project managers—especially ones who have a technical background—tend to ignore the fact that their organizations are made up of people who need to be convinced of the importance of a change before they will adopt it. Some of these people will have an emotional or even irrational response to any attempt at change; it could take a sea change in the organization before they agree to it.</span></p>
<p><span style="color: #333399;">Irrational attitudes about software development usually boil down to two basic beliefs. First, people believe that most or all software projects are delivered late and delivered with many bugs, and that this is just a fact of life. Second, they believe that their organization is unique, and that the problems they are experiencing are particular to their organization and have never been seen before in any other organization.</span></p>
<p><span style="color: #333399;"> (This second belief may seem odd, considering the many thousands of software organizations around the world that have all used similar tools and techniques to fix very similar problems and make real, lasting improvements. It’s possible that the belief in uniqueness comes from the fact that the software being built truly is unique, in that it has never been built before; it’s not a leap to assume—incorrectly—that the software project and all of itsproblems are therefore also unique to that particular organization.)</span></p>
<p><span style="color: #333399;">Many times, resistance is not irrational at all. Anyone who has been through a change previously—possibly a passing management fad—that didn’t fix the problem (or failed outright) may be resistant to another change. It may seem unfair, but if people in your organization have previously gone through poorly planned changes, it will be harder for you to make changes of your own.</span></p>
<p><span style="color: #333399;">When you are introducing new tools, techniques, or practices in your organization, you may encounter resistance for a number of reasons. By exploring the feelings, fears, and justifications for resisting change that project managers commonly encounter, these reactions can be unraveled and understood.</span></p>
<p><span style="color: #333399;">— Stellman &amp; Greene, <a href="http://www.amazon.com/Applied-Software-Project-Management-Stellman/dp/0596009488/">Applied Software Project Management</a>, p206 (O&#8217;Reilly 2005)</span></p></blockquote>
<p>It&#8217;s really easy to forget about this when you&#8217;re pushing for a change, especially something that requires extra work and learning. (I had to learn that the hard way – hopefully you won&#8217;t have to!)</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/OiVTpX8rVWw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/08/23/agile-testing-and-understanding-change/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The perils of a schedule, part II</title>
		<link>http://www.stellman-greene.com/2009/08/20/the-perils-of-a-schedule-part-ii/</link>
		<comments>http://www.stellman-greene.com/2009/08/20/the-perils-of-a-schedule-part-ii/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 13:01:13 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=378</guid>
		<description><![CDATA[In the first part of this post, I started to answer a reader&#8217;s question about what information you need before you estimate a project and build a schedule. The reader, Wayne, said that he didn&#8217;t &#8220;get a solid sense of the relative timing of the activities (especially the requirements activity),&#8221; because it wasn&#8217;t clear how [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://www.stellman-greene.com/2009/08/14/the-perils-of-a-schedule/">first part of this post</a>, I started to answer a reader&#8217;s question about what information you need before you estimate a project and build a schedule. The reader, Wayne, said that he didn&#8217;t &#8220;get a solid sense of the relative timing of the activities (especially the requirements activity),&#8221; because it wasn&#8217;t clear how much information you need to know about the project before you get started. One thing that Jenny and I come back to again and again is that there is no single &#8220;best,&#8221; one-size-fits-all way of running a project. A schedule is a great tool for planning a project, but you have to actually take a close look at what you know about your project before you start building a schedule. And you need to come to grips with the reality that what you know today could easily change. Even if you have a perfect understanding of today&#8217;s needs (which, in reality, never actually happens), that doesn&#8217;t mean the world won&#8217;t change and your users won&#8217;t need different software tomorrow.</p>
<p>Don&#8217;t get me wrong: I do think schedules are great tools for planning. You can use a schedule to organize the effort and manage your project’s dependencies. And you can use it to communicate with your team. A schedule’s a great way to get a lot of difficult-to-manage information down on paper so you can to see it all in one place. There have been many times over the years when it was only after I had a schedule all sorted out that I could see the project clearly. That’s when I could realize, “Hey, we can save time by doing these two things concurrently,” or, “Uh-oh, we’ve got the riskiest stuff on our critical path. That’s not a good idea!” That&#8217;s how a schedule can be a great tool for understanding your work.</p>
<p>But really, while those are important aspects of a project schedule, they <strong>aren’t</strong> the main way that we use schedules.</p>
<p><img title="That'll light a fire under their asses..." src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/08/light-a-fire.png" alt="That'll light a fire under their asses..." width="400" height="477" /></p>
<p>Think about what happens when you give a schedule to someone. If that person’s on your team, they’ll probably groan – maybe not out loud to you if you&#8217;re the boss, but we all groan a little inside when someone hands us a schedule that we need to meet. Just like a contractor who doesn’t really care whether the renovation on your house takes six weeks or eight weeks, your team doesn’t really care how long their work takes, as long as they have enough time to do it and don’t have to work nights and weekends to scramble to meet an unrealistic deadline. (Obviously, teams take pride in working quickly, but let&#8217;s be realistic here.)</p>
<p>But if you show a schedule to someone who’s not on your team, that schedule makes them happy. They’re generally relieved to see it, because now they know more about when you’re delivering the software. But it’s not the whole schedule they care about. Most of the time, when you hand a schedule to a client, a user or a manager at your company, they see one thing: the deadline. Which you <strong>just committed to</strong>.</p>
<p>And that’s the real nature of the schedule. Your project’s schedule contains a list of everything that you know you have to do – and it’s your way of telling the rest of the world that you’re committed to doing every single item on that list by a certain date. A schedule isn’t really about getting technical input from your team, or about planning out the work. Those things are nice side-effects of building a schedule, but there are tools that you can use to do those things that don’t involve committing to a date.</p>
<p>No, a schedule, at its core, is really about making commitments to other people. Schedules aren’t just there to be followed. They’re there to represent the real-life commitments that you made to other people. If you meet every commitment you made but go entirely off plan, your project will still be successful. But if you &#8220;work the plan&#8221; in perfect, excruciating detail, but you still manage to break the commitments that you made – even if it&#8217;s because of changes you couldn&#8217;t control – your project will be a failure. And <em>that&#8217;s</em> the power a schedule brings to your project. Like any tool, it can be used for good or malice.</p>
<p>That&#8217;s the <em>perilous aspect of building a schedule</em>: as soon as you commit yourself to it, you&#8217;ve introduced potential negative consequences that weren&#8217;t there before you put dates down on paper. (No wonder programmers are so reluctant to give estimates!)</p>
<h4>Project schedules&#8230; not for the commitment-phobic</h4>
<p>Jenny and I do a lot of speaking, and when we do we often find ourselves bringing up the idea that the point of any document is to communicate. Let’s say you’re my client, and we’ve got a requirements specification for a piece of software that I’m building for you. The specification itself, the words printed on paper, that’s not important. What’s important is that what’s in my head matches what’s in your head, that the software I’m planning on building is as close as possible as the software that you’re expecting me to deliver. It just so happens that a software requirements specification is a great tool for making sure that what’s in your head matches what’s in mine.</p>
<p>But the document does something else, too. Once we both have the same understanding, writing it down in a specification and agreeing on it means that we both made a commitment. I made a commitment to build the software that’s described in the document. But just as importantly, you’re making a commitment to me: that if I deliver software that meets that specification, you’ll accept it as complete. If you have changes, that’s fine. We just need to update the specification so that it has those changes.</p>
<p>(Oh, and just in case I didn’t make it clear, that &#8220;specification&#8221; could be a stack of index cards with user stories written on them, and we could make those updates every week or even every day, if that’s what the business needs.)</p>
<p>A schedule works the same way. If we write down and agree on a schedule, that means I promised to give you a certain set of deliverables on certain dates, and you promised to accept them.</p>
<p>At this point, someone who’s studied for the PMP exam might bring up “progressive elaboration,” which reflects the idea that a team can’t know everything about the project they&#8217;re working on at the very beginning. We don’t know everything about how the software will be built and tested when we’re still working on the design, and we don’t know everything about the design when we’re working on requirements. When we get to the next checkpoint we may realize that our earlier estimates were wrong, or that our whole approach was wrong. If we&#8217;re lucky, we&#8217;ve put together a team that accepts this as a basic reality, and plans all work in iterations that deliver complete, working software at the end of each iteration. (And yes, if you’re studying for the PMP exam, you do need to know about iteration!)</p>
<p>But can you see how, even with all of that, it still revolves around commitments?</p>
<p>That’s my point. A schedule is first and foremost a tool for managing your commitments, and only after that is it a tool for actually planning the work. (For a distant third, it’s a record of how the project turned out that you can use to generate metrics.) But the big point is that the schedule doesn’t commit you. <strong>Your commitments commit you.</strong> The schedule just keeps your commitments on paper in one place.</p>
<p>Now, while all of this may sound negative, it&#8217;s not. A good software team that can meet their commitments gains trust from their users, clients and stakeholders. If you&#8217;ve got a reputation for making commitments and sticking to them, you&#8217;ve got something really powerful. You&#8217;ve got the trust of the people you depend on to drive your project forward. And that&#8217;s where the schedule can be a really positive thing. To your users, it represents stable software they can depend on. To your team, it represents normal days without crazy pressure, without working late nights or weekends. When you take your commitments seriously, your schedule represents the truth about your project at any given point, and people come to depend on it.</p>
<p>I want to finish off by excerpting a section from “Applied Software Project Management,” because I think it cuts to the core of the point I’m trying to make about schedules and commitments, and how you can use them effectively.</p>
<blockquote><p><span style="color: #000080;"><strong>Use the Schedule to Manage Commitments</strong></span></p>
<p><span style="color: #000080;">A project schedule represents a commitment by the team to perform a set of tasks. When the project manager adds a task to the schedule and it&#8217;s agreed upon by the team, the person who is assigned to that task now has a commitment to complete it by the task&#8217;s due date. Senior managers feel that they can depend on the schedule as an accurate forecast of how the project is going to go—when the schedule slips, it&#8217;s treated as an exception, and an explanation is required. For this reason, the schedule is a powerful tool for commitment management .</span></p>
<p><span style="color: #000080;">One common complaint among project managers attempting to improve the way their organizations build software is that the changes they make don&#8217;t take root. Typically, the project manager will call a meeting to announce a new tool or technique—he may ask the team to start performing code reviews, for example—only to find that the team does not actually perform the reviews when building the software. Things that seem like a good idea in a meeting often fail to &#8220;stick&#8221; in practice.</span></p>
<p><span style="color: #000080;">This is where the schedule is a very valuable tool. By adding tasks to the schedule that represent the actual improvements that need to be made—for example, by scheduling all of the review meetings—the project manager has a much better chance of gaining a real commitment from the team.</span></p>
<p><span style="color: #000080;">If the team does not feel comfortable making a commitment to the new practice, the disagreement will come up during the schedule review. Typically, when a project team member disagrees with implementing a new tool or technique, he does not bring it up during the meeting where it&#8217;s introduced. Instead, he will simply fail to use it, and build the software as he has on past projects. This is usually justified with an explanation that there isn&#8217;t enough time, and that implementing the change will make the task late.</span></p>
<p><span style="color: #000080;">By explicitly adding a task to the schedule, the project manager ensures that enough time is built in to account for the change. This cements the change into the project plan, and makes it clear up front that the team is expected to adopt the practice. More importantly, it is a good consensus-building tool because it allows team members to bring up the new practice when they review the project plan. By putting the change out in the open, the project manager encourages real discussion of it, and is given a chance to explain the reason for the practice during the review meetings. If the practice makes it past the review, then the project manager ends up with a real commitment from the team to adopt the new practice.</span></p>
<p><span style="color: #000080;">&#8211; Stellman &amp; Greene, <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>, chapter 4 (O&#8217;Reilly, 2005)</span></p></blockquote>
<p>I hope that this helps explain how we think you can use a schedule can be used to help you and your team manage your projects more effectively to build better software.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/hDbSL8zqBOc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/08/20/the-perils-of-a-schedule-part-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The perils of a schedule</title>
		<link>http://www.stellman-greene.com/2009/08/14/the-perils-of-a-schedule/</link>
		<comments>http://www.stellman-greene.com/2009/08/14/the-perils-of-a-schedule/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 10:14:10 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=344</guid>
		<description><![CDATA[We got this e-mail a few days ago from one of our readers: Hello, I bought your book, &#8220;Applied Software Project Management.&#8221; It seems very good overall, but I can&#8217;t get past the fact that your book seems to imply that software requirements come after the project plan/WBS/scheduling. Am I missing something? On page 40, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-357" title="The walls are closing in" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/08/The-walls-are-closing-in.png" alt="The walls are closing in" width="350" height="484" /></p>
<p>We got this e-mail a few days ago from one of our readers:</p>
<blockquote><p><em>Hello,</em></p>
<p><em>I bought your book, &#8220;<a title="Applied Software Project Management" href="http://stellman-greene.com/aspm">Applied Software Project Management</a>.&#8221; It seems very good overall, but I can&#8217;t get past the fact that your book seems to imply that software requirements come </em><em>after the project plan/WBS/scheduling. Am I missing something?</em></p>
<p><em>On page 40, the script for estimating states that the input is documentation that defines the scope of the work being performed. Does this include the SRS? If so, why is this not made more explicit in your book (since requirements plays such a big role)? If not, how can a good estimate and schedule be generator </em><em>before the requirements analysis has been performed?</em></p>
<p><em>I don&#8217;t get a solid sense of the relative timing of the activities (especially the requirements activity). Can you comment on this?</em></p>
<p><em>Thanks!!</em></p>
<p><em>&#8211; Wayne M.</em></p></blockquote>
<p>That’s an excellent question. I’ve got a straightforward answer, and I’ve got a more involved answer.</p>
<p>The straightforward answer is yes. If you’re using <a href="http://www.stellman-greene.com/delphi">Wideband Delphi</a> (or, really, almost any estimation practice) to come up with estimates that you’ll turn into a <a href="http://www.stellman-greene.com/schedule">schedule</a>, then you need to get a handle on exactly what you’re estimating. So yes, when we say in our book that the input to the process is the “Vision and Scope document, or other documentation that defines the scope of the work product being estimated,” the &#8220;other documentation&#8221; we&#8217;re referring to definitely includes any software requirements you have. (For any readers who haven’t read our book, you can download a <a href="http://www.stellman-greene.com/aspm/images/ch03.pdf">PDF of the estimation chapter</a> that this reader&#8217;s referring to.)</p>
<p>Let me be clear about something here. You’re absolutely right that requirements analysis leads to more accurate schedules. If you’re lucky enough to have a really detailed specification at the beginning of the project that describes, in detail, all of the software that you’re going to build, then that will give you a much more accurate schedule than if you had a three-page Vision and Scope document that simply lets you know who the users and stakeholders are, explains their needs, and gives you the broad strokes about what features the team will build to meet those needs.</p>
<p>But when’s the last time you actually had the luxury of a <strong>complete</strong> specification before you had to deliver a schedule? And I’m stressing the word “complete” for a reason: it’s very rare that you’re done with the requirements before you’ve started building the software. So rare, in fact, that neither Jenny nor I have ever seen it in our entire careers, and I suspect very few (if any) of our readers have, either.</p>
<p>A good Agile developer might point out that this is the reasoning behind one of the <a href="http://agilemanifesto.org/principles.html">core Agile principles</a>: “Welcome changing requirements, even late in development.” And, in fact, that’s exactly why we dedicated so much of the chapter on software requirements in <em>Applied Software Project Management</em> to <a href="http://www.stellman-greene.com/aspm/content/view/36/38/">change control</a>, because it’s important to not only accept that change happens, but to recognize it as a good thing. It’s better to change course partway through the project rather than to trundle on to an end goal that you know won’t actually meet your users’ needs or make your customers happy.</p>
<p>So with that in mind, go back to the process you mentioned. Specifically, take a look at the end of the script, because this is where it ties directly into the question you asked:</p>
<table border="1" align="center">
<tbody>
<tr>
<td>Exit Criteria</td>
<td><strong>The project plan has been updated</strong> to reflect the impact of the change, and work to implement the change has begun.</td>
</tr>
</tbody>
</table>
<p>There’s an important idea there in those first six words: the <a href="http://www.stellman-greene.com/project_plan">project plan</a> has been updated. That means that any time your world changes, you need to go back and update the scope, the WBS, the schedule, all the actual stuff you plan to deliverable (which might be written down in a statement of work), the list of people doing the work, a <a href="http://www.stellman-greene.com/risk_plan">risk plan</a> (if you built one)&#8230; all the stuff you used to plan your project.</p>
<h4>&#8230;because there&#8217;s no single one <em>Best Way™</em> to build software</h4>
<p>And that&#8217;s why we didn&#8217;t give an explicit order to the activities. Sometimes you&#8217;ll end up planning out your project and building a schedule before you do requirements analysis; sometimes you&#8217;ll build a schedule after. Our goal was to help you do it well in either case. And by not forcing our readers into a single process or methodology, we don&#8217;t have to pretend to know all the answers&#8230; because, as far as I know, there is no single one <em>Best Way™</em> to build software.  That&#8217;s the main idea, by the way, behind our <a href="http://www.stellman-greene.com/2008/01/31/dont-document-your-process/">&#8220;diagnose and fix&#8221; approach</a> to improving the way you build software. Trying to overhaul your whole software process by doing a major process improvement effort is hard; adopting specific practices that make incremental improvements to the areas that hurt the most is much easier and a lot less risky.</p>
<p>This may sound like we&#8217;re calling for a lot of documentation, but it doesn’t have to be like that. Obviously, if you’re working on a team with dozens or even hundreds of people (like the teams Jenny often leads), this can be a pretty big task. But if you’ve got a small team working on a project that will take a few weeks to do, then this may just amount to rearranging your <a href="http://www.mountaingoatsoftware.com/task-boards">task board</a>, updating your <a href="http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/">user story cards</a>, updating a couple of Wiki pages, and having a quick <a href="http://www.mountaingoatsoftware.com/daily-scrum">stand-up meeting</a> to make sure everyone’s in sync. That’s why people often talk about how running a really big team is like steering an aircraft carrier, because changing course requires miles of water, while running a small team is a lot more like piloting a speedboat that can change course really quickly.</p>
<p>So that’s the straightforward answer. But I think it’s worth delving a little deeper and asking an important question: What’s the nature of a schedule? I know, that probably seems like an odd question, but it’s actually important to understand what schedules are and how they’re used. (Technically, it’s only important if you want your projects to run well.)</p>
<p>A naïve answer might be to simply defer to that old project management chestnut: “Plan the work and work the plan.” If you haven’t heard that saying, take a minute and <a href="http://www.google.com/search?q=%22Plan+the+work+and+work+the+plan%22">do a Google search for it</a>. It’s one of those sayings that people love to quote, and it pretty much summarizes how a lot of people use (abuse?) project schedules.</p>
<p>I don’t like that saying, and there’s a reason for that.  I mean, don’t get me wrong, here. “Working the plan” is fine if it that plan accounts for changes. That’s one thing I really like about the PMBOK® and PMP approach: a whole lot of project planning revolves around how to handle changes, and specifically about dealing with change control. Also, it’s a great idea to make sure that you include a reserve for your project, and you can use risk planning to try to get a handle on the unknown.</p>
<p><em>To be continued in &#8220;<a href="http://www.stellman-greene.com/2009/08/20/the-perils-of-a-schedule-part-ii/">The perils of a schedule, part II</a>&#8220;</em></p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/K3D3TelrY-0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/08/14/the-perils-of-a-schedule/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Taking stock of a failed project</title>
		<link>http://www.stellman-greene.com/2009/07/24/taking-stock-of-a-failed-project/</link>
		<comments>http://www.stellman-greene.com/2009/07/24/taking-stock-of-a-failed-project/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:42:28 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=304</guid>
		<description><![CDATA[Some projects just go wrong. It&#8217;s a fact of life. Projects go over budget, blow their schedules, squander their resources. Sometimes they go off the rails so spectacularly that there&#8217;s nothing you can do except (literally) pick up the pieces and try to learn whatever lessons you can so you don&#8217;t repeat the failure in [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-306" title="Oops?" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/07/oops.png" alt="Oops?" width="500" height="347" /></p>
<p>Some projects just go wrong.</p>
<p>It&#8217;s a fact of life. Projects go over budget, blow their schedules, squander their resources. Sometimes they go off the rails so spectacularly that there&#8217;s nothing you can do except (literally) pick up the pieces and try to learn whatever lessons you can so you don&#8217;t repeat the failure in the future.</p>
<p>Last week I got a phone call from a developer who was looking for some advice about exactly that. He&#8217;s being brought in to repair the damage from a disastrous software project. Apparently the project completely failed to deliver. I wasn&#8217;t 100% clear on the details—neither was he, since he&#8217;s just being brought in now—but it sounded like the final product was so utterly unusable that the company was simply scrapping the whole thing and starting over. This particular developer knows a lot about project management, and even teaches a project management course for other developers in his company. He&#8217;d heard me do a talk about project failure, and wanted to know if I had any advice, and maybe a postmortem report template or a lessons learned template.</p>
<p>I definitely had some advice for him, and I wanted to share it with you. Postmortem reports (reports you put together at the end of the project after taking stock of what went right and wrong) are an enormously valuable tool for any software team.</p>
<p>But first, let&#8217;s take a minute to talk about a bridge in the Pacific Northwest.</p>
<h3>The tragic tale of Galloping Gertie</h3>
<p>One of my favorite failed project case studies is Galloping Gertie, which was the nickname that nearby residents gave to the <a href="http://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_%281940%29">Tacoma Narrows Bridge</a>. Jenny and I talk about it in <a href="http://www.stellman-greene.com/blog/wp-content/uploads/2007/10/2007-10-09-why-projects-fail.pdf">our &#8220;Why Projects Fail&#8221; talk</a> because it&#8217;s a great project failure example—and not just because it failed so spectacularly. It&#8217;s because the root causes for this particular project failure should sound really familiar to a lot of project managers, and especially to people who build software.</p>
<p>The Tacoma Narrows Bridge opened to the public on July 1, 1940. This photo was taken on November 7 of the same year:</p>
<p><img class="alignnone size-full wp-image-307" title="Galloping Gertie" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/07/galloping-gertie.png" alt="Galloping Gertie" width="450" height="320" /></p>
<p>While there were no human casualties, despite heroic attempts at a rescue the bridge disaster <a href="http://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_%281940%29#Tubby_the_dog">claimed the life of a cocker spaniel named Tubby</a>.</p>
<p>Jenny and I showed a video of the bridge collapsing during a presentation of our &#8220;Why Projects Fail&#8221; talk a while back in Boston. After the talk, a woman came up to us and introduced herself as a civil engineer. She gave us a detailed explanation of the structural problems in the bridge. Apparently it&#8217;s one of the classic civil engineering project failure case studies: there were aerodynamic problems, and there were structural problems due to the size of the supports, and there were other problems that combined to cause a distinctive resonance which gave the bridge its distinctive &#8220;gallop.&#8221;</p>
<p><script src="https://media.dreamhost.com/swfobject.js" type="text/javascript"></script></p>
<div id="GallopingGertie_450x240.flv">(We embedded the video of the Tacoma Narrows Bridge collapse here. If you <a href="http://www.macromedia.com/go/getflashplayer">get the Flash Player</a>, you&#8217;ll be able to see it!)</div>
<p><script type="text/javascript">// <![CDATA[
    var sd = new SWFObject('https://media.dreamhost.com/mediaplayer.swf','mpl','450','240','8'); sd.addParam('allowscriptaccess','always'); sd.addParam('allowfullscreen','true'); sd.addVariable('height','240'); sd.addVariable('width','450'); sd.addVariable('file','http://www.stellman-greene.com/video/GallopingGertie_450x240.flv'); sd.write('GallopingGertie_450x240.flv');
// ]]&gt;</script></p>
<p>But one of the most important lessons we took away from the bridge collapse isn&#8217;t technical. It has to do with the designer.</p>
<blockquote><p><span style="color: #333399;">[A]ccording to Eldridge, &#8220;eastern consulting engineers&#8221; petitioned the PWA and the <a title="Reconstruction Finance Corporation" href="http://en.wikipedia.org/wiki/Reconstruction_Finance_Corporation">Reconstruction Finance Corporation</a> (RFC) to build the bridge for less, about which Eldridge meant the renowned New York bridge engineer <a title="Leon Moisseiff" href="http://en.wikipedia.org/wiki/Leon_Moisseiff">Leon Moisseiff</a>, designer and consultant engineer of the <a title="Golden Gate Bridge" href="http://en.wikipedia.org/wiki/Golden_Gate_Bridge">Golden Gate Bridge</a>. Moisseiff proposed shallower supports—girders 8 feet (2.4 m) deep. His approach meant a slimmer, more elegant design and reduced construction costs compared to the Highway Department design. Moisseiff&#8217;s design won out, inasmuch as the other proposal was considered to be too expensive. On June 23, 1938, the PWA approved nearly $6 million for the Tacoma Narrows Bridge. Another $1.6 million was to be collected from tolls to cover the total $8 million cost.</span></p>
<p><span style="color: #333399;">(Source: <a href="http://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_%281940%29#Design_and_construction">Wikipedia</a>)</span></p></blockquote>
<p>Think back over your own career for a minute. Have you ever seen someone making a stupid, possibly even disastrous decision? Did you warn people around you about it until you were blue in the face, only to be ignored? Did your warnings turn out to be exactly true?</p>
<p>Well, from what I&#8217;ve read, that&#8217;s exactly what happened to Galloping Gertie. There was plenty of warning from many people in the civil engineering community who didn&#8217;t think this design would work. But these warnings were dismissed. After all, this was designed by the guy who designed the Golden Gate Bridge! With credentials like that, how could he possibly be wrong? And who are you, without those credentials, to question him? The pointy-haired bosses and bean counters won out. Predictably, their victory was temporary.</p>
<p>Incidentally, some people refer to this as one kind of <a href="http://en.wikipedia.org/wiki/Halo_effect">halo effect</a>: a person&#8217;s past accomplishments give others undue confidence in his performance at a different job, whether or not he&#8217;s actually doing it well. It&#8217;s a nasty little problem, and it&#8217;s a really common root cause of project failure, especially on software projects. I&#8217;ve lost count of the number of times I&#8217;ve encountered really terrible source code written by a programmer who&#8217;s been referred to by his coworkers as a &#8220;superstar.&#8221; Every time it happens, I think of the Tacoma Narrows Bridge.</p>
<p>But there&#8217;s a bigger lesson to learn from the disaster. When you look at the various root causes—problematic design, cocky designer, improper materials—one thing is pretty clear. The Tacoma Narrows Bridge <strong>was a failure before the first yard of concrete was poured</strong>. Failure was designed into the blueprints and materials, and even the most perfect construction would fail if it used them.</p>
<h3>Learning from project failures</h3>
<p>This leads me back back to the original question I was asked by that developer: how do you take stock of a failed project? (Or any project, for that matter!)</p>
<p>If you want to gain valuable experience from investigating a project—especially a failed one—it&#8217;s really important that you write down the lessons you learned from it. That shouldn&#8217;t be a surprise. If you want to do better software project planning tomorrow, you need to document your lessons learned today. You can think of a postmortem report as a kind of &#8220;lessons learned report&#8221; that helps you document exactly what happened on the project so you can avoid making the same missteps in the future.</p>
<p>So how do we take stock of a project that went wrong? How do we find root causes? How do we come up with ways to prevent this kind of problem in the future?</p>
<p>The first step is talking to your stakeholders&#8230; <em>all</em> of them. As many as you can find. You need to find everyone who was affected by the project, anyone who may have an informed opinion, and figure out what they know. This can be a surprisingly difficult thing to do, especially when you&#8217;re looking back at your own project. If people were unhappy (and people often are, even when the final product was nearly perfect), they&#8217;ll give you an earful.</p>
<p>This makes your life more difficult, because it&#8217;s hard to be objective when someone&#8217;s leveling criticisms at you (especially if they&#8217;re right!). But if you want to get the best information, it&#8217;s really important not to get defensive. You never know who will give you really valuable feedback until you ask them, and it often comes from the most unexpected places. As developers, we have a habit of dismissing users and business people because they don&#8217;t understand all of the technical details of the work we do. But you might be surprised at how much your users actually understand about what went wrong—and even if they don&#8217;t, you&#8217;ll often find that listening to <em>them</em> today can help make them more friendly and willing to listen to <em>you</em> in the future.</p>
<p>Talking to people is really important, and having discussions is a great way to get people thinking about what went wrong.  But most effective postmortem project reviews involve some sort of survey or checklist that lets you get written feedback from everyone involved in or affected by the project. Jenny and I have a section on building postmortem reports in our first book, <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>, that has a bunch of possible postmortem survey questions:</p>
<ul>
<li>Were the tasks divided well among the team?</li>
<li>Were the right people assigned to each task?</li>
<li>Were the reviews effective?</li>
<li>Was each work product useful in the later phases of the project?</li>
<li>Did the software meet the needs described in the vision and scope document?</li>
<li>Did the stakeholders and users have enough input into the software?</li>
<li>Were there too many changes?</li>
<li>How complete is each feature?</li>
<li>How useful is each feature?</li>
<li> Have the users received the software?</li>
<li>How is the user experience with the software?</li>
<li>Are there usability or performance issues?</li>
<li>Are there problems installing or configuring the software?</li>
<li>Were the initial deadlines set for the project reasonable?</li>
<li>How well was the overall project planned?</li>
<li> Were there risks that could have been foreseen but were not planned for?</li>
<li>Was the software produced in a timely manner?</li>
<li>Was the software of sufficient quality?</li>
<li>Do you have any suggestions for how we can improve for our next project?</li>
</ul>
<p>We definitely recommend using a survey where the questions are grouped together and each question is scored, so that you can start your postmortem report with an overview that shows the answers in a chart. (If you&#8217;re looking for a kind of &#8220;lessons learned template,&#8221; this is a really good start.)</p>
<p><img class="alignnone size-full wp-image-317" style="border: 1px solid black;" title="Postmortem survey results" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/07/postmortem-survey-results.png" alt="Postmortem survey results" width="484" height="323" /></p>
<p>The rest of the report delves into each individual section, pulling out specific (anonymous) answers that people wrote down or told you. Here&#8217;s an example:</p>
<blockquote>
<p style="text-align: justify;"><span style="color: #000080;"><strong>Beta<br />
</strong><em>Was the beta test effective in heading off problems before clients found them?<br />
</em>Score: 2.28 out of 5 (12 Negative [1 to 2], 13 Neutral [3], 9 Positive [4 to 5])<br />
All of the comments we got about the beta were negative, and only 26% (9 of 34) of the survey respondents felt that the beta exceeded their expectations. The general perception was that many obvious defects were not caught in the beta. Suggestions for improvement included lengthening the beta, expanding it to more client sites, and ensuring that the software was used as if it were in production.<br />
Individual comments:</span></p>
<ul style="text-align: justify;">
<li><span style="color: #000080;">I feel like Versions 2.0 and 2.1 could have been in the beta field longer so that we might have discovered the accounting bugs before many of the clients did.</span></li>
<li><span style="color: #000080;"> We need to have a more in-depth beta test in the future. Had the duration of the beta been longer, we would have caught more problems and headed them off before they became critical situations at the client site.</span></li>
<li><span style="color: #000080;"> I think that a lot of problems that were encountered were found after the beta, during the actual start of the release. Shortly thereafter, things were ironed out.</span></li>
<li><span style="color: #000080;">Overall, the release has gone well. I just feel that we missed something in the beta test, particularly the performance issues we are experiencing in our Denver and Chicago branches. In the future, we can expand the beta to more sites.</span></li>
</ul>
<p style="text-align: justify;"><span style="color: #000080;">(Source: <a title="Applied Software Project Management" href="http://www.stellman-greene.com/aspm">Applied Software Project Management</a>, Stellman &amp; Greene 2005)</span></p>
</blockquote>
<p>There&#8217;s another approach to coming up with postmortem survey results that I think can be really useful. Jenny and I have spent the last few years learning a lot about the <a href="http://www.pmi.org/Resources/Pages/Library-of-PMI-Global-Standards-projects.aspx">PMBOK® Guide</a>, since that&#8217;s what the PMP exam is based on. If you&#8217;ve studied for the PMP exam, one thing you learned is that you need to document lessons learned throughout the entire project.</p>
<p>The exam takes this really seriously: you&#8217;ll actually see a lot of PMP exam questions about lessons learned, and understanding where lessons learned come from is really important for PMP exam preparation.</p>
<p>The PMBOK® Guide categorizes the activities on a project into <em>knowledge areas</em>. Since there are lessons learned in every area of the project, those categories (the knowledge area definitions) give you a useful way to approach them them:</p>
<ul>
<li>How well you executed the project and managed changes throughout (what the PMBOK® Guide calls &#8220;Integration Management&#8221;)</li>
<li>The scope, both product scope (the features you built) and project scope (the work the team planned to do)</li>
<li>How well you stayed within your schedule or if you had serious scheduling problems</li>
<li>Whether or not budget was tight, and if that had an effect on the decisions made during the project</li>
<li>What steps you took to ensure the quality of the software</li>
<li>How you managed the people on the team</li>
<li>Whether communication—especially with stakeholders—was effective</li>
<li>How well risks were understood and managed throughout the project</li>
<li>If you worked with consultants, whether the buyer-seller relationship had an impact on the project</li>
</ul>
<p>For each of these areas, you should ask a few basic questions:</p>
<ol>
<li>How well did we plan? (Did we plan for this at all?)</li>
<li> Were there any unexpected changes? How well did we handle them?</li>
<li> Did the scope (or schedule, or staff, or our understanding of risks, etc.) look the same at the end of the project as it did at the beginning? If not, why not?</li>
</ol>
<p>If you can get that information from your stakeholders and write it down in a way that&#8217;s meaningful and that you can come back to in the future, you&#8217;ll be in really good shape to learn the lessons you need to learn from any project. Even a failed one.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/akKJ6-WESSU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/07/24/taking-stock-of-a-failed-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Iterative development is not unplanned development</title>
		<link>http://www.stellman-greene.com/2009/07/16/iterative-development-is-not-unplanned-development/</link>
		<comments>http://www.stellman-greene.com/2009/07/16/iterative-development-is-not-unplanned-development/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 13:37:05 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=298</guid>
		<description><![CDATA[I got a great question from a software developer who also happens to be a fellow CMU alum. I have a question related to managing scope creep with respect to “on-going”/iterative development processes. I’m currently managing a project where we’re redesigning my application&#8217;s primary workflow. Simply put, the app is currently designed to have users [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-118" title="What the..." src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/12/what-the.png" alt="What the..." width="484" height="486" /></p>
<p>I got a great question from a software developer who also happens to be a fellow <a href="http://www.cs.cmu.edu/">CMU</a> alum.</p>
<blockquote><p>I have a question related to managing scope creep with respect to “on-going”/iterative development processes.</p>
<p>I’m currently managing a project where we’re redesigning my application&#8217;s primary workflow. Simply put, the app is currently designed to have users to signoff all items and we’re redesigning it to be exception-based (only require certain items to be signed off).</p>
<p>As we’ve progressed down the path of planned iterative development, a lot of good/new ideas for future enhancements/requirements spring up. I find myself regularly working with my users and “working group” to prioritize and analyze if any of these new ideas need to be considered to build sooner rather than later (and thus triggering plan adjustments or delays).</p>
<p>I often feel like I’ll end up delivering a product that does deliver the initial vision, but still doesn’t make my users happy, as they’ve already shifted their expectations to wanted the “next” thing (aka phase 2).</p>
<p>Do you have any other tips about how to manage this process?</p>
<p>I’ve used things like taking a timeline-style roadmap and adjusting it by overlaying the new requirements and shifting the timeline out. Do you have an recommendations of ways to present this type of information?</p>
<p>Curious your thoughts. Thanks.</p>
<p>— Seth L.</p></blockquote>
<p>Iterative software development can be a really useful—and highly effective—tool for software development, but it’s also one of the most abused tools I’ve seen. Even as recently as a few days ago, someone in charge of a software team that&#8217;s critical to his comapny came to me with the (incorrect) assertion that iteration just means diving into a prototype without talking to anyone or doing any investigation. Iteration done well can lead to very high quality software. But as Seth saw, iteration done poorly can lead to scope creep and serious planning issues.</p>
<p>Making your users “happy” means managing their expectations. They need to see exactly what you’re working on, and what’s coming next. If all people see is deadlines and they don’t have a sense of what’s going on, then they naturally start looking to the next deadline, because that’s all they see. The more visibility you can give them into the way you build software, the more understanding they’ll have – that’s just human nature.</p>
<p>There are a few things that work well for improving visibility into your project’s iterations. One of them is a <a href="http://www.mountaingoatsoftware.com/task-boards">task board</a>, which typically involves sticking index cards with your user stories or scenarios on a whiteboard or wall. This means that you actually need to have <a href="http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/">user stories or scenarios</a>. Scope creep is often an indication of a requirements problem, and getting consensus on at least the scenario level about exactly what’s going into the iteration. Having the index cards arrayed on a task board, with each index card showing the status (&#8220;planned&#8221;, &#8220;in development&#8221;, &#8220;completed&#8221;, &#8220;out of scope&#8221;) gives a lot more visibility into exactly what you’re building and how you’re building it. In a lot of ways, this is a sort of iterative development project plan.</p>
<p>Another way to prevent iteration-related scope problems is committing to delivering releasable code at the end of each iteration. Test-driven development (or, at least, developing complete unit tests) and continuous integration are effective ways to help make that happen. If your stakeholders are comfortable that you’ll deliver high-quality code at each iteration, they’ll feel less pressure to get the new features in immediately, and will be more willing to wait until the next iteration.</p>
<p>If this sounds like something that might help you, I definitely recommend reading the interview Jenny and I did with <a href="http://blog.mountaingoatsoftware.com/">Mike Cohn</a> for <a href="http://www.amazon.com/Beautiful-Teams/dp/0596518021/">Beautiful Teams</a>, who knows more about agile and iterative planning than pretty much everyone . He has a lot to say about effective iteration planning. There are pictures of task boards he’s used in the past.</p>
<p>That gets me back to the basic idea—one which I give Mike a whole lot of credit for helping people understand—that iterative development, especially in an Agile project, works best when we take the time to plan each iteration. It still faces the same problems: requirements need to be discovered, scope needs to be controlled, and progress needs to be communicated to everyone who cares about it&#8230; especially to anyone who can potentially make the developers&#8217; lives more difficult. That&#8217;s why the most successful Agile development projects collect requirements and document them using user stories (or other techniques for writing down what the software needs to do). They plan their progress using task boards, forecast them using calculations and charts like project velocity and burn down rates, and constantly keep any business owners and other stakeholders up to date on their progress.</p>
<p>It&#8217;s a great way to develop software, and it&#8217;s been really effective for a lot of teams. And I think it shows that iterative development does <em>not</em> necessarily mean unplanned development.</p>
<p>When I sent this to the developer who sent me the question, he had an interesting follow-up, which I thought deserved a response:</p>
<blockquote><p><em>So I’ve been digesting this a bit and I am curious to get your thoughts about adapting project management fundamentals into the often fluid process of app management. I manage a few virtual projects within </em><em>my company and at times have struggled to keep things focused as business demands and/or interests shift over time. Similarly, the “iterative” approach has helped to clarify requirements while building out new flows/apps, but as you pointed out can be very tricky to get “right”.</em></p></blockquote>
<p>It’s funny how often I hear people say, “Well, this project management stuff works in theory, but my project is fluid” (or “changing,” or “under too much pressure from the business,” or “critical,” etc.). It turns out that pretty much every project is challenging, and project management is set up specifically to deal with that kind of challenging project.</p>
<p>Here are two thoughts I had relating to this idea.</p>
<p>First, the iterative development model works very well, as long as you’re committed to delivering a high-quality product at the end of each iteration. Whether or not you develop using an iterative approach, you need to manage change: prevent unnecessary changes, and make sure you understand the impact of any change that you make. It also means that you need some sort of scope baseline, so that you know what is and is not a change. It’s faster and easier to update software on paper, before it’s written into code, so the more changes you can move to the “write it down and review it” phase of your project, the better.</p>
<p>And second, if your business is overly demanding, it often means that you could manage your stakeholders’ expectations better. Make sure you identify them – and write down their names and needs! – from the very beginning of the project. Talk to them… <em>a lot</em>. Make sure they’re in the loop. If possible, see them so often that they’re sick of seeing you. If they’re always aware of what you’re doing, there won’t be nearly as many surprises. Also, the more your stakeholders understand the details of the work that you’re doing, the more slack they’ll cut you when they ask you for changes. Often, when someone puts a lot of pressure on you to do the impossible, it’s because they don’t realize that’s what they’re asking.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/a-lXdG4n5jI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/07/16/iterative-development-is-not-unplanned-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Announcing Head First PMP, 2nd edition!</title>
		<link>http://www.stellman-greene.com/2009/07/11/announcing-head-first-pmp-2nd-edition/</link>
		<comments>http://www.stellman-greene.com/2009/07/11/announcing-head-first-pmp-2nd-edition/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 17:08:44 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[PMP]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=281</guid>
		<description><![CDATA[&#8220;I teach Project Management for for a project management firm and its clients. Using Head First PMP exclusively as the course material, my students have an 84% first time passing rate for the PMP and CAPM. This is by far the very best and most complete book for anyone looking to improve their project management [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.headfirstlabs.com/books/hfpmp/"><img class="alignnone size-full wp-image-282" title="Head First PMP cover" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/07/pmp_cover_tilted.png" alt="Head First PMP cover" width="520" height="595" /></a></p>
<blockquote><p><em>&#8220;I teach Project Management for for a project management firm and its clients. Using Head First PMP exclusively as the course material, my students have an 84% first time passing rate for the PMP and CAPM. This is by far the very best and most complete book for anyone looking to improve their project management skills and pass the PMP exam.&#8221;</em></p>
<p><em>—Rocket Williams, PMP, MCITP, MCT<br />
Director of Business Development and Project Management Processes<br />
AdaQuest, Inc.</em></p>
<p><em><br />
</em></p></blockquote>
<p>Jenny and I just put the finishing touches on the second edition of <a href="http://www.headfirstlabs.com/books/hfpmp/">Head First PMP</a>, and it should be out in bookstores as soon as it comes off the presses. We&#8217;ve brought it completely up to date to provide 100% coverage of <a href="http://www.pmi.org/passport/mar09/passport_mar09_certcorner.html#qna">the new version of the PMP exam</a>. It was definitely a lot of work &#8212; and in case I haven&#8217;t mentioned it lately, I&#8217;m lucky to have a coauthor who&#8217;s as committed, hard-working, and quality-oriented as Jenny! You can <a href="http://my.safaribooksonline.com/9780596805210">download  Head First PMP, 2nd Edition today</a> as an O&#8217;Reilly Rough Cut PDF (see the end of this post for details).</p>
<p>I&#8217;m really impressed with all the changes that <a href="http://www.pmi.org/">PMI</a> put into the <a href="http://www.pmi.org/Resources/Pages/Library-of-PMI-Global-Standards-projects.aspx">PMBOK® Guide, 4th Edition</a> (which is what the PMP exam is based on). When we first wrote Head First PMP, there were a few concepts and ideas in the third edition that Jenny and I found a little challenging to explain in a straightforward way that&#8217;s easy to understand. When we read the new PMBOK Guide for the first time, I was happy to see that they&#8217;d improved some of the more cumbersome concepts that people  had a really tough time understanding &#8212; like the difference between a scope statement and a preliminary scope statement, for example. Now that the preliminary scope statement&#8217;s gone, scope management makes a lot more sense.</p>
<p>And there are new additions that made me really happy. It was great to see a whole new process dedicated to collecting requirements. If you&#8217;ve read my <a href="http://www.stellman-greene.com/category/requirements/">Requirements</a> posts, you know how important I think requirements management is to making sure your projects are successful. I&#8217;ve believed for a very long time that project managers &#8212; especially for software projects &#8212; have a responsibility, even an obligation, to make sure the whole team understands the project&#8217;s requirements. That&#8217;s why we put a whole chapter on requirements in <a href="http://www.stellman-greene.com/aspm">our first book</a>! So the <em>Collect Requirements</em> process is a really welcome edition to the PMBOK Guide.</p>
<p>There was another really interesting addition: the addition of iterative project phases. I think it&#8217;s really useful that the project management world has increasingly embraced iterative project development, especially in software. Personally, I attribute this, at least in part, to the fact that <a href="http://www.stellman-greene.com/category/agile/">Agile development</a> has soared in popularity over the last few years. The fact that project managers are being trained to work with teams working iteratively is a really good development, and it&#8217;s great to see that being reflected on the PMP exam.</p>
<p>Also, it was nice to see that the <em>Manage Stakeholders</em> process got a new name: it&#8217;s now the <em>Manage Stakeholder Expectations</em> process. I always thought it seemed a little&#8230; unrealistic? yes, that&#8217;s a good word &#8212; it always seemed a little unrealistic to think that a project manager could actually <em>manage</em> stakeholders on a real project. But managing their <em>expectations</em> is something that every project manager needs to do in order to keep a project running.</p>
<p>There are lots of other PMBOK® Guide changes, big and small, and we&#8217;ve put months of painstaking effort into tracking down each one and making sure the book is completely up to date. And we put together a phenomenal review team to help us ensure that Head First PMP, 2nd edition has <strong>100% coverage of the new version of the PMP exam based on the PMBOK® Guide, 4th Edition</strong>.</p>
<p>Oh, one more thing. I wanted to take a minute and thank all of the people who&#8217;ve been writing to us and asking when the new edition of the book is coming out. I&#8217;m sorry I couldn&#8217;t write back to each of you individually; we&#8217;ve been working really hard to make sure the new edition is as accurate and easy to use as possible, and we just didn&#8217;t have time to answer all of your e-mails. But we definitely heard you, and want you to know that we think the second edition is even better than the first! And, as always, if you&#8217;ve got questions about project management or difficult PMP topics, <a href="http://www.stellman-greene.com/contact-us/">definitely send them to us</a>. We get a lot of questions and e-mails, and don&#8217;t always have time to answer each one, but we do love Q&amp;A and if it&#8217;s a good question we&#8217;ll try to write a good answer!</p>
<p><img class="alignnone size-full wp-image-283" title="Head First PMP back cover" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/07/pmp_back_tilted.png" alt="Head First PMP back cover" width="490" height="570" /></p>
<p><strong>You can <a href="http://my.safaribooksonline.com/9780596805210">download  Head First PMP, 2nd Edition today</a> as an O&#8217;Reilly Rough Cut. They&#8217;ve got a great deal where you can get the online rough cut PDF today when you pre-order the book! Or you can just pre-order the book and get 35% off.</strong></p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/J5O8DgUBjdg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/07/11/announcing-head-first-pmp-2nd-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check out our O’Reilly Week in Review podcast interview</title>
		<link>http://www.stellman-greene.com/2009/05/27/check-out-our-oreilly-week-in-review-podcast-interview/</link>
		<comments>http://www.stellman-greene.com/2009/05/27/check-out-our-oreilly-week-in-review-podcast-interview/#comments</comments>
		<pubDate>Wed, 27 May 2009 15:55:57 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=268</guid>
		<description><![CDATA[James Turner&#8216;s weekly O&#8217;Reilly Week in Review podcast this week features an interview with Jenny and me about Beautiful Teams, and what goes into making a team work well. I&#8217;ll transcribe a quick excerpt from the interview – we&#8217;re talking about our interview in the book with NASA manager and team leader Peter Glück: Jenny: You [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-269" title="Edison Phonograph" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/05/edisonphonograph.jpg" alt="Edison Phonograph" width="386" height="378" /></p>
<p><a href="http://www.oreillynet.com/pub/au/2978">James Turner</a>&#8216;s weekly <a href="http://broadcast.oreilly.com/2009/05/oreilly-week-in-review-2009-05-25.html">O&#8217;Reilly Week in Review podcast</a> this week features an interview with Jenny and me about <em><a href="http://www.amazon.com/Beautiful-Teams/dp/0596518021/">Beautiful Teams</a></em>, and what goes into making a team work well.</p>
<p>I&#8217;ll transcribe a quick excerpt from the interview – we&#8217;re talking about our interview in the book with NASA manager and team leader Peter Glück:</p>
<blockquote><p><em>Jenny: You hear all your life about what it&#8217;s like to work at NASA. There were so many times we&#8217;d want to put in place a practice, and you&#8217;d hear, &#8220;Well, this isn&#8217;t NASA&#8221;. So to hear about how NASA actually did stuff was really exciting. It was such a revelation that they pretty much do stuff like everybody else, you know?</em></p>
<p><em>Andrew: I kind of had a feeling of, &#8220;They put their pants on one leg at a time, just like everyone else.&#8221; They build the same way, they test the same way, it&#8217;s just that they put a whole lot more time, money and effort into testing. And there are some things they can&#8217;t to. We talked about continuous integration. I asked him, &#8220;Do you do continuous integration?&#8221; Well, no, they don&#8217;t do continuous integration, because that involves integrating with a hardware platform that they have to take into a clean room. If your inegration process involves a clean room, it probably can&#8217;t be automated.</em></p></blockquote>
<p>If you want a little background about what goes into building an O&#8217;Reilly book, working with the folks there, and some of the thought process behind <em>Beautiful Teams</em>, definitely have a listen. You can hear the whole interview <a href="http://broadcast.oreilly.com/2009/05/oreilly-week-in-review-2009-05-25.html">here</a>!</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/_K9TaEQYe0E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/05/27/check-out-our-oreilly-week-in-review-podcast-interview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Secrets Of Great Teamwork</title>
		<link>http://www.stellman-greene.com/2009/05/13/the-secrets-of-great-teamwork/</link>
		<comments>http://www.stellman-greene.com/2009/05/13/the-secrets-of-great-teamwork/#comments</comments>
		<pubDate>Wed, 13 May 2009 17:58:55 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=260</guid>
		<description><![CDATA[Forbes picked up our Beautiful Teams interview with Tim O&#8217;Reilly and published it as an article called The Secrets of Great Teamwork.When Jenny and I talked to Tim, he had some intriguing things to say about what makes people work together. There&#8217;s plenty of good stuff in the interview, but one bit that really sticks [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-261" title="Beautiful Teams and Tim O'Reilly" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/05/bt-and-tim.png" alt="Beautiful Teams and Tim O'Reilly" width="600" height="500" /></p>
<p><a href="http://www.forbes.com">Forbes</a> picked up our <a title="Beautiful Teams" href="http://www.amazon.com/Beautiful-Teams/dp/0596518021/">Beautiful Teams</a> interview with <a href="http://oreilly.com/oreilly/tim_bio.html">Tim O&#8217;Reilly</a> and published it as an article called <a title="Forbes: The Secrets of Great Teamwork" href="http://www.forbes.com/2009/05/11/software-oreilly-media-technology-breakthroughs-software.html">The Secrets of Great Teamwork</a>.When Jenny and I talked to Tim, he had some intriguing things to say about what makes people work together. There&#8217;s plenty of good stuff in the interview, but one bit that really sticks in my mind is this excerpt:</p>
<blockquote><p><em>Andrew: Do you think it&#8217;s possible to have a great team that doesn&#8217;t have a great leader? That has more of a collective leadership?</em></p>
<p><strong>Tim: </strong>Yes, it is possible. But here&#8217;s the thing. Take Apache, because I think Apache is a great example of that. Tim Berners-Lee laid down the blueprint. He said, &#8220;I&#8217;ve created this idea for this hypertext server, this hypertext client.&#8221; And the genius of Apache was in embracing the constraints. I still remember back in the mid-&#8217;90s, this moment where Netscape had added this, Microsoft had added that, and everyone was saying, &#8220;Apache seems to be standing still. They aren&#8217;t adding all these features. They aren&#8217;t keeping up!&#8221; And the guys at Apache said, &#8220;Yup. What we do is a hypertext server, and we have this nice extension mechanism where people who want to do something else can add it on.&#8221;</p>
<p>And that goes back to that architecture of participation. They didn&#8217;t build this big, conglomerate, complex application. They kept to a pure vision. The vision did actually come from a visionary leader; it just wasn&#8217;t part of Apache. Apache came from a group of people who were abandoned by the NCSA server team when they all went to found Netscape. And there were a bunch of customers, so they said, &#8220;We have to maintain this, and keep it going.&#8221; What was wonderful about that kind of team was that they accepted the constraints that were laid down by the design of the system. They didn&#8217;t try to show off their ego or their creativity.</p>
<p>I think a lot of the work done by the IETF (the Internet Engineering Task Force) in the early years did the same thing. There were some wonderful principles laid down, and people really honored them. If you read some of John Postel&#8217;s stuff in the TCP RFC about the robustness principle, it sounds like something out of the Bible, for Christ&#8217;s sake! &#8220;Be conservative in what you do; be liberal in what you accept from others.&#8221; Literally, that&#8217;s what it says.</p>
<p>The point is that if you have the system architected right, you have a better chance of success for teams. You don&#8217;t want teams that are dependent on a single vision or leader, because if you lose your leader, the whole team goes &#8220;pop.&#8221;</p></blockquote>
<p>Something that came up over and over again throughout our many interviews and stories is the connection between teamwork and architecture.  I think Tim hit on exactly the right example with Apache, but there are a lot of other examples throughout the book. Peter Glück had some really interesting things about how the architecture restrictions of NASA projects affected the teams (and especially the practices they used). And Auke Jilderda talked about the &#8220;use-use-reuse&#8221; model for designing reusable code, and how it impacts teams. I have to be honest: before working on Beautiful Teams, I definitely didn&#8217;t make such a close connection between how great (or lousy) teamwork affects architecture.</p>
<p>You can read the entire interview — which, incidentally, is one of my favorites in the book! — on <a href="http://fyi.oreilly.com/2009/05/an-interview-with-tim-oreilly-.html">O&#8217;Reilly FYI</a>.</p>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/Po49uIbPHxY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/05/13/the-secrets-of-great-teamwork/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" width="560" height="437" /></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>
<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" width="662" height="407" /></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>
<img src="http://feeds.feedburner.com/~r/BuildingBetterSoftware/~4/znXtWg0zpH8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/05/03/requirements-101-user-stories-vs-use-cases/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
