<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>Development Processes</title>
        <link>http://geekswithblogs.net/UlteriorMotiveLounge/category/9124.aspx</link>
        <description>Discussion of development processes, both Agile and Orchestrated.</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>All right, Mr. DeMille, I'm ready for my close-up</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx</link>
            <description>&lt;p&gt;Back in January, &lt;a target="_blank" href="http://www.brianhprince.com/"&gt;Brian H. Prince&lt;/a&gt; from Microsoft interviewed me about the UML features in Visual Studio Team System 2010. Today, he informed me that &lt;a target="_blank" href="http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-Martin-Shoemaker-discusses-UML-in-VSTS2010/"&gt;the interview is finally live on Channel 9&lt;/a&gt;.&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=132437"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132437" 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/132437.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx</guid>
            <pubDate>Tue, 26 May 2009 23:58:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/132437.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/132437.aspx</wfw:commentRss>
        </item>
        <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>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>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>The U-Shaped Curve (A few more reasons why Coding Geekette is right)</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/09/the-u-shaped-curve-a-few-more-reasons-why-coding-geekette.aspx</link>
            <description>&lt;div class="bvEntry" id="entrycns!B4665B67C2981533!259" bv:cns="cns!B4665B67C2981533!259" bv:ca="true" bv:cat="Development Community"&gt;
