<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Requirements Patterns and Antipatterns</title>
        <link>http://geekswithblogs.net/UlteriorMotiveLounge/category/9122.aspx</link>
        <description>Discussion of Requirements and my upcoming book.</description>
        <language>en-US</language>
        <copyright>Martin L. Shoemaker</copyright>
        <managingEditor>Martin@TheUMLGuy.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Calculating the ROI for Requirements Analysis</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx</link>
            <description>&lt;p&gt;My buddy &lt;a target="_blank" href="http://www.joshholmes.com"&gt;Josh Holmes&lt;/a&gt; has written &lt;a target="_blank" href="http://www.joshholmes.com/blog/2009/02/16/MeasuringROIMovingFromCostCenterToStrategicPartner.aspx"&gt;a very excellent post on the Return on Investment (ROI) for software&lt;/a&gt;. I recommend it to anyone who sees software as a business, not just a job or a hobby.&lt;/p&gt;
&lt;p&gt;Last week, the always-worth-reading &lt;a target="_blank" href="http://twitter.com/patrickgreene"&gt;Patrick Greene&lt;/a&gt; made a comment that made me start thinking specifically about the ROI for Requirements Analysis. Most teams and most managers know they have a requirements problem; but too many of them say, “But we’re too busy to fix it, so we’ll just start coding.” Or “We’d like to fix it, but we can’t, so we’ll just start coding.” Or “Yeah, but our customers won’t answer our questions, so we’ll just start coding.” Or “Our executives want progress, they want us to just start coding.”&lt;/p&gt;
&lt;p&gt;And that leads me to name a common, pernicious antipattern, &lt;strong&gt;JSC: Just Start Coding&lt;/strong&gt;. This is &lt;em&gt;not&lt;/em&gt; Agile Development, but it masquerades as Agile. It really means, “We’re gonna be late no matter what we do, and our executives are wondering why we’re not coding already. So we’re gonna Just Start Coding, and call it Agile.”&lt;/p&gt;
&lt;p&gt;Which is &lt;em&gt;exactly&lt;/em&gt; wrong. &lt;em&gt;Good&lt;/em&gt; Agile, &lt;em&gt;real&lt;/em&gt; Agile, is &lt;em&gt;very&lt;/em&gt; requirements-centric. It’s about surfacing requirements and particularly requirements miscommunications quickly and frequently, so that we stay as close to the right path as possible, and waste as little time as possible on wrong paths. Agile makes short, quick moves, and short, quick corrections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSC&lt;/strong&gt;, on the other hand, just makes quick movement, with no mechanism in place for planning and correction. “We’re on the wrong path? Who cares? At least we’re coding!”&lt;/p&gt;
&lt;p&gt;And yes, let’s admit the dark side: we developers often contribute to this mess. Coding is comfortable. Requirements analysis (for many of us) is uncomfortable. It’s &lt;em&gt;really&lt;/em&gt; easy to ignore nagging doubts and bury your concerns in lots of fun coding challenges. “Well, it doesn’t make sense to me; but this is what they asked for, so this is what I’ll build.” We abdicate responsibility for the wrong requirements.&lt;/p&gt;
&lt;p&gt;But I want to follow in Josh’s footsteps, discussing software as a business, not just a job. And for a business, &lt;strong&gt;JSC&lt;/strong&gt; has a cost. A &lt;strong&gt;huge&lt;/strong&gt; cost. And Requirements Analysis can eliminate much or all of that cost. Maybe a little ROI calculation can help us to win executive support to do the job right.&lt;/p&gt;
&lt;h1&gt;Some Fundamental Assumptions&lt;/h1&gt;
&lt;p&gt;The ROI calculations that I’ll make are based on three fundamental assumptions: two from industry research, and one from faith.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://www.amazon.com/Software-Cost-Estimation-Cocomo-II/dp/0130266922"&gt;Barry Boehm’s COCOMO II research&lt;/a&gt; tells us that poor requirements analysis can add 40% to as much as 100% to your schedule.&lt;/li&gt;
    &lt;li&gt;Many different sources (summarized by &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;Steve McConnell&lt;/a&gt;) tell us that the average project is underestimated by roughly 100%.&lt;/li&gt;
    &lt;li&gt;Those were the research; here’s the faith. I contend that with a relatively minor investment of time compared to the overall schedule, your team can drastically improve your requirements, reducing that 40-100% schedule slip to nearly zero.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can’t fix the tendency to underestimate (though you can make a good start by reading &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;Steve McConnell&lt;/a&gt;); but I believe that &lt;em&gt;most&lt;/em&gt; of what you need to fix requirements failures is simply paying attention to requirements early and refusing to ignore the obvious failures. I’ve worked on too many teams where everyone knew the requirements were fatally flawed, yet no one did anything about them. Everyone saw those flaws as “just the way things are around here”. They erected a giant &lt;a target="_blank" href="http://en.wikipedia.org/wiki/SEP_field#Somebody_Else.27s_Problem_field_.28fiction.29"&gt;SEP field&lt;/a&gt; around the requirements flaws, and they &lt;strong&gt;J&lt;/strong&gt;ust &lt;strong&gt;S&lt;/strong&gt;tarted &lt;strong&gt;C&lt;/strong&gt;oding.&lt;/p&gt;
&lt;p&gt;I don’t think it has to be that way. I think that we as developers have the responsibility &lt;em&gt;and&lt;/em&gt; the power to fix &lt;em&gt;most&lt;/em&gt; of our requirements problems, if only we can persuade our managers to let us – and persuade ourselves to try. I’ve written a whole book (coming soon, I hope) on how we can perform better as Analyst-Developers; but to get management to back us, we have to show them a business reason. The assumptions above are part of that reason.&lt;/p&gt;
&lt;h1&gt;A Tale of Four Projects&lt;/h1&gt;
&lt;p&gt;To perform my ROI calculations, I’m going to envision four projects. Well, no, not really. Rather, I’m going to envision four different scenarios for the same project:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Just Start Coding (Typical).&lt;/strong&gt; In this scenario, the team starts coding from the earliest possible moment. Management has a target date (they’ll call it an Estimate, but &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;McConnell&lt;/a&gt; will call that a delusion). The more likely date is twice as far down the road, per Assumption 2 above; and then because the team fails to do adequate requirements analysis, the final schedule is 1.4 times that doubled schedule, for a total of 2.8 times the expected duration.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Just Start Coding (Out-of-Control).&lt;/strong&gt; This scenario is similar to &lt;strong&gt;Just Start Coding (Typical)&lt;/strong&gt;; but the requirements analysis is even worse than usual, adding another 100% to the project. And these are factors, not sums; the final duration is 4 times the expected duration.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Analyzed (Time Bound).&lt;/strong&gt; In this scenario, we assume enough Requirements Analysis at the start to recognize that the project cannot possibly meet the target date; and management tells us that the date is sacrosanct. We &lt;em&gt;must&lt;/em&gt; meet that date, even if we have to cut features to do so. It’s &lt;em&gt;always&lt;/em&gt; smarter and less error-prone to cut those features at the start than at the end, so we do so. Then we continue a small fraction of Requirements Analysis throughout the duration of the project, likely trimming more features as we go. We hit the target date with a lean but critical subset of the desired features, and a high-quality implementation of those features. We’ll add the other features next time.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Analyzed (Feature Bound).&lt;/strong&gt; In this scenario, we assume enough Requirements Analysis at the start to recognize that the project cannot possibly meet the target date; and management tells us that the features are sacrosanct. We &lt;em&gt;must&lt;/em&gt; supply those features, even if we have to slip the date to do so. Our final schedule will be 100% longer than the target; but when we finish, we’ll have the complete set of desired features, and a high-quality implementation of those features.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Obviously, some managers or customers will want Time Bound &lt;em&gt;and&lt;/em&gt; Feature Bound. It can’t be done. Break the news to them gently.&lt;/p&gt;
&lt;p&gt;Oh, all right, I know: some managers will &lt;strong&gt;demand&lt;/strong&gt; Time Bound &lt;em&gt;and&lt;/em&gt; Feature Bound. Let’s call this Scenario 5. It’s the Scenario where you do the analysis right up front, realize there’s no way to succeed, realize that management demands you violate the laws of space and time, and get your resume out on &lt;a target="_blank" href="http://www.CareerBuilder.com"&gt;CareerBuilder.com&lt;/a&gt; so that you can be working somewhere else when the mandatory overtime and the punitive firings and the lawsuits begin. But since there’s &lt;em&gt;no&lt;/em&gt; ROI for Scenario 5, we’ll ignore that scenario as we go forward.&lt;/p&gt;
&lt;h1&gt;More Assumptions&lt;/h1&gt;
&lt;p&gt;Next we need a few more assumptions (based on my personal experience, believe them as you will) and some parameters. First, the assumptions:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Up-front analysis requires only about 10% of the likely schedule. If your target is 6 months and so your likely schedule is 16.8 months (6 * 2 for estimation error * 1.4 for analysis error), then your up-front analysis time is about 1.68 months.&lt;/li&gt;
    &lt;li&gt;Because the analysis is work you would have to do to succeed anyway, just pushed to the front of the discussion, it involves the whole team, and yet doesn’t add to the final schedule.&lt;/li&gt;
    &lt;li&gt;Analysis is a skill most teams don’t have in abundance. You need a few skilled lead analysts to work with the team, roughly 1 lead analyst per 5 team members.&lt;/li&gt;
    &lt;li&gt;Once the initial analysis is done, you need little bits of analysis throughout the rest of the project. That will involve the lead analysts for about 20% of the total remaining schedule.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don’t like those assumptions, you can treat them as parameters and vary them; but these values fit with my experience.&lt;/p&gt;
&lt;p&gt;As for the parameters, you really only need two:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;How much does an hour of a developer’s time cost you (total)?&lt;/li&gt;
    &lt;li&gt;How much does an hour of a lead analyst’s time cost you (total)?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And that’s all you need to know. The rest of the possible factors – duration of the project, team size, etc. – all divide out, because everything is calculated as ratios of time to time, dollars to dollars, and so on. ROI is a relative measure.&lt;/p&gt;
&lt;p&gt;And to be honest, you &lt;em&gt;really&lt;/em&gt; don’t need to know the absolute costs for developers and lead analysts, just the ratio. As long as the ratio remains constant, you can plug in any values you like.&lt;/p&gt;
&lt;h1&gt;The Results&lt;/h1&gt;
&lt;p&gt;So given those assumptions and parameters, what’s the ROI?&lt;/p&gt;
&lt;p&gt;Are you sitting down?&lt;/p&gt;
&lt;p&gt;My parameters have a lead analyst costing 50% more than a developer. I don’t usually find that to be the case, but I wanted to make analyst costs relatively high to skew the ROI down.&lt;/p&gt;
&lt;p&gt;And even with that skew, I ended up with these calculations:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;An Analyzed (Feature Bound) project has an ROI of 652% when compared to a typical JSC project, and 2,081% when compared to an Out-of-Control JSC project.&lt;/li&gt;
    &lt;li&gt;An Analyzed (Time Bound) project has an ROI of 1,943% when compared to a typical JSC project, and 3,371% when compared to an Out-of-Control JSC project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are astonishing ROI figures. Unheard of ROI figures.&lt;/p&gt;
