<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>Personal</title>
        <link>http://geekswithblogs.net/UlteriorMotiveLounge/category/9130.aspx</link>
        <description>Non-tech stuff.</description>
        <language>en-US</language>
        <copyright>Martin L. Shoemaker</copyright>
        <managingEditor>Martin@TheUMLGuy.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Calculating the ROI for Requirements Analysis</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx</link>
            <description>&lt;p&gt;My buddy &lt;a target="_blank" href="http://www.joshholmes.com"&gt;Josh Holmes&lt;/a&gt; has written &lt;a target="_blank" href="http://www.joshholmes.com/blog/2009/02/16/MeasuringROIMovingFromCostCenterToStrategicPartner.aspx"&gt;a very excellent post on the Return on Investment (ROI) for software&lt;/a&gt;. I recommend it to anyone who sees software as a business, not just a job or a hobby.&lt;/p&gt;
&lt;p&gt;Last week, the always-worth-reading &lt;a target="_blank" href="http://twitter.com/patrickgreene"&gt;Patrick Greene&lt;/a&gt; made a comment that made me start thinking specifically about the ROI for Requirements Analysis. Most teams and most managers know they have a requirements problem; but too many of them say, “But we’re too busy to fix it, so we’ll just start coding.” Or “We’d like to fix it, but we can’t, so we’ll just start coding.” Or “Yeah, but our customers won’t answer our questions, so we’ll just start coding.” Or “Our executives want progress, they want us to just start coding.”&lt;/p&gt;
&lt;p&gt;And that leads me to name a common, pernicious antipattern, &lt;strong&gt;JSC: Just Start Coding&lt;/strong&gt;. This is &lt;em&gt;not&lt;/em&gt; Agile Development, but it masquerades as Agile. It really means, “We’re gonna be late no matter what we do, and our executives are wondering why we’re not coding already. So we’re gonna Just Start Coding, and call it Agile.”&lt;/p&gt;
&lt;p&gt;Which is &lt;em&gt;exactly&lt;/em&gt; wrong. &lt;em&gt;Good&lt;/em&gt; Agile, &lt;em&gt;real&lt;/em&gt; Agile, is &lt;em&gt;very&lt;/em&gt; requirements-centric. It’s about surfacing requirements and particularly requirements miscommunications quickly and frequently, so that we stay as close to the right path as possible, and waste as little time as possible on wrong paths. Agile makes short, quick moves, and short, quick corrections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSC&lt;/strong&gt;, on the other hand, just makes quick movement, with no mechanism in place for planning and correction. “We’re on the wrong path? Who cares? At least we’re coding!”&lt;/p&gt;
&lt;p&gt;And yes, let’s admit the dark side: we developers often contribute to this mess. Coding is comfortable. Requirements analysis (for many of us) is uncomfortable. It’s &lt;em&gt;really&lt;/em&gt; easy to ignore nagging doubts and bury your concerns in lots of fun coding challenges. “Well, it doesn’t make sense to me; but this is what they asked for, so this is what I’ll build.” We abdicate responsibility for the wrong requirements.&lt;/p&gt;
&lt;p&gt;But I want to follow in Josh’s footsteps, discussing software as a business, not just a job. And for a business, &lt;strong&gt;JSC&lt;/strong&gt; has a cost. A &lt;strong&gt;huge&lt;/strong&gt; cost. And Requirements Analysis can eliminate much or all of that cost. Maybe a little ROI calculation can help us to win executive support to do the job right.&lt;/p&gt;
&lt;h1&gt;Some Fundamental Assumptions&lt;/h1&gt;
&lt;p&gt;The ROI calculations that I’ll make are based on three fundamental assumptions: two from industry research, and one from faith.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://www.amazon.com/Software-Cost-Estimation-Cocomo-II/dp/0130266922"&gt;Barry Boehm’s COCOMO II research&lt;/a&gt; tells us that poor requirements analysis can add 40% to as much as 100% to your schedule.&lt;/li&gt;
    &lt;li&gt;Many different sources (summarized by &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;Steve McConnell&lt;/a&gt;) tell us that the average project is underestimated by roughly 100%.&lt;/li&gt;
    &lt;li&gt;Those were the research; here’s the faith. I contend that with a relatively minor investment of time compared to the overall schedule, your team can drastically improve your requirements, reducing that 40-100% schedule slip to nearly zero.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can’t fix the tendency to underestimate (though you can make a good start by reading &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;Steve McConnell&lt;/a&gt;); but I believe that &lt;em&gt;most&lt;/em&gt; of what you need to fix requirements failures is simply paying attention to requirements early and refusing to ignore the obvious failures. I’ve worked on too many teams where everyone knew the requirements were fatally flawed, yet no one did anything about them. Everyone saw those flaws as “just the way things are around here”. They erected a giant &lt;a target="_blank" href="http://en.wikipedia.org/wiki/SEP_field#Somebody_Else.27s_Problem_field_.28fiction.29"&gt;SEP field&lt;/a&gt; around the requirements flaws, and they &lt;strong&gt;J&lt;/strong&gt;ust &lt;strong&gt;S&lt;/strong&gt;tarted &lt;strong&gt;C&lt;/strong&gt;oding.&lt;/p&gt;