&lt;div class="bvMsg" id="msgcns!B4665B67C2981533!259"&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a Best Of post from &lt;a href="http://theumlguy.spaces.live.com"&gt;my other blog&lt;/a&gt;. The topic came up on Twitter, so I'm rerunning it here.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.codinggeekette.com/"&gt;Coding Geekette&lt;/a&gt; has &lt;a target="_blank" href="http://www.codinggeekette.com/2008/07/making-of-good-developer.aspx"&gt;a slightly dated but still timely post&lt;/a&gt; about The Making of a Good Developer. That post was inspired by &lt;a target="_blank" href="http://www.codethinked.com/"&gt;Justin Etheredge's&lt;/a&gt; equally interesting post on why &lt;a target="_blank" href="http://www.codethinked.com/post/2008/07/Being-Smart-Does-Not-a-Good-Developer-Make.aspx"&gt;Being Smart Does Not a Good Developer&lt;/a&gt; make. Both address the idea that good developers are those who like to learn new things, not just smart people. And they lament or wonder that so many people in the software development industry aren't interested in learning new things. I admit, this attitude puzzles me. I love to learn. I remember as a kid watching &lt;em&gt;M*A*S*H&lt;/em&gt; and seeing that Hawkeye and BJ were reading medical books and journals, even though they were already doctors. I asked my Mom, and she explained that doctors have to keep learning new stuff all the time. I thought that sounded incredibly cool; but eventually, I learned that most kids didn't &lt;em&gt;like&lt;/em&gt; school, and thought the idea of learning all the time sucked. I didn't get it, and I still don't. &lt;/p&gt;
&lt;p&gt;But lamenting isn't my style; and wondering about someone's motivations isn't productive (better just to ask them). But being a proactive kind of UML Guy, I prefer trying to persuade them, through the power of raw, naked greed. &lt;/p&gt;
&lt;p&gt;And that brings us to the U-Shaped Curve, which will eventually lead to a great argument for why they should keep learning. Now this idea isn't original with me. I would swear I learned it from &lt;a target="_blank" href="http://www.stoutsystems.com/"&gt;John Stout&lt;/a&gt; at an &lt;a target="_blank" href="http://www.computersociety.org/"&gt;AACS&lt;/a&gt; presentation; but John denies ever mentioning it, so it must've been a panel he hosted. Someone on that panel deserves credit, but I can't recall who. &lt;strong&gt;Update:&lt;/strong&gt; &lt;a target="_blank" href="http://www.joshholmes.com/"&gt;Josh Holmes&lt;/a&gt; tells me it was &lt;a target="_blank" href="http://srtsolutions.com/blogs/billwagner/default.aspx"&gt;Bill Wagner&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The basic idea of the U-Shaped Curve is seen in this picture: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://5rhwsa.blu.livefilestore.com/y1pib6ohChkHD7L1w72OlowbNre3FFRDLi0HvwlNRhDy4GvOeRnxg3z5dtrgVljtSTmLuI6d7Ds37Y6A3ODw7LH5w?PARTNER=WRITER"&gt;&lt;img height="464" alt="U-Shaped 1" width="614" border="0" src="http://5rhwsa.blu.livefilestore.com/y1pPDTFnCKOgztStGEBiI2n48BRbn9hteq-mVN5n1TVDq-_ROaBt4srzZlVLxKDkQfEe446wlzy8PMxfcc1JAC9Nw?PARTNER=WRITER" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1: The U-Shaped Curve&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;The axes of the Curve are: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Newness&lt;/strong&gt; (horizontal): Newer technologies toward the right, older technologies toward the left. And remember, today's Bleeding Edge will be common in a few years, and Paleontological in a couple of decades. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;$ or Value&lt;/strong&gt; (vertical): More $ toward the top &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea is simple supply and demand: if you know a Bleeding Edge technology, you can charge through the ceiling, because nobody knows it. And if you know a Paleontology technology, you can charge through the ceiling, because everybody else who knows it is dead. But if you know only common technologies, you sit in the bottom of the U, with the bottom rising or occasionally sinking over time. &lt;/p&gt;
&lt;p&gt;Now there's a complication for both Bleeding Edge and Paleo: you have to find someone who needs those skills. For bleeding edge, that's especially difficult, because few people know those skills even exist. For Paleo, it's a little easier, because those skills are known, proven technologies. Of course, they're technologies that have mostly been abandoned years ago, but they're still better known than the Bleeding Edge stuff. &lt;/p&gt;
&lt;p&gt;A lot of people aren't interested in chasing the Bleeding Edge; and most people aren't learning Paleo tools just for fun (some do), so only time will make them Paleo experts. But of course, those are only two extremes on the curve. There are some pretty common waypoints as well (as described in Steve McConnell's &lt;a target="_blank" href="http://www.amazon.com/Professional-Software-Development-Schedules-Successful/dp/0321193679"&gt;Professional Software Development&lt;/a&gt;): &lt;/p&gt;
&lt;p&gt;&lt;a href="http://5rhwsa.blu.livefilestore.com/y1poCYo3Q38GYLGkSfdL1PTn75ZSWCDGIcZHKLNfDMNdwvpjS1xV8mjzhgFMOfSg6vyMjxLrmwr0c_2DlUPieVrPA?PARTNER=WRITER"&gt;&lt;img height="464" alt="U-Shaped 2" width="614" border="0" src="http://5rhwsa.blu.livefilestore.com/y1pFhmqXlxj-qJSDn680Lnn18_GcCOkJUAKJlJELtAbw_5NZgIk5tIzLUTmt6OoC0Saa4-2tUp3eiGKginSkWOvbA?PARTNER=WRITER" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2: Waypoints along the U-Shaped Curve (inspired by Steve McConnell)&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Early Adopters.&lt;/strong&gt; These people jump on new technology as soon as it's publicly released. Between the Early Adopters and the Bleeding Edge are the Scouts: people who like to learn about the pre-release tools, but aren't going to jump in with both feet until the tools near release. (I'm a Scout by temperament. I don't have the time to keep up with Bleeding Edge, but I want to see what's coming.) Early Adopters can't charge as much as Bleeding Edge folks; but they're pretty valuable, and they have more opportunities. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Middle Adopters.&lt;/strong&gt; These people jump on new technology later, usually when they finish their current projects and start on new projects. Of course, since projects frequently run over schedule, and since new tools sometimes -- &lt;em&gt;sometimes!&lt;/em&gt; -- can make help you to meet a schedule, these people may be too cautious. (In fact, I would argue that they're &lt;em&gt;usually&lt;/em&gt; too cautious; but that's a very long discussion, and I'm tired.) Middle adopters are near the bottom of the U, but probably still above it. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Late Adopters.&lt;/strong&gt; These people think they're being safe by waiting until a technology is "proven". What they're really doing, more often than not, is being too cheap or too busy to learn anything new. These are the people Coding Geekette wonders about. They willingly give up a competitive edge to all the Early and Middle adopters who aren't so short-sighted. This is a false economy. And it makes it hard to attract and retain good people like Coding Geekette, who thrive on constant learning. Plus the U-bottom rates these companies pay won't catch the attention of anyone who can work higher up the U. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Forced Adopters.&lt;/strong&gt; These people cling to old technology until it's no longer supported. Then, kicking and screaming, they upgrade. The people who work at these companies may cling to their old skills long enough to reach Paleo, or they may slide back to the U-bottom. If they're smart, they'll grab the opportunity to move to Leading Edge. It's often easier to just skip all the intermediate generations of technology and go straight to the new stuff; but that takes a willingness to change that's rare in Forced Adopters. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you might look at Figure 2 and think, "Eh, Middle Adoption's not that bad. The pay is decent, and you don't have to deal with all the Version 1 bugs. That's what I'll do." And that can work (though McConnell describes some real opportunity costs you can lose if the Early Adopters pick a really good technology that gives them an edge over you). But you have to pick your next sentence carefully. Is it... &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"So I'll learn this stuff that's been out for a while, and then just keep using it until it's phased out."?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Or... &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"So I'll learn this stuff that's been out for a while, and then next year I'll learn the stuff that's new this year, and then the following year I'll learn the stuff that's Bleeding Edge right now, and..."?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you're Coding Geekette (I hope she doesn't mind me using her as an example over and over again, but I thought her post proved that she has the right attitude), you'll give the second answer, because you love to learn this stuff. (Although I suspect she's probably more of an Early Adopter, from her post). But if you're in this field for a job not a passion, you may be tempted to give the first answer. &lt;/p&gt;
&lt;p&gt;Don't. &lt;/p&gt;
&lt;p&gt;If you have kids to put through school, or you have a mortgage to pay, or you just want to buy a nice fishing boat and spend summers on the lake, give the second answer. &lt;/p&gt;
&lt;p&gt;Because remember: the whole U-Shaped Curve isn't static: it keeps sliding to the right, so static skills keep sliding to the left. Your skills that are new today are common next year, and old the year after that. Unless your career plan is to Go Paleo (live through the curve bottom and ride out the trailing edge), sooner or later you'll find yourself in Forced Adoption. That's a hard spot to ever escape, and it's not a spot with high financial reward. &lt;/p&gt;
&lt;p&gt;In fact, becoming a Late or Forced Adopter can lead to financial or career risk, because pay rates aren't static, either. Unless your company's fortunes turn really bad, most employees can count on &lt;em&gt;some&lt;/em&gt; sort of pay increase over time, even if only a cost of living adjustment. So at the same time your static skills are sliding &lt;em&gt;down&lt;/em&gt; the U, your pay is &lt;em&gt;increasing&lt;/em&gt;: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://5rhwsa.blu.livefilestore.com/y1pOHdSQYH8HM3N-joniCRsFlfXqReP-GTCx0uxyix07gWmajt4y1G1Z402asQAwclnzGUpaR1sS9TXLuIowtv37g?PARTNER=WRITER"&gt;&lt;img height="448" alt="U-Shaped 5" width="614" border="0" src="http://5rhwsa.blu.livefilestore.com/y1p5VqslLhyWAUieHbvge7Ay6nENGCYszx4p9P4HK9FiSjVgshLGQrU_KAvcTa-swGspOObB_aj9ZvY10wTJnqjzA?PARTNER=WRITER" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now at first glance, that looks attractive: "You mean I can beat the curve simply by holding my ground?" But that's a trap. At some point, your pay so far exceeds your worth on the curve that no one but your current employer would conceivably pay that much for your skills. In the mean time, if you're a typical person, your cost of living has increased due to many factors: inflation, growing family, kids in college, etc. So that means your only choice for work is your current employer. Is that bad? Not at all, for some people; but if you want options in your career, static skills are &lt;em&gt;not&lt;/em&gt; the way to get them. And you also risk becoming too expensive for your employer: you can be replaced by someone with the same skills but a much lower price tag. (&lt;strong&gt;Note:&lt;/strong&gt; This simplistic analysis ignores your accumulated knowledge of the company, its business, and its customers. The U-Shaped Curve is &lt;strong&gt;not&lt;/strong&gt; the only measure of your value to the company, and it's short-sighted for employers to think it is.) &lt;/p&gt;
&lt;p&gt;But suppose you love your current employer and wouldn't ever want to go elsewhere. In that case, you &lt;em&gt;still&lt;/em&gt; should keep moving to keep your skills up to date (wherever you pick on the U). After all, if you like the job, don't you have loyalty to them? Don't you want them to succeed? At a minimum, don't you want them to stay in business so you can keep enjoying the cushy job? Well, if your skills are static and your pay isn't, then your employer is effectively losing value. Don't you want to maintain or even grow their value in order to protect your job? Now one way to grow their value is through your expanding expertise in their business and customers; but another is to keep growing your skills. &lt;/p&gt;
&lt;p&gt;So I think that if you're in software development, you're in the learning business or the falling-behind business. This may not appeal to you, and I'm sorry, but that's the way it is. Some people don't invest themselves in their work: they may work competently and professionally, but work is simply what they do to support their lives and lifestyles. But some people like to find a task, master that task, and keep improving until they're the best they can be at that task. They take pride and pleasure in knowing their job and doing it well. And finally, other people like to keep finding and tackling new challenges. They take pride and pleasure in new conquests and new things they know (and may quickly get bored with the old challenges). If you're not in the last group -- or you can't at least act like you are -- then software development may be the wrong profession for you. &lt;/p&gt;
&lt;p&gt;So my advice to those who want to excel as developers: &lt;em&gt;Run! Run like the wind!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128520"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128520" 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/128520.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/09/the-u-shaped-curve-a-few-more-reasons-why-coding-geekette.aspx</guid>
            <pubDate>Fri, 09 Jan 2009 19:18:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/128520.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/09/the-u-shaped-curve-a-few-more-reasons-why-coding-geekette.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/128520.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ship It On The Side Episode 3</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/11/ship-it-on-the-side-episode-3.aspx</link>
            <description>&lt;a href="http://shipitontheside.com/2008/12/3-use-cases/"&gt;Ship It On The Side Episode 3 -- Use Cases&lt;/a&gt; is now released. Complete with goats!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127805"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127805" 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/127805.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/11/ship-it-on-the-side-episode-3.aspx</guid>
            <pubDate>Thu, 11 Dec 2008 07:45:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127805.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/11/ship-it-on-the-side-episode-3.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127805.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The UML Learning Path</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/10/the-uml-learning-path.aspx</link>
            <description>&lt;p&gt;(Click picture for a larger image.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9261/o_UML%20Learning%20Path.jpg"&gt;&lt;img alt="The UML Learning Path" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9261/r_UML%20Learning%20Path.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No, I'm not going to name any of the devs who inspired this post. They wouldn't know who I am, anyway.&lt;/p&gt;
&lt;p&gt;But it takes an extremely high degree of arrogance to go from "I don't see a way to use this" to "This has no value, no matter who says they're getting value out of it. So I'll dismiss it, and I'll mock them" Either arrogance, or more likely, insecurity: "I don't understand this; so since those people think it's important, either they understand something I don't, or they're fools. I'll mock them, so everyone thinks they're fools. That will make &lt;em&gt;me&lt;/em&gt; look smart."&lt;/p&gt;
&lt;p&gt;And that insecurity manifests in a lot of places on a lot of topics, not just UML: Agile Development, Orchestrated Development, CMMI, Test Driven Development, C#, Java, Ruby, linux, .NET... Any time you move from "I don't see it" to "It's worthless", look around: if other developers are putting those tools to productive use, then it's &lt;em&gt;not&lt;/em&gt; worthless. It just doesn't help &lt;em&gt;you&lt;/em&gt;. So do you call it worthless, and imply they're fools? Or do you openly mock them, demonstrating that &lt;em&gt;you're&lt;/em&gt; a fool?&lt;/p&gt;
&lt;p&gt;Or do you follow the only exit path in this diagram? There is only one, after all. Once you &lt;em&gt;get&lt;/em&gt; UML, you've gotten it for good. You may not use it all the time, but you'll understand when and why you &lt;em&gt;should&lt;/em&gt; use it. But the only exit path is the middle: you recognize that UML (or Agile, or Orchestrated, or...) is having some value on some projects, so it's not worthless; but you just can't see the value. You remain open-minded.&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=127800"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127800" 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/127800.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/10/the-uml-learning-path.aspx</guid>
            <pubDate>Thu, 11 Dec 2008 02:41:34 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127800.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/10/the-uml-learning-path.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127800.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ship It On The Side</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/29/ship-it-on-the-side.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.getflowerpot.com"&gt;Curtis Gray&lt;/a&gt; informs me that the first &lt;a href="http://shipitontheside.com/"&gt;Ship It On The Side&lt;/a&gt; podcast is now published.Listen to us talk about building and shipping great software while holding down day jobs.&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=127456"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127456" 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/127456.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/29/ship-it-on-the-side.aspx</guid>
            <pubDate>Sat, 29 Nov 2008 21:59:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127456.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/29/ship-it-on-the-side.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127456.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Quality is NOT Free</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/28/quality-is-not-free.aspx</link>
            <description>&lt;p&gt;A business classic tells us that &lt;a href="http://www.philipcrosby.com/25years/"&gt;Quality Is Free&lt;/a&gt;. The title is intentionally provocative: no, quality isn't free, it just pays for itself. But first, you have to pay for it.&lt;/p&gt;
&lt;p&gt;And that, unfortunately, is where we fail in the quality game so often. Corporations seem addicted to the practice of compartmentalized budgeting, or what I think of as "bucket budgeting": you've got a bunch of different buckets you pour money into at the start of the fiscal period; and each bucket can only be spent on a particular purpose. When that bucket is empty, you can't accomplish that purpose any more. Oh, the company may have some reserve you can tap; but you're going to get frowned at for exhausting your budget.&lt;/p&gt;
&lt;p&gt;I understand bucket budgeting as a planning tool. I think it makes perfect sense, for the same reason &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/ulterior-motive-lounge-episode-20-final-meeting.aspx"&gt;you should make estimates out of small elements&lt;/a&gt;. In fact, it should the &lt;strong&gt;exact&lt;/strong&gt; same reason, because these budgets should be estimates, not shackles. You'll correct over time.&lt;/p&gt;
&lt;p&gt;And that's where the failure comes in. Somehow, some way, in too many organizations, those buckets &lt;em&gt;are&lt;/em&gt; shackles. Your  bucket is what you &lt;em&gt;can&lt;/em&gt; spend, what you &lt;em&gt;will&lt;/em&gt; spend -- &lt;em&gt;regardless&lt;/em&gt; of the bottom-line impact of your spending. Even if every $1 spent out of your bucket brings $1.20 into the company, you only get to spend what's in your bucket. This isn't a new complaint, of course; and smart managers certainly keep an eye out for ways that spending money can save or generate more than they spend. But less bold managers don't like to rock boats. They live within their buckets, because overspending their bucket gets them a bad review. It takes courage to stand up and make a case for more money in your bucket, unless you have a very clear, simple chain between the money you spend and the money that comes back in.&lt;/p&gt;
&lt;p&gt;And the quality equation is particularly susceptible to bucket budget shackles. Quality &lt;em&gt;does&lt;/em&gt; pay for itself, but it &lt;em&gt;seldom&lt;/em&gt; shows up anywhere &lt;em&gt;near&lt;/em&gt; the buckets where the costs came from. The cost of quality is measured in extra labor and time up front on preventing defects, along with extra labor and on the back end detecting and correcting defects. It's also training time, which takes time away from "productive" work. It's also management time and communications effort in getting everyone -- execs, workers, and customers -- to understand that seemingly slower time is actually faster in the long run.&lt;/p&gt;
&lt;p&gt;The benefits of quality, meanwhile, are in reduced support costs, reduced rework costs, and increased customer satisfaction and loyalty. These do affect the bottom line; but they don't put money in the buckets of the managers who have to pay for the quality in the first place.&lt;/p&gt;
&lt;p&gt;A common sarcastic reaction I here among the workforce is "Quality is free, so management thinks they can have it without paying for it."  And sadly, &lt;a href="http://www.b2blog.com/2006/02/quality-is-free-freely-abused-anyway.htm"&gt;this reaction is often justified&lt;/a&gt;. But I don't think most managers are really that clueless. I &lt;em&gt;do&lt;/em&gt; think many managers are shackled by bucket budgeting, and unwilling to buck the system for something that won't have an effect on their budgets. The effect may be the same as cluelessness; but if we don't understand the proper cause, we can't devise the proper correction.&lt;/p&gt;
&lt;p&gt;And no, I don't know what that correction is. I mean, to me, the answer is simple: start treating budgets as estimates, not shackles; but I don't think little old me is going to change corporate culture that drastically just by saying so.&lt;/p&gt;
&lt;p&gt;Final note: this isn't inspired by anything at my current client. Really, it's not: I've been complaining about bucket budgeting for over a decade. But it's true that my client is currently entering a phase where they're trying to invest in quality in pursuit of benefits in the long run, and I want to do my part for that. There are forces that will push against that effort, and forces that will push for it. I'm doing a little writing to help me clarify how I can help push in the right direction.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127444"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127444" 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/127444.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/28/quality-is-not-free.aspx</guid>
            <pubDate>Sat, 29 Nov 2008 04:54:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127444.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/28/quality-is-not-free.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127444.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>