&lt;p&gt;And of course, those are ideals. Your Requirements Analysis won’t be 100% effective at cutting out lost time. Let’s assume you only cut out half the lost time that’s due to requirements failure. Then you get numbers like these:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;An Analyzed (Feature Bound) project has an ROI of 24% when compared to a typical JSC project, and 776% when compared to an Out-of-Control JSC project.&lt;/li&gt;
    &lt;li&gt;An Analyzed (Time Bound) project has an ROI of 364% when compared to a typical JSC project, and 1,116% when compared to an Out-of-Control JSC project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still nothing to sneeze at. And I think you can do a lot better than just half. I &lt;em&gt;know&lt;/em&gt; I can.&lt;/p&gt;
&lt;p&gt;And although I've only calculated ROI based on labor savings, labor costs are &lt;em&gt;not&lt;/em&gt; the only costs associated with requirements failures. Requirements failures increase costs across the board. Besides a longer schedule, you get more overtime, higher shipping costs, higher travel costs, missed commitments, lost opportunity costs, interest payments, performance penalties… even costly litigation.&lt;/p&gt;
&lt;p&gt;And there's also a cost in quality. &lt;font face=""&gt;Reworked code has more bugs than original code. The rework is done under tighter deadlines, there’s more pressure, and there’s more overtime. Developers cut corners in response. This results in more bugs; and those bugs lead to more delays and even more schedule pressure. There's a nasty feedback effect here, and it can kill a project. Requirements Analysis can cut that feedback loop.&lt;/font&gt;&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Again, this is &lt;strong&gt;not&lt;/strong&gt; BDUF. I just spent a week at a client’s site, and spec’ed out their major requirements in that week in more &lt;em&gt;useful&lt;/em&gt; detail than they had developed in months. Better Requirements Analysis does &lt;em&gt;not&lt;/em&gt; mean &lt;strong&gt;bigger&lt;/strong&gt;; it means more thorough. It means recognizing when you have questions, and making sure you answer them. It means identifying priorities and making choices.&lt;/p&gt;
&lt;p&gt;And it means some resistance. It’s not by accident that we have a systemic problem with requirements in our industry. But it’s in our power to change that.&lt;/p&gt;
&lt;p&gt;My spreadsheet for this ROI calculation is available if you want it. Leave a comment. If you disagree with any of my assumptions, leave a comment about that, too. I want to make the most clear, justifiable case possible to my stakeholders (and to yours!) to convince them that &lt;strong&gt;Defining the problem in a comprehensible, verifiable form is necessary to solving the problem.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131796"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131796" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/131796.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx</guid>
            <pubDate>Tue, 05 May 2009 00:53:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/131796.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/131796.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ulterior Motive Lounge Episode 32: Talking with Pilot</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/04/ulterior-motive-lounge-episode-32-talking-with-pilot.aspx</link>
            <description>&lt;p&gt;Continuing &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx"&gt;The Project that Time Forgot&lt;/a&gt;, a UML case study. (Click images for larger versions.)&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Episode%2032_2.jpg"&gt;&lt;img title="Episode 32" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="415" alt="Episode 32" width="644" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Episode%2032_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;On the surface, this Episode may seem almost social. &lt;a target="_blank" href="http://www.imdb.com/title/tt0088847/"&gt;Demented and sad, but social.&lt;/a&gt; But if you could join Hacker Girl, reading Geek Girl’s Tablet PC over her shoulder, you might see a different picture:&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Interview%20with%20Pilot_4.jpg"&gt;&lt;img title="Interview with Pilot" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="484" alt="Interview with Pilot" width="449" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Interview%20with%20Pilot_thumb_1.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;And you would also see this diagram: &lt;/p&gt;
&lt;p&gt;&lt;img title="Driver Use Cases (2nd revision)" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="674" alt="Driver Use Cases (2nd revision)" width="682" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Driver%20Use%20Cases%20(2nd%20revision)_3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;You saw a conversation. Geek Girl hopes that Pilot saw a conversation. But &lt;em&gt;she&lt;/em&gt; saw an interview, and a chance to capture and model requirements. Let’s review the notation here and discuss the diagram contents.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The ellipses are the use cases that a driver performs (indicated by the arrows from Driver to the use cases). &lt;/li&gt;
    &lt;li&gt;Dependencies (dashed arrows) with the &lt;strong&gt;&amp;lt;&amp;lt;include&amp;gt;&amp;gt;&lt;/strong&gt; stereotype indicate that one use case includes another within at least one of its scenarios. So in order to Get Destination, the system must Scan GPS IDs. &lt;/li&gt;
    &lt;li&gt;The triangle-headed arrows (generalizations) indicate that one use case is a special case of another use case. So Contact Ops via GPS, Get Time from CIS, and Get Weather from CIS each has a special case that uses Voice Command; and each of those special cases is defective. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might ask: “Why is Maintain Car in this diagram? Aren’t they modeling what the computer systems will do? Does the computer have any role in car maintenance?” And that’s a legitimate question. If the team were modeling the entire business, Maintain Car would certainly be a use case in the model; but why did Geek Girl include it in the system requirements model?&lt;/p&gt;
&lt;p&gt;The answer is two-fold:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Pilot mentioned reflashing the engines, which is a computer-driven operation. As indicated in Geek Girl’s notes, it’s not clear at this time whether the Park’s computers are involved in reflashes or not. The reflashes may be done by dedicated tools that have no connection with Park systems; but it may be that the Park maintains records about the reflashes. Just in case, Geek Girl wanted to capture this. &lt;/li&gt;
    &lt;li&gt;And building on 1: it’s always best to capture whatever a user says, even if you’re not sure it’s relevant. You can always remove it later. The analyst’s first job is to listen and capture. Analysis and filtering comes later. &lt;strong&gt;Don’t filter while you’re listening, filter later!&lt;/strong&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;But then you might ask: “Why did Geek Girl stop there? Why didn’t she include use cases like Fly Helicopter and Rebuild Diesel Ferry Engine?” The answer is that she ignored what I just said, and she filtered now. “Filter later” is a good guideline, but you do have to apply some measure of judgment. Certainly “Watch Your Language” doesn’t involve the computer system, so she knew she could ignore that. Fly Helicopter and Rebuild Diesel Ferry Engine are less clear; but there’s certainly a good reason for leaving them off &lt;em&gt;this&lt;/em&gt; diagram: it’s a diagram of &lt;em&gt;Driver&lt;/em&gt; use cases, and those aren’t Driver functions. Pilot does them, true; but when he does, he’s not acting in the Driver role. Because remember: actors are &lt;em&gt;roles&lt;/em&gt; people or things can play, not the people themselves; and one person or thing may play multiple roles.&lt;/p&gt;
&lt;p&gt;If you’re still uncomfortable with the distinction between Maintain Car and Rebuild Diesel Ferry Engine, good! Welcome to the world of requirements analysis! There are no hard and fast rules. There are no clear lines, only guidelines. You have to apply judgment; but as a general rule, err on the side of capturing more information, not less. Geek Girl captured a lot of notes on her Tablet PC, while converting the most clearly relevant ones into a diagram. After the interview, Geek Girl will find time to clean up and reorganize the diagrams, and perhaps rethink the contents.&lt;/p&gt;
&lt;p&gt;In &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/09/ulterior-motive-lounge-episode-28-meet-danny-diplodocus.aspx"&gt;Episode 28&lt;/a&gt;, The UML Guy adopted a convention of indicating defects via notes on diagrams, as in this earlier diagram of Driver Use Cases:&lt;/p&gt;
&lt;p&gt;&lt;img title="Driver Use Cases Scene 7" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="474" alt="Driver Use Cases Scene 7" width="584" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Driver%20Use%20Cases%20Scene%207_3.jpg" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Harlan_Ellison"&gt;Harlan Ellison&lt;/a&gt; once observed that a lot of dumb behavior can be traced back to the phrase, “It seemed like a good idea at the time.” Well, Geek Girl has decided that The UML Guy’s good idea at the time is a bad idea going forward. Not that the notes are a &lt;em&gt;bad&lt;/em&gt; practice: they clearly indicate the defect, and diagram readers can easily see what the defect is. If your goal is printable diagrams which stand on their own, this might be a good practice.&lt;/p&gt;
&lt;p&gt;But it has some weaknesses:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;As we find a lot more defects, the diagrams will get cluttered, and it will get harder and harder to arrange the diagrams legibly. &lt;/li&gt;
    &lt;li&gt;We have to do extra work to show the defect on additional diagrams. &lt;/li&gt;
    &lt;li&gt;Printable diagrams aren’t your goal, or shouldn’t be, in my opinion. To quote &lt;a target="_blank" href="http://www.apress.com/book/view/1590590872"&gt;myself&lt;/a&gt;: &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;h3&gt;&lt;a name="_Toc21817975"&gt;The Model Rule&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We saw &lt;strong&gt;The Model Rule&lt;/strong&gt; in chapter 1; but it bears repeating. To use UML effectively, you should never be simply drawing pretty pictures; you should always be editing an underlying model, using the pretty pictures as your user interface. Thus, the model should contain more information than is displayed in any one diagram; and information in one diagram should not explicitly contradict information in another diagram. Information that is found in one diagram but not in another should not be considered a contradiction. Rather, this simply indicates that the former diagram displays more detail than the latter. Details may be omitted from a given diagram to make it more comprehensible.&lt;/p&gt;
&lt;p&gt;But how do you keep these diagrams consistent with each other? How do you maintain the underlying model? This is where a good modeling tool proves its worth: a good modeling tool will maintain the model as you create and edit your diagrams. If you are not using some sort of modeling tool, this very mechanical burden will fall on you, rather than on the machine. That’s a poor division of labor: brains should do brain work and machines should do mechanical work. If you do the mechanical work, you will do it imprecisely and inefficiently, and you’ll have no time for brain work. I urge you to investigate and use one of the many UML tools available. A list of UML tools can be found in Appendix B.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
    &lt;li&gt;And building on &lt;strong&gt;The Model Rule&lt;/strong&gt;, defect notes on the diagram don’t let your model and your tool help you in managing the defects. As an example, &lt;a target="_blank" href="http://www.sparxsystems.com/"&gt;Enterprise Architect from Sparx Systems&lt;/a&gt; allows us to add detailed requirements information to each element of the model. Here’s a sample screen shot: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Defect" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="505" alt="Defect" width="399" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode32Talkingwith_9D73/Defect_3.jpg" /&gt; &lt;/p&gt;
&lt;p&gt;And then you can create a requirements report that lists the defects, as in this snippet:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="3"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="500"&gt;
            &lt;h1&gt;Launch Car Information System&lt;/h1&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="144"&gt;
            &lt;p&gt;&lt;em&gt;Satus:&lt;/em&gt; Proposed&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="156"&gt;
            &lt;p&gt;&lt;em&gt;Priority:&lt;/em&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="186"&gt;
            &lt;p&gt;&lt;em&gt;Difficulty:&lt;/em&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="144"&gt;
            &lt;p&gt;&lt;em&gt;Phase: &lt;/em&gt;&lt;em&gt;1.0&lt;/em&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="156"&gt;
            &lt;p&gt;&lt;em&gt;Version: &lt;/em&gt;&lt;em&gt;1.0&lt;/em&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="186"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="478"&gt;
            &lt;p&gt;&lt;strong&gt;Defect #1:&lt;/strong&gt; Startup is delayed.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That’s a lot of power to give up just for the minor benefit of notes on the diagrams. (There’s a lot more power in Enterprise Architect reports than I’ve shown here; and if that’s not enough, EA is an &lt;em&gt;incredibly&lt;/em&gt; powerful automation environment. You can build add-ins for it, and also build automation clients that control your EA models. I have one in the works that lets you directly create EA models from Microsoft Word 2007 and Microsoft Office 2007. When I first started using EA, I said, “This is a &lt;strong&gt;great&lt;/strong&gt; UML tool for the price!” Today, I know better: Enterprise Architect is a great UML tool for &lt;strong&gt;any&lt;/strong&gt; price!)&lt;/p&gt;