&lt;p&gt;I don’t think it has to be that way. I think that we as developers have the responsibility &lt;em&gt;and&lt;/em&gt; the power to fix &lt;em&gt;most&lt;/em&gt; of our requirements problems, if only we can persuade our managers to let us – and persuade ourselves to try. I’ve written a whole book (coming soon, I hope) on how we can perform better as Analyst-Developers; but to get management to back us, we have to show them a business reason. The assumptions above are part of that reason.&lt;/p&gt;
&lt;h1&gt;A Tale of Four Projects&lt;/h1&gt;
&lt;p&gt;To perform my ROI calculations, I’m going to envision four projects. Well, no, not really. Rather, I’m going to envision four different scenarios for the same project:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Just Start Coding (Typical).&lt;/strong&gt; In this scenario, the team starts coding from the earliest possible moment. Management has a target date (they’ll call it an Estimate, but &lt;a target="_blank" href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351"&gt;McConnell&lt;/a&gt; will call that a delusion). The more likely date is twice as far down the road, per Assumption 2 above; and then because the team fails to do adequate requirements analysis, the final schedule is 1.4 times that doubled schedule, for a total of 2.8 times the expected duration.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Just Start Coding (Out-of-Control).&lt;/strong&gt; This scenario is similar to &lt;strong&gt;Just Start Coding (Typical)&lt;/strong&gt;; but the requirements analysis is even worse than usual, adding another 100% to the project. And these are factors, not sums; the final duration is 4 times the expected duration.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Analyzed (Time Bound).&lt;/strong&gt; In this scenario, we assume enough Requirements Analysis at the start to recognize that the project cannot possibly meet the target date; and management tells us that the date is sacrosanct. We &lt;em&gt;must&lt;/em&gt; meet that date, even if we have to cut features to do so. It’s &lt;em&gt;always&lt;/em&gt; smarter and less error-prone to cut those features at the start than at the end, so we do so. Then we continue a small fraction of Requirements Analysis throughout the duration of the project, likely trimming more features as we go. We hit the target date with a lean but critical subset of the desired features, and a high-quality implementation of those features. We’ll add the other features next time.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Analyzed (Feature Bound).&lt;/strong&gt; In this scenario, we assume enough Requirements Analysis at the start to recognize that the project cannot possibly meet the target date; and management tells us that the features are sacrosanct. We &lt;em&gt;must&lt;/em&gt; supply those features, even if we have to slip the date to do so. Our final schedule will be 100% longer than the target; but when we finish, we’ll have the complete set of desired features, and a high-quality implementation of those features.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Obviously, some managers or customers will want Time Bound &lt;em&gt;and&lt;/em&gt; Feature Bound. It can’t be done. Break the news to them gently.&lt;/p&gt;
&lt;p&gt;Oh, all right, I know: some managers will &lt;strong&gt;demand&lt;/strong&gt; Time Bound &lt;em&gt;and&lt;/em&gt; Feature Bound. Let’s call this Scenario 5. It’s the Scenario where you do the analysis right up front, realize there’s no way to succeed, realize that management demands you violate the laws of space and time, and get your resume out on &lt;a target="_blank" href="http://www.CareerBuilder.com"&gt;CareerBuilder.com&lt;/a&gt; so that you can be working somewhere else when the mandatory overtime and the punitive firings and the lawsuits begin. But since there’s &lt;em&gt;no&lt;/em&gt; ROI for Scenario 5, we’ll ignore that scenario as we go forward.&lt;/p&gt;
&lt;h1&gt;More Assumptions&lt;/h1&gt;
&lt;p&gt;Next we need a few more assumptions (based on my personal experience, believe them as you will) and some parameters. First, the assumptions:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Up-front analysis requires only about 10% of the likely schedule. If your target is 6 months and so your likely schedule is 16.8 months (6 * 2 for estimation error * 1.4 for analysis error), then your up-front analysis time is about 1.68 months.&lt;/li&gt;
    &lt;li&gt;Because the analysis is work you would have to do to succeed anyway, just pushed to the front of the discussion, it involves the whole team, and yet doesn’t add to the final schedule.&lt;/li&gt;
    &lt;li&gt;Analysis is a skill most teams don’t have in abundance. You need a few skilled lead analysts to work with the team, roughly 1 lead analyst per 5 team members.&lt;/li&gt;
    &lt;li&gt;Once the initial analysis is done, you need little bits of analysis throughout the rest of the project. That will involve the lead analysts for about 20% of the total remaining schedule.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don’t like those assumptions, you can treat them as parameters and vary them; but these values fit with my experience.&lt;/p&gt;
&lt;p&gt;As for the parameters, you really only need two:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;How much does an hour of a developer’s time cost you (total)?&lt;/li&gt;
    &lt;li&gt;How much does an hour of a lead analyst’s time cost you (total)?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And that’s all you need to know. The rest of the possible factors – duration of the project, team size, etc. – all divide out, because everything is calculated as ratios of time to time, dollars to dollars, and so on. ROI is a relative measure.&lt;/p&gt;
&lt;p&gt;And to be honest, you &lt;em&gt;really&lt;/em&gt; don’t need to know the absolute costs for developers and lead analysts, just the ratio. As long as the ratio remains constant, you can plug in any values you like.&lt;/p&gt;
&lt;h1&gt;The Results&lt;/h1&gt;
&lt;p&gt;So given those assumptions and parameters, what’s the ROI?&lt;/p&gt;
&lt;p&gt;Are you sitting down?&lt;/p&gt;
&lt;p&gt;My parameters have a lead analyst costing 50% more than a developer. I don’t usually find that to be the case, but I wanted to make analyst costs relatively high to skew the ROI down.&lt;/p&gt;
&lt;p&gt;And even with that skew, I ended up with these calculations:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;An Analyzed (Feature Bound) project has an ROI of 652% when compared to a typical JSC project, and 2,081% when compared to an Out-of-Control JSC project.&lt;/li&gt;
    &lt;li&gt;An Analyzed (Time Bound) project has an ROI of 1,943% when compared to a typical JSC project, and 3,371% when compared to an Out-of-Control JSC project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are astonishing ROI figures. Unheard of ROI figures.&lt;/p&gt;
&lt;p&gt;And of course, those are ideals. Your Requirements Analysis won’t be 100% effective at cutting out lost time. Let’s assume you only cut out half the lost time that’s due to requirements failure. Then you get numbers like these:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;An Analyzed (Feature Bound) project has an ROI of 24% when compared to a typical JSC project, and 776% when compared to an Out-of-Control JSC project.&lt;/li&gt;
    &lt;li&gt;An Analyzed (Time Bound) project has an ROI of 364% when compared to a typical JSC project, and 1,116% when compared to an Out-of-Control JSC project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still nothing to sneeze at. And I think you can do a lot better than just half. I &lt;em&gt;know&lt;/em&gt; I can.&lt;/p&gt;
&lt;p&gt;And although I've only calculated ROI based on labor savings, labor costs are &lt;em&gt;not&lt;/em&gt; the only costs associated with requirements failures. Requirements failures increase costs across the board. Besides a longer schedule, you get more overtime, higher shipping costs, higher travel costs, missed commitments, lost opportunity costs, interest payments, performance penalties… even costly litigation.&lt;/p&gt;
&lt;p&gt;And there's also a cost in quality. &lt;font face=""&gt;Reworked code has more bugs than original code. The rework is done under tighter deadlines, there’s more pressure, and there’s more overtime. Developers cut corners in response. This results in more bugs; and those bugs lead to more delays and even more schedule pressure. There's a nasty feedback effect here, and it can kill a project. Requirements Analysis can cut that feedback loop.&lt;/font&gt;&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Again, this is &lt;strong&gt;not&lt;/strong&gt; BDUF. I just spent a week at a client’s site, and spec’ed out their major requirements in that week in more &lt;em&gt;useful&lt;/em&gt; detail than they had developed in months. Better Requirements Analysis does &lt;em&gt;not&lt;/em&gt; mean &lt;strong&gt;bigger&lt;/strong&gt;; it means more thorough. It means recognizing when you have questions, and making sure you answer them. It means identifying priorities and making choices.&lt;/p&gt;
&lt;p&gt;And it means some resistance. It’s not by accident that we have a systemic problem with requirements in our industry. But it’s in our power to change that.&lt;/p&gt;
&lt;p&gt;My spreadsheet for this ROI calculation is available if you want it. Leave a comment. If you disagree with any of my assumptions, leave a comment about that, too. I want to make the most clear, justifiable case possible to my stakeholders (and to yours!) to convince them that &lt;strong&gt;Defining the problem in a comprehensible, verifiable form is necessary to solving the problem.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131796"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131796" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/131796.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx</guid>
            <pubDate>Tue, 05 May 2009 00:53:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/131796.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/04/calculating-the-roi-for-requirements-analysis.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/131796.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Weird Word 2007/PDF Bugs</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/22/weird-word-2007pdf-bugs.aspx</link>
            <description>&lt;p&gt;Here’s a screenshot of my document in Word 2007:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20A_2.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Word Bug A" border="0" alt="Word Bug A" width="644" height="112" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20A_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;That’s exactly what I wanted: three columns in different shades. Hurray for Word 2007!&lt;/p&gt;
&lt;p&gt;Then I saved as PDF. Here’s a screenshot from Acrobat:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20B_2.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Word Bug B" border="0" alt="Word Bug B" width="644" height="122" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20B_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I don’t know why the colors “leaked” like that, but it’s bad.&lt;/p&gt;
&lt;p&gt;And while I could imagine this being Acrobat, not word, &lt;strong&gt;this&lt;/strong&gt; is clearly Word’s fault. I added a line to Column C, but made no other changes. Here’s the screenshot from Word:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20C_2.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Word Bug C" border="0" alt="Word Bug C" width="644" height="146" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/WeirdWord2007PDFBugs_B49D/Word%20Bug%20C_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;More of the same strange color leaking. Not acceptable, not in my marketing literature! I hope I can track down a fix or a workaround.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Any suggestions to switch to Google Docs or another alternative will be politely ignored. I &lt;em&gt;love&lt;/em&gt; Office. I’m a power user and more. I can’t live without its mountains of powerful features that work exactly the way I expect. But that doesn’t stop me from whining when I want more, especially when I want a bug fixed. For once, I’m the end user, not the developer; and &lt;em&gt;as&lt;/em&gt; a developer, I know this unshakable truth: end users whine, no matter what you give them. It’s my turn to whine.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131383"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131383" 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/131383.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/22/weird-word-2007pdf-bugs.aspx</guid>
            <pubDate>Wed, 22 Apr 2009 18:05:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/131383.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/22/weird-word-2007pdf-bugs.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/131383.aspx</wfw:commentRss>
        </item>
        <item>
            <title>UML... It's not Rocket Science</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/10/umlhellip-itrsquos-not-rocket-science.aspx</link>
            <description>&lt;p&gt;If you &lt;a target="_blank" href="http://twitter.com/UMLGuy"&gt;follow me on Twitter&lt;/a&gt;, you may have seen &lt;a target="_blank" href="http://twitter.com/UMLGuy/status/1485363489"&gt;a strange tweet&lt;/a&gt; yesterday:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Looking for a word... "Employee" is to "Roster" as "Vehicle" is to _____? "Fleet" doesn't seem quite right.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With a lot of helpful suggestions, especially from &lt;a target="_blank" href="http://twitter.com/patrickgreene"&gt;@patrickgreene&lt;/a&gt;, we settled on “Fleet Manifest”. It’s ideal for what I needed.&lt;/p&gt;
&lt;p&gt;But in case you’re wondering why I needed that term, here’s a slide from &lt;a target="_blank" href="http://213softwarestudios.com/UMLQuickStart.aspx"&gt;the UML QuickStart class&lt;/a&gt; from &lt;a target="_blank" href="http://213softwarestudios.com/"&gt;213 Software Studios&lt;/a&gt; (click pictures for larger images):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/GetmetheFleetManifestStat_CE1A/Use%20Case%20Sample_2.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Use Case Sample" border="0" alt="Use Case Sample" width="644" height="484" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/GetmetheFleetManifestStat_CE1A/Use%20Case%20Sample_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;And here’s another:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/GetmetheFleetManifestStat_CE1A/Swimlanes_2.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Swimlanes" border="0" alt="Swimlanes" width="644" height="484" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/GetmetheFleetManifestStat_CE1A/Swimlanes_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;"Think one through..." is what we'll do &lt;strong&gt;after&lt;/strong&gt; these slides. I'll show you diagrams of the concepts first, so you know what we're trying to accomplish; and then together, we'll think through a live example. And &lt;strong&gt;then&lt;/strong&gt; you and your team will do your own examples, and I'll help you get it right.&lt;/p&gt;
&lt;p&gt;These are just a tiny sample of what you’ll get in a full day of intensive hands-on UML training. Email John T. Hopkins at &lt;a href="mailto:jhopkins@213softwarestudios.com"&gt;jhopkins@213softwarestudios.com&lt;/a&gt; or call (248) 425-8549 for more information.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130893"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130893" 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/130893.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/10/umlhellip-itrsquos-not-rocket-science.aspx</guid>
            <pubDate>Fri, 10 Apr 2009 20:08:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/130893.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/04/10/umlhellip-itrsquos-not-rocket-science.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/130893.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Jaded</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/19/jaded.aspx</link>
            <description>&lt;p&gt;Once upon a time, I had a really thorny development problem to solve. I needed to build a histogram of the colors in a true-color image. There was a theoretically easy way to do this. If I had had C# then, the code would’ve looked like this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;int[,,] histogram = new int[256, 256, 256];&lt;/p&gt;
&lt;p&gt;for(int y = 0; y &amp;lt; bmp.Height; y++)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;    for(int x = 0; x &amp;lt; bmp.Width; x++)&lt;/p&gt;
&lt;p&gt;    {&lt;/p&gt;
&lt;p&gt;        Color clr = bmp.GetPixel(x, y);&lt;/p&gt;
&lt;p&gt;        histogram[clr.R, clr.G, clr.B]++;&lt;/p&gt;
&lt;p&gt;    }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This was the brain-dead simple way to build the histogram. Only one problem: it required 16million 32-bit counts, or &lt;strong&gt;64 megabytes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;64 M*E*G*A*B*Y*T*E*S OF RAM, MAN! ARE YOU MAD? THAT WOULD COST US $50,000!!!!! The whole SYSTEM is supposed to cost under $30,000!!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, OK, for some of you, that just pinpointed the year, more or less. There was no way on Earth we could ship a system with 64 MB. Instead, I built a complex and ultimately failed algorithm to build a sparse histogram. I solved the general problem of sparse histograms – with a solution vaguely like what you’ll see below, but less elegant – but I couldn’t easily ascertain color proximity within the histogram. That was just too difficult. It took me months, and it never worked perfectly. Like Alan Cooper says, the bear danced, but never well.&lt;/p&gt;
&lt;p&gt;Today, I am almost never without two memory sticks, a memory card, and a phone that collectively add up to about 3 GB. I sometimes forget I even have the card.&lt;/p&gt;
&lt;p&gt;And so today, I could actually build the algorithm above (if I still needed it); and it would run in an insignificant amount of memory.&lt;/p&gt;
&lt;p&gt;But why bother? I realized that Microsoft had given me simple tools for building a sparse histogram:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dictionary&amp;lt;System.Drawing.Color, int&amp;gt; histogram = new Dictionary&amp;lt;System.Drawing.Color, int&amp;gt;(); &lt;br /&gt;
for (int y = 0; y &amp;lt; bmp.Height; y++) &lt;br /&gt;
{ &lt;br /&gt;
    for (int x = 0; x &amp;lt; bmp.Width; x++) &lt;br /&gt;
    { &lt;br /&gt;
        System.Drawing.Color clr = bmp.GetPixel(x, y); &lt;br /&gt;
        if (histogram.Keys.Contains&amp;lt;System.Drawing.Color&amp;gt;(clr)) &lt;br /&gt;
        { &lt;br /&gt;
            histogram[clr]++; &lt;br /&gt;
        } &lt;br /&gt;
        else &lt;br /&gt;
        { &lt;br /&gt;
            histogram[clr] = 1; &lt;br /&gt;
        } &lt;br /&gt;
    } &lt;br /&gt;
} &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There it is. It works. It’s maybe not efficient, but it’s simple. It still doesn’t solve my color proximity problem (hey, I’ve gotta keep &lt;em&gt;some&lt;/em&gt; of my secrets to myself for a while); but it works, and it took me less time to write than I’ve spent on this blog post.&lt;/p&gt;
&lt;p&gt;And when it was done, and I found that it didn’t address the problem I was &lt;em&gt;really&lt;/em&gt; trying to solve (trying to figure out why my bitmaps aren’t transparent), I threw it away.&lt;/p&gt;
&lt;p&gt;Code that once took me weeks, written more elegantly in minutes, and casually thrown away as trivial.&lt;/p&gt;
&lt;p&gt;I am &lt;em&gt;so&lt;/em&gt; jaded…&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130244"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130244" 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/130244.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/19/jaded.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 22:54:42 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/130244.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/19/jaded.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/130244.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Usability 101: Don't Do This! (I'm Talking to YOU, Microsoft!)</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/13/usability-101-donrsquot-do-this-irsquom-talking-to-you-microsoft.aspx</link>
            <description>&lt;p&gt;From PowerPoint – &lt;strong&gt;2007&lt;/strong&gt;, no less!&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="508" alt="image" width="405" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/Usability101DontDoThisImTalkingtoYOUMicr_11F2E/image_7.png" /&gt; &lt;img title="image" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="507" alt="image" width="404" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/Usability101DontDoThisImTalkingtoYOUMicr_11F2E/image_10.png" /&gt; &lt;/p&gt;
