<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

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

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

		<guid isPermaLink="false">http://www.stellman-greene.com/?p=198</guid>
		<description><![CDATA[Jenny and I have been thinking a lot about teams lately. Working on Beautiful Teams really focused us on teamwork: what makes teams gel, what causes them to run into trouble, and what you can do to them. So when I got this question recently, it was really timely: I’ve been working on bringing more [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-202" title="When cheering fails" src="http://www.stellman-greene.com/blog/wp-content/uploads/2009/03/when-cheering-fails.png" alt="When cheering fails" width="497" height="400" /></p>
<p>Jenny and I have been thinking a lot about teams lately. Working on <em><a title="Beautiful Teams" href="http://oreilly.com/catalog/9780596518028/index.html">Beautiful Teams</a></em> really focused us on teamwork: what makes teams gel, what causes them to run into trouble, and what you can do to them. So when I got this question recently, it was really timely:</p>
<blockquote><p><strong>I’ve been working on bringing more of a teamwork feel to our projects for 2 years.  It has proven to be a non-trivial task. Any advice?</strong></p></blockquote>
<p>Now, just so we’re clear here, I know this guy pretty well. He’s a very good manager, and he runs a software development group with some of the smartest people I’ve met professionally.  They’re definitely a functioning group: they’ve been building software for years, and that software is used in production in critical applications at his company. By many accounts, his group is successful.</p>
<p>But when I took a closer look at how that particular team works day-to-day – and this should seem very familiar to a lot of developers – I definitely saw what he meant about it being a non-trivial task. There&#8217;s definitely a lack of a teamwork feel on the various projects his team works on. Everyone is really good at carving out his or her own piece of work, and is able to work on that piece independently. But even when multiple people would work on a single release of the same piece of software, they’d work independently of each other, not really talking amongst themselves. Don’t get me wrong – they definitely get their jobs done. But they’re working on individual tasks, not team projects. And even when those tasks add up to projects, it just feels like loosely connected tasks to the people working on them.</p>
<p>So what’s the harm in that, if they’re getting the work done? Well, for one, having a group of people working like that doesn’t exactly encourage innovation. There are some genuinely brilliant people on that team, and they do reasonably good work, but I would honestly expect more innovative work from this particular group of people. And I believe that having more of a “teamwork feel” would encourage more innovative work.</p>
<p>What’s more, I got the feeling that this particular team still runs into a lot of the same problems that many other, less talented teams run into, and I think those problems could be improved through better teamwork. They have some serious change management issues, where they often have to rework their code because it doesn’t quite meet the needs of the projects’ users. They have a few code quality problems – they’re trying to address them with better code reviews, which they’re having trouble getting off the ground. And they have an overall client relationship problem, where the people they build software for often feel like they’re somewhat disconnected, like they can’t quite the software that really meets their needs. Again, these are highly talented, very smart developers, with a manager who’s on the ball – and they’re still getting stuck on the same problems that hit everyone else.</p>
<p>Now, I don’t want to make the situation sound worse than it is. The manager has made some very good progress in getting the individuals working in a more team-like way. One thing he did that I really like (and I think it worked really well) was to really encourage everyone to write things down in the Wiki. And this wasn’t just a general edict (“Each person must add X wiki pages, or else!”). It was actual encouragement and support, treating documentation like it was a real and highly appreciated part of peoples’ jobs. Like a lot of new tools, there was a slow start to it, but once a few people dove in and started to embrace it, it started to really take off. And a funny thing happened: as people started sharing information with each other, they started to learn more about each others’ work, and some of them started to get that “teamwork feel” that they were looking for.</p>
<p>So what’s going on with this person’s group? And, more importantly, what can he do to help improve the “teamwork feel” for everyone?</p>
<p>Whenever I’m trying to help a group of effective but disconnected developers become a team, I like to start with this <a title="The Team Software Process (TSP)" href="http://www.sei.cmu.edu/pub/documents/00.reports/pdf/00tr023.pdf">great analogy from Watts Humphrey:</a></p>
<blockquote><p>There are different kinds of teams. In sports, for example, a basketball team’s positions are dynamic while baseball team members have more static roles. However, in both cases the members must all work together cooperatively. Conversely, wrestling and track teams are composed of individual competitors who do not dynamically interact, although the members support each other socially and emotionally.</p>
<p>In engineering, development teams often behave much like baseball or basketball teams. Even though they may have multiple specialties, all the members work toward a single objective. However, on systems maintenance and enhancement teams, the engineers often work relatively independently, much like wrestling and track teams.</p>
<p>A team is more than just a group of people who happen to work together. Teamwork takes practice and it involves special skills. Teams require common processes; they need agreed-upon goals; and they need effective guidance and leadership.</p></blockquote>
<p>When I reread that quote before pasting it in here, something in that last sentence stood out to me: <strong>they need agreed-upon goals</strong>. Now, I’ve been referencing that quote for almost a decade. But it’s really interesting to me that I always overlooked that last bit. But working on <em>Beautiful Teams</em> really taught me the value of agreed-upon goals. It was pretty remarkable, actually: contributor after contributor brought up the idea that the people on a project all need to be aligned to the project’s goals, and to have a single, overarching vision that the team can rally around.</p>
<p>So if I had to give a single piece of advice to this manager, it would be this: try to find ways to give everyone a good sense of their goals. Two different <em>Beautiful Teams</em> contributors – <a href="http://www.mountaingoatsoftware.com/">Mike Cohn</a> and <a href="http://www.stevemcconnell.com/">Steve McConnell</a> – talked about helping the team see an “elevating” goal. I really like how Steve put it:</p>
<blockquote><p>First, the team leader needs to establish an elevating vision or goal, and I think that this is truly a leadership function, not just management. It goes beyond the management function. An awful lot of thought should go in on the part of the team leaders into what is the team&#8217;s goal and what is it about it that is not just trying to trick the team into thinking they have a goal that&#8217;s elevating or inspiring, but to come up with one that truly is.</p>
<p>A classic example is if you&#8217;re out digging ditches, that&#8217;s not very elevating or inspiring. But if you&#8217;re digging ditches to protect your town that&#8217;s about to be attacked by an enemy, well, that&#8217;s more inspiring, even though it&#8217;s the same activity. And so the leader&#8217;s job, really, is to try to determine or frame the activity in such a way that people can understand what the value is.</p></blockquote>
<p>Now, that’s not an easy thing to do. But Jenny and I heard this message (or one similar to it) from so many of our <em>Beautiful Teams</em> contributors – Keoki Andrus, Neil Siegel and Mark Healey all come to mind, although other people talked about it too – that it actually changed the way I think about how teams work. In the past, I always looked at <a href="http://www.stellman-greene.com/vision_and_scope">defining a project’s vision and scope</a> as a straightforward tool for setting the top-level scope of the project and preventing changes. One thing I learned was that I wasn’t giving “vision” part of it nearly enough respect. Talking openly and often about that vision – and coming back to it when you do things like discuss project assumptions, come up with scenarios (or user stories, or use cases&#8230; however you figure out how your users will use the software) and plan out the work the team’s going to do – is the first step in really getting your team to have that “teamwork feel.”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2009/03/31/bringing-a-teamwork-feel-to-your-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Q&amp;A: How to succeed in business analysis without really trying</title>
		<link>http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/</link>
		<comments>http://www.stellman-greene.com/2007/08/03/qa-how-to-get-ahead-in-business-analysis-without-really-trying/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 00:25:12 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Q&A]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Users]]></category>

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