&lt;p&gt;So in place of defect notes on the diagram, Geek Girl prefers to note the defects in the model, as above; and then use a stereotype to show that the use case has a defect. I think that’s a better practice, even if it’s a bit tool-specific. It makes it easier to add the additional use cases that Pilot described in this Episode (omitting the domain objects so we can focus on the use cases and defects). And for me, &lt;strong&gt;The Model Rule&lt;/strong&gt; is more important than printable diagrams, by a long shot.&lt;/p&gt;
&lt;p&gt;And as for the last item in Geek Girl’s notes: yes, why &lt;em&gt;is&lt;/em&gt; H.G. so hostile? That must wait for an upcoming Episode…&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129844"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129844" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129844.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/04/ulterior-motive-lounge-episode-32-talking-with-pilot.aspx</guid>
            <pubDate>Wed, 04 Mar 2009 22:06:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129844.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/04/ulterior-motive-lounge-episode-32-talking-with-pilot.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129844.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Overlooking the Obvious</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/overlooking-the-obvious.aspx</link>
            <description>&lt;p&gt;I just wanted to rename a Word document while I was working in Word.&lt;/p&gt;
&lt;p&gt;You know what comes next. In practically every application out there, I have two choices:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Close the app. Navigate to the file in Windows Explorer and rename it. Double-click it to reopen the file. &lt;/li&gt;
    &lt;li&gt;Within the app, do a &lt;strong&gt;Save as…&lt;/strong&gt;. Optionally delete the old file name. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In both cases, &lt;em&gt;both&lt;/em&gt; file names now appear in the Most Recently Used list, even though the old file may no longer exist. Yawn. We know how this works.&lt;/p&gt;
&lt;p&gt;But can you learned this? Didn’t it seem a little odd?&lt;/p&gt;
&lt;p&gt;Can you remember the first time you tried to teach this to your non-geek relatives? Can you remember them saying, “That’s dumb, that’s confusing”? And then you said either, “But it’s easy enough” or “That’s just the way it works.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt; is it just the way it works? Because we geeks have spent decades telling ourselves that this is normal. It’s a tradition going back at least as far as the Unix &lt;strong&gt;mv&lt;/strong&gt; command, which can be used to move a file to a new folder but can also be used to rename a file. It’s the same way of thinking – a design way of thinking, &lt;em&gt;not&lt;/em&gt; a requirements way of thinking – that says “If we have Create, and we have Delete, then we have Edit, because we can always just Delete and then Create again.” We geeks have just accepted “Save As and Delete” as normal.&lt;/p&gt;
&lt;p&gt;Well, it’s not normal. We’re overlooking the obvious: if so many users need to be taught a complicated way to rename a file, it’s because &lt;strong&gt;users need a simple way to rename a file!&lt;/strong&gt; Except in a few superior designed programs, we don’t have a way, we have a workaround. It’s just that we know this workaround so well, we think of it as normal.&lt;/p&gt;
&lt;p&gt;Talk about &lt;em&gt;not&lt;/em&gt; designing for the user experience! Somewhere right now, &lt;a href="http://www.amazon.com/Inmates-Are-Running-Asylum/dp/0672316498"&gt;Alan Cooper&lt;/a&gt; is shaking his head in disgust…&lt;/p&gt;
&lt;p&gt;Well, not for me, not any more! From now on, every file-based app I write will have a &lt;strong&gt;Rename&lt;/strong&gt; command right up there with &lt;strong&gt;Save&lt;/strong&gt; and &lt;strong&gt;Open&lt;/strong&gt;; and when you rename, it will clean up the MRU list as well.&lt;/p&gt;
&lt;p&gt;Ironically, you know what’s one of my favorite features in Visual Studio? It’s the way you can rename a file in the Solution Explorer, and then it asks if you want to rename the class to match the file, and it just correctly applies the rename everywhere (except in comments).&lt;/p&gt;
&lt;p&gt;This is so easy, so convenient; yet somehow, I’ve been overlooking that convenience when it comes to my users. Have you?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129675"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129675" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129675.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/overlooking-the-obvious.aspx</guid>
            <pubDate>Wed, 25 Feb 2009 18:10:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129675.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/overlooking-the-obvious.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129675.aspx</wfw:commentRss>
        </item>
        <item>
            <title>You're Selling Software</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/24/yoursquore-selling-software.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fixed a typo and a calculation error.&lt;/p&gt;
&lt;p&gt;Josh Holmes has &lt;a target="_blank" href="http://www.joshholmes.com/blog/2009/02/16/MeasuringROIMovingFromCostCenterToStrategicPartner.aspx"&gt;a great post on Return on Investment (ROI)&lt;/a&gt;. And by “great”, I mean great even by Josh’s usual standards. He worked hard on this one. I was privileged to review three drafts before he published it; and by draft two, I was saying, “Josh, this one’s a winner. I’m going to reference this one a lot.” So stop reading me, and go read what Josh has to say. I’ll be waiting here when you get back.&lt;/p&gt;
&lt;p&gt;OK, you’ve read it. Pretty scary, huh? But the scariest part to me is that even though Josh is right, he shouldn’t be. To quote Paul Simon, these are the days of miracle and wonder. To be specific, these are the days of software. I’m not saying this is some grand new revelation; but businesses &lt;em&gt;and&lt;/em&gt; software people forget just how much software changes the world. Today, whatever your business may be, you may find that deep under the hood, you’re selling software. Oh, not everybody, by any means. Pastry chefs are still selling pastries, day care workers are still selling child care, and airlines are still selling transportation. But a lot of people who once sold simple goods and services are now selling software, whether they realize it or not.&lt;/p&gt;
&lt;p&gt;Let me draw some examples from projects where I’ve worked.&lt;/p&gt;
&lt;h1&gt; &lt;/h1&gt;
&lt;h1&gt;Material Handling&lt;/h1&gt;
&lt;p&gt;I’ve worked on a number of different material handling projects for a couple of leading companies in the field. This is a long-standing, well-established industry, concerned with moving packages and baggage and loads from one place to another with minimal human effort. If you’re not in the industry, you’ll likely think of it as “conveyor belts”; but there’s a lot more to it. There are conveyor belts, yes, but also…&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Rollers &lt;/li&gt;
    &lt;li&gt;Sorters &lt;/li&gt;
    &lt;li&gt;Packers &lt;/li&gt;
    &lt;li&gt;Stackers &lt;/li&gt;
    &lt;li&gt;Scanners &lt;/li&gt;
    &lt;li&gt;Lifters &lt;/li&gt;
    &lt;li&gt;Diverters &lt;/li&gt;
    &lt;li&gt;Carts &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And lots, lots more. But yes, it all starts with the simple conveyor belts and rollers that move a box from Point A to Point B.&lt;/p&gt;