&lt;p&gt;On one page, we can set the size. X and Y are arranged horizontally, Y first.&lt;/p&gt;
&lt;p&gt;On the next page, we can set the position. X and Y are arranged &lt;strong&gt;vertically&lt;/strong&gt;, &lt;strong&gt;X&lt;/strong&gt; first.&lt;/p&gt;
&lt;p&gt;This has confused me practically every time I’ve had to edit the size of something in PowerPoint. I &lt;em&gt;know&lt;/em&gt; it’s there. I do. But the behavior is &lt;em&gt;so&lt;/em&gt; counterintuitive, I just can’t get my brain to think this way. It’s just &lt;strong&gt;wrong!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Personally, I would prefer size and position on the same page; but I can see the argument for separating them, since size has so many options.&lt;/p&gt;
&lt;p&gt;But changing their layout &lt;em&gt;and&lt;/em&gt; order is practically &lt;em&gt;begging&lt;/em&gt; users to make mistakes.&lt;/p&gt;
&lt;p&gt;Smooth move, PowerPoint team…&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130075"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130075" 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/130075.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/13/usability-101-donrsquot-do-this-irsquom-talking-to-you-microsoft.aspx</guid>
            <pubDate>Fri, 13 Mar 2009 23:54:45 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/130075.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/13/usability-101-donrsquot-do-this-irsquom-talking-to-you-microsoft.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/130075.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Some Recruiting and Placement Resources, in Case You Need Them</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/130020.aspx</link>
            <description>&lt;p&gt;Based in part on &lt;a target="_blank" href="http://www.pcmag.com/article2/0,2817,2342781,00.asp"&gt;PC Magazine’s Top 20 list&lt;/a&gt;. Offered in alphabetical order, with no comment on quality or usefulness. But I hope you find them useful. Feel free to comment with more.&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="218"&gt;&lt;a href="http://www.advancedtechno.com/"&gt;Advanced Technology&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.aitcusa.com/"&gt;AITC&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.ajmps.com/"&gt;AJM Professional Services&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://amtecsys.com/"&gt;AMTEC Systems Corporation&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.aquent.com/"&gt;Aquent&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.austinpark.com/"&gt;Austin Park&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.azad.com/"&gt;Azad&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.balionisgroup.com/"&gt;Balionis Group&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.betatechinc.com/"&gt;BetaTech, Inc.&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.beyond.com/"&gt;Beyond&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.billyoung.com/"&gt;Bill Young &amp;amp; Associates&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.bren-bna.com/"&gt;Bren Norris Associates, Inc.&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.careerbuilder.com/"&gt;CareerBuilder&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.careernet.com/"&gt;Careernet.com&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.ciber.com/jobs"&gt;CIBER&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.computerexpress.com/"&gt;Computer Express, Inc.&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.craigslist.org/"&gt;CraigsList&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.creativegroup.com/SearchJobs"&gt;Creative Group&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.creativehotlist.com/"&gt;Creative Hotlist&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.cybercoders.com/"&gt;CyberCoders&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.dsninc.com/"&gt;Data Search Network, Inc.&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.dice.com"&gt;Dice&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.execu-search.com/"&gt;Execu|Search&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.findersit.com/"&gt;Finders Inc.&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.grandrapidsgigs.com/"&gt;Grand Rapids Gigs&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.hound.com/"&gt;Hound&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.indeed.com/"&gt;Indeed&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.jobcentral.com/"&gt;JobCentral&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.jobfox.com/"&gt;JobFox&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.jobserve.us/"&gt;JobServe&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.jobster.com/"&gt;Jobster&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.karlassociates.com/"&gt;Karl Associates&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.kforce.com/"&gt;KForce&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.michigan.org/medc"&gt;MEDC Business Directory&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.michiganjobnetwork.com/jobs.asp"&gt;Michigan Job Network&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.monster.com/"&gt;Monster.com&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.ontargetjobs.com/"&gt;onTargetJobs&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.oodle.com/job/"&gt;Oodle&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.otterbase.com/"&gt;Otterbase&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://paragonusa.com/candidate/currentopenings/jobalert/index.asp"&gt;Paragon Recruiting&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.pcp-inc.com/"&gt;PCPI Inc.&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.primesourcemgmt.com/"&gt;Prime Source Management Inc.&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.setfocus.com/"&gt;SetFocus&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.ontargetjobs.com/"&gt;SimplyHired&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.sologig.com/"&gt;SoloGig&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.spherion.com/:&amp;gt;Spherion Corporation&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;      &amp;lt;td&amp;gt;&amp;lt;a href="&gt;Spherion Corporation Stout Systems&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.sunfieldconsulting.com"&gt;Sunfield Consulting&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.technisource.com/"&gt;Technisource&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.teksystems.com/"&gt;TEK Systems&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.thelasallenetwork.com/"&gt;The LaSalle Netowrk&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.thenormandingroup.com/"&gt;The Normandin Group&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.trovix.com/"&gt;Trovix&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://truesourcerecruiting.com/"&gt;True Source Recruiting&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.tweetmyjobs.com/"&gt;TweetMyJobs&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.usajobs.com/"&gt;USAJobs&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;a href="http://www.vault.com/"&gt;Vault Technology Jobs&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://www.williamsonemployment.com/jobs.html"&gt;Williamson Employment Services&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;&lt;a href="http://hotjobs.yahoo.com/"&gt;Yahoo HotJobs&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130020"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130020" 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/130020.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/130020.aspx</guid>
            <pubDate>Wed, 11 Mar 2009 19:11:02 GMT</pubDate>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/130020.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/130020.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Stray quote for the day&amp;hellip;</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/stray-quote-for-the-dayhellip.aspx</link>
            <description>&lt;blockquote&gt;
&lt;p&gt;By and large the literature of a democracy will never exhibit the order, regularity, skill, and art characteristic of aristocratic literature; formal qualities will be neglected or actually despised. The style will often be strange, incorrect, overburdened, and loose, and almost always strong and bold. Writers will be more anxious to work quickly than to perfect details. Short works will be commoner than long books, wit than erudition, imagination than depth. There will be a rude and untutored vigor of thought with great variety and singular fecundity. Authors will strive to astonish more than to please, and to stir passions rather than to charm taste.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.bartleby.com/66/35/61335.html"&gt;Alexis de Tocqueville (1805–1859), French social philosopher. Democracy in America, vol. 2, pt. 1, ch. 13 (1840).&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130015"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130015" 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/130015.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/stray-quote-for-the-dayhellip.aspx</guid>
            <pubDate>Wed, 11 Mar 2009 15:59:17 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/130015.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/03/11/stray-quote-for-the-dayhellip.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/130015.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Spider</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/spider.aspx</link>
            <description>&lt;p&gt;A small benefit of being between gigs: I’m sitting here, coding and networking and working and planning, while watching &lt;a target="_blank" href="http://www.imdb.com/title/tt0120570/"&gt;From the Earth to the Moon&lt;/a&gt; Episode 5: &lt;em&gt;Spider&lt;/em&gt;. If you’re any sort of an engineer, you need to watch this every year (or more) for inspiration. It’s the best, truest picture of engineering I’ve ever seen on screen. And for me, it’s a reminder: &lt;em&gt;my job is not hard. &lt;strong&gt;That&lt;/strong&gt; was hard, and they did it. I can do this.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I also recommend Thomas J. Kelly’s &lt;a target="_blank" href="http://www.amazon.com/Moon-Lander-Developed-Apollo-Module/dp/156098998X"&gt;Moon Lander&lt;/a&gt; for the story behind &lt;em&gt;Spider&lt;/em&gt;. It’s kinda dry, but it’s an amazing look at a period in engineering history when they were inventing and discovering the project management techniques we take for granted today. Oh, and they sent men to the Moon.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129676"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129676" 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/129676.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/spider.aspx</guid>
            <pubDate>Wed, 25 Feb 2009 18:21:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129676.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/25/spider.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129676.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>Ulterior Motive Lounge Episode 29: Touring the Pavilion</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/15/ulterior-motive-lounge-episode-29-touring-the-pavilion.aspx</link>
            <description>&lt;p&gt;Continuing &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/09/ulterior-motive-lounge-episode-28-meet-danny-diplodocus.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%2029.jpg"&gt;&lt;img alt="Ulterior Motive Lounge Episode 29" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Episode%2029.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;“We grow dinosaurs!” Big whoop, huh? Like &lt;em&gt;anyone&lt;/em&gt; reading the strip hadn’t figured that out before I started Scene 1… It’s hard to surprise the characters in a story when the audience can tell from the promos what the surprise is.&lt;/p&gt;
&lt;p&gt;But since The UML Guy has been part of the project before, none of this was a surprise to him. So while the others were taking in the new sights, he was drawing more UML diagrams. His results follow.&lt;/p&gt;
&lt;p&gt;We learned a few more specific kinds of scientists on the project:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Laboratory Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Laboratory%20Staff%20Scene%207.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;We added one more category of Employee Actors, Information Staff:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Employee%20Actors%20Scene%207.jpg"&gt;&lt;img alt="Employee Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Employee%20Actors%20Scene%207.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you’ve ever eaten at a restaurant – certainly if you’ve ever worked at one – you’ll realize we need more detail in our set of Concession Actors, starting with a Restaurant Manager:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Supervisor%20Actors%20Scene%207.jpg"&gt;&lt;img alt="Supervisor Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Supervisor%20Actors%20Scene%207.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And then more specific Restaurant Staff:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Concession Staff Actors" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Concession%20Staff%20Actors%20Scene%207.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;We also learned of more systems we’ll need to support the functions described in the Episode:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Deployment%20with%20Icons%20Scene%207.jpg"&gt;&lt;img alt="Logical Deployment Diagram" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Deployment%20with%20Icons%20Scene%207.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We added an Information Console, a Laboratory Server, Laboratory Computers, Laboratory Devices, a Commerce Server, and Cash Registers. Note that the Commerce Server has to communicate with the Warehouse Server to schedule deliveries to the rooms and to the mainland.&lt;/p&gt;
&lt;p&gt;These new systems complicated the physical Deployment Diagram almost to the breaking point. It’s complex enough that The UML Guy plans to group it, simplify it, and turn it into multiple diagrams when he gets time. But for now, here’s one more look at the single diagram:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Physical%20Deployment%20Scene%207.jpg"&gt;&lt;img alt="Physical Deployment Diagram" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Physical%20Deployment%20Scene%207.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We added some new Use Cases for Driver:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Driver%20Use%20Cases%20Scene%207.jpg"&gt;&lt;img alt="Driver Use Cases" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Driver%20Use%20Cases%20Scene%207.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;And for Guest:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Guest%20Use%20Cases%20Scene%207.jpg"&gt;&lt;img alt="Guest Use Cases" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Guest%20Use%20Cases%20Scene%207.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of those Use Cases, Make Purchase, is complex enough to deserve a dedicated diagram:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Make%20Purchase.jpg"&gt;&lt;img alt="Make Purchase Use Cases" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Make%20Purchase.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can see from the Episode that there are multiple Classes of souvenirs:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Souvenir Classes" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Merchandise.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;And finally, we have new Use Cases for the Geneticist and the Embryologist. Normally, The UML Guy prefers a single diagram per Actor, focused on the Use Cases for that Actor; but in this case, the Use Cases are closely related and work with related Domain Objects. So he combined the diagrams for now, but may split them later:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Geneticist%20and%20Embryologist%20Use%20Cases.jpg"&gt;&lt;img alt="Geneticist and Embryologist Use Cases" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/r_Geneticist%20and%20Embryologist%20Use%20Cases.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That’s it for new UML content for this Episode. Oh, The UML Guy could &lt;em&gt;imagine&lt;/em&gt; more, such as Use Cases for the Restaurant Staff and the Souvenir Staff; but Owner just didn’t give enough detail to work with. Those will come out over time.&lt;/p&gt;
&lt;p&gt;Other comments on this Episode:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The sign post in panel 2 probably ought to include &lt;a href="http://en.wikipedia.org/wiki/Seoul"&gt;Seoul&lt;/a&gt;, &lt;a href="http://www.ottumwaiowa.com/"&gt;Ottumwa&lt;/a&gt;, &lt;a href="http://www.millvalley.com/"&gt;Mill Valley&lt;/a&gt;, &lt;a href="http://www.cityofboston.gov/"&gt;Boston&lt;/a&gt;, and &lt;a href="http://www.hometownusa.com/maine/Crabapple_Cove.html"&gt;Crabapple Cove&lt;/a&gt;; but that would’ve made it unreadable. &lt;/li&gt;
    &lt;li&gt;It’s not the Dino Dog that’s bothering The Reader in panel 6, it’s the curry. The fastest way to drive him away is to serve him curry. But boy, curried chicken sausage sounds good to me right now! &lt;/li&gt;
    &lt;li&gt;Since you insisted (I know you’re thinking it, here’s the recipe for Yabanapple Soup: &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;strong&gt;Yabanapple Soup (Serves 4)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3 large ripe bananas&lt;/p&gt;
&lt;p&gt;1 large sweet potato (sometimes called a yam in America, but &lt;em&gt;not&lt;/em&gt; the same as yams elsewhere – it’s a whole different genus and species)&lt;/p&gt;
&lt;p&gt;1 large can of chunk pineapple, drained&lt;/p&gt;
&lt;p&gt;2 large cans of whole coconut milk (skim if you prefer)&lt;/p&gt;
&lt;p&gt;3 tablespoons of honey&lt;/p&gt;
&lt;p&gt;1 dash cinnamon&lt;/p&gt;
&lt;p&gt;1 dash nutmeg&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
    &lt;li&gt;Clean and peel the sweet potato. &lt;/li&gt;
    &lt;li&gt;Boil a pan of water. When boiling, add the sweet potato, and boil until slightly soft. Remove from heat and drain. &lt;/li&gt;
    &lt;li&gt;Peel and slice the banana into quarter-inch slices. &lt;/li&gt;
    &lt;li&gt;Slice the sweet potato into quarter-inch slices, and then into chunks. &lt;/li&gt;
    &lt;li&gt;In a sauce pan, mix coconut milk, sweet potato chunks, banana slices, pineapple chunks, honey, cinnamon and nutmeg. Heat until simmering. &lt;/li&gt;
    &lt;li&gt;Serve hot; or chill and serve with a scoop of ice cream. &lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
    &lt;li&gt;Boy, those are some cool-looking souvenirs in panel 7. Let’s take a closer look: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;a href="http://www.cafepress.com/UMLounge.340153135"&gt;&lt;img alt="Ladies of Ulterior Motive Lounge T-Shirt" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Ladies.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cafepress.com/UMLounge.340166266"&gt;&lt;img alt="What-EVER! T-Shirt" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_What-EVER.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cafepress.com/UMLounge.340171710"&gt;&lt;img alt="The UML Guy T-Shirt" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_The%20UML%20Guy%20Shirt.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cafepress.com/UMLounge.340234288"&gt;&lt;img alt="UML Bear" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_UML%20Bear.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cafepress.com/UMLounge.340215623"&gt;&lt;img alt="Ulterior Motive Lounge Stein" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Stein.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wow! Too bad this is just a comic strip, not the real world. Wouldn’t it be great if there were &lt;a href="http://www.cafepress.com/UMLounge"&gt;a place where you could buy LoungeWare&lt;/a&gt;, especially just in time for Christmas?&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.wayneboring.com/"&gt;Wayne H. Boring&lt;/a&gt; was a famous and popular &lt;a href="http://www.dccomics.com/go/superman/"&gt;Superman&lt;/a&gt; artist. I love his work, and I couldn’t resist borrowing his name for the pun in panel 8. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next Episode: a tour of the Labs!&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=127957"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127957" 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/127957.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/15/ulterior-motive-lounge-episode-29-touring-the-pavilion.aspx</guid>
            <pubDate>Tue, 16 Dec 2008 02:03:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127957.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/12/15/ulterior-motive-lounge-episode-29-touring-the-pavilion.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127957.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>