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

<channel>
	<title>Building Better Software &#187; Software Engineering</title>
	<atom:link href="http://www.stellman-greene.com/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stellman-greene.com</link>
	<description>because people want their software to work</description>
	<lastBuildDate>Sat, 05 Nov 2011 14:19:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Don&#8217;t document your process!</title>
		<link>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/</link>
		<comments>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 19:55:28 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Software Process]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2008/01/31/dont-document-your-process/</guid>
		<description><![CDATA[Yesterday, a Slashdot article asked an age-old question: One of the worst problems [in my company] is a lack of process documentation. All knowledge is passed down via an oral tradition. Someone gets hit by a bus and that knowledge is lost forevermore. Now I know what I&#8217;ve seen in the past. There&#8217;s the big-binder-of-crap-no-one-reads [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2008/01/perfect_date.png" alt="Joe perfects his process for the perfect date" /></p>
<p>Yesterday, a Slashdot article <a href="http://ask.slashdot.org/article.pl?sid=08/01/30/0332241">asked an age-old question</a>:</p>
<blockquote><p>One of the worst problems [in my company] is a lack of process documentation. All knowledge is passed down via an oral tradition. Someone gets hit by a bus and that knowledge is lost forevermore. Now I know what I&#8217;ve seen in the past. There&#8217;s the big-binder-of-crap-no-one-reads method, usually used in conjunction with nobody-updates-this-crap-so-it&#8217;s-useless-anyway approach. I&#8217;ve been hearing good things about company wikis, and mixed reviews about Sharepoint and its intranet capabilities. And yes, I know that this is all a waste of time if there&#8217;s no follow-through from management. But assuming that the required support is there, how do you guys do process documentation?</p></blockquote>
<p>This question seems to come up over and over again. The funny thing is that it almost always leads straight to a long discussion of the technique for gathering process documentation, and then a discussion of mechanism for storing it. That&#8217;s the question I think the reader thought he was asking: how to &#8220;copy down&#8221; the process by looking at how the people on the team build the software and putting it into a &#8220;complete&#8221; set of documents, and whether to use a wiki, Sharepoint, a version control system or some other repository to hold the docuemnts. And the discussion that followed from that Slashdot post should be pretty familiar to anyone who&#8217;s tried to solve this problem in real life. Some people talk about systems to store documents, others talk about the virtues of keeping them up to date, there&#8217;s a healthy dose of &#8220;write down what you&#8217;re currently doing&#8221; or suggestions for incident logging, an apparent epidemic of bus drivers who have it in for the one guy who knows how everything in the company works, and lots of talk of cataloging, updating and verifying.</p>
<p>I&#8217;ve been through that before, and I&#8217;ve bought into many of those ideas in the past. And you know what? It wasn&#8217;t particularly useful. I know that in many process circles, that&#8217;s a heretical idea. In fact, if you&#8217;d told me back in 1999 that it&#8217;s not useful, I would have laughed at you. <em>Of course</em> you&#8217;re supposed to start by documenting the complete process! How else do you know what you&#8217;re improving? There seems to be an unspoken rule that we&#8217;re supposed to be striving for a fully documented, constantly improving process. And in some shops, that does make sense. But it&#8217;s a very, very hard thing to do, and in practice it&#8217;s almost impossible to put in place from the ground up.</p>
<p>This is a really hard thing for a lot of software people to accept. Our nature, as programmer types, is to strive for complete systems. When we build software, we try to handle every possible special case.  We&#8217;re overly pedantic and literal; it&#8217;s like exceptions and missing cases just get under our skin. So when we&#8217;re presented with the problem of how to improve the way a team or a company builds software, the first thing we want to do is come up with a system that describes the complete process for building software, mapping out every possible special case and exception that a project might come to. And it makes sense that we&#8217;d want to test that process to make sure it&#8217;s accurate, correct any changes, and put everything in a repository that gives us complete access to the one true way that we build software.</p>
<p>The problem is that people don&#8217;t really work that way. Process engineering suffers from a serious problem: it seems simple when you think about it in the abstract, but once you start trying to document precisely and completely how a team builds software, you run into an enormous number of special cases. Architecture is always finished and signed off before coding begins, right? Oh, wait, except for Joe&#8217;s project, where we did 30% of the architecture and started building the code for that while Louise and Bob worked on the next piece of architecture. Oh yeah, and then there&#8217;s that project that&#8217;s going to be broken into three phases, and we don&#8217;t really know how the third part is going to work.</p>
<p>I&#8217;ve seen that pattern many times, and it usually plays out in one of two ways. Either you end up with really general documentation that lays out a very general process that&#8217;s trivial to follow but doesn&#8217;t really provide any useful guidance (like a big chart that shows that testing comes after coding, which comes after design), or you end up with a tangled mess of special cases and alternative paths that seems to get updated every time there&#8217;s a new project. Both of those technically fulfill the goal of process documentation &#8212; which is great if your job was to document the process. But neither is particularly useful if your goal is to actually build better software.</p>
<p>There&#8217;s an easy solution to this problem: <strong>don&#8217;t document your software process</strong>. Or, at least, don&#8217;t start out by documenting the complete software process. Instead, take a step back and try to figure out what problems you&#8217;re facing. What about your process needs to be fixed? Do you have too many bugs? Do you deliver the software too late? Does your CFO complain that projects are too expensive? Do you deliver a build to your users, only to have them tell you that it looks fine and all, but wasn&#8217;t it supposed to do this other thing? Those are all different problems, and they have different solutions.</p>
<p>That&#8217;s what Jenny and I teach in our first book, <a href="http://stellman-greene.com/aspm">Applied Software Project Management</a>. We call it the <strong>&#8220;diagnose and fix&#8221;</strong> approach: first you figure out what problems are plaguing your projects, and then you put in very limited fixes that address the most painful problems that keep you from building better software. People don&#8217;t just wake up one day and say, &#8220;We&#8217;ve got to totally change the way we build software.&#8221; They don&#8217;t start documenting the software process because things are going just fine. People hate change, and they don&#8217;t start making changes to the way they build software unless they have a good reason. So look for that reason, find the pain that hurts the most, and make the smallest change that you can to fix that one problem without rocking the boat. Then find the next most painful thing, and put in the smallest change that you can to fix that. This is something you can keep doing indefinitely, in a way that doesn&#8217;t disrupt those parts of your projects that are working just fine. Because the odds are that there are plenty of things that the team is doing right! If it ain&#8217;t broke, don&#8217;t fix it.</p>
<p>So what about the question of how to actually document the process changes that you do want to make? That&#8217;s a very practical problem, and one that we had to handle in our book. After all, we do give you processes for planning, estimating, documenting, building and testing software. And we wanted to do it in a way that was programmer-friendly, with as little cognitive overhead as we possible.</p>
<p>We decided to use process scripts &#8212; that&#8217;s scripts like an actor reads, not scripts like a shell runs &#8212; to describe our processes. We developed these scripts based on use cases (which we talk about in detail in the book). If you take a look at <a href="http://www.stellman-greene.com/usecases" title="Use cases">the use case page from the book&#8217;s companion website</a>, you can see an example of a use case, followed by a typical script that you&#8217;d follow to develop use cases for your project. That particular script is very iterative, because use case development (like many great software practices) should be a highly iterative process. We&#8217;ve got examples of many scripts for the various practices and processes: ones for <a href="http://www.stellman-greene.com/projectplanning">planning projects</a>, <a href="http://www.stellman-greene.com/reviews">reviewing deliverables</a>, and <a href="http://www.stellman-greene.com/productengineering">building and testing software</a>.</p>
<p>As for storing these scripts, I&#8217;ve used all sorts of ways to do it in the past. I&#8217;ve used wikis, version control systems (both Subversion and VSS, depending on what&#8217;s in place at the company), even plain old folders full of MS Word documents. The actual mechanics of storing documents aren&#8217;t particularly interesting, and are pretty much interchangeable for process documentation. Processes shouldn&#8217;t change all that often, because change is very disruptive to a company. The changes should be small, incremental, and easily understood by the team&#8230; and the team should agree that they&#8217;re useful! Because the biggest problem with process changes &#8212; and several posts in the Slashdot thread bring this up &#8212;  is that they don&#8217;t &#8220;stick&#8221;. But making those changes stick is easy. Just make small changes that the team buys into, and that actually get you to build better software.</p>
<p>That&#8217;s easier said than done, of course. Lucky for us, too! Otherwise there wouldn&#8217;t be a market for our <a href="http://www.oreilly.com/catalog/appliedprojectmgmt/index.html">books</a> or <a href="http://www.stellman-greene.com/training/">training</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2008/01/31/dont-document-your-process/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How spending a little extra time and money on design might have saved Microsoft over a billion bucks</title>
		<link>http://www.stellman-greene.com/2007/08/15/how-spending-a-little-extra-time-and-money-on-design-might-have-saved-microsoft-over-a-billion-bucks/</link>
		<comments>http://www.stellman-greene.com/2007/08/15/how-spending-a-little-extra-time-and-money-on-design-might-have-saved-microsoft-over-a-billion-bucks/#comments</comments>
		<pubDate>Wed, 15 Aug 2007 21:32:22 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Quality]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/08/15/how-spending-a-little-extra-time-and-money-on-design-might-have-saved-microsoft-over-a-billion-bucks/</guid>
		<description><![CDATA[I really wanted an Xbox 360. My old PS2 is showing its age, and I wanted to upgrade to a new system as soon as I finished the last few missions of GTA: Vice City Stories &#8212; especially now that it looks like Manhunt 2 won&#8217;t be coming out for PS2 any time soon. I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>I really wanted an Xbox 360.</p>
<p>My old PS2 is showing its age, and I wanted to upgrade to a new system as soon as I finished the last few missions of <a href="http://www.rockstargames.com/vicecitystories/">GTA: Vice City Stories</a> &#8212; especially now that it looks like <a href="http://www.rockstargames.com/manhunt2/">Manhunt 2</a> won&#8217;t be coming out for PS2 <a href="http://wii.ign.com/articles/798/798639p1.html">any time soon</a>. I&#8217;m a huge fan of the GTA series, and I&#8217;m especially psyched about <a href="http://www.rockstargames.com/IV/">GTA4</a>. I grew up in Brooklyn, on a block that looks a more than a little like <a href="http://www.rockstargames.com/IV/screenshots/007.jpg">a GTA4 screenshot</a>.</p>
<p>But then something happened&#8230;</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/08/viva-pinata.png" alt="Viva Pinata.png" /></p>
<p>But a couple of weeks ago my plans changed. <a href="http://www.stellman-greene.com/jennifer-greene/">Jenny</a> was happily thrashing away on <a href="http://www.guitarhero.com/">Guitar Hero</a>, when her TV screen just went blank. She looked down at her console, which had suddenly gone quiet. (That&#8217;s pretty noticeable, apparently, because the Xbox 360 is a really loud machine&#8230; which, as it turns out, is important to our story.) Much to her disappointment, she saw those three telltale LEDs that every Xbox owner dreads: <a href="http://en.wikipedia.org/wiki/RROD">the red ring of death</a>.</p>
<p>Luckily, Jenny&#8217;s 360 lasted long enough so that she could take advantage of the <a href="http://service.xbox.com/">Xbox 360 service site</a> that <a href="http://www.joystiq.com/2007/08/04/microsoft-launches-new-xbox-360-repair-web-site/">Microsoft launched earlier this month</a>. But her poor console was just the latest in a long line of casualties. Some retailers estimate that <a href="http://gizmodo.com/gadgets/gaming/xbox-360-failure-rate-30-says-retailers-271487.php">30% of Xbox 360s need repair</a>, and we&#8217;ve seen plenty of <a href="http://www.engadget.com/2007/02/22/xbox-360-diehard-loses-loyalty-after-seven-bricked-consoles/">anecdotal</a> <a href="http://www.engadget.com/2007/01/15/towel-trick-provides-temporary-fix-to-xbox-360s-red-ring-of-d/">evidence</a> that gamers are unhappy. It&#8217;s <a href="http://www.informationweek.com/news/showArticle.jhtml?articleID=201200157">costing Microsoft sales</a> and <a href="http://ce.seekingalpha.com/article/32642">spooking investors</a>. Microsoft is doing everything they can to fix the problem &#8212; they&#8217;ve extended the warranty to three years, and it&#8217;s <a href="http://www.engadget.com/2007/07/05/xbox-360-warranty-extended-to-three-years/">costing them over a billion dollars</a>. But it&#8217;s a real mess.</p>
<p>As much as I want a new console, I&#8217;m not going to buy one until I know that it won&#8217;t break. I still plan on getting a 360, but not until I can be reasonably sure that I won&#8217;t have to return it. By the time I eventually get one, hopefully they&#8217;ll have figured out how to make it quieter. I&#8217;m certain that I&#8217;m not the only one who&#8217;s decided to put off buying an Xbox. And that&#8217;s bad news for Microsoft.</p>
<p><em>So what can we, as software developers, learn from the Xbox 360 fiasco?</em></p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/08/productive-meeting.png" alt="Productive meeting" /></p>
<p>Software people like us have a nasty habit of dismissing hardware problems as if they have nothing to do with us. We tend to think that designing software is really different from building hardware. And sure, there are definitely differences. We don&#8217;t have to worry about assembly lines, product getting damaged in shipment, or those pesky laws of physics that can prove to be such an irritating limitation when you have to design physical objects.</p>
<p>And it&#8217;s easy to dismiss the Xbox 360 failure as one of those unfortunate things that falls into that last category of physical faults. There&#8217;s a <a href="http://techon.nikkeibp.co.jp/english/NEWS_EN/20070801/137224/" title="Tech-On! investigates the red ring of death">great Tech-On! article</a> that gives us the dirt on exactly what&#8217;s caused the problem. It&#8217;s an excellent post-mortem on what amounts to terrible thermal design.</p>
<p>For those of you who&#8217;ve never taken a computer apart, here&#8217;s a little background information. Dealing with heat is an important part of modern computer design. Computer processors generate a lot of heat &#8212; so much that if you don&#8217;t come up with a way to get rid of it, they&#8217;ll fry themselves. So computer manufacturers will typically attach a heat sink to a processor. A heat sink is basically just a big radiator with fins or poles that lets air circulate and draw away the heat. (I once roasted a Pentium 4 processor by popping its heat sink off while the computer was running, just to see what would happen. It went &#8220;poof&#8221;.) A lot of processors are too hot even for heat sinks; in that case, you&#8217;ll need to stick a fan on top of it to cool it off. That&#8217;s why some computers are so noisy: they need fans to keep them cool.</p>
<p>It turns out that the Xbox 360 generates far too much heat, and a lot of people speculate that when that heat builds up past a critical point it unseats the GPU (a separate processor that&#8217;s used for graphics). Microsoft has so far refused to comment on exactly what the problem is, but as time goes on there does seem to be some <a href="http://kotaku.com/gaming/microsoft-says/no-single-issue-with-xbox-360-286668.php">consensus</a> forming about it. And that Tech-On! article seems to have found a smoking (heh) gun.</p>
<p>But that&#8217;s just the hardware stuff. What does that have to do with building better software?</p>
<p>The punchline for all of this came at the end of that Tech-On! article, and it&#8217;s why I think this whole incident is so interesting. Here&#8217;s what it said:</p>
<blockquote><p> Finally, we opened the chassis of the Xbox 360 repaired in May 2007 and compared it with the other Xbox 360 we purchased in late 2005.</p>
<p>&#8220;Huh? The heat sinks and fans are completely identical, aren&#8217;t they?&#8221;</p>
<p>To our surprise, the composition of the repaired Xbox 360 looked completely the same as that of the Xbox 360 purchased in late 2005. It turned out that Microsoft provided repair without changing the Xbox 360&#8242;s thermo design at least until May 2007.</p></blockquote>
<p>The repaired units weren&#8217;t replaced with ones that had a better design. They were the same &#8212; as far as they could tell, Microsoft just replaced a broken unit with one that hadn&#8217;t broken yet. That&#8217;s probably why we&#8217;re seeing <a href="http://blogs.mercurynews.com/aei/2006/05/the_unluckiest_.html">various</a> <a href="http://www.1up.com/do/newsStory?cId=3160603">reports</a> of repeated breakdowns.</p>
<p>What that tells me is that <em>the design of the Xbox 360 is deeply flawed</em>, and that design flaw has already cost Microsoft well over a billion dollars. And it&#8217;s that flawed design that can teach us a whole lot about our own software projects.</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/08/shoddy-workmanship.png" alt="Shoddy workmanship" /></p>
<p>So what does this all mean for us developers? Well, for the more cynical among us, it could just mean a whole lot of job security. I&#8217;ve met <a href="http://en.wikipedia.org/wiki/COBOL">COBOL</a> programmers who charge ridiculous amounts of money to maintain aging systems. But while their jobs pay well, personally they sound tedious and awful to me. Does anyone really aspire to spend years patching an aging software system? Most programmers will tell you that maintaining old systems is the worst part of the job. If you love designing new and innovative software, then the last thing you want to do is get your career stuck in maintenance mode.</p>
<p>And that&#8217;s what Microsoft is learning with the Xbox 360. I&#8217;m not a thermal design expert, but I am absolutely positive that they could have come up with a different design that wouldn&#8217;t fail so often. And while it may have cost more money to design the system and build each unit, I sincerely doubt those extra costs would have added up to over a billion dollars. And maybe the extra design time might have cost them more time&#8230; but now there are plenty of us who aren&#8217;t buying the system because we don&#8217;t want to be stung by the rampant quality problems.</p>
<p>Had Microsoft designed the system properly in the first place, they wouldn&#8217;t be in this mess now. And that&#8217;s the big lesson for us to learn. Oddly enough, it&#8217;s not a new lesson&#8230; in fact, it&#8217;s a pretty old one. One way to look at the Xbox thermal problem is to see it as <em>a design defect that wasn&#8217;t caught until after the product was shipped</em>.</p>
<p>Look what I found in an old 1997 issue of <a href="http://www.yesterpc.com/Press/WinTechj/item.htm">Windows Tech Journal</a>&#8230; it&#8217;s an article by one of our favorite authors, Steve McConnell, called <a href="http://stevemcconnell.com/articles/art08.htm" title="McConnell, Steve. ">&#8220;Upstream Decisions, Downstream Costs&#8221;</a>. The article lays out a scenario that most of us will recognize immediately: a fictional software company runs into problems because they don&#8217;t do enough planning up front, and end up getting buried with bugs, which cause awful delays. It also has a chart that anyone who&#8217;s read a few software engineering textbooks will recognize, showing that the earlier a bug is introduced in the project and the later it&#8217;s caught, the more expensive it is to fix.</p>
<p>So now we&#8217;ve seen a good, real-world situation where better design practices would have saved a whole lot of money. But what can we do about it in our own projects?</p>
<p>First and foremost, this gives us more ammunition when arguing with our coworkers and our bosses for more time to design our software. It&#8217;s really easy to get frustrated during the design phase of a software project, when a few people are generating a lot of paper or diagrams but nobody&#8217;s working on the code yet. That&#8217;s one of the things that we pointed out in our first book, <a href="http://stellman-greene.com/aspm" title="Applied Software Project Management"><em>Applied Software Project Management</em></a> &#8212; that finding problems too late can sink projects. Luckily, there&#8217;s a relatively painless fix: adopt <a href="http://stellman-greene.com/reviews">good review practices</a>.</p>
<p>This is something that our friends in the open source world are really good at. Jenny and I talked about this in an ONLamp.com article we wrote last year called <a href="http://www.onlamp.com/pub/a/onlamp/2006/02/27/what-corp-projects-learn-from-open-source.html?page=3" title="What Corporate Projects Should Learn from Open Source">&#8220;What Corporate Projects Should Learn from Open Source&#8221;</a>. A lot of high-profile, successful open source projects have very careful reviews, where they scrutinize scope and design decisions <em>before</em> they start coding. (To be fair, a lot of high-profile, successful closed source projects do the same, but we can&#8217;t just go to their websites and see their review results.)</p>
<p>So the moral of the story is that it often costs less to spend more time and money on design up front. And I bet there are some Microsoft shareholders that will agree.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/08/15/how-spending-a-little-extra-time-and-money-on-design-might-have-saved-microsoft-over-a-billion-bucks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why &#8220;gold plating&#8221; is a lousy name</title>
		<link>http://www.stellman-greene.com/2007/06/09/why-gold-plating-is-a-lousy-name/</link>
		<comments>http://www.stellman-greene.com/2007/06/09/why-gold-plating-is-a-lousy-name/#comments</comments>
		<pubDate>Sat, 09 Jun 2007 05:13:53 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Gold Plating]]></category>
		<category><![CDATA[Quality]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/06/09/why-gold-plating-is-a-lousy-name/</guid>
		<description><![CDATA[A few days ago I posted an answer to a question about gold plating and scope creep to the Head First PMP forum. I&#8217;m not surprised the question came up &#8212; people really seem to have trouble with the concept of gold plating. And I don&#8217;t think it&#8217;s because it&#8217;s a tough concept to get. [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I posted an <a href="http://www.headfirstlabs.com/phpBB2/viewtopic.php?t=2615" title="Forum post about gold plating">answer to a question about gold plating and scope creep</a> to the Head First PMP forum. I&#8217;m not surprised the question came up &#8212; people really seem to have trouble with the concept of gold plating. And I don&#8217;t think it&#8217;s because it&#8217;s a tough concept to get. I think it&#8217;s because it&#8217;s got a lousy name.</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/06/silverware.png" alt="Gold plated silverware" /></p>
<p>In the usual gold plating scenario, a programmer adds features that were never requested because they&#8217;re &#8220;cool&#8221; or fun or seem like they&#8217;d be really useful. And sometimes they are &#8212; but more often, they&#8217;re just wasted effort, at least from the perspective of the person paying the programmer&#8217;s salary. Like I pointed out in <a href="http://www.stellman-greene.com/2007/05/30/the-kitchen-of-the-future/" title="Kitchen of the Future">my last post that mentioned gold plating</a>, I completely sympathize. I&#8217;m definitely guilty of gold plating. There was one project I led about ten years ago where I created an entire scripting language, complete with interpreter, that was totally unnecessary. As far as I know, that product is still being used today, and not a single person has ever written one script for it. But it was definitely cool (or, at least, I thought so). More importantly, I really did think it would be useful, and make the software better. Classic gold plating.</p>
<p>On the surface, the &#8220;gold plating&#8221; does seem intuitive, but the analogy starts to break down under closer scrutiny. Think about what gets gold plated: all sorts of stuff, from <a href="http://www.walmart.com/catalog/product.do?product_id=4901673">cheap jewelry</a> to <a href="http://www.montblanc.com/products/precious_gold_metals_solitaire_gold_black.35979.php">expensive pens</a>. All sorts of things get encrusted with, for lack of a better word, <a href="http://gizmodo.com/gadgets/cellphones/million-dollar-cellphone-185445.php">bling</a>. And that&#8217;s what I pointed out in that <a href="http://www.headfirstlabs.com/phpBB2/viewtopic.php?t=2615" title="Forum post about gold plating">forum post</a>:</p>
<blockquote><p><span class="postbody"> Gold plating is what we call it when the project team does work on the product to add features that the requirements didn&#8217;t call for, and that the stakeholder and customer didn&#8217;t ask for and don&#8217;t need. It&#8217;s called &#8220;gold plating&#8221; because of the tendency a lot of companies have to make a product more expensive by covering it in gold, without actually making any functional changes. (For example, there are plenty of watches and fountain pens you can buy from luxury companies that are identical to their cheaper versions, except that they&#8217;re covered in gold.)  </span></p></blockquote>
<p>This got me thinking about gold plating, and why it gives people so much trouble. Is gold plating in a software project actually similar to gold plating in real life? Or is it an odd, somewhat mismatched analogy?</p>
<p>To answer that question, we&#8217;ll need to take a step back and look at gold plating in the real world. There are a few different strains of gold plating, and they serve different purposes. First there&#8217;s the traditional, purely decorative gold plating. That&#8217;s the one we know and love: take an ordinary object, slap some gold on it, and charge a whole lot more. That&#8217;s the sort of product that&#8217;s associated with decadence and conspicuous consumption. It&#8217;s where the <a href="http://www.pbs.org/wgbh/amex/carnegie/gildedage.html" title="the Gilded Age">Gilded Age</a> got its name.</p>
<p>Certainly, making a product arbitrarily more expensive is certainly a way to sell more of it to a certain sort of consumer. But while there are certainly numerous <a href="http://boingboing.net/2006/02/14/worlds_most_expensiv.html" title="Mmmm, yummy!">modern examples of opulent gold plating</a>, it&#8217;s fallen out of favor somewhat. More importantly, it&#8217;s not really a great analogy for gold plating in software.</p>
<p>What it&#8217;s been replaced with is a somewhat similar but definitely distinct way to enhance (read: sell &#8220;upscale&#8221; versions of) products. This &#8220;enhancement&#8221; is done by adding features that are actually useful, but go far beyond the needs of the typical consumers of the product.</p>
<p>Here&#8217;s an example. Hhow many suburban homes really need an industrial refrigerator or restaurant-quality range? Those appliances have been a selling point of &#8220;luxury&#8221; and &#8220;upscale&#8221; homes&#8217; kitchens for years. But the difference between that and, say, gilded kitchen items is that the &#8220;professional&#8221; applicances almost certainly worth the price &#8212; if you actually need them. Which you don&#8217;t, if you only use your kitchen to cook dinner for four every couple of days and thaw the occasional frozen turkey. But that&#8217;s not the point. The kitchen itself has been &#8220;upgraded&#8221; with cool but unnecessary items. And, in this case, it sells.</p>
<p><a href="http://www.youtube.com/watch?v=pgV9Kp8QzOA" title="The Canyonero"><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/06/canyonero.png" alt="Canyonero" /></a></p>
<p>That&#8217;s certainly not the only example of products packed with features that are potentially useful, but which are, for the average owner of those products, essentially unnecessary (and by and large unused). There&#8217;s the slowly fading <a href="http://www.youtube.com/watch?v=pgV9Kp8QzOA">American love affair with the SUV</a>; the top-of-the-line faucets, fixtures, and general home accouterments that litter the country&#8217;s McMansions; and pretty much everything in the Brookstone, Hammacher Schlemmer and Sharper Image catalogs. We&#8217;ve got our fill of amateur hill climbers with professional mountaineering gear, weekend golfers with $1,500 titanium clubs, and basement workshops stocked with industrial hardware used to build the occasional birdhouse. Every single one of those things, in the right hands, is almost certainly worth it. I&#8217;ve been playing bass guitar for about 20 years, and I know that there&#8217;s a big difference between the average $300 instrument and one that cost ten times as much. (Which is not to say you can&#8217;t spend $3,000 on a crappy bass, but that&#8217;s a whole different issue entirely.) Certainly, a beginner will see some small benefit from using a better instrument. But it&#8217;s probably not worth the price for someone who will only pick it up once every few months.</p>
<p>Neither of these two ideas is a perfect analogy for software gold plating. In some ways gold plating in software is a lot like like gilded products. In other ways, it&#8217;s similar to the kind of overkill that people perform when they use &#8220;top-of-the-line&#8221; products unnecessarily. More accurately, it&#8217;s really a mixture of the two.</p>
<p>So what drives us to gold plating? We add unrequested (and eventually unused) features because we want to build stuff that&#8217;s cool, and it never occurs to us that we&#8217;re building something our users won&#8217;t need. I like to think of Google as the ultimate in gold plating. Their latest offering, <a href="http://maps.google.com/help/maps/streetview/">Google Street View</a>, is a great example of cool software that doesn&#8217;t seem to meet an obvious need. And I love it &#8212; I think they did a great job with it, and I&#8217;m honestly impressed with the way a whole lot of moving parts came together the way they did. Maybe someone will think of a really great use for it. But isn&#8217;t that a solution in search of a problem, by definition?</p>
<p>A good rule of thumb is that people will generally only pay for a product that&#8217;s useful. One of my favorite ways to describe quality is to consider two pieces of software. The first one is beautifully designed, very well built, very stable, never crashes, has a very intuitive user interface, is extremely secure, and is generally a pleasure to use &#8212; but it doesn&#8217;t do the job you need it to do. The other is terribly built, painful to use, crashes at least once a day, and does 50% of what you need. And that&#8217;s the one you&#8217;re going to use. It meets your needs. And any feature in that software that doesn&#8217;t meet your needs (or the needs of any other users) is pure gold plating.</p>
<p>Which brings me back to the name. I don&#8217;t think &#8220;gold plating&#8221; does justice to the real phenomenon it refers to. It&#8217;s more than just gilding software by making it pretty (and/or more expensive). It&#8217;s about the way we genuinely feel that we&#8217;re making the software better by adding features that may be really cool, but which we, as programmers, simply don&#8217;t recognize are useless.</p>
<p>And the sooner we can figure out how to avoid doing that, the better our software will be.</p>
<p><em>(Luckily, we&#8217;ve got some really good tools to help us avoid gold plating. I&#8217;ll talk about </em><em>them</em><em> soon in another post.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/06/09/why-gold-plating-is-a-lousy-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;That estimate seems a little long.&#8221;</title>
		<link>http://www.stellman-greene.com/2007/05/31/that-estimate-seems-a-little-long/</link>
		<comments>http://www.stellman-greene.com/2007/05/31/that-estimate-seems-a-little-long/#comments</comments>
		<pubDate>Thu, 31 May 2007 15:20:54 +0000</pubDate>
		<dc:creator>Jennifer Greene</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/05/31/that-estimate-seems-a-little-long/</guid>
		<description><![CDATA[Ever spend time working up an accurate estimate with your team, and find that it gets rejected because it doesn&#8217;t match a magic number in somebody&#8217;s head? You did your homework; talked to the people who&#8217;ve done this kind of work before, compared your estimate to past projects, and made sure that your estimates are [...]]]></description>
			<content:encoded><![CDATA[<p>Ever spend time working up an accurate estimate with your team, and find that it gets rejected because it doesn&#8217;t match a magic number in somebody&#8217;s head? You did your homework; talked to the people who&#8217;ve done this kind of work before, compared your estimate to past projects, and made sure that your estimates are coming from the people who will actually do the work. But, your boss thinks the project should be done a few months earlier.  He doesn&#8217;t doubt your work, the estimate just doesn&#8217;t feel right.</p>
<p><a href='http://www.stellman-greene.com/blog/wp-content/uploads/2007/05/schedulereview13.jpg' title='Estimate'><img src='http://www.stellman-greene.com/blog/wp-content/uploads/2007/05/schedulereview13.jpg' alt='Estimate' /></a></p>
<p>Estimates have a tendency to be more accurate when they&#8217;re based on experience.  Having actual data on your past projects is so important when you sit down to figure out how long it&#8217;s going to take you to do a new one. The best estimates come from people who really understand the work that&#8217;s going to get done. And <a href="http://www.stellman-greene.com/delphi">practices for estimation that stay grounded in project experience</a> are less likely to be wrong. </p>
<p>That&#8217;s why your project will probably be really late if you just cave in and start shaving off time arbitrarily.  It might not be easy, but you need to explain the reasoning behind the estimates your team has come up with and set your boss&#8217;s expectations realistically.  Too many projects are in a bad position before they ever really get started because a project manager doesn&#8217;t correct this kind of misunderstanding.</p>
<p>It&#8217;s one of the toughest parts of the job because your boss doesn&#8217;t want to know all the details.  He just wants you to get it done faster.  And sometimes you can get done faster with more resources or with a different scope of work. But it&#8217;s <em>always</em> a mistake to just cut an estimate because it doesn&#8217;t match what people expect.  You need to turn the conversation around and help everybody get to see what the <em>real </em> choices are.  Just saying that project will take less time, never makes it happen that way&#8211; no matter how influential the person who wants it done yesterday is. </p>
<p>If you estimate right, you should never go back to your team and tell them to arbitrarily cut those estimates down.  Instead, you should work with your boss to understand if there might be some work that can be cut from schedule, or some other ways to accomplish what needs to be done in parallel. If you set up a relationship where you and your boss are both doing everything you can to come up with a reasonable plan together, you stand a much better chance of succeeding. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/05/31/that-estimate-seems-a-little-long/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Late projects, man-months and the software crisis</title>
		<link>http://www.stellman-greene.com/2007/05/15/late-projects-man-months-and-the-software-crisis/</link>
		<comments>http://www.stellman-greene.com/2007/05/15/late-projects-man-months-and-the-software-crisis/#comments</comments>
		<pubDate>Tue, 15 May 2007 14:38:48 +0000</pubDate>
		<dc:creator>Andrew Stellman</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.stellman-greene.com/2007/05/15/late-projects-man-months-and-the-software-crisis/</guid>
		<description><![CDATA[I recently got a question recently asking about Fred Brooks&#8217; famous quote: &#8220;Adding manpower to a late software project makes it later.&#8221; The person asking the question took it literally, and was asking about whether this meant that there&#8217;s no way any schedule estimation technique could indicate that adding manpower could shorten delivery time. Fred [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got a question recently asking about Fred Brooks&#8217; famous quote: &#8220;Adding manpower to a late software project makes it later.&#8221; The person asking the question took it literally, and was asking about whether this meant that there&#8217;s no way any schedule estimation technique could indicate that adding manpower could shorten delivery time.</p>
<p>Fred Brooks wasn&#8217;t really talking about schedule estimation techniques, or writing hard-and-fast rules. He was trying to help software engineers break some very bad habits.  And trying to fix a failing project by throwing bodies at it is one of the worst habits software engineers have. See, as it turns out, some tasks take however long they&#8217;re going to take, and throwing bodies at the problem won&#8217;t change that. Or, as Brooks wrote, &#8220;The bearing of a         child takes nine months, no matter how many women are assigned.&#8221;</p>
<p><img src="http://www.stellman-greene.com/blog/wp-content/uploads/2007/05/business-plan-2007-05-14.png" alt="Business Plan" /></p>
<p>I think the best way to understand that Brooks quote was to understand why he first wrote &#8220;The Mythical Man-Month&#8221; back in 1975. At the time there was something called the <a href="http://en.wikipedia.org/wiki/Software_crisis">software crisis</a>. The field of software engineering, still young at the time, had run in to a serious problem: people were having a whole lot of trouble writing software on time and under budget.</p>
<p>By the time the software crisis was in full effect, the engineering world had already matured a great deal. The great civil engineering projects of the early 20th century taught us how to manage enormous projects effectively. (<a href="http://en.wikipedia.org/wiki/Hoover_dam">Hoover Dam</a> was finished two years ahead of schedule! And <a href="http://en.wikipedia.org/wiki/Henry_Gantt">Henry Gantt</a> invented of <a href="http://www.stellman-greene.com/projectschedule">everybody&#8217;s favorite scheduling tool</a> around 1910.) And by the mid-1970s, the world of computers had matured to the point where most large corporations had computer programming teams and IBM &#8220;<a href="http://ibmmainframes.com/">big iron</a>&#8221; timesharing mainframes. It seemed like the tools were there, and the people had the skills to use them.</p>
<p>So why were all of our software projects so late?</p>
<p>Personally, I blame the person who coined the term &#8220;software&#8221;. The thinking, I believe, went like this: &#8220;Hardware is really expensive, and basically impossible to change. But luckily, we&#8217;ve got these programs that we can constantly tweak to suit our needs! That&#8217;s the opposite of hardware, which can&#8217;t be changed.&#8221;</p>
<p>By the time the mid-1990s came around, the field of software project management had matured to the point where we knew that change was the biggest factor in late software projects. Changing needs and requirements meant pulling apart the underpinnings of our code and caused us to have to do expensive (and often ineffective rework). Changing technology kept giving programmers &#8220;silver bullets&#8221; that they thought would make this next project run a whole lot more smoothly than the last one. And the (perceived) ability to change the software architecture and design in the middle of the project caused a lot of teams to fail to plan their projects well (or at all!).</p>
<p>The worst part of it was that it seemed like the software crisis never ended &#8212; there were still an enormous number of projects that were still coming in very late and over budget, or failing to complete at all. But at least by that point we knew the root cause of the problem and had tools to help us fix it. In fact, we were learning that adapting to change and getting those changes under control was an important part of effective software projects.</p>
<p>So how did we know that those things were causing the crisis in the first place, and that fixing those problems would get our software out the door on time and within budget? We can thank Fred Brooks for that. &#8220;The Mythical Man-Month&#8221; was, as far as I know, the most important software engineering book of its time. It laid out the real problems that caused software projects to run into trouble, and showed us a lot of very useful ideas about planning our software projects, structuring our teams, estimating the work, communicating with each other and our stakeholders, and writing our documentation. And a lot of what he wrote still resonates very well with modern software projects. (A lot of the <a href="http://www.stellman-greene.com/aspm/content/blogcategory/15/38/">tools and techniques</a> that Jennifer Greene and I wrote about in <a href="http://www.stellman-greene.com/aspm/">Applied Software Project Management</a> were designed specifically to address those root causes of software project problems.)</p>
<p>And that gets back to Brooks&#8217; quote about adding manpower to a late project. When Brooks talked about a late software project, he was talking about a project that had constantly shifting requirements and needs, poor planning, and communications problems both among the team members and between the team and the stakeholders. In a situation like that, many project managers will panic and just try to throw bodies at the situation. (I&#8217;ve seen this many, many times &#8212; and so have almost all software engineering professionals.) But those extra people will just cause the bad project plan to become even more inaccurate, and they will compound the already serious communications problems. That, in turn, will cause the team to spend extra effort dealing with those problems. And that extra effort will often be larger than the man-hours that the newly added team member will add to the team.</p>
<p>That&#8217;s why Brooks called his book &#8220;The Mythical Man-Month&#8221;. If you need to get your two-person project done in six months, you can&#8217;t just add another person on and magically get it done in four months. Adding a person to a project for a month doesn&#8217;t automatically reduce the total effort by one man-month. The effort that one person can contribute to a project varies enormously based on the project circumstances. His &#8220;adding manpower&#8221; is saying that if the project is already late, then adding an extra person can actually subtract man-months from the project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stellman-greene.com/2007/05/15/late-projects-man-months-and-the-software-crisis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