&lt;p&gt;Except nobody wants those any more. Oh, not &lt;em&gt;nobody&lt;/em&gt;, but not enough customers to sustain the industry. Rollers and conveyors from Point A to Point B are a simple, long-solved problem.&lt;/p&gt;
&lt;p&gt;No, what customers want today is a system to take a box from Point A to Point Wherever The Label (Or RFID Tag) On The Box Tells Us To Send It. Point A to Point B requires some human to look at the box, decide where it’s going, and put it on the &lt;em&gt;right&lt;/em&gt; conveyor. What the customers want is for the computer to “just know” where this box is going.&lt;/p&gt;
&lt;p&gt;And it’s more than that: they don’t want the box to have a label that says “Send this to Shipping Dock A”. No, they want it to have a label that says, “This box contains Order #1232. Send it to the right destination.” And sometimes they even want the computer to look at the box and say, “Well, this box contains 50 copies of &lt;a target="_blank" href="http://www.imdb.com/title/tt0468569/"&gt;The Dark Knight&lt;/a&gt;, and Tucson needs those; but the truck to Tucson is full, and Orlando needs 70 copies, so we’ll send them there instead, and then reduce Orlando’s outstanding count by 20. The truck for Orlando is at Shipping Dock C, so send this box there. Reschedule Tucson’s fulfillment for their next truck.” In other words, what customers want is not a material handling system, but rather a decision system that controls material handling.&lt;/p&gt;
&lt;p&gt;And if your customers want a decision system, that means you’re selling software.&lt;/p&gt;
&lt;p&gt;This is news to most of the material handling industry. After all, the hardware to move all those boxes around might range in the millions of dollars, often tens of millions or more. It may occupy literally acres of space. Parts of it may weigh in the tons. Compared to that, the software seems like such an insubstantial, insignificant thing. Even the cost is insignificant, though you can bet the project managers will complain that the cost is too much.&lt;/p&gt;
&lt;p&gt;But that’s because – as Josh points out – they see the software as a cost center. It’s not. It’s a profit center. Without that software, those acres of steel and motors and conveyors won’t move those boxes anywhere. Worse, with &lt;em&gt;bad&lt;/em&gt; software, they’ll move the boxes to &lt;em&gt;the wrong places&lt;/em&gt;. And so without quality software, customers aren’t going to pay for the material handling systems.&lt;/p&gt;
&lt;p&gt;Does that mean you’re &lt;em&gt;only&lt;/em&gt; selling software? Nope. No line of code ever moved a single box by itself. The code has value because of the sorters and diverters, and the sorters and diverters have value because of the code.&lt;/p&gt;
&lt;p&gt;But the difference is this: the material handling project managers &lt;em&gt;know&lt;/em&gt; that the sorters and diverters and other equipment are profit centers. They &lt;em&gt;know&lt;/em&gt; they’re selling those. But all too often, software is charged as an overhead or a cost center, &lt;em&gt;not&lt;/em&gt; a profit center. So rather than try to sell more and better software, they try to skimp on the software costs, cutting schedules and budgets. And &lt;a target="_blank" href="http://www.amazon.com/Professional-Software-Development-Schedules-Successful/dp/0321193679"&gt;as McConnell has documented&lt;/a&gt;, the result is usually longer schedules, higher costs, and lower quality.&lt;/p&gt;
&lt;p&gt;The software managers in the material handling world need to read Josh’s post, understand it, think about it, and think how they can express the value of their work. A representative material handling system might cost the customer $20 million. If the software to run that system costs $500,000 to build, then cost-center accounting sees that as $500,000 of lost profit. Management will wonder why it cost so much, and wonder how they can cut those costs. What may follow is pressure and effort to cut costs in ways that make software development take longer and cost more.&lt;/p&gt;
&lt;p&gt;But if the software managers can see their group as a profit center &lt;em&gt;and&lt;/em&gt; can explain it as such to the executives, then the whole picture changes. When they understand that better software leads to more sales or easier sales, executives will want to invest in better software development tools and practices. Josh gives some good starting points toward that culture change. I would add these observations:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The ROI of software starts with Requirements. &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/16/an-argument-for-requirements-analysts.aspx"&gt;Yes, that has become a recurring theme for me.&lt;/a&gt; There are good reasons for that. With a foundation of well-defined requirements &lt;em&gt;and&lt;/em&gt; a process for accommodating change, software managers can show exactly how much of the customer benefit is directly dependent upon the software. If the system has 100 required functions and 90 of them require custom software implementation, then 90% of the profit of the system is directly dependent upon the software. That 90% is also dependent upon properly functioning hardware as well, so you can’t claim all of that profit as your accomplishment. In the material handling world, I saw a team of nearly 100 assemblers, machinists, construction workers, engineers, and other hardware folks install a system controlled by software written by 10 developers. I think that’s a good rough approximation: software provides 10% of the value of the systems with which it works. (In office systems and other systems not involving device controls, I would say that ratio is more like 50%, maybe higher. This Tablet PC would be useless to me without Windows XP, Journal, OneNote, MS Office, and Visual Studio, which collectively cost more than the Tablet PC.) So in our hypothetical example, the system has a value of $20 million; software is involved in 90% of that value, or $18 million; and software accounts for 10% of the value of those components, or $1.8 million. If the profit margin of the system overall is 50%, then you can argue that the software contributed to $900,000 in profit. These are back-of-the-envelope calculations. A more accurate estimate would require time spent looking at the value of each individual requirement &lt;em&gt;and&lt;/em&gt; the percentage of that value contributed by software. But in our hypothetical example, $500,000 of software development costs yielded $900,000 in profit, for an ROI of 80%. &lt;/li&gt;
    &lt;li&gt;Hammer home the destructive effects of schedule compression, as described by McConnell. Schedule compression beyond about 20% leads to longer, more expensive schedules with more errors and more dissatisfied customers. If the potential ROI is 80%, the actual ROI will be a lot lower if the schedule compression increases the schedule by 50% and the costs by even more. McConnell explains how this happens, and why it’s almost inevitable. &lt;/li&gt;
    &lt;li&gt;There &lt;em&gt;is&lt;/em&gt; a way to cut schedules effectively and productively: develop a true software engineering culture &lt;em&gt;and&lt;/em&gt; a culture of quality. There &lt;em&gt;is&lt;/em&gt; a better way to build software and systems, but “code faster!” isn’t it. Train your teams to be better developers. Improve your requirements process. (No, I’m not done with that theme yet.) Emphasize defect reduction, &lt;em&gt;not&lt;/em&gt; schedule reduction, because defect reduction is one of the most effective ways to reduce the schedule. &lt;/li&gt;
    &lt;li&gt;Invest for the long haul. Near the end of my first material handling job, the team worked on building a good, well-engineered, reusable and configurable platform that could address a wide range of customer needs. This platform didn’t directly address the needs of any existing customer, so it didn’t receive a lot of management support. Again, this was cost-center thinking: “Why are those programmers wasting money on code we don’t even need?” My second material handling job, nearly a decade later, was with a company which had faced those same issues, asked those same questions, and decided to invest in the software platform anyway. It had some infamous rough spots in its earliest implementations. But by the time I worked there, that baggage handling software was nearly a decade old, and &lt;strong&gt;it just worked.&lt;/strong&gt; Oh, there was always some amount of custom coding for every project; but for the most part, if they knew how many airport docks and how many baggage inducts and baggage claims they had to support, they knew to a high precision how much the software costs would be. And most of those costs were configuration costs. I often said they had &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Moore%27s_Law"&gt;Moore’s Law&lt;/a&gt; on their side. Moore’s Law says that computing power/speed roughly doubles roughly every 18 months. That means that after a decade of life for that software, server power had increased roughly 128 times; but while airports get larger over time, they don’t grow 128 times in 10 years! The software architecture that was a good solution in 1997 was a &lt;strong&gt;great&lt;/strong&gt; solution in 2007, without any significant upgrade to the software. &lt;/li&gt;
    &lt;li&gt;Don’t cling to the long haul. As much as I think the baggage handling company was smart to reuse a successful architecture, you must always consider the competitive advantages offered by new technologies. When the baggage handling company &lt;em&gt;did&lt;/em&gt; have to make code changes, their reliance on old tools and technologies made every change more expensive. Periodically reassess the value of an existing investment vs. the potential gains of a new investment. &lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Vehicle Diagnostic Systems&lt;/h1&gt;
&lt;p&gt;My most recent contract was a project for building vehicle diagnostic systems. One part of the team built the tool that connected to the vehicle bus and communicated with vehicle systems; the other part built the tools that talked to that tool via Bluetooth and USB, and then interacted with the user and with online systems.&lt;/p&gt;
&lt;p&gt;Now with a description like that, you might guess that the company &lt;em&gt;knew&lt;/em&gt; they were selling software. And you would be right. Oh, it was a mixed hardware-software product, but they were much more clear on the importance of good software than I found in the material handling world.&lt;/p&gt;
&lt;p&gt;And yet – while I mean no offense to a great team and some great people that I’m already missing – the organization didn’t approach this project as a &lt;em&gt;software&lt;/em&gt; project. They approached it as a &lt;em&gt;manufacturing&lt;/em&gt; project.&lt;/p&gt;
&lt;p&gt;A typical mass production manufacturing effort boils down to finding and implementing tools and processes to do the same thing over and over, so that you can sell and serve as many customers as possible for as little cost as possible. The rules are different for custom manufacturing; but for mass production, profit lies in reducing the number and costs of the repetitive parts of the production process.&lt;/p&gt;
&lt;p&gt;Let’s say you’re building mailboxes. A traditional home mail box consists of a base, a shell, an end cap, a door, a door pull, a door catch, a flag, a flag stop, two swivels for the door, a swivel for the flag, and 21 rivets:&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/YoureSellingSoftware_C5AC/Mailbox%20Parts_2.gif"&gt;&lt;img title="Mailbox Parts" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="604" alt="Mailbox Parts" width="646" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/YoureSellingSoftware_C5AC/Mailbox%20Parts_thumb.gif" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/YoureSellingSoftware_C5AC/Mailbox_2.gif"&gt;&lt;img title="Mailbox" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="464" alt="Mailbox" width="334" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/YoureSellingSoftware_C5AC/Mailbox_thumb.gif" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Every mailbox, according to this design, requires a person or machine to put the parts in place and insert the rivets and swivels. If every rivet and swivel can be inserted in one second and it takes ten seconds to align all the parts, then a single worker can assemble a single mailbox in roughly 34 seconds. If instead the shell, end cap, door catch, and base can be injection molded as a single piece complete with a flag stop and indents where the flag and door attach, and the door and pull can be injection molded as another single piece, then that same worker can assemble a single mailbox in roughly 3 seconds.&lt;/p&gt;
&lt;p&gt;But that throughput assumes the worker has materials always ready to hand. Suddenly the process is limited not by the worker’s assembly rate, but by other factors: how quickly can you deliver parts to the worker, and how fast can the worker &lt;em&gt;really&lt;/em&gt; work without slowing down due to fatigue? Those questions apply to the riveted design as well, but less so: no matter how fast you deliver the parts for the first design, the riveting is the bottleneck.&lt;/p&gt;
&lt;p&gt;Once the parts availability becomes the bottleneck, the industrial process engineer changes focus: instead of trying to improve the design of the mailbox, the engineer must improve the design of the process that delivers parts to the worker. Or perhaps the engineer must design an improved assembly process, maybe improved machinery and tools, that will make less work per mailbox. The company makes money on each mailbox built, &lt;em&gt;not&lt;/em&gt; on each step performed by the workers. Whatever your cost and effort is per mailbox, that’s a 1-for-1 cost: one unit of labor per one mailbox sold. If you can reduce that unit of labor, you can increase overall profitability and employ more mailbox workers.&lt;/p&gt;
&lt;p&gt;So it’s common for industrial process engineers to invest a large amount of effort designing a more efficient manufacturing process. This effort can be seemingly large; but it’s is a one-time effort. Once it’s done well once, it’s done well for all of the mailboxes produced. So the cost of that process design is amortized over the tens or hundreds of thousands of mailboxes produced, &lt;em&gt;and&lt;/em&gt; it reduces the overall cost of production for each mailbox.&lt;/p&gt;
&lt;p&gt;This is Industrial Process 101; but here’s where the mistake comes in when you see software development as akin to manufacturing. Software development &lt;em&gt;is&lt;/em&gt; like manufacturing, in a sense; but it’s like process design, &lt;em&gt;not&lt;/em&gt; piece manufacturing!&lt;/p&gt;
&lt;p&gt;The software equivalent of the worker assembling mailboxes over and over all day long is users applying the software over and over all day long. The value to the user (and the user’s organization) increases when the user can get more done with less work, and so get more tasks done in a single day. Just as the industrial process engineer creates value by improving the process and reducing the manufacturing cost, so too does the software team create value by improving the software and reducing the usage cost.&lt;/p&gt;
&lt;p&gt;But this means that traditional manufacturing process improvement approaches can be aimed at the wrong targets when applied to software development. In manufacturing, it can be cost effective to spend &lt;em&gt;more&lt;/em&gt; money on design process improvement to reduce the money spent on manufacturing; but when traditional manufacturing process improvement approaches are applied to software, often the goal is to spend &lt;em&gt;less&lt;/em&gt; money on software development. Yet somehow, we expect those “improvements” to improve the quality of the finished product.&lt;/p&gt;
&lt;p&gt;Now I’m not saying there’s no room to cut costs in software development. There are inefficient ways to design industrial processes: if your design team relearned basic facts every time they approached a new production line, or they ignored proven practices from other production lines, then they would waste a lot of time and money on lessons learned and relearned. The same is true for software engineering. Indeed, there’s an entire field of study, &lt;a target="_blank" href="http://www.poppendieck.com/"&gt;Lean Software Development&lt;/a&gt;, aimed at improving the development process in a similar fashion to the field of &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Lean_manufacturing"&gt;Lean Manufacturing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But simply applying Lean Manufacturing practices to software development can be misleading – even counterproductive – because Lean Manufacturing aims (in part) to reduce the time required for repetitive processes; and in software development, &lt;strong&gt;there are no repetitive processes.&lt;/strong&gt; Oh, that’s an exaggeration, of course, but it’s close enough to true. Industrial process engineers have repetitive processes, such as reading email, filing reports, printing blueprints, etc. In a similar fashion, software developers have repetitive processes, such as reading email, filing reports, compiling code, etc. But in both disciplines, the key work, the important and most time-consuming work, is brain work: thinking about the problems, proposing ideas, presenting ideas, reviewing ideas, revising ideas, etc. And this is work that virtually never repeats! It &lt;em&gt;will&lt;/em&gt; repeat if you keep reinventing the wheel; but a good team should know standard patterns and solutions for common problems, so they can concentrate their efforts on the unique aspects of a new project. The truly repetitive processes – checking email, compiling code – are more amenable to fiscal solutions than process solutions. Buy your developers faster computers and better tools: it’s the closest equivalent to getting the mailbox worker a faster assembly tool.&lt;/p&gt;
&lt;p&gt;And I’m going to repeat myself yet again: the most productive way to reduce the cost of software development is to improve your requirements process, followed closely by creating a true software engineering culture and a culture of quality. Those are goals of Lean Software Development and are consistent with Lean Manufacturing. Interestingly enough, they involve &lt;em&gt;creating&lt;/em&gt; quasi-repetitive processes: standard processes for doing standard &lt;em&gt;categories&lt;/em&gt; of work, while recognizing that ideally no work should ever be repeated. A standard way of testing code, a standard way of reviewing code, a standard way of communicating designs: these can add value if done right. However, they can also become straitjackets that prevent a team from solving a problem. I have a lot more to say on the value of quasi-standard quasi-repetitive processes; but that’s starting to veer pretty far from our topic today.&lt;/p&gt;
&lt;p&gt;And that topic, you’ll recall, is ROI. It’s easy to figure the ROI of industrial process engineering:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ROI = (New net profit per part – Old net profit per part) * Number of parts produced / (Cost to design the new process + Initial cost to implement the new process) – 100%&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This gets slightly more complex when you factor in time: &lt;strong&gt;Number of parts produced&lt;/strong&gt; in how much time? In early usage, you’ll almost always see a &lt;em&gt;negative&lt;/em&gt; return, because (as Josh mentions) there is a certain length of time it takes to recoup the initial investment. Businesses will usually set a time horizon in which to estimate ROI: 1 year, 3 years, maybe longer.&lt;/p&gt;
&lt;p&gt;A similar calculation applies to the ROI for better software:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ROI = (New net value of work per user – Old net value of work per user) * Number of users / (Cost to develop the new software + Initial cost to deploy the new software) – 100%&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But there’s a complication here. In the typical industrial situation, the same company is both designing the new process and manufacturing the parts. The ROI value is more clear-cut that way, because what matters most is the overall bottom line for the company. The same is true for in-house software development; but when you’re selling custom or shrinkwrap software to external customers, the value of the work and the deployment cost are measured by the customer, while the cost to develop the software are measured by your company. That’s a complication, but more of a deal negotiation concern than an ROI concern. The calculation in this case turns into &lt;em&gt;two&lt;/em&gt; calculations:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer’s ROI = (New net value of work per user – Old net value of work per user) * Number of users / (Cost to purchase the new software + Initial cost to deploy the new software) – 100%&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your ROI = Cost paid by Customer / (Cost to develop the new software + Initial cost to deliver the new software) – 100%&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Customer’s ROI, along with many other factors, will determine what cost they’re willing to pay; and then that value will determine &lt;em&gt;your&lt;/em&gt; ROI. You can make educated guesses of what they’re willing to pay, and then use those in estimating your ROI. And remember: just as with industrial process engineering, the initial return will almost always be negative. You have to prepare your arguments for that moment, when it seems like the system cost a lot &lt;em&gt;and&lt;/em&gt; is too difficult to use. Is it really too difficult? Or is it just new and unfamiliar? Unless you’re very good at defining &lt;em&gt;and&lt;/em&gt; communicating your requirements, users will always see “new” as “difficult”, and then cling to old and familiar; and in the process, they forget that the old was once new and unfamiliar, too. That’s why these ROI calculations include a deployment cost: that’s not just a cost for physically shipping and installing the code, but also for training the users and answering their questions and correcting their early mistakes. And lest we forget: finding and correcting our early bugs, and deploying corrections for those as well.&lt;/p&gt;
&lt;h1&gt;Conclusion (For Now)&lt;/h1&gt;
&lt;p&gt;Well, this has gone a lot further afield and gotten a lot wordier than I originally expected. (Regular readers are probably less surprised than I am.) I could go further, discussing ROI for training, ROI for technology upgrades, ROI for requirements analysis, ROI for architecture, ROI for community involvement, and ROI for employee retention. But each of those is a lengthy essay in its own right, and I’ll need some research before I’m ready to tackle some of those.&lt;/p&gt;
&lt;p&gt;But I hope I’ve added some personal experience to Josh’s excellent post. Many projects can be technological successes, yet be seen as costly, &lt;em&gt;not&lt;/em&gt; as a valuable investment. The difference: do we calculate and demonstrate an ROI? Or do we let stakeholders see only the cost of the software, without seeing the full return on the software?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129648"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129648" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129648.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/24/yoursquore-selling-software.aspx</guid>
            <pubDate>Tue, 24 Feb 2009 21:33:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129648.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/24/yoursquore-selling-software.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129648.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The Analyst's Chorus</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/20/the-analystrsquos-chorus.aspx</link>
            <description>&lt;p&gt;I am the mirror, reflecting what you say to me.&lt;/p&gt;
&lt;p&gt;I am the mirror, I’ll show you where you want to be.&lt;/p&gt;
&lt;p&gt;Talk to the mirror, I’ll tell you what you really said.&lt;/p&gt;
&lt;p&gt;Look in the mirror, I’ll draw the picture in your head.&lt;/p&gt;
&lt;p&gt;There in the mirror: it’s what you didn’t know you knew.&lt;/p&gt;
&lt;p&gt;I am the mirror, and I’m listening… to you.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129568"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129568" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129568.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/20/the-analystrsquos-chorus.aspx</guid>
            <pubDate>Fri, 20 Feb 2009 22:00:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129568.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/20/the-analystrsquos-chorus.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129568.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Requirements Patterns and Antipatterns: Checklists</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx</link>
            <description>&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="50%"&gt;
            &lt;p&gt;There’s an old joke about an engineer called out of retirement by a company in trouble: their most vital machine has stopped working, and nothing they have tried will get it started again. The old engineer looks at the machine, studies it for a few minutes from different angles, and flips a switch. &lt;em&gt;Presto&lt;/em&gt;! The machine starts to work, humming along like it never had a problem. The engineer hands the owner a bill for $10,000; and the owner says, “For flipping a switch? That’s outrageous! I’m not paying until I see an itemized bill.” So the engineer takes back the bill and writes on the back, “Flipping the switch: $1. Knowing which switch to flip: $9,999.”&lt;/p&gt;
            &lt;p&gt;Unfortunately, I find that a lot of patterns work is like that: if you know which pattern to apply, the work is (relatively) easy; but if you don’t know the patterns, you don’t know when to apply them. Like the company owner in the joke, there’s a switch out there, but you don’t know to flip it.&lt;/p&gt;
            &lt;p&gt;Well, the best way to learn patterns (like most things) is by experience. I can’t give you experience in a blog, but I can give you Diagnostic checklists that summarize experience. Patterns may also have Verification checklists, and Antipatterns may have Correction checklists. Some Patterns may have multiple Verification checklists. For example, &lt;strong&gt;Pattern 10. Brainstorming&lt;/strong&gt; session has &lt;em&gt;three&lt;/em&gt; checklists: one for preparing a &lt;strong&gt;Brainstorming&lt;/strong&gt; session, a second for assessing the success of the session, and a third for summarizing the results of the session.&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="50%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;h2&gt;N/A: Your Defense Against Obsession&lt;/h2&gt;
                        &lt;p&gt;As I’ll discuss under &lt;strong&gt;Antipattern 26. Obsessive Compulsive Template Disorder (OCTD)&lt;/strong&gt;, it’s easy for bureaucracies to turn templates and checklists into must-do tools for “managing” a process, &lt;em&gt;even when those templates or checklists don’t apply&lt;/em&gt;. This is a form of what Steve McConnell describes as “cargo cult software engineering”: going through the motions without understanding why, and without actually getting the benefits (&lt;em&gt;Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers&lt;/em&gt;, pp. 23-28.). These checklists aren’t goals in themselves; they’re tools to help you in your goal of more complete and useful requirements analysis.&lt;/p&gt;
                        &lt;p&gt;The best defense against OCTD is &lt;strong&gt;N/A: Not Applicable&lt;/strong&gt;. Whenever a line item in these checklists doesn’t apply to your project, mark it N/A. Then give your project 0 points or full points for that item, whichever you think is best.&lt;/p&gt;
                        &lt;p&gt;Of course, it’s easy to take this too far, and mark &lt;em&gt;everything&lt;/em&gt; as N/A. Perfection! You get 100%, right? Wrong. So when you &lt;em&gt;do&lt;/em&gt; mark an item as N/A, also explain &lt;em&gt;why&lt;/em&gt; it doesn’t apply to your project. If you can’t explain why, you can’t claim N/A.&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Scoring the Checklists&lt;/h2&gt;
&lt;p&gt;Each checklist is scored on a 0 to 100 scale.&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="50%"&gt;
            &lt;h3&gt;Diagnostic Checklists&lt;/h3&gt;
            &lt;p&gt;Diagnostic Checklists are scored as follows:&lt;/p&gt;
            &lt;p&gt;0-20 &lt;strong&gt;Insignificant.&lt;/strong&gt; This Pattern won’t help you much, or you have little risk of this Antipattern. Only worry about this Pattern or Antipattern if your project is mission-critical. Monetarily, this will cost you more than you’ll gain; but you could still mitigate non-monetary risks.&lt;/p&gt;
            &lt;p&gt;21-50 &lt;strong&gt;Minor.&lt;/strong&gt; This Pattern may help you, or you have some risk of this Antipattern; but you probably have higher priority Patterns and Antipatterns to address. Worry about this Pattern or Antipattern if your organization is highly risk averse. Monetarily, this may cost you more than you’ll gain; but you could still minimize risks.&lt;/p&gt;
            &lt;p&gt;51-80 &lt;strong&gt;Significant.&lt;/strong&gt; This Pattern will help you, or you have significant risk of this Antipattern. If you’re not addressing this Pattern or Antipattern in some fashion, that should be an item on your risk assessment.&lt;/p&gt;
            &lt;p&gt;81-90 &lt;strong&gt;Major.&lt;/strong&gt; This Pattern should be a primary element of your requirements process, or this Antipattern is a primary risk for your project. If you’re not addressing this Pattern or Antipattern in some fashion, that should be a top item on your risk assessment.&lt;/p&gt;
            &lt;p&gt;91-100 &lt;strong&gt;Critical.&lt;/strong&gt; This Pattern will be a critical element in the success or failure of your project; or this Antipattern is a critical risk for your project. If you’re not addressing this Pattern or Antipattern in some fashion, that should be an immediate item on your risk assessment.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="50%"&gt;
            &lt;h3&gt;Verification and Correction Checklists&lt;/h3&gt;
            &lt;p&gt;Verification and Correction checklists are scored as follows:&lt;/p&gt;
            &lt;p&gt;0-20 &lt;strong&gt;Misleading.&lt;/strong&gt; What you think you know regarding this Pattern or Antipattern is more wrong than right. If you proceed based on this score, expect to throw away and rework as much as 100% of your work.&lt;/p&gt;
            &lt;p&gt;21-50 &lt;strong&gt;High Risk.&lt;/strong&gt; You’re starting to learn about this Pattern or Antipattern; but much of what you know is incomplete or incorrect. If you proceed based on this score, expect to throw away and rework as much as 50% of your work.&lt;/p&gt;
            &lt;p&gt;51-80 &lt;strong&gt;Agile.&lt;/strong&gt; Agile processes are based on a conviction that many requirements can &lt;em&gt;only&lt;/em&gt; be known through delivering and assessing code. Agile proponents point to examples and experience that show that requirements identified too completely in advance can be time-consuming &lt;em&gt;and&lt;/em&gt; misleading. So an Agile team should aim for a middle-ground of knowledge: complete enough to lead to code, not so complete that they never get answers.&lt;/p&gt;
            &lt;p&gt;81-95 &lt;strong&gt;Optimal.&lt;/strong&gt; Your knowledge regarding this Pattern or Antipattern is good enough for most teams to proceed. As Steve McConnell has documented (&lt;em&gt;Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers&lt;/em&gt;, pp. 15-16.), teams that focus on quality and defect reduction actually reduce costs and schedule by doing so, &lt;em&gt;up to a point&lt;/em&gt;. After that point, even better knowledge costs more money and schedule, and is only appropriate for mission-critical projects. Most teams should proceed based on optimal knowledge.&lt;u&gt;&lt;/u&gt;&lt;/p&gt;
            &lt;p&gt;96-100 &lt;strong&gt;Minimal Risk.&lt;/strong&gt; Your knowledge regarding this Pattern or Antipattern is good enough for mission critical teams to proceed.&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Point Lists&lt;/h2&gt;
&lt;p&gt;Point Lists apply to your entire requirements process. Each checked item scores a certain number of points. Check each item that applies, and sum the point points to get a score from 0 to 100.&lt;/p&gt;
&lt;h3&gt;Sample Point List: Feeding the Dog&lt;/h3&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 50 You have dog food; &lt;em&gt;or&lt;/em&gt; you have table scraps.&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 30 You have the dog.&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 20 The dog is hungry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;____ Total&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In some cases, the list potentially sums to greater than 100; but 100 is the maximum score in any case. For example, the Verification Checklist for Pattern 6, &lt;strong&gt;Trained Analysts&lt;/strong&gt;, provides 100 points for dedicated analysts and 50 points for developers trained in analysis techniques; but a team with both still scores only 100 points.&lt;/p&gt;
&lt;h2&gt;Percentage Lists&lt;/h2&gt;
&lt;p&gt;Percentage Lists apply to your set of requirements, or perhaps to a set of one kind of requirement. Each requirement item is scored a 1 if it meets the criteria, or a 0 if it doesn’t (no partial credit allowed). Your score is the percentage of requirement items that scored 1 vs. the total number of items.&lt;/p&gt;
&lt;h3&gt;Sample Percentage List: Feeding the Dogs&lt;/h3&gt;
&lt;p&gt;%__ Percentage of all dogs which have been fed.&lt;/p&gt;
&lt;h2&gt;Partial Percentage Lists&lt;/h2&gt;
&lt;p&gt;Partial Percentage Lists are Percentage Lists that allow for partial points. Each requirement item receives some number of points based on various questions; and then you determine the percentages that meet different point scores. Full points count for full percentage; but the percentage of partial points are divided to yield a lower score. The final score is the sum of these adjusted percentages.&lt;/p&gt;
&lt;h3&gt;Sample Partial Percentage List: Caring for the Dogs&lt;/h3&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 The dog is fed.&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 The dog is groomed.&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 The dog is exercised.&lt;/p&gt;
&lt;p&gt;%__ Percentage of dogs which score 3 out of 3.&lt;/p&gt;
&lt;p&gt;%__/2 Percentage of dogs which score 2 out of 3.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;%____ Total&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129120"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129120" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129120.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx</guid>
            <pubDate>Sun, 01 Feb 2009 19:43:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129120.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129120.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Pattern 19. Requirements Archaeology</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx</link>
            <description>&lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="100%"&gt;
            &lt;h2&gt;Diagnostic Checklist: Requirements Archaeology&lt;/h2&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 70 Your project is to supplement, upgrade, or replace an existing system.&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 30 The existing system is poorly documented, or the documentation is out of date.&lt;/p&gt;
            &lt;p&gt;____ Total&lt;/p&gt;
            &lt;p&gt;&lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx"&gt;You can learn how to score the checklists here.&lt;/a&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Problem:&lt;/h2&gt;
&lt;p&gt;The project is to supplement, upgrade, or replace an existing system, which is the &lt;em&gt;de facto&lt;/em&gt; primary source of your requirements.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Context:&lt;/h2&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;In many organizations, new work has to be done in a context of legacy systems, which embody a wide range of explicit and implicit requirements that customers may overlook. &lt;br /&gt;
            &lt;h2&gt;Forces:&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;Legacy systems represent an investment of capital and time that must be conserved. &lt;/li&gt;
                &lt;li&gt;Legacy systems may not be well documented or well understood by the current customer. &lt;/li&gt;
                &lt;li&gt;The team that built the legacy system may no longer work in this organization.&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;
            &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p align="center"&gt;&lt;font color="#000080" size="5"&gt;&lt;strong&gt;Legacy systems represent an investment of capital and time that must be conserved.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Solution:&lt;/h2&gt;
&lt;p&gt;Reverse engineer models (see the &lt;strong&gt;Modeling&lt;/strong&gt; pattern) and specs for the current system, and review those to identify requirements. Then analyze and organize those “uncovered” requirements, and present your results back to your customer as a form of &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-echo-effect.aspx"&gt;The Echo Effect&lt;/a&gt;. Be ready for your customer to be surprised, as you reveal features they’ve long forgotten, never known about, or just taken for granted. Listen for them to identify legacy features that they don’t need replicated or supported, and then explore those features to be sure there’s nothing there that other features depend upon.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p&gt;UML tools that will reverse engineer UML structure include &lt;a target="_blank" href="http://argouml.tigris.org"&gt;ArgoUML&lt;/a&gt;, &lt;a target="_blank" href="http://www.sparxsystems.com"&gt;Enterprise Architect&lt;/a&gt;, &lt;a target="_blank" href="http://www-01.ibm.com/software/rational/uml/products.html"&gt;IBM Rational UML tools&lt;/a&gt;, and &lt;a target="_blank" href="http://www.excelsoftware.com/maca&amp;amp;dproducts.html"&gt;MacA&amp;amp;D&lt;/a&gt;, among others. In their preview of &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vsts2008/default.aspx"&gt;the 2010 version of Visual Studio Team System&lt;/a&gt;, Microsoft has demonstrated powerful UML tools, including the ability to &lt;a target="_blank" href="http://www.theumlguy.com/Videos/RosarioReverseSequence.wmv"&gt;reverse engineer sequence diagrams from source code&lt;/a&gt;. This is a major advance in general purpose reverse engineering, turning what used to be hours of manual work into minutes.&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;You may be able to rely on mechanical tools to do much of this reverse engineering. Many UML tools, for example, will reverse engineer models from source or from compiled code.&lt;a name="_ftnref1_7587" href="#_ftn1_7587"&gt;[1]&lt;/a&gt; Other tools will reverse engineer and graphically depict database schemas, network layouts, and other elements of existing systems.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;But you need to go beyond such mechanical reverse engineering for two reasons.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;It’s far too coarse, as our archaeology metaphor shows. Imagine the look on an archaeologist’s face if a contractor showed up at a dig site and said, “Hey, I’ll dig up this whole excavation for you. Let me get my bulldozer.” While mechanical reverse engineering isn’t destructive like the bulldozer, it’s not much more discriminating. The bulldozer piles up a great big heap of earth and stone and rubble, while the mechanical tools pile up a great big heap of classes, relations, tables, columns, nodes, and other artifacts. If you don’t sift through the rubble, you really haven’t learned anything. &lt;/li&gt;
    &lt;li&gt;In &lt;a target="_blank" href="http://www.TheUMLGuy.com"&gt;my UML classes&lt;/a&gt;, I teach that UML isn’t about software design, but rather about &lt;em&gt;system&lt;/em&gt; design, where a system is structure with behavior and goals. Well, I’m missing something in that definition: a system is structure with behavior &lt;em&gt;that fulfills some intention&lt;/em&gt;. A good mechanical reverse engineering tool should produce a structural model of a legacy system. Modern tools shed a little light on the behavior model of a system. But only a human reader can produce “intentional” models. A mechanical model captures Functional Requirements at best; but an intentional model captures the User Requirements, Business Requirements, Non-Functional Requirements, Constraints, Actors, and Domain Objects that are represented by the Functional Requirements. (See the &lt;strong&gt;Categorization&lt;/strong&gt; pattern for a discussion of these types of requirements.)&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;
            &lt;p&gt;So certainly &lt;em&gt;start&lt;/em&gt; with mechanical reverse engineering, as much as your tools will allow; but then dig into the resulting models and organize them (a form of &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-outline-effect.aspx"&gt;The Outline Effect&lt;/a&gt;) to learn what’s in the models. From there, you can create behavioral and intentional models by looking at mechanical models, the user manuals, and the system in operation and then deducing how these fit together.&lt;/p&gt;
            &lt;h2&gt;Resulting Context:&lt;/h2&gt;
            &lt;p&gt;The reverse engineered requirements should serve as a baseline for or input into the requirements for the new system or extensions to the existing system. From there, turn to other patterns as a way to elicit and analyze new requirements.&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p align="center"&gt;&lt;font color="#000080" size="5"&gt;&lt;strong&gt;Certainly &lt;em&gt;start&lt;/em&gt; with mechanical reverse engineering, as much as your tools will allow; but then dig into the resulting models and organize them (a form of &lt;strong&gt;The Outline Effect&lt;/strong&gt;) to learn what’s in the models.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There must be new requirements, right? You’re not just replacing the existing system for something to do, right? There should be &lt;em&gt;some&lt;/em&gt; reason for replacing it: porting to a new platform, better maintainability, better extensibility, or &lt;em&gt;something&lt;/em&gt;. If you’re just suffering from replacement-itis, you should read &lt;a target="_blank" href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;Joel Spolsky’s essay on rewriting&lt;/a&gt;.He makes a good argument for preserving the hard-earned knowledge embodied in legacy systems, and the consequences of replacing working code without a business case.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Discussion:&lt;/p&gt;
&lt;p&gt;See also &lt;strong&gt;Modeling&lt;/strong&gt;, &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-outline-effect.aspx"&gt;The Outline Effect&lt;/a&gt;, and &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-echo-effect.aspx"&gt;The Echo Effect&lt;/a&gt; for patterns that work well with &lt;strong&gt;Requirements Archaeology&lt;/strong&gt;.&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="100%"&gt;
            &lt;h2&gt;Verification Checklist: Requirements Archaeology&lt;/h2&gt;
            &lt;p&gt;For each pre-existing system or component:&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 You have a mechanically reverse-engineered structural model of the component. &lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 2 You have a manually reverse-engineered intentional model of the component.&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 You have a presented one or both models to the Customer and received useful feedback.&lt;/p&gt;
            &lt;p&gt;%__ Percentage of requirements which score 4.&lt;/p&gt;
            &lt;p&gt;%__/2 Percentage of requirements which score 3.&lt;/p&gt;
            &lt;p&gt;%__/4 Percentage of requirements which score 2.&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;%____ Total&lt;/strong&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx"&gt;You can learn how to score the checklists here.&lt;/a&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129119"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129119" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129119.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx</guid>
            <pubDate>Sun, 01 Feb 2009 19:13:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129119.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129119.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ulterior Motive Lounge Episode 31: The Teams Split Up</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx</link>
            <description>&lt;p&gt;Continuing &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/07/ulterior-motive-lounge-episode-30-touring-the-laboratories.aspx"&gt;The Project That Time Forgot&lt;/a&gt;, a UML case study in comic strip form... (Click pictures for larger images.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Episode%2031.jpg"&gt;&lt;img title="Episode 31" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="389" alt="Episode 31" width="604" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Episode%2031_5.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;After a long hiatus due to weather, illness, work, conferences, and more stuff than I can explain, the Lounge is back.&lt;/p&gt;
&lt;p&gt;This Episode gets the ball rolling for Act II, so there’s not much new UML content here yet. But I can give you a few diagrams of the team’s review process. The process starts with some preliminaries, then splits into three threads of operations, each with a separate team:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Review%20Process.jpg"&gt;&lt;img title="Review Process" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="432" alt="Review Process" width="604" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Review%20Process_3.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Design Review.&lt;/strong&gt; This team, led by The UML Guy, will create a Design Assessment, summarizing the state of the design and any clear risks and concerns. The details of the Design Review look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Design Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="627" alt="Design Review" width="554" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Design%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the original design spec to determine the intent of the original team. &lt;/li&gt;
        &lt;li&gt;Review design documents and updates since the original spec. &lt;/li&gt;
        &lt;li&gt;Reverse engineer a design from the code. A good UML tool like &lt;a target="_blank" href="http://www.sparxsystems.com/"&gt;Enterprise Architect&lt;/a&gt; makes this a lot easier, but not easy. &lt;a target="_blank" href="http://www.theumlguy.com/Videos/RosarioReverseSequence.wmv"&gt;VSTS 2010 will make it even easier&lt;/a&gt;, but &lt;em&gt;still&lt;/em&gt; not easy. Incorporate this into a design summary. &lt;/li&gt;
        &lt;li&gt;Review the design with the dev team and revise until it’s ready for presentation. &lt;/li&gt;
        &lt;li&gt;Review the design with the full review team and revise until it’s ready for assessment. &lt;/li&gt;
        &lt;li&gt;Create the design assessment. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;li&gt;&lt;strong&gt;Functional Review.&lt;/strong&gt; This team, led by Geek Girl, will create a Functional Assessment: a description of how well the system performs existing functions, with emphasis on usability and correctness. The details of the Functional Review process look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Functional Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="484" alt="Functional Review" width="503" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Functional%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the existing requirements docs. &lt;/li&gt;
        &lt;li&gt;Review outstanding defect reports, and make those the beginning of a functional assessment. &lt;/li&gt;
        &lt;li&gt;For each function identified in the requirements, identify actors and user who represent those actors. Interview those users to determine how well the system &lt;em&gt;really&lt;/em&gt; works, and update the functional assessment. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;li&gt;&lt;strong&gt;Requirements Review.&lt;/strong&gt; This team, led by The Reader, will create a Requirements Assessment: a description of what requirements the system covers; and more important, what it &lt;em&gt;doesn’t&lt;/em&gt; cover. The details of the Requirements Review process look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Requirements Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="526" alt="Requirements Review" width="509" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Requirements%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the existing requirements docs. &lt;/li&gt;
        &lt;li&gt;Assess the quality of the existing requirements. Are they quantified? Are they testable? Are they unambiguously stated in words, diagrams, and tests? Are they assigned business values and priorities? Do they have clearly identified actors and use cases and scenarios and goals for each feature? These and many more questions will help to create the requirements assessment. &lt;/li&gt;
        &lt;li&gt;For each actor represented in the requirements &lt;em&gt;or&lt;/em&gt; discovered during interviews, identify and interview representative users. Determine whether they have missing requirements, as well as whether they know of or require previously unidentified actors. &lt;/li&gt;
    &lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;For a really thorough review, you probably need at least three more threads of activity:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Code Review to inspect the code, either completely or through sampling, to identify how well it’s constructed and maintained. &lt;/li&gt;
    &lt;li&gt;Quality Review to identify Quality Assurance measures, Testing measures, and the status of each. &lt;/li&gt;
    &lt;li&gt;Process Review to analyze the processes followed by the dev team and related teams. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But for simplicity (and to keep most of my focus on &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/17/requirements-night-at-ulterior-motive-lounge.aspx"&gt;my primary message&lt;/a&gt;), I’m going to restrict this case study to Design, Functionality, and Requirements. Code will be reviewed under Design, and Quality will be reviewed under Functionality. Process will be reviewed everywhere.&lt;/p&gt;
&lt;p&gt;Is this a lot of work? Yep. But it’s a minimal necessary set of activities to review a project for status and risks after you’ve ignored them for a long time. It would be &lt;strong&gt;so&lt;/strong&gt; much easier if you could do these sorts of assessments in real time right from the start as the project proceeds. It would be &lt;strong&gt;so&lt;/strong&gt; much easier if you could report the status and health of the project at the push of a button, based upon the actual work the team does &lt;strong&gt;as they do it.&lt;/strong&gt; Gee, wouldn’t Owner’s life be a lot easier if there were tools to do all that?&lt;/p&gt;
&lt;p&gt;Oh, wait a minute… There &lt;em&gt;are&lt;/em&gt; tools like that! In fact, there’s a whole category of such tools: &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Application_Lifecycle_Management"&gt;Application Lifecycle Management (ALM)&lt;/a&gt;. And my current favorite is the aforementioned &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vsts2008/products/default.aspx"&gt;Visual Studio Team System&lt;/a&gt;, perhaps the most poorly named product Microsoft produces today. Why poorly named? Because &lt;a target="_blank" href="http://msdn.microsoft.com/vstudio/products/"&gt;Visual Studio&lt;/a&gt; is a developer tool set, particularly a tool set for .NET developers; so when people hear a name like “Visual Studio Team System”, they assume it’s a developer tool set, only bigger and better. They assume it’s about .NET development.&lt;/p&gt;
&lt;p&gt;VSTS is &lt;strong&gt;not&lt;/strong&gt; about .NET development. Oh, VSTS includes Visual Studio, and then adds some powerful developer and architect and DBA and tester features; but those features, as powerful as they are, are just the icing on the cake.&lt;/p&gt;
&lt;p&gt;The cake is ALM. VSTS is about your process and how you can define it and design it and manage it and track it, all through tools your team – your &lt;strong&gt;whole&lt;/strong&gt; team, not just .NET developers – are already using. Your Project Managers can create task lists and project plans in Excel or Project. Your developers can work on those plans in Visual Studio – or not! If they’re working with Eclipse or other non-.NET tools, developers can use &lt;a target="_blank" href="http://www.devbiz.com/teamplain/webaccess/default.aspx"&gt;TeamPlain&lt;/a&gt; to access their work items. Testers can create and apply test plans. Executives can view summaries and reports and Key Productivity Indicators (KPIs) through a project Web portal.&lt;/p&gt;
&lt;p&gt;And all of these tools are updated automatically as the team works, in real time, through the Team Foundation Server: a powerful set of databases, reports, services, and tools that integrate with Excel and Project and Visual Studio and Sharepoint and other tools to provide a seamless process involving all participants.&lt;/p&gt;
&lt;p&gt;I didn’t intend this post to turn into an ad for VSTS, so I’ll leave you to explore further if you like. But I can tell you this: even if Owner had known about VSTS, even if he could’ve convinced Cowboy Consultant to look at it, they would’ve turned it down. Owner already balked at spending proper time and money on requirements and design. Cowboy Consultant already demonstrated that he has no patience for anything beyond the code itself. Well, as powerful as VSTS is, it’s not cheap (though I think it’s well cost justified), and it takes time and effort and training to use it properly. They both would’ve written it off as needless overhead, judging by the attitudes we’ve seen so far.&lt;/p&gt;
&lt;p&gt;And those attitudes are going to lead to some mighty big problems pretty soon. Dinosaur sized, even.&lt;/p&gt;
&lt;p&gt;One final note on today’s Episode. You may wonder why Dog is going out into the Park with The Reader and Stick Boy. Well, she’s a dog. She smells things, really interesting things. She wants to investigate, not hang around in some sterile, air conditioned computing center. Dogs gotta be walked, ya know?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129103"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129103" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129103.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx</guid>
            <pubDate>Sat, 31 Jan 2009 06:59:22 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129103.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129103.aspx</wfw:commentRss>
        </item>
        <item>
            <title>An Argument for Requirements Analysts</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/16/an-argument-for-requirements-analysts.aspx</link>
            <description>&lt;table cellspacing="1" cellpadding="1" width="100%" summary="" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9297/o_Defects%20.bmp"&gt;&lt;img id="ViewPicture_ascx_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 366px; BORDER-BOTTOM: black 2px solid; HEIGHT: 292px" alt="Productivity vs Defect Removal" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9297/r_Defects%20.bmp" /&gt;&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;
            &lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;An attempt to trade quality for cost or schedule actually results in increased cost and a longer schedule.&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;div&gt;&lt;font size="4"&gt;Steve McConnell,&lt;br /&gt;
            &lt;em&gt; Professional Software Development&lt;/em&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;What has long been known in other businesses is true for software development as well: if you cut corners for shorter schedules or lower costs, you will get longer schedules, higher costs, &lt;em&gt;and&lt;/em&gt; higher defect rates; but if you take the right measures to lower defect rates, you can get lower defect rates &lt;em&gt;and&lt;/em&gt; shorter schedules &lt;em&gt;and&lt;/em&gt; lower costs. As Crosby wrote, “Quality is free.” But it’s free only in terms of ROI, meaning the investment must be made first; and it’s only free if you first define what you mean by “quality”.&lt;/p&gt;
&lt;table cellspacing="1" cellpadding="1" width="100%" summary="" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;
            &lt;p&gt;Fortunately, Crosby provided the appropriate definition as well: quality is conformance to requirements. That can be a concrete, quantifiable definition; but in some way it just moves the problem down the road, leaving us to define requirements: not just the term, but the specific requirements of our projects. It leaves us with this inescapable truth:&lt;/p&gt;
            &lt;div align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;If we don’t know our requirements,&lt;br /&gt;
            &lt;u&gt;we can’t have quality.&lt;/u&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
            &lt;/td&gt;
            &lt;td&gt;
            &lt;div&gt;&lt;font size="4"&gt;&lt;em&gt;&lt;strong&gt;…we must define quality as “conformance to requirements” if we are to manage it.&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;div&gt;&lt;font size="4"&gt;Philip B. Crosby,&lt;br /&gt;
            &lt;em&gt;Quality is Free: The Art of Making Quality Certain&lt;/em&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="1" cellpadding="1" width="100%" summary="" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;
            &lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;
            &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9297/o_Analysis.JPG"&gt;&lt;img id="ViewPicture_ascx_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; BORDER-BOTTOM: black 2px solid" height="240" alt="Analysis Capability and Impact on schedule" width="260" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9297/r_Analysis.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
            &lt;div&gt;&lt;strong&gt;&lt;font size="3"&gt;Data from Boehm &lt;em&gt;et al.&lt;/em&gt;, &lt;em&gt;Software Cost Estimation with COCOMO II&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
            &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;/td&gt;
            &lt;td&gt;
            &lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Recent surveys have found that the most frequent causes of software project failure have to do with requirements problems – requirements that define the wrong system, that are too ambiguous to support detailed implementation, or that change frequently and wreak havoc on the system design.&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;div&gt;&lt;font size="5"&gt;Steve McConnell,&lt;br /&gt;
            &lt;em&gt;Professional Software Development&lt;/em&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Poorly defined requirements are endemic to the software development industry. Boehm’s research on factors that affect development schedules and costs show that:&lt;/p&gt;
&lt;div align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;Excellent requirements analysts can reduce a project’s schedule by almost 30%, while inadequate analysis can increase the schedule by over 40%.&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;Again and again, schedule pressures lead teams to start developing before they have sufficient requirements definition.&lt;/p&gt;
&lt;table cellspacing="1" cellpadding="1" width="100%" summary="" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;
            &lt;div&gt;&lt;font size="4"&gt;&lt;strong&gt;Even though requirements analysis is a key skill, the topic isn’t as “hot” as new technologies and tools that are promoted by vendors and conferences and magazines. And many development teams feel swamped just trying to keep up with technologies and tools.&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
            &lt;font size="4"&gt;Martin L. Shoemaker&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;
            &lt;p&gt;&lt;img id="ViewPicture_ascx_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; BORDER-BOTTOM: black 2px solid" height="148" alt="Influences on Schedule" width="247" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9297/r_Influences.JPG" /&gt;&lt;/p&gt;
            &lt;div&gt;&lt;strong&gt;&lt;font size="3"&gt;Data from Boehm &lt;em&gt;et al.&lt;/em&gt;, &lt;em&gt;Software Cost Estimation with COCOMO II&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Among all personnel factors, Analyst capability has the widest range of impact (multiplier range of 2, worst case divided by best case). Teams may tout their application experience as a strength; but application experience has an Influence Range of only 1.51. Application and platform experience &lt;em&gt;combined&lt;/em&gt; have an Influence Range of 2.11. Teams would never throw out their domain knowledge &lt;em&gt;and&lt;/em&gt; develop for an entirely new platform; but poor requirements practices have almost the same Impact Range.&lt;/p&gt;
&lt;p&gt;These teams aren’t foolish, yet they foolishly let a critical aspect of their process get out of control on project after project. A look at their team rosters may give a clue as to why: while there are many roles on the rosters, there may be &lt;em&gt;none&lt;/em&gt; with requirements as a primary responsibility. Marketing and sales have requirements responsibilities, but many conflicting responsibilities as well. Lead engineers are supposed to verify requirements; but they are also too busy, and are commonly focused on solutions, not requirements. Designers and developers also focus more on &lt;em&gt;how&lt;/em&gt; than on &lt;em&gt;what&lt;/em&gt;. Traditionally in software development, analysts have primary responsibility for and are evaluated on the correctness of requirements.&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;The role of requirements analysts is&lt;br /&gt;
to define the problem in a verifiable form,&lt;br /&gt;
so that teams may recognize a valid solution.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And next you must ask: who owns that responsibility in your organization? If the answer is "no one" or "I don't know", there's a ripe opportunity to cut your schedules by 30% to maybe even 50%, all while improving your quality.&lt;/p&gt;
&lt;p&gt;Code is not enough. It's all about requirements; and that's all about communication.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127988"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127988" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/127988.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/16/an-argument-for-requirements-analysts.aspx</guid>
            <pubDate>Wed, 17 Dec 2008 00:11:14 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127988.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/16/an-argument-for-requirements-analysts.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127988.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ulterior Motive Lounge Episode 27: Meet the Crew</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/05/ulterior-motive-lounge-episode-27-meet-the-crew.aspx</link>
            <description>&lt;p&gt;Continuing &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/02/ulterior-motive-lounge-episode-26-aboard-the-helicopters.aspx"&gt;The Project That Time Forgot&lt;/a&gt;, a UML case study in comic strip form... (Click pictures for larger images.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Episode%2027.jpg"&gt;&lt;img alt="Ulterior Motive Lounge Episode 27" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Episode%2027.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There's the business, and then there's the role of the system within the business. If all you focus on is the role of the system, you can miss chances to see where the system's &lt;em&gt;really&lt;/em&gt; needed.&lt;/p&gt;
&lt;p&gt;So time permitting, I would rather start by understanding the whole business and then work inward. Oh, sometimes the division is very clear: if my client asks for a change to their payroll system, I probably don't need details about their waste management system.&lt;/p&gt;
&lt;p&gt;Or do I? What if the waste management staff is made up of hourly employees? What if excess waste problems can result in overtime? What if that overtime gets charged to a different budget, such as the Environmental Quality Initiative?&lt;/p&gt;
&lt;p&gt;The boundaries between "business" and "problem domain" can be fuzzy, and it's easy to cross the boundaries without realizing it. I find it's easier to start with a broad scope and narrow in than to start with a narrow scope and expand.&lt;/p&gt;
&lt;p&gt;And if I had to pick the number one category of overlooked Actors in requirements analysis, it's the development and maintenance teams themselves. Customers think about what &lt;em&gt;they&lt;/em&gt; need from your system; but how often do they think about what &lt;em&gt;you&lt;/em&gt; need from the system? Do they think about running diagnostics to chase down problems? Do they think about maintenance and archiving of data? Do they think about staging and deploying patches and new releases? Do they think about detecting and tracking defects and problems and patterns of usage and percentage of down time? Do they think about support personnel and the tools they'll need to keep users running?&lt;/p&gt;
&lt;p&gt;Maybe. Maybe, if they're a very experienced system buyer. But most often, the answer is &lt;strong&gt;no&lt;/strong&gt;. If &lt;em&gt;you&lt;/em&gt; don't think of the development and maintenance and support staffs as Actors, and &lt;em&gt;you&lt;/em&gt; don't identify their Use Cases, no one will. Then you'll deploy, and the system will need maintenance, and your users will need support, and you'll have no tools to help them. And when you start trying to retrofit the tools after the fact, someone will say "You should've thought of that." And they're right. You should have. You're the professionals here.&lt;/p&gt;
&lt;p&gt;So Owner has done a good job of identifying the "stars" of the story. These are Actors you &lt;em&gt;will&lt;/em&gt; see again as the story plays out. (Trust me: if I didn't need them in the story, I wouldn't draw them. I'm just too busy to draw characters I don't need. (Somewhere Editor Bill and &lt;a href="http://www.getflowerpot.com"&gt;Curtis Gray&lt;/a&gt; are stunned into disbelief at that remark.)) But he has barely scratched the surface of the full Park staff. After much longer discussions, The UML Guy identified these basic classes of Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Park%20Actors.jpg"&gt;&lt;img alt="Park Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Park%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a common pattern in many of my models:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;User&lt;/strong&gt;s are anyone who might be involved with the system in any way. They may be anonymous visitors to the Park's Web site; or they may be more specific Actors, as described below. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Authorized User&lt;/strong&gt;s are Users who have permissions to do something on the system that Users can't do. This is represented in the diagram above as a set of Authorizations. Different Authorized Users will have different Authorizations. We'll get more specific about what that means when we get closer to code. &lt;/li&gt;
    &lt;li&gt;An &lt;strong&gt;Employee&lt;/strong&gt; is an Authorized User that works within the organization and has additional Authorizations as a result. &lt;/li&gt;
    &lt;li&gt;A &lt;strong&gt;Supervisor&lt;/strong&gt; is an Employee with a Staff of Employees, along with additional Authorizations and responsibilities. &lt;/li&gt;
    &lt;li&gt;A &lt;strong&gt;Vendor&lt;/strong&gt; is an Authorized User who isn't employed by the business, but who provides services to the organization and may have additional Authorizations and responsibilities. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, this model has another class of Authorized Users: Guests. We want each Guest to have Web access to Park content, so that we can sell additional services and souvenirs to them. And then Priority Guests are Guests who pay for full Internet access.&lt;/p&gt;
&lt;p&gt;After identifying these major classes of Actors, the team identified more specific versions of each. The Vendor Actors diagram is the simplest:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Vendor%20Actors.jpg"&gt;&lt;img alt="Vendor Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Vendor%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Supervisor Actors are more numerous:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Supervisor%20Actors.jpg"&gt;&lt;img alt="Supervisor Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Supervisor%20Actors.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The Employee Actors are where the "Actor Explosion" comes in. This is just the first diagram; more detailed Employee diagrams follow:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Employee%20Actors.jpg"&gt;&lt;img alt="Employee Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Employee%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Most (but not all) of these Employee classes have more detailed Employees below.&lt;/p&gt;
&lt;p&gt;Here are the Ops Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Ops%20Staff%20Actors.jpg"&gt;&lt;img alt="Ops Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Ops%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And Ops Staff is complex enough to require two even more detailed diagrams. Here are the Transport Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Transport%20Staff%20Actors.jpg"&gt;&lt;img alt="Transport Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Transport%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And here are the Facilities Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Facilities%20Staff.jpg"&gt;&lt;img alt="Facilities Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Facilities%20Staff.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the Laboratory Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Laboratory%20Staff.jpg"&gt;&lt;img alt="Laboratory Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Laboratory%20Staff.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the Lodge Staff Actors&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Lodge%20Staff%20Actors.jpg"&gt;&lt;img alt="Lodge Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Lodge%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are Concession Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Concession%20Staff%20Actors.jpg"&gt;&lt;img alt="Concession Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Concession%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the Marketing Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Marketing%20Staff%20Actors.jpg"&gt;&lt;img alt="Marketing Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Marketing%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And finally, here are the Medical Staff Actors:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Medical%20Staff%20Actors.jpg"&gt;&lt;img alt="Medical Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Medical%20Staff%20Actors.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whew! That's a total of 86 different classes and subclasses of Actors! And I'll bet if I spoke to people in the transport, hospitality, marketing, or amusement industries, I'd find more. Owner's 8 Actors may be the most important, but they're less than 10% of the total set of Actors.&lt;/p&gt;
&lt;p&gt;And I haven't even started &lt;em&gt;looking&lt;/em&gt; at system and device actors. We'll likely end up with around 100 candidate Actors. Will we need all of them? Probably not. But I'm more comfortable now that we haven't overlooked anything.&lt;/p&gt;
&lt;p&gt;And yet categorizing isn't enough! We really need to understand relations between them as well. For instance, Employees report to Supervisors. Here is a rough Org Chart for the Park staff, with an arrow from each Employee to the Supervisor to which she or he reports:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Org%20Chart.jpg"&gt;&lt;img alt="Park Org Chart" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Org%20Chart.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There's one more lesson in this Episode: although I see this work as identifying Actors, I went a little farther than that, identifying their goals and motivations as well. That's a step down the road to identifying Personas, as described by Alan Cooper in &lt;a href="http://www.amazon.com/About-Face-Essentials-Interaction-Design/dp/0470084111/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1228525682&amp;amp;sr=8-1"&gt;About Face&lt;/a&gt; and &lt;a href="http://www.amazon.com/Inmates-Are-Running-Asylum-Products/dp/0672326140/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1228525682&amp;amp;sr=8-2"&gt;The Inmates Are Running the Asylum&lt;/a&gt;. In fact, since these are fictional characters, it's a &lt;em&gt;lot&lt;/em&gt; like defining Personas. Cooper argues that by creating fictional Personas that represent users with personalities and motivations and goals, you create a filter to differentiate "okay software that someone can use" from "&lt;strong&gt;great&lt;/strong&gt; software that will really satisfy this person's goals and make this person happy". I like a lot of what Cooper has to say in these books. I'm not 100% persuaded yet, but he's persuasive. Of course, I've also gone &lt;em&gt;way&lt;/em&gt; overboard by his standards. He recommends typically around 3 Personas, 5 for a big project. I have 8, plus the review team, plus almost 80 more Actors. But I have them in part for the demands of the story, not the system. If Alan Cooper were doing Interaction Design for this project, he would likely focus on just one or two of these Actors, and flesh them out to a handful of Personas, and work on designing great software for them. Then he would focus on other Personas over time.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127606"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127606" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/127606.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/05/ulterior-motive-lounge-episode-27-meet-the-crew.aspx</guid>
            <pubDate>Fri, 05 Dec 2008 23:34:39 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127606.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/05/ulterior-motive-lounge-episode-27-meet-the-crew.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127606.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>