<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Lessons of Failure</title>
	
	<link>http://www.lessonsoffailure.com</link>
	<description>Humans + Software Development = Always Interesting</description>
	<lastBuildDate>Wed, 01 Sep 2010 14:52:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/LessonsOfFailure" /><feedburner:info uri="lessonsoffailure" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>LessonsOfFailure</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>How I Learned to Stop Worrying and Love the New Axis of Evil (Oracle)</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/xCMcDEWh4qo/</link>
		<comments>http://www.lessonsoffailure.com/companies/how-i-learned-to-love-new-evil-empire-oracle/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 14:43:20 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Companies]]></category>
		<category><![CDATA[evil empire]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=742</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Fhow-i-learned-to-love-new-evil-empire-oracle%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Fhow-i-learned-to-love-new-evil-empire-oracle%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>There&#8217;s a wide sense of lament since Oracle has taken over Sun and their intellectual property, including MySQL, Java, Solaris and their hardware sales business.  I&#8217;d say the average observer of this process might use the terms &#8220;slow moving train wreck&#8221;.  I doubt they are far off on this one.</p>
<p><a href="http://www.lessonsoffailure.com/companies/how-i-learned-to-love-new-evil-empire-oracle/" class="more-link">Read more on How I Learned to Stop Worrying and Love the New Axis of Evil (Oracle)&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/google-go-not-getting-us-anywhere/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1</a></li>
<li><a href='http://www.lessonsoffailure.com/software/googles-go-not-getting-us-anywhere-part-2/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2</a></li>
<li><a href='http://www.lessonsoffailure.com/companies/data-cloud-cloud-9-plan-9/' rel='bookmark' title='Permanent Link: Data In The Cloud:  Cloud 9 or Plan 9?'>Data In The Cloud:  Cloud 9 or Plan 9?</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/google-go-not-getting-us-anywhere/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1</a></li>
<li><a href='http://www.lessonsoffailure.com/software/googles-go-not-getting-us-anywhere-part-2/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2</a></li>
<li><a href='http://www.lessonsoffailure.com/companies/data-cloud-cloud-9-plan-9/' rel='bookmark' title='Permanent Link: Data In The Cloud:  Cloud 9 or Plan 9?'>Data In The Cloud:  Cloud 9 or Plan 9?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Fhow-i-learned-to-love-new-evil-empire-oracle%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Fhow-i-learned-to-love-new-evil-empire-oracle%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>There&#8217;s a wide sense of lament since Oracle has taken over Sun and their intellectual property, including MySQL, Java, Solaris and their hardware sales business.  I&#8217;d say the average observer of this process might use the terms &#8220;slow moving train wreck&#8221;.  I doubt they are far off on this one.</p>
<p>You know what?  <strong>I think Oracle taking over Sun and acting stupid is actually a GOOD THING.</strong></p>
<p>No, really I do.  Let me explain.</p>
<p>Sun has a long history of innovation with Java.  They also have a <a href="http://www.forbes.com/2009/04/06/sun-microsystems-enterprise-technology-enterprise-tech-sun.html">long history of missteps</a> (take your pick, but I personally like the layoffs that happened biannually but basically culled the best folks who took packages to get out of the toxic environment)  and flat out screw ups (Hello?  Selling off your $1B/year professional services business because you&#8217;re not a &#8220;software company&#8221;?  Wish I had those kind of problems).  I have a number of personal friends who worked there (mostly past tense, but there are still a few stragglers left) and I don&#8217;t wish their employer to crater.  No, not at all.</p>
<p>So why is Oracle&#8217;s behavior regarding the <a href="http://blogs.adobe.com/open/2010/08/oracle-closed-minds-and-open-source.html">death of Open Solaris</a> or <a href="http://tirania.org/blog/archive/2010/Aug-13.html">suing the crap out of Google for the use of Java in Android</a> a good thing?  Easy:  <strong>We now have an opportunity to spur the development world into action.</strong></p>
<h3><strong>The Empire Formerly Known As Evil<br />
</strong></h3>
<p>Flashback to 1995:  Microsoft (the former and still ranking Evil Empire) was king of the developer world.  Open source was a twinkle in the eyes of a few idealists.  Developers paid handsomely to <img class="alignright size-full wp-image-762" style="margin: 5px;" title="Attack of the Clippy Zombies" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/08/java_battle.jpg" alt="Attack of the Clippy Zombies" width="259" height="194" />buy into the Visual Studio paradigm.  Or they bought from a competitor (Borland).  C++ and C were the de rigeur choices of language at the time.  Enter Java and the entire development world was turned upside down.  No one saw Sun as the disruptive innovator at the time.</p>
<p>Of course, other factors played into it over the years:  the rise of the internet, the Dot Com boom and server sales tied into Java usage, the rise of open source and the overwhelming support from the community regarding Java, driving huge amounts of frameworks still in use today.  But there was always a motive:  <strong>fight the evil empire</strong>.  We fight them because the evil empire doesn&#8217;t &#8220;get it&#8221;.  Remember Microsoft&#8217;s internet strategy in the late 90s? (From a blog post regarding the <a href="http://www.itwriting.com/blog/363-mark-anders-remembers-blackbird-and-other-microsoft-hits-and-misses.html">missteps of Microsoft,</a> particularly Project Blackbird)</p>
<blockquote><p><em>Adobe’s Mark Anders about his time at Microsoft. Anders is well known as  one of the inventors of ASP.NET, along with his colleague Scott  Guthrie. However, when he joined Microsoft in the mid nineties he worked  initially on <strong>the project codenamed Blackbird.</strong> <strong>This was a kind of  Windows-specific internet</strong>, and was surfaced to some extent as the MSN  client in Windows 95. Although the World Wide Web was already beginning  to take off, Blackbird’s advocates within Microsoft considered that its  superior layout capabilities would ensure its success versus HTTP-based  web browsing. <strong>It was also a way to keep users hooked on Windows.</strong> Anders  told me that he never believed in Blackbird and argued that Microsoft  should support HTTP instead. According to him, the executives at the  time did not want to listen at first, but Blackbird had severe  performance problems</em></p></blockquote>
<p><img class="alignleft size-medium wp-image-763" style="margin: 5px;" title="Darth Ellison and the Empire" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/09/oracle_evil_empire-300x300.png" alt="Darth Ellison and the Empire" width="300" height="300" />Stuff like this always pisses off the right people<em>. </em>Microsoft didn&#8217;t get it, and people got mad.  Microsoft&#8217;s stupidity in thinking they could control the internet spurred lots of innovation from other companies to make the *real* internet even more valuable.  Eventually Microsoft capitulated and followed suit with everyone else.  <em><br />
</em></p>
<p><em> And that&#8217;s precisely what I&#8217;m counting on here for the Oracle debacle. </em>Because Oracle isn&#8217;t getting it either (at least for developers).<em> </em><a href="http://www.tbray.org/ongoing/When/201x/2010/08/31/A-Story-of-O">Tim Bray&#8217;s article today</a> has a great quote from the Empire itself:</p>
<blockquote>
<blockquote><p><em>“You don’t get it.  The central relationship between Oracle and its customers is a </em><em>business relationship, between an Oracle business expert and a customer business leader.  The issues that come up in their conversations are business issues.</em></p>
<p><em>“The concerns of developers are just not material at the level of that conversation; in fact, they’re apt to be dangerous distractions. <span style="text-decoration: underline;">‘Developer mindshare’&#8230; what’s that, and why would Oracle care?</span>”</em></p></blockquote>
</blockquote>
<h3>Let&#8217;s Shake Things Up<em><br />
</em></h3>
<p>Java not good enough for Android?  Fine, let&#8217;s make a new language that finally innovates on the mobile device, unlocking us from the collective disasters of Objective C, mobile Windows, and bloated Java ME.  If Java 7 is going to die at the hands of Oracle, maybe that will motivate some development group to actively fork it in a meaningful way.  Or finally develop the successor language to Java that revolutionizes the software community the way Java did in the mid-90s.</p>
<p>This complacency about Java, MySQL, and the state of Sun products has got to stop.  It&#8217;s time to shake things up.  And the last time that happened, exciting times were had by all.</p>
<p>I can&#8217;t wait.</p>


<p>Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/google-go-not-getting-us-anywhere/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 1</a></li>
<li><a href='http://www.lessonsoffailure.com/software/googles-go-not-getting-us-anywhere-part-2/' rel='bookmark' title='Permanent Link: Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2'>Google&#8217;s Go Isn&#8217;t Getting Us Anywhere, Part 2</a></li>
<li><a href='http://www.lessonsoffailure.com/companies/data-cloud-cloud-9-plan-9/' rel='bookmark' title='Permanent Link: Data In The Cloud:  Cloud 9 or Plan 9?'>Data In The Cloud:  Cloud 9 or Plan 9?</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/xCMcDEWh4qo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/companies/how-i-learned-to-love-new-evil-empire-oracle/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/companies/how-i-learned-to-love-new-evil-empire-oracle/</feedburner:origLink></item>
		<item>
		<title>Why Does Simplicity Escape Programmers?</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/-qpeKUomnzQ/</link>
		<comments>http://www.lessonsoffailure.com/developers/why-does-simplicity-escape-programmers/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:26:43 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Occam's Razor]]></category>
		<category><![CDATA[programmer beliefs]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=712</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fwhy-does-simplicity-escape-programmers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fwhy-does-simplicity-escape-programmers%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>An experiment, posted on LessWrong.com that led to a further diatribe on rationality and rational thinking traps got me thinking too.  Here&#8217;s the problem:</p>
<blockquote><p><em>Once upon a time, there was an instructor who taught physics  students.  One day she called them into her class, and showed them a wide, square plate of metal, next to a hot radiator.  The students each put their hand on the plate, and found the side next to the radiator cool, and the distant side warm.  And the instructor said, </em><em>Why  do you think this happens? Some students guessed convection of air currents, and others guessed strange metals in the  plate.  They devised many creative explanations, none stooping so low as  to say &#8220;I don&#8217;t know&#8221; or &#8220;<a href="http://lesswrong.com/lw/if/your_strength_as_a_rationalist/">This  seems impossible.</a>&#8220;</em></p></blockquote>
<p><a href="http://www.lessonsoffailure.com/developers/why-does-simplicity-escape-programmers/" class="more-link">Read more on Why Does Simplicity Escape Programmers?&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fwhy-does-simplicity-escape-programmers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fwhy-does-simplicity-escape-programmers%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>An experiment, posted on LessWrong.com that led to a further diatribe on rationality and rational thinking traps got me thinking too.  Here&#8217;s the problem:</p>
<blockquote><p><em>Once upon a time, there was an instructor who taught physics  students.  One day she called them into her class, and showed them a wide, square plate of metal, next to a hot radiator.  The students each put their hand on the plate, and found the side next to the radiator cool, and the distant side warm.  And the instructor said, </em><em>Why  do you think this happens? Some students guessed convection of air currents, and others guessed strange metals in the  plate.  They devised many creative explanations, none stooping so low as  to say &#8220;I don&#8217;t know&#8221; or &#8220;<a href="http://lesswrong.com/lw/if/your_strength_as_a_rationalist/">This  seems impossible.</a>&#8220;</em></p>
<p><em>And the answer was that <span style="text-decoration: underline;">before the students entered the room, the instructor turned the plate around.</span></em></p></blockquote>
<p>This is <a href="http://en.wikipedia.org/wiki/Occam%27s_razor">Occam&#8217;s Razor</a> at its finest.  But these unwitting physics students are no different than the average programmer out there when confronted with a bug report.  Take this example of a guy who had a <a href="http://blog.ksplice.com/2010/06/attack-of-the-cosmic-rays/">strange logic error in a core Linux package</a>:</p>
<blockquote><p><em>A few weeks ago, though, I encountered some bizarre behavior on my  desktop, that honestly just didn’t make sense. I spent about half an  hour digging to discover what had gone wrong, and eventually determined,  conclusively, that my problem was a single undetected flipped bit in  RAM.</em></p></blockquote>
<p>This guy admirably spent a long, painful session tracking his error to a faulty location in RAM.  But his most likely rationale for why?</p>
<blockquote><p><em>For me, bitflips due to cosmic rays are one of those problems I always  assumed happen to “other people”. I also assumed that even if I saw  random cosmic-ray bitflips, my computer would probably just crash, and  I’d never really be able to tell the difference from some random kernel  bug.</em></p></blockquote>
<p>Cosmic rays!  Now, the possibility <em>exists</em>, that&#8217;s true.  But is it the most <em>likely </em>explanation?  <em>No, not by a long shot.</em> More likely:  faulty RAM due to manufacturing defects.  <a href="http://www.computing.net/answers/hardware/ram-failure/51439.html">More</a> <a href="http://www.techspot.com/vb/topic55822.html">RAM</a> <a href="http://forums.techpowerup.com/showthread.php?p=1613644">failures</a> are documented as problems than cosmic ray defects.</p>
<p>Why do we have some <a href="http://www.iep.utm.edu/fallacy/#Far-Fetched%20Hypothesis">perverse belief that all our problems are exotic, unusual and outside of normal</a>?</p>
<p>When you discover a bug in your code, is your response:</p>
<ol>
<li>Hmmm, I wonder what simple thing I did wrong here?</li>
<li>I wonder if there&#8217;s a kernel bug in Linux causing that?</li>
</ol>
<p><a href="http://www.lessonsoffailure.com/developers/simplicity-goal/">Simplicity isn&#8217;t just a goal in optimization</a>, but in finding the source of bugs too.  Never let the truth interfere with a good story, I always say.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/-qpeKUomnzQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/developers/why-does-simplicity-escape-programmers/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/developers/why-does-simplicity-escape-programmers/</feedburner:origLink></item>
		<item>
		<title>How to Avoid Being the Asshole Architect</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/RwtiP5YR3Yc/</link>
		<comments>http://www.lessonsoffailure.com/developers/avoid-asshole-architect/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 14:00:17 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[architect]]></category>
		<category><![CDATA[asshole driven development]]></category>
		<category><![CDATA[ivory tower]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=722</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Favoid-asshole-architect%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Favoid-asshole-architect%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Recently, I was the happy recipient of some very condescending “advice” from the architecture group of a client.  The tone, quality and delivery of the information completely overwhelmed the actual message (some of which was actually relevant, and some was off in left field).  This pleasant experience reminding me why the term “software architect” has come to be synonymous in some circles with “arrogant jerk who forgot what it’s like to code on a real project”.</p>
<p><a href="http://www.lessonsoffailure.com/developers/avoid-asshole-architect/" class="more-link">Read more on How to Avoid Being the Asshole Architect&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/habit-7-principles-important-results/' rel='bookmark' title='Permanent Link: Habit 7: Principles Are More Important Than Results'>Habit 7: Principles Are More Important Than Results</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/habit-7-principles-important-results/' rel='bookmark' title='Permanent Link: Habit 7: Principles Are More Important Than Results'>Habit 7: Principles Are More Important Than Results</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Favoid-asshole-architect%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Favoid-asshole-architect%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Recently, I was the happy recipient of some very condescending “advice” from the architecture group of a client.  The tone, quality and delivery of the information completely overwhelmed the actual message (some of which was actually relevant, and some was off in left field).  This pleasant experience reminding me why the term “software architect” has come to be synonymous in some circles with “arrogant jerk who forgot what it’s like to code on a real project”.</p>
<p><img class="alignleft size-thumbnail wp-image-728" style="margin: 5px;" title="Someone's having a case of the Mondays" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/08/BossYellingAtMe-150x150.jpg" alt="Someone's having a case of the Mondays" width="150" height="150" />I realized that I’ve had that exact same attitude at times and it just didn’t pay off at all.  My message was probably lost in the same manner I discarded this guy&#8217;s advice in favor of sticking it to The Man and doing whatever I was going to do anyway.</p>
<p>All of this is counterproductive in any development project.  Reflecting on the situation a bit more, I realized that there are a handful of key points that all software architects ought to remember.  Dispelling the “Ivory Tower” mentality can’t be anything but positive for everyone involved.  With that in mind, I bring you the <strong></strong></p>
<h2><span style="text-decoration: underline;"><strong>Five Minute Guide to Avoid Being the Asshole Architect</strong></span> (FMGTABAA):</h2>
<h2>1)  Eat your own dog food</h2>
<p>Nothing screams “<a href="http://www.lessonsoffailure.com/software/habit-7-principles-important-results/">Ivory Tower</a>” like handing down some code you cobbled together to a group of developers to “figure it all out”.  If you write a library to perform common validations, write up a standard test page and post it for all to use.  Consider this your uber-test case.  Or better yet, write an application that uses that same library and see how it works out.  Find out the pain points your consumers will actually feel by <em>becoming one of them</em>.  Anyone who hands you code they just put together in a manner they thought “would be useful” shouldn’t be trusted.</p>
<h2>2)  Standards apply to you too</h2>
<p>It’s fun (well, maybe to some people) to put together standards documents that lay out the coding conventions, code organization, source code nomenclature, build structures, and so on.  But to publish those standards and fail to hold yourself to them is the highest form of hypocrisy imaginable.  If you can’t follow a standard, why would you expect anyone else to follow it too?</p>
<p>By applying the standards to your work, you’re also eating your own dog food in another sense.  You see what will be painful for others.</p>
<h2>3)  Communicate like you are a Teacher, not a Preacher</h2>
<p>Architects are supposed to exist as a font of knowledge and experience.  <a href="http://www.lessonsoffailure.com/software/habit-4-never-share-information/">Failing to share that information</a> is pretty much against <img class="alignright size-thumbnail wp-image-729" style="margin: 5px;" title="Son, you're gonna burn for using tabs instead of spaces..." src="http://www.lessonsoffailure.com/wp-content/uploads/2010/08/preacher-150x150.jpg" alt="Son, you're gonna burn for using tabs instead of spaces..." width="150" height="150" />your core job description.  But how you communicate that experience is just as important as the information itself.  Think of your best teachers in school—did they ever strut at the front of the classroom and tell you how damned smart they were?  Doubtful.  They found ways to express their knowledge that encouraged your learning and questioning.</p>
<p>That condescending tone I received on the architect’s email was the ultimate turn off.  Whatever valid information was being delivered in the message was completely lost because there was no mutual respect.</p>
<p>Power politics kills development projects quicker than baby rattlesnake poison will take out your dog.</p>
<h2>4)  Lead by example in Documentation</h2>
<p>What’s the Number One complaint about open source projects?  Lack of, or poorly written documentation.  Why is that?  Documentation isn’t exactly the Crystal Meth of programming.  More like Sominex.  No one likes doing it.  Especially those that are good at writing code.</p>
<p>Instead of whipping development teams saying, “<em>You need to produce better documentation</em>”, give them a concrete example of <em>your</em> work.  That also helps with point #3 (Communication), as well as demonstrating point #2 (Standards Apply to You) and point #1 (Eat Your Dog Food).  Push development teams to achieve the standard set by your team for quality.</p>
<h2>5)  Command from the trenches, not the Ivory Tower</h2>
<p>If one idea generated the majority of contempt for software architects, I think this was it.  Somewhere along the way, the notion of architecture outside of mainstream development took hold and the notion of the Architecture Group was born.</p>
<p>Not once, in any company I’ve ever worked with or for, did this idea bear positive fruit for the development teams involved.  Instead, these segregated groups have generated one or more of the following:</p>
<ul>
<li>Contempt for the architecture      because the developers had no say in it</li>
<li>Rejection of the framework      because it was impractical to apply to the project at hand</li>
<li>Blatant disregard for the      standards set by architects because the architects did not have to adhere      to business needs and company deadlines as a result of the delays      introduced by their work</li>
</ul>
<p>Architects should be a member of the platoon, never a visiting dignitary to the army base.  Teams respect the opinion of someone who lives their daily reality side-by-side with them, not someone who hands them the Ten Commandments and walks back to their posh tent.</p>
<h2>6)  Throwing your prototype/framework/design/UML documentation into the hands of the unwashed masses is not the end of your involvement</h2>
<p><img class="size-thumbnail wp-image-730 alignleft" style="margin: 5px;" title="Throw it over the wall!" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/08/wall_1-150x150.jpg" alt="Throw it over the wall!" width="150" height="150" />No sane building architect would throw their blueprints over to the foreman and expect it to be built in their vision.  Related to point #5, architecture teams that believe their involvement is limited to the design phase don’t really understand what it means to be architects.  When a building is being built, the architect is on site during the majority of the project, overseeing the effort at a high level, ensuring that little changes are not impacting the big picture.  All the while, the architect assists in solving minor problems that arise from his or her design from a practical standpoint.</p>
<p>In short, the architect’s involvement is <em>continuous</em>, not <em>discrete</em>.</p>
<h2>7)  Attitude may work in the military for commanding respect, but it rarely succeeds in IT</h2>
<p>Finally, acting superior, like a know-it-all, or someone who is above listening to others, is just asking to be ignored.  Don’t do it.  Ever.  Not even on a bad hair day.</p>
<p>Friends don’t let friends act like <a href="http://www.scottberkun.com/blog/2007/asshole-driven-development/">asshole architects</a>.  The respect you save may be your own.</p>


<p>Related posts:<ol><li><a href='http://www.lessonsoffailure.com/software/habit-7-principles-important-results/' rel='bookmark' title='Permanent Link: Habit 7: Principles Are More Important Than Results'>Habit 7: Principles Are More Important Than Results</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/RwtiP5YR3Yc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/developers/avoid-asshole-architect/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/developers/avoid-asshole-architect/</feedburner:origLink></item>
		<item>
		<title>The Problem With ‘Above Average Programmers’</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/82vt2gDFT9w/</link>
		<comments>http://www.lessonsoffailure.com/developers/problem-above-average-programmers/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 13:18:24 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[beginners mind]]></category>
		<category><![CDATA[expert programmers]]></category>
		<category><![CDATA[expert trap]]></category>
		<category><![CDATA[illusory superiority]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=703</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fproblem-above-average-programmers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fproblem-above-average-programmers%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Quick! <em> Answer the following question without thinking about it:</em></p>
<p><strong>How would you rate your programming skills?  (Below Average, Average, or Above Average)</strong></p>
<p>Based on <a href="http://sivers.org/below-average">psychological studies across many different groups</a>, about 90% of all programmers will answer &#8220;Above Average&#8221;.</p>
<p><a href="http://www.lessonsoffailure.com/developers/problem-above-average-programmers/" class="more-link">Read more on The Problem With &#8216;Above Average Programmers&#8217;&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fproblem-above-average-programmers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fproblem-above-average-programmers%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Quick! <em> Answer the following question without thinking about it:</em></p>
<p><strong>How would you rate your programming skills?  (Below Average, Average, or Above Average)</strong></p>
<p>Based on <a href="http://sivers.org/below-average">psychological studies across many different groups</a>, about 90% of all programmers will answer &#8220;Above Average&#8221;.</p>
<p>Of course, that can&#8217;t possible be true.  In a group of 100 people, 50 are above average, 50 are below average.  This effect is known as <a href="http://en.wikipedia.org/wiki/Illusory_superiority">Illusory Superiority</a>.  It&#8217;s been documented in many domains and even if you&#8217;re aware of it, <a href="http://everything2.com/title/90%2525+of+people+think+they+are+of+above+average+intelligence">you&#8217;ll probably still answer the question above as &#8220;Above Average&#8221;</a>.</p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/07/expert.jpg"><img class="alignleft size-medium wp-image-717" style="margin: 5px;" title="expert" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/07/expert-300x158.jpg" alt="" width="300" height="158" /></a>For even more fun, try asking that question to every programmer you know.  Don&#8217;t ask them in a group, ask them one-on-one to get more &#8216;honest&#8217; answers.  You&#8217;ll get similar results, even from people who you know can&#8217;t program their way out of a wet paper bag (this is the <a href="http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect">Dunning-Kruger effect</a>, but it&#8217;s related).  It&#8217;s an epidemic in our profession.</p>
<p>Now, let&#8217;s suppose for a second that you&#8217;re right&#8211;you <em>are </em>actually above average.  You are <em>da man</em>.  A rock star.  God like capacities amongst mere mortals.  Keyboards bow in reverence to you as you approach.  Trumpets sound on high when you commit on GitHub.</p>
<p>If you&#8217;re above average, then chances are you&#8217;re an expert at what you do.  Calling yourself an expert sounds quite compelling&#8211;you get respect, deference, and prestige by being one.</p>
<p>Being an expert means you know it all about your subject.<em> Unfortunately, it also means you&#8217;re going to get lazy</em>.  It means you&#8217;re going to eventually rest on your laurels and sit around thinking you&#8217;re better than everyone else instead of actually working to get there.  Your expertise will become a liability because you stop trying to learn.  Maybe not today, but soon enough.</p>
<p>Instead, why not consider the more likely possibility?  <strong>You&#8217;re average, or heaven forbid, <em>below average.</em></strong> Aside from the personal stigma you might suffer here, think for a second about the real benefits of doing this:</p>
<ul>
<li>By assuming you&#8217;re not at the top of the pack, you now have incentive to get there</li>
<li>By assuming you&#8217;re not the smartest person in the group, you now have the opportunity to learn something</li>
<li>By assuming you&#8217;re not the best at what you do, you&#8217;re going to work harder to improve yourself</li>
</ul>
<p>Perhaps you&#8217;ve heard of <a href="http://en.wikipedia.org/wiki/Shoshin">beginner&#8217;s mind</a>?  Summed up by a zen master in classic koan-brevity:</p>
<blockquote><p><em>In the beginner&#8217;s mind  there are many possibilities, in the expert&#8217;s mind there are few</em>.</p></blockquote>
<p>The trap of calling yourself &#8216;expert&#8217; at software development means that you pigeonhole yourself into some language (Java, Ruby, PHP), some industry (medical devices, social networking, games), or some specialty (embedded programming, enterprise software).  Once you establish that expertise, fear of failure arises when you consider going outside that comfort sphere.  With your golden hammer of experience, everything appears to you a nail.  You stop thinking about screwdrivers and all other possible relevant tools because they&#8217;re no longer inside your &#8216;expertise&#8217;.</p>
<p>This is why starting out in software you wonder why &#8220;experienced programmers&#8221; can&#8217;t get X, when you just learned X in a matter of days.  X could be anything:  closures, object-oriented programming, Ruby on Rails framework, Haskell programming.  It doesn&#8217;t matter in the end, the expert&#8217;s mind is cluttered with old knowledge.  The beginner&#8217;s mind is open, free of hindrances.</p>
<p><a href="http://www.lessonsoffailure.com/developers/habits-kill-career/">It&#8217;s harder to learn when you&#8217;re an expert</a>.  And this is why being the &#8216;expert programmer&#8217; is dangerous.</p>
<p>So what&#8217;s the number one thing you can do to be the best programmer out there?  <em><strong>Start by considering yourself below average.</strong></em> Step out of your comfort zone.  <a href="http://sites.google.com/site/steveyegge2/being-the-averagest">Be the averagest</a>.</p>
<p>A master never stops learning, and neither should you.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/82vt2gDFT9w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/developers/problem-above-average-programmers/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/developers/problem-above-average-programmers/</feedburner:origLink></item>
		<item>
		<title>The Outsourcing Low Cost Lie</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/uCDMtrl20Cc/</link>
		<comments>http://www.lessonsoffailure.com/companies/outsourcing-cost-lie/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:00:44 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Companies]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[project costs]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=662</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Foutsourcing-cost-lie%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Foutsourcing-cost-lie%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>If you walked into a store and asked to have someone make you a suit and you agreed on a price of $100 and week&#8217;s sewing time, a week later you&#8217;d expect to walk back in and be trying on your new suit after parting with a $100 bill (at least in America).</p>
<p><a href="http://www.lessonsoffailure.com/companies/outsourcing-cost-lie/" class="more-link">Read more on The Outsourcing Low Cost Lie&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Foutsourcing-cost-lie%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Foutsourcing-cost-lie%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>If you walked into a store and asked to have someone make you a suit and you agreed on a price of $100 and week&#8217;s sewing time, a week later you&#8217;d expect to walk back in and be trying on your new suit after parting with a $100 bill (at least in America).</p>
<p>What if you went into a different store, after that initial price quote and they offered to make it for $25?  You&#8217;d think, <em>&#8220;Great!  One fourth the cost of that previous guy!  I&#8217;ll take it instead.&#8221;<br />
</em></p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/06/custom-tailored-suit.jpg"><img class="alignleft size-full wp-image-687" style="margin: 5px;" title="custom-tailored-suit" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/06/custom-tailored-suit.jpg" alt="" width="200" height="200" /></a>How would you feel if a week later you came back and they said it would be another week and $50 instead?  Think you&#8217;d be mad?</p>
<p>How much madder would you be after TWO weeks, and now the shop owner is telling your it will be $75 and one more week, but this time he&#8217;d definitely get it done.  And after you get it, you notice that the pocket is sewed on slightly funny and the trousers don&#8217;t fit quite the way you&#8217;d expect.  Would you be steaming mad now?</p>
<p>Yeah, I would too.</p>
<p>This is exactly what happens with outsourcing projects in most software companies.  If you ask companies why they do it, invariably they answer that outsourcing will save money AND time over local resources.  <strong>That&#8217;s an unbelievably huge lie.</strong> It&#8217;s time to tear that apart.</p>
<p>Forgetting <a href="http://www.lessonsoffailure.com/developers/real-reason-outsourcing-fails/">the cultural problems you&#8217;re going to encounter</a> with outsourcing for a minute, let&#8217;s say you have a project scoped by an outsourcing firm.  They bill their engineers to you at $25/hour.  Local contractors run you $100/hour, so you&#8217;re thinking to yourself, <em>&#8220;Wow, 75% cost savings!  Sign this outsource guy up!&#8221;</em></p>
<p>Whoa, not so fast there, cowboy.  Let&#8217;s throw out some project statistics from the <a href="http://www.aberdeen.com/">Aberdeen Group</a>.  Unsurprisingly, reducing IT costs is the primary driver behind             outsourcing for 82% of companies in the U.S.  But, as Aberdeen continues,</p>
<ul>
<li>Nearly 50% of outsourced projects fail outright, or fail to  meet expectations</li>
<li>76% of companies said that vendor                 management effort and costs were much higher than  expected</li>
<li>30% reported ongoing issues with                 outsourcer management processes (e.g., inadequate  governance and conflict resolution                 procedures)</li>
<li>51% reported that outsourcer was                 not performing to expectations</li>
</ul>
<p>In the end, the average cost savings for projects was a mere 26%.</p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/06/roulette_lg1.jpg"><img class="size-thumbnail wp-image-689 alignright" style="margin: 5px;" title="roulette_lg" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/06/roulette_lg1-150x150.jpg" alt="" width="150" height="150" /></a>That might sound like a reasonable number, but consider that first point more closely:  <em><strong>Nearly 50% of all outsourced projects fail outright or fail to meet expectations in the first place.</strong></em> Essentially, you&#8217;re taking the same gamble as red vs. black in Roulette about your project&#8217;s success right off the bat, and only then if you pass that hurdle, you&#8217;ll get on average, 25% savings over having it done locally.</p>
<p><em>So wait a second, where did my 75% cost savings disappear to? </em> Let&#8217;s do the math:</p>
<p><strong>Original project cost (outsourcer estimate):</strong> $10,000. (400 engineer-hours @ $25/hour)</p>
<p><strong>Actual project costs:</strong> $30,000 (50% overrun on time and 100% overrun on people&#8211;longer than expected, 2x as many engineers as originally scoped, which is another finding of Aberdeen&#8217;s and other companies&#8217; experience, so 1,200 engineer-hours @ $25/hour)</p>
<p><strong>Unexpected onshore management costs:</strong> $6,000 (about 20% of project cost, from spending more time managing expectations, requirements, design reviews, documentation, etc)</p>
<p><strong>Total actual project cost: </strong> ($30,000 + $6,000) =  $36,000.</p>
<p><strong>Estimated project cost, if done locally: </strong> $40,000 (400 hours @ $100/hour)</p>
<p><strong>Expected cost savings:</strong> $30,000</p>
<p><strong>Actual cost savings:</strong> $4,000  (($40,000-$36,000)/$36,000) = 11% (for the clients I&#8217;ve worked with)</p>
<p>These numbers have been vetted by two recent clients of mine (due to NDA restrictions, I can&#8217;t mention either by name but one is a large entertainment conglomerate based in NYC, the other is a worldwide financial clearinghouse firm).  Both have substantial amounts of outsourced projects and both report little actual cost savings shown by front-line managers, huge management issues, and non-trivial project failure rates.  And yet, both continue to outsource because <em>upper management believes they&#8217;re saving a lot of money through outsourcing</em>.</p>
<p><strong>Think about this for a minute:</strong> If you have 4 projects you outsource (let&#8217;s assume they are all the same:  400 hours each, and we&#8217;re using an outsource firm at $25/hour), their estimated cost of $10,000 each, and their actual cost $36,000, here&#8217;s what you get:   Your budget was for $160,000 and you believed you&#8217;d have $120,000 to spend on other projects (foolishly).  Here&#8217;s the harsh reality:</p>
<ul>
<li><strong>2 of your 4 projects have high probability of completely failing</strong> (let&#8217;s assume that they didn&#8217;t expend the same cost above, but perhaps only half before they got canceled, so say you got halfway through each and canceled them, burning $36,000 total between them)</li>
<li>Of the remaining two, you get what you asked for but at a cost of $72,000 instead of the promised $20,000.</li>
<li>Total budget spent:  $108,000.  Expected budget spend:  $40,000.  (<strong>Difference:  +270% over expected costs</strong>)</li>
<li>Actual remaining budget for other costs:  $52,000.  Expected remaining budget:  $120,000.  (<strong>Difference:  -43%</strong> less than expected available funds)</li>
</ul>
<p>Assuming you budgeted all your expected remaining project cash on other things, congratulations, you&#8217;re now over budget!  Welcome to every CTO and CIO&#8217;s nightmare.  And none of this addresses the other problems:  communication lags of several days to answer questions, lack of face-to-face interaction to solve problems quickly, miscommunication over simple requirements that you consider obvious but were missed in the implementation, and so on.  <em>Are you really saving money here?</em></p>
<p><em>Let&#8217;s call a spade a spade:  <strong>Outsourcing just doesn&#8217;t save you the kind of money you think it will.</strong></em></p>
<p><em>UPDATE:  Thanks for all the comments about my crappy math.  Yes, it&#8217;s fixed now.<strong><br />
</strong></em></p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/uCDMtrl20Cc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/companies/outsourcing-cost-lie/feed/</wfw:commentRss>
		<slash:comments>73</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/companies/outsourcing-cost-lie/</feedburner:origLink></item>
		<item>
		<title>Walking Into The Wrong Bathroom:  Lack of Affordances</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/MSPyWnbBrns/</link>
		<comments>http://www.lessonsoffailure.com/software/user-interface-affordances/#comments</comments>
		<pubDate>Wed, 19 May 2010 14:00:15 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[affordances]]></category>
		<category><![CDATA[constraints]]></category>
		<category><![CDATA[Jakob Nielsen]]></category>
		<category><![CDATA[user interfaces]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=675</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fuser-interface-affordances%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fuser-interface-affordances%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Jakob Nielsen recently published his report on <a href="http://www.useit.com/alertbox/ipad.html">iPad’s usability and application interface consistency</a>.  To no one&#8217;s surprise, he discovered a few issues.</p>
<p>What was the main problem Jakob uncovered?  Many iPad applications aren&#8217;t obvious to use:  non standard controls, confusing graphics, and counter-intuitive metaphors.  In psychology parlance, it&#8217;s because these apps lack <a href="http://www.jnd.org/dn.mss/affordance_conv.html"><em>constraints </em>and <em>affordances</em></a>.</p>
<p><a href="http://www.lessonsoffailure.com/software/user-interface-affordances/" class="more-link">Read more on Walking Into The Wrong Bathroom:  Lack of Affordances&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fuser-interface-affordances%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fuser-interface-affordances%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Jakob Nielsen recently published his report on <a href="http://www.useit.com/alertbox/ipad.html">iPad’s usability and application interface consistency</a>.  To no one&#8217;s surprise, he discovered a few issues.</p>
<p>What was the main problem Jakob uncovered?  Many iPad applications aren&#8217;t obvious to use:  non standard controls, confusing graphics, and counter-intuitive metaphors.  In psychology parlance, it&#8217;s because these apps lack <a href="http://www.jnd.org/dn.mss/affordance_conv.html"><em>constraints </em>and <em>affordances</em></a>.</p>
<p>Constraints and affordances are nothing new, even in the real world.  You encounter them every day, but you&#8217;re only barely aware of them most of the time.  Joseph Hallinan has a great example in “<em>Why We Make Mistakes</em>”:</p>
<blockquote><p><em>&#8220;One way to reduce errors is by introducing constraints.  Constraints are essentially simple mental aids that keep us on the right track by limiting our alternatives.  Try repeating the Star Spangled Banner if you&#8217;re American without singing it.  How much can you remember?  Now let yourself sing it.  I&#8217;ll bet you get most, if not all, of the song.  That&#8217;s a constraint against forgetting the song because that&#8217;s the only way you&#8217;ve ever learned it.</em></p>
<p><em>Another way to reduce errors is to use affordances.  If constraints tell us what we can&#8217;t do, affordances indicate what something can do.  Affordances may appear in many forms:  texture, shape, or size may indicate usage.  For example, a ball&#8217;s shape affords bouncing or throwing.  A knob affords turning.  Slots afford the insertion of things.  When we encounter some basic object, affordances help us answer basic questions like, &#8220;How does this work?&#8221; and &#8220;What is this used for&#8221;</em></p></blockquote>
<p>An everyday affordance you&#8217;re familiar with is the pull-handle on a door.  Just by looking at it, you can immediately tell that you’re supposed to grasp on to it and pull the door open.  The opposite affordance would be the push-pad on a door, where there’s nothing to grab, only a metal surface against which to exert force as you pass through it.  Sometimes constraints are added on top of this, such as “Exit” signs on the door you use to go out as well.  These are all the clues we get on how to use a door, but you&#8217;re rarely thinking to yourself, &#8220;Oh, there&#8217;s a PULL handle, I should PULL on it.&#8221;  Affordances are subtle, important cues on how to interact with things.</p>
<p>Those cues can go awry.  For example, building architects foul it up occasionally by putting pull handles on the push side of doors.  Or put the “Exit” sign on the “Enter” side with an arrow pointing to the other door.  These confuse us, make us hesitate, and often force us to enjoy the embarrassment of pulling on the door you’re supposed to push (a personal favorite of mine).  Sometimes they’re done on purpose, like at a famous bar I went to in college that has two doors side by side each a large arrow pointing to the other door and a gender.</p>
<div id="attachment_676" class="wp-caption alignright" style="width: 310px"><a href="http://www.flickr.com/photos/ldandersen/482983458/"><img class="size-medium wp-image-676" title="Restroom Madness" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/darkhorse-300x225.jpg" alt="Courtesy of ldanderson, Flickr" width="300" height="225" /></a><p class="wp-caption-text">Um, which door?</p></div>
<p>They are intentionally mislabeled so women walk into the men’s restroom and vice-versa, much to the delight of the inebriated patrons.  While that sort of bad affordance was humorous in college, it&#8217;s patently frustrating to encounter when I&#8217;m struggling with a new app on the iPhone.</p>
<p>This lack of affordances is why the iPad and iPhone can be so bloody hard to figure out sometimes.  We have no hints&#8211;no obvious clues what to do with things mostly because the metaphors are new and the controls are often non-standard.  Consider this interface below, heavily laden with nothing but custom graphics in the UI.  Can you tell which items allow you to interact with them, and which are merely display artifacts?</p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/BlackjackWeird.png"><img class="alignleft size-medium wp-image-679" title="BlackjackWeird" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/BlackjackWeird-300x204.png" alt="" width="300" height="204" /></a></p>
<p>Yes, I’m confused too.  And to add to the confusion, these devices allow actions we couldn’t possibly take on the desktop, like the accelerometer.  How do you give an affordance for that?  Or the shaking action?  We aren&#8217;t used to these metaphors yet, so the affordance isn&#8217;t quite obvious.</p>
<div id="attachment_678" class="wp-caption alignleft" style="width: 310px"><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/NiceIpad.png"><img class="size-medium wp-image-678" title="NiceIpad" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/NiceIpad-300x225.png" alt="" width="300" height="225" /></a><p class="wp-caption-text">A Clear iPad Actionable UI</p></div>
<p>Contrast that with this one from the iPad, where the actions you can take are fairly clear from the interface.  (Courtesy of <a href="http://landingpad.org/">LandingPad.org</a>).  Without knowing what the app is all about, you can already tell (if you&#8217;ve used touch interfaces, particularly iPhone) what you can touch, what will likely result in an action, and what items are just eye candy.</p>
<p>There are even more great examples on that site, I encourage you to check them out.</p>
<p>User interface design is hard.  Punting to a graphic designer sounds like a good idea, but consider that the difference between adequate and excellent on a user interface isn&#8217;t subtle or small.  It&#8217;s the difference between usable and frustrating.  The difference between good and beautiful.  And maybe even the difference between viral and doomed to obscurity in the App Store&#8217;s bargain bin.  Make sure you don&#8217;t just create pretty graphics, put the time in to make a pretty AND usable UI.</p>
<p>Don&#8217;t let your users walk into the wrong gender bathroom in your applications:  use affordances to make your UI obvious and intuitive.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/MSPyWnbBrns" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/software/user-interface-affordances/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/software/user-interface-affordances/</feedburner:origLink></item>
		<item>
		<title>Secrets of Successful Consultants Revealed</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/u6lXdjOOq0U/</link>
		<comments>http://www.lessonsoffailure.com/developers/secrets-successful-consultants-revealed/#comments</comments>
		<pubDate>Wed, 05 May 2010 15:00:30 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[secrets]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=658</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fsecrets-successful-consultants-revealed%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fsecrets-successful-consultants-revealed%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>So, think you’ve got what it takes to be a consultant?  Feeling the itch because your <a href="http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/">current job isn&#8217;t motivating you like it used to</a>?</p>
<p>The independence, prospect of better money and the potential for starting your own business make this idea very seductive.  A million others have tread this path before you so you’d think it would be easy, right?</p>
<p><a href="http://www.lessonsoffailure.com/developers/secrets-successful-consultants-revealed/" class="more-link">Read more on Secrets of Successful Consultants Revealed&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fsecrets-successful-consultants-revealed%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fsecrets-successful-consultants-revealed%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>So, think you’ve got what it takes to be a consultant?  Feeling the itch because your <a href="http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/">current job isn&#8217;t motivating you like it used to</a>?</p>
<p>The independence, prospect of better money and the potential for starting your own business make this idea very seductive.  A million others have tread this path before you so you’d think it would be easy, right?</p>
<p>Nope.  Not even close.</p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/strategy-and-consulting.jpg"><img class="alignleft size-medium  wp-image-667" style="margin: 5px;" title="strategy-and-consulting" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/strategy-and-consulting-300x249.jpg" alt="" width="300" height="249" /></a>The path to success is littered with the rotting carcasses of those who went before you and failed.  Sort of like the great gold rush of 1849 to San Francisco.  If you really want to get into it, even after this stern warning, you have my pity.  This is anything but an easy path to success, wealth or fame.</p>
<p>Still not daunted? That’s a decent start.  Persistence is part of the key to success here.  So is intelligence.  And confidence.  But those things just get you in the door, past the obnoxious bouncer so-to-speak.  It&#8217;s early in the night, you have to order a drink and do karaoke before you can hit the dance floor.  In other words, there&#8217;s a lot more to it than you think.</p>
<p>Rather than cover<a href="http://www.poplarware.com/articles/start_consulting_biz"> the business aspects of consulting</a>, or even the <a href="http://www.singlefounder.com/2006/10/02/howtobootstrapaconsultingbusiness/">how to make the jump</a> article, I thought I’d share the secrets of successful consultants I&#8217;ve come in contact with over the years.  These can make or break your career as an independent contractor.  Ignore them at your own peril.</p>
<p><strong><em>Secret #1:  Your reputation is your livelihood.  Protect it like your life depends on it.</em></strong></p>
<p>Your career does actually depend on it.  People hire contractors for two reasons:  someone said they were worthwhile, or they thought you were the cheapest one available.  You get far more jobs from the first recommendation than the second, and the quality of work is higher when they pick you for your reputation rather than your rate.</p>
<p><strong><em>Secret #2:  You are always looking for a new gig.  Even when you have a current gig, keep your eyes open at all times.</em></strong></p>
<p>Unless you’re lucky enough to get two year, iron-clad contracts, you’re always keeping an eye on the end date of your current gig, trying to figure out “What’s next?”  If you get a job and think, “Oh, they’ll just keep extending me over and over”, <em>you’re not a consultant, you’re thinking like an employee.</em> You’ll be kicked out as soon as someone realizes it.  Pay attention to new opportunities coming around, and have something in your back pocket if your current contract ends or is canceled early.</p>
<p><em><strong>Secret #3:  Assume that if you’re not adding value, you’re overhead and you’ll be fired.  Constantly find ways to add value to a project.</strong><br />
</em></p>
<p>This ought to be a rule for employees in general, but sadly, there are too many companies that allow for this sort of inertia to exist in their ranks indefinitely.  Often times, this is why a company hires consultants (to get something done), so make sure you’re the person that “gets things done”.  I’m already assuming that you’re smart, now you need to deliver on it.</p>
<p><strong><em>Secret #4:  You’re never an employee at the company you contract for, no matter how long you’re there.  Maintain a certain distance.</em></strong></p>
<p>Making friends at your contract jobs is good.  Acting like you’re an employee and leaning against the water cooler, chatting with the gang mid-morning is not.  Contractors are supposed to be billing every hour they’re on site.  Managers tend to watch consultants more closely than employees because they pay top dollar for good contractors and are paranoid about wasting their money.  Don’t be the reason you get tossed out.</p>
<p><strong><em>Secret #5:  Network constantly.  Everyone is a potential new client.</em></strong></p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/handshake.jpg"><img class="alignright size-medium wp-image-665" style="margin: 5px;" title="handshake" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/handshake-300x199.jpg" alt="" width="300" height="199" /></a>You never know who is going to need a contractor at their company.  You never know who will be promoted to a manager or executive and suddenly be looking for that certain person with some mad skillz to come in and take over some failing project.  People end up in unexpected places, and making enemies is never a good idea.  Leave companies gracefully, never burn bridges, don’t speak badly of others, even if you have some personal problems with them.  These things always come back to haunt you at some later point, without exception.  Don’t believe me?  You won’t be the exception.  Trust me.</p>
<p>While I don’t advocate the smarmy salesman approach, handing out business cards in the restroom at the local bar, you should stay connected. Make sure you keep in touch with people.  LinkedIn is a great way to do that.  Facebook is another.  MySpace, maybe not so much.</p>
<p><strong><em>Secret #6:  Finish what you start.  Deliver what you promise.  Uphold rigorous ethical standards.<br />
</em></strong></p>
<p>The four fastest ways to end your consulting career:</p>
<ul>
<li>Fail      to finish a project you were given.</li>
<li>Leave      before your project is finished because you wanted a better, more      lucrative job.</li>
<li>Lack      the expertise you claim to have and accept a job based on that premise.</li>
<li>Do something unethical.</li>
</ul>
<p>Did I mention your reputation was everything?  Software is a small community wherever you practice it.  You’ll run into the same folks again and again.  If you make a bad impression because of those items above, you can bet they will be remembered somewhere down the line when you’re interviewing at another company, if those people already work there.</p>
<p>To confirm reputations, many managers will ask if anyone on their staff already knows this person (Yep, Secret #1 again).  A negative reputation will give the manager a reason to move on to the next candidate.  Don’t give them any ammunition.</p>
<p>You need to be cautious about finding new work while employed with another company.  You want to maintain your reputation while still networking.  It&#8217;s a tricky balance, but we&#8217;ve already established you&#8217;re smart, so this should be no problem.</p>
<p>As far as ethics goes, do I even need to talk about how <a href="http://en.wikipedia.org/wiki/Financial_crisis_of_2007%E2%80%932010">unethical behavior has screwed pretty much everyone in the world</a> in the last year?  OK, good.  Moving on.</p>
<p><strong><em>Secret #7:  Consultant is generally synonymous with expert.  Make sure you qualify.</em></strong></p>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/unprofessional.png"><img class="alignleft size-medium wp-image-666" style="margin: 5px;" title="unprofessional" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/05/unprofessional-215x300.png" alt="" width="215" height="300" /></a>You shouldn’t just start consulting right out of school or with little experience.  (<a href="http://www.accenture.com/">Accenture</a>, I’m looking at you here with your army of under trained and overpriced pretty boys and girls that you send into large companies like a virus where they try to spread all over the place without being able to tie their own shoes)  There are notable exceptions, like where your field of study was highly specialized and you acquired expertise in school along the way from your professors, internships or colleagues.  But for software development, you need a few solid projects under your belt to really be able to call yourself a serious consultant.  If I had to put a number on it, maybe no less than 5 years experience prior to consulting.  There’s no hard-and-fast rule to it, but you should actually know something, otherwise you can’t add value (Secret #3).</p>
<p><strong><em>Secret #8:  You can try to fake it before you make it, but you’ll only get so far.  Represent yourself honestly.</em></strong></p>
<p>There are folks out there that will tell you that a consultant is only 5 pages ahead of the customer in the same book.  Sometimes that’s true.  Most of the time, it’s not.  You need to know your field well enough to be the expert (Secret #7).  Not just sound like one, but really walk the walk here.</p>
<p><strong><em>Secret #9:  Consulting in a niche or a general field can be both good and bad.  Choose your specialty carefully.</em></strong></p>
<p>You may get two kinds of advice about entering consulting:</p>
<ul>
<li>Stick      with something that is popular, but crowded (like Java, C++, .NET)</li>
<li>Stick      with something that is specialized, but has less competition (e.g. Delphi, Embedded C development, etc)</li>
</ul>
<p>There are pluses and minuses in both sets and neither in my opinion really wins out.</p>
<ul>
<li>The      popular fields mean you have more work available to you, but competition      is much higher which pushes the overall rate for contractors lower in that      skill.  Java programmers are in this      exact situation today.</li>
<li>The      less popular subject areas command much higher rates because of the skill      rarity, but finding new projects is much harder and you might be out of      work more often. <a href="http://www.lessonsoffailure.com/software/googles-go-not-getting-us-anywhere-part-2/">Google Go programmers</a> are in this situation today.</li>
</ul>
<p>Ideally, you want to be the early adopter of a new technology that will take over the industry, like learning Java in 1995.  Predicting those events is nearly impossible, so I’d suggest sticking with the things that interest you.  After all, you’ll spend 30% of your life doing them.  No sense in punishing yourself needlessly.</p>
<p><strong><em>Secret #10:  You are a professional.  In every situation, make sure you act like one.</em></strong></p>
<p>New contractors are tempted to act just like those around them in a consulting gig:  playing politics, cracking jokes, drinking too much at social events, and the like.</p>
<p>The short answer is:  Don’t.  Not ever.  Even when you’re off the clock, you’re still being judged on your behavior.  Remember that reputation thing (Secret #1)?  Yeah, it still applies at happy hour, or launch parties, or even casual conversation.  What about office politics?  Understand them but steer clear of participating as much as you can.  You’re not an employee (see Secret #4), so stand above that.  You’ve been hired to add value, not noise (Secret #3).</p>
<p>If by now, you&#8217;re yelling at the monitor saying, &#8220;Dave, these aren&#8217;t secrets!  Everyone knows them!&#8221;, then I applaud you.  You&#8217;re in the absolute minority and you have what it takes to succeed wildly in this field.  So go forth and conquer the consulting world with your intuition.</p>
<p>The rest of us will just have to follow this list.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/u6lXdjOOq0U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/developers/secrets-successful-consultants-revealed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/developers/secrets-successful-consultants-revealed/</feedburner:origLink></item>
		<item>
		<title>Top Ten Reasons Babies are better than iPads</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/C_GusL5o1jo/</link>
		<comments>http://www.lessonsoffailure.com/companies/top-ten-reasons-babies-ipads/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 14:00:57 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Companies]]></category>
		<category><![CDATA[babies]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=647</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Ftop-ten-reasons-babies-ipads%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Ftop-ten-reasons-babies-ipads%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h2><img class="size-full wp-image-649 alignright" style="margin: 5px;" title="ipad-with-icons320" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/ipad-with-icons320.jpg" alt="The Challenger" width="240" height="180" />Top Ten Reasons Babies are better than the iPad</h2>
<ol>
<li>Babies eventually grow up to be better than their fathers.</li>
<li>Babies get cuter as they get older.  Think those fingerprints on your screen will get any cuter?</li>
</ol>
<p><a href="http://www.lessonsoffailure.com/companies/top-ten-reasons-babies-ipads/" class="more-link">Read more on Top Ten Reasons Babies are better than iPads&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Ftop-ten-reasons-babies-ipads%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fcompanies%2Ftop-ten-reasons-babies-ipads%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h2><img class="size-full wp-image-649 alignright" style="margin: 5px;" title="ipad-with-icons320" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/ipad-with-icons320.jpg" alt="The Challenger" width="240" height="180" />Top Ten Reasons Babies are better than the iPad</h2>
<ol>
<li>Babies eventually grow up to be better than their fathers.</li>
<li>Babies get cuter as they get older.  Think those fingerprints on your screen will get any cuter?</li>
<li>Babies don&#8217;t have a daily purchase limit.</li>
<li>After you get a baby, most people are satisfied for awhile and don&#8217;t want to upgrade for a long time.</li>
<li>Babies make other people smile when they see them.  iPads just make people ask, &#8220;What&#8217;s that?&#8221;</li>
<li>iPads look dorky in strollers.</li>
<li>Putting an iPad on your back makes you look like a Borg.</li>
<li>Babies don&#8217;t care if you use Flash, Objective-C, or Lua.  Babies just want you to talk to them in any language.</li>
<li>Babies don&#8217;t require you to dress in black turtlenecks, khakis, or attend MacWorld for any reason.</li>
<li>Babies are a LOT more fun to make than standing in line to buy an iPad</li>
</ol>
<p>AND!</p>
<h2>Top Ten Reasons iPads are better than Babies<img class="size-full wp-image-650 alignright" style="margin: 5px;" title="index" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/index.jpeg" alt="The Champion!" width="195" height="196" /></h2>
<ol>
<li>iPads never require college educations.  The closest you get is $4.99 for the Encyclopedia app.</li>
<li>You can shut the iPad off at 10pm and turn it back on at 7am every day, without social services knocking at your door.</li>
<li>When the iPad is hungry, you can plug it in and leave it alone for two hours.</li>
<li>One word:  Diapers.</li>
<li>The iPad will never go on a first date or drive your car.  Ever.  Not even with iPhoneOS 4.0.</li>
<li>You&#8217;ll never hear the iPad asking where it came from.</li>
<li>The iPad will never walk in on you having sex.</li>
<li>Trying to swipe a baby will land you in jail.</li>
<li>Best game with a baby:  Peek-a-boo.  Which gets boring pretty fast.  Solitaire, on the other hand&#8230;</li>
<li>You can&#8217;t make menstruation jokes about babies.</li>
</ol>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/C_GusL5o1jo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/companies/top-ten-reasons-babies-ipads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/companies/top-ten-reasons-babies-ipads/</feedburner:origLink></item>
		<item>
		<title>Top Three Motivators For Developers (Hint: not money!)</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/nNVZyXRTmB0/</link>
		<comments>http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 15:00:46 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[autonomy]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[motivation]]></category>
		<category><![CDATA[purpose]]></category>
		<category><![CDATA[TED]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=599</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fautonomy-mastery-purpose%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fautonomy-mastery-purpose%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Software has long since lost its glory-days status.  We&#8217;re not the go-to field anymore.  Geeks are no longer revered as gods amongst humanity for our ability to manipulate computers.  We get <a href="http://valleywag.gawker.com/389746/techs-10-worst-entry+level-jobs">crappy jobs</a> just like everyone else.</p>
<p><a href="http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/" class="more-link">Read more on Top Three Motivators For Developers (Hint: not money!)&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fautonomy-mastery-purpose%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fdevelopers%2Fautonomy-mastery-purpose%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Software has long since lost its glory-days status.  We&#8217;re not the go-to field anymore.  Geeks are no longer revered as gods amongst humanity for our ability to manipulate computers.  We get <a href="http://valleywag.gawker.com/389746/techs-10-worst-entry+level-jobs">crappy jobs</a> just like everyone else.</p>
<p>So, what is it that still motivates you to work as a software developer?</p>
<div id="attachment_638" class="wp-caption alignright" style="width: 310px"><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/overworked.jpg"><img class="size-medium wp-image-638" title="overworked" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/overworked-300x296.jpg" alt="" width="300" height="296" /></a><p class="wp-caption-text">Ah...satisfaction!</p></div>
<p>Is it your fat salary, great perks, and end-of-year bonuses?  Unless you&#8217;ve been working on Mars for the past two years, I think <a href="http://www.computerworld.com/s/article/347538/The_Big_Squeeze">Computerworld would disagree with you</a>.  We&#8217;ve been getting kicked in the nads just as hard as everyone else.  Between budget cutbacks, layoffs and reductions in benefits or increases in hours, clearly our paychecks are not our primary source of satisfaction.</p>
<p>If money was our primary motive, right now we&#8217;d be seeing a mass exodus from the tech sector.  So, if it&#8217;s not the money, then what is it that we hang on to when we get up each day?  Are we really working for those options?  That salary bonus?</p>
<p><em>Turns out, we&#8217;re kidding ourselves if we think that&#8217;s our real motive as developers.</em></p>
<p><strong><span style="text-decoration: underline;">The assumption</span>:</strong> People perform better when given a tangible, and even substantial, reward for completing a task.  Think bonuses, stock options, and huge booze-driven parties.</p>
<p><strong><span style="text-decoration: underline;">The reality</span>:</strong> In a narrow band of actual cases, this is true.  (<em>And by narrow, I mean anything that isn&#8217;t a cognitive task, simple or complex, according to the research I quote below</em>).  By and large, <strong>the reward-based incentive actually creates poorer performance in any group of workers for cognitive tasks, regardless of economic background or complexity of the task involved</strong>.  (Sorry, <a href="http://www.lessonsoffailure.com/developers/real-reason-outsourcing-fails/">outsourcers</a>&#8230;dangling the reward under your workers noses doesn&#8217;t help even when your home country is considerably poorer on average than Western economies.  Yet another surprising finding of their research.)</p>
<p>I&#8217;m not making this up, nor am I just drawing on anecdotal experience.  Watch this 18 minute video from TED and I&#8217;ll bet you&#8217;re convinced too:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rrkrvAUbU9Y&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/rrkrvAUbU9Y&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://www.danpink.com/">Daniel Pink</a> gave this lecture at the 2009 TED.  It&#8217;s mind-blowing if you&#8217;re stuck in the <a href="http://en.wikipedia.org/wiki/Carrot_and_stick">carrot-and-stick mentality</a>.  <strong>And I&#8217;ll just bet</strong>, unless you work for Google, are self-employed, or extremely worldly, <strong><em>you probably are</em></strong>.</p>
<p>I&#8217;m not saying that to be mean or controversial.  I&#8217;m saying that because this mentality has pervasively spread to every business, industry and country on the planet over the past 100 years.  It&#8217;s not just software development, but we&#8217;re hardly immune from its effect.</p>
<p>While we&#8217;re not immune to the impact, we do have a lot going for us that gives us an advantage in stepping outside this mentality:</p>
<ul>
<li><strong>Developers tend to be social oddballs and the normal conventions  seem awkward to us.</strong> Social oddballs tend to question things.  We don&#8217;t like what everyone else likes because, well, we&#8217;re nerds  and we don&#8217;t think like sales people.  Or accountants.  Or athletes.  <em>We&#8217;re  willing to try things others find weird because we&#8217;re weird too.</em></li>
<li><strong>Because we&#8217;re odd, we tend to be forward thinking and revolutionary in our approaches to workplace advancements.</strong> Think about the good aspects of the Dot Com era:  pets in the workplace, recreation rooms with pool tables and ping pong, better chairs and desks for people, free lunches.  Those innovations didn&#8217;t come out of Pepsi, Toyota, or Price Waterhouse Coopers, <em>they came out of tech companies</em>.  Every one.</li>
<li><strong>In doing so, our weird becomes the new normal.</strong> Witness the output of the Dot Com era:  Aside from the economic meltdown, how many companies now regularly practice some, if not all of those things we did back in the late 90s?  (Albeit with more restraint, thankfully)</li>
</ul>
<p><a href="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/motivation.jpg"><img class="size-medium wp-image-639 alignright" style="margin: 5px;" title="motivation" src="http://www.lessonsoffailure.com/wp-content/uploads/2010/04/motivation-300x240.jpg" alt="" width="300" height="240" /></a></p>
<p style="text-align: left;">With that in mind, let&#8217;s take Daniel&#8217;s idea of the results-oriented work environment (ROWE) forward and create something new for the 21st century.  It focuses on three important ideas, which developers already love and embrace:</p>
<ol>
<li>Autonomy</li>
<li>Mastery</li>
<li>Purpose</li>
</ol>
<p><strong>Autonomy:</strong> What developer out there doesn&#8217;t like to be given the freedom to do their own thing, on their terms, with their preferred hours, using their tools, environment, IDE, language, operating system and favorite t-shirt?  Find me a single developer anywhere that doesn&#8217;t crave this kind of freedom and I&#8217;ll pay you $10.  Seriously.  Drop me a contact above.  I&#8217;m good for it.  Of course, you&#8217;ll search for the rest of your life and won&#8217;t be able to do it.</p>
<p><strong>Mastery:</strong> Every developer on the planet wants to get better at what they do.  We crave new knowledge like some people quaff coffee after a hangover.  Fortunately, the side effects of getting better at development are far more benign than caffeine binging.</p>
<p><strong>Purpose:</strong> Nothing is more tedious, horrific, or uninspiring to developers to work on <a href="http://www.lessonsoffailure.com/developers/software-plumbing-mad-science/">projects that lack any real meaning in the world</a>.  Or lack any real direction.  Or lack any substantial need from the company.  In fact, you can probably point to the brightest points of your career all stemming from those projects that had the deepest meaning to you personally.  Maybe the darkest points are those soul-sucking projects that you waded through because you were glad to have a job but desperately waited for things to improve so you could find a better job elsewhere.  Preferably where soul-vacuums didn&#8217;t exist.</p>
<p><a href="http://googleblog.blogspot.com/2006/05/googles-20-percent-time-in-action.html">Google gets it</a>:  They already advocate the 20% time concept and (near-)complete workplace freedom.  <a href="http://www.atlassian.com/about/values.jsp">Atlassian gets it</a>:  They have the Fedex challenge where everyone in the company gets 24 hours to work on something they are interested in, with the caveat you have to deliver it at the end of 24 hours and you must present it to the company.  Think those don&#8217;t create passion for the company?  How about the <a href="http://www.softwarebyrob.com/2006/10/31/nine-things-developers-want-more-than-money/">Nine Things Developers Want More than Money</a>?  These points all touch on the same three basic concepts:  <strong>autonomy, mastery, and purpose.</strong></p>
<p>Does your company &#8220;get it&#8221;?  If the answer is NO,  <strong>what can you do right now to change your workplace to &#8220;get it&#8221;?</strong> And if that is too <a href="http://en.wikipedia.org/wiki/Sisyphus#.22Sisyphean_task.22_or_.22Sisyphean_challenge.22">Sisyphean a task</a> for you, <em>how about starting your own company instead, that does &#8220;get it&#8221;?</em></p>
<p>That&#8217;s my challenge for you in 2010.  <em>&#8220;Make software suck less in the 21st century&#8221; </em></p>
<p>Good luck.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/nNVZyXRTmB0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/developers/autonomy-mastery-purpose/</feedburner:origLink></item>
		<item>
		<title>Stop Breaking These Laws (of Software)</title>
		<link>http://feedproxy.google.com/~r/LessonsOfFailure/~3/QJ5t6aT2lPo/</link>
		<comments>http://www.lessonsoffailure.com/software/stop-breaking-laws-software/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:00:06 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[software laws]]></category>

		<guid isPermaLink="false">http://www.lessonsoffailure.com/?p=595</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fstop-breaking-laws-software%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fstop-breaking-laws-software%2F&#38;source=daverodenbaugh&#38;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve mentioned a number of software laws in various posts, like Cargill&#8217;s <a href="http://en.wikipedia.org/wiki/Ninety-ninety_rule">Ninety Nine Rule</a>, or <a href="http://en.wikipedia.org/wiki/Occam%27s_Razor">Occam&#8217;s Razor</a>.  And there are tons of laws that you probably already know, like Metcalfe&#8217;s Law or Moore&#8217;s Law.</p>
<p><a href="http://www.lessonsoffailure.com/software/stop-breaking-laws-software/" class="more-link">Read more on Stop Breaking These Laws (of Software)&#8230;</a></p>


<p>No related posts.</p>


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fstop-breaking-laws-software%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.lessonsoffailure.com%2Fsoftware%2Fstop-breaking-laws-software%2F&amp;source=daverodenbaugh&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve mentioned a number of software laws in various posts, like Cargill&#8217;s <a href="http://en.wikipedia.org/wiki/Ninety-ninety_rule">Ninety Nine Rule</a>, or <a href="http://en.wikipedia.org/wiki/Occam%27s_Razor">Occam&#8217;s Razor</a>.  And there are tons of laws that you probably already know, like Metcalfe&#8217;s Law or Moore&#8217;s Law.</p>
<p>I&#8217;ve found a very complete list of the <a href="http://www.globalnerdy.com/2007/07/18/laws-of-software-development/">laws regarding software development</a> (<em>I highly recommend reading that link. </em>I&#8217;ll wait, go ahead).  But from that list, we seem to have developed a complete blind spot for five in particular.  Let&#8217;s look at these five and how our collective ignorance of them continues to impact software development today:</p>
<h2><strong>Law #1: <a href="http://en.wikipedia.org/wiki/Amdahl%27s_law">Amdahl&#8217;s Law</a></strong></h2>
<p><img class="alignleft" style="margin: 5px;" title="Intel multi-core processor" src="http://upload.wikimedia.org/wikipedia/en/a/af/E6750bs8.jpg" alt="" width="227" height="151" />Gene Amdahl first published this notion in <a href="http://www-inst.eecs.berkeley.edu/~n252/paper/Amdahl.pdf">a 1967 paper</a>.  This law is about the mistaken notion that &#8220;All We Need Are More Parallel Processors and Our Software Will Run Faster&#8221;.</p>
<p><strong>The Damning Evidence:</strong> Pop quiz:  have you bought a new machine in the past 4 years that was multi-core?  Were you a little disappointed when you checked the processor usage and found that not every one of those shiny, new cores was busy all the time, no matter which of your apps you ran?</p>
<p>We buy new hardware with the mistaken impression that our old programs will continue to run even faster than before because <a href="http://computerworld.co.nz/news.nsf/technology/multiple-cores-pose-challenges-for-software">we expect our software to take advantage of all those friggin cores</a>!  <strong>But software never runs as fast we expect it to on the multi-core hardware, because the parallel component of the program is often missing, underdeveloped, or poorly understood by the developer.</strong> Thus, our software continues to disappoint us on even on shiny, new multi-core hardware.</p>
<p><strong>Exceptions: </strong> Some applications have been expressly written to be massively parallel and they continue to kick ass and take names on new multi-core hardware (e.g. <a href="http://www.codinghorror.com/blog/2007/09/choosing-dual-or-quad-core.html">rendering, scientific and encoding applications</a>).  By and large, most applications simply don&#8217;t benefit from those extra cores because they weren&#8217;t written to do so.</p>
<h2><strong>Law #2:  <a href="http://itmanagement.earthweb.com/netsys/article.php/3369841">The Law of False Alerts</a></strong></h2>
<p><img class="alignright" title="UAC here, may I annoy you?" src="http://www.flightprep.com/image/WindowsVistaUAC.png" alt="" width="219" height="176" />First introduced by George Spafford in <a href="http://itmanagement.earthweb.com/netsys/article.php/3369841">this article</a>, the law states that the more the user is presented with false or erroneous alerts, the more they will ignore real alerts in the system.</p>
<p><strong>The Damning Evidence</strong><strong>: </strong> Windows Vista is the classic current example.  Every bloody operation in it required your permission from the user authentication module.  After while, you just madly clicked &#8220;Yeah, sure whatever&#8230;&#8221; for every warning that popped up.  <strong>This, of course, robs the operating system of any ability to protect you from a real threat</strong> because you&#8217;ve been annoyed by the feature in the first place.</p>
<p>Of course, people still design applications like this:</p>
<ul>
<li>&#8220;Are you sure you want to delete?&#8221;</li>
<li>&#8220;No, really, are you REALLY sure you want to delete?&#8221;.</li>
<li>&#8220;OK, look, I&#8217;ve asked already but just so I can&#8217;t be blamed for anything, are you SUPER-DUPER-ABSOLUTELY, 110% sure you want to delete?&#8221;</li>
</ul>
<p>Stop the insanity.  If they click delete and they weren&#8217;t supposed to, how about offering an undo operation?  Too hard you say?  Then you&#8217;re <a href="http://en.wikipedia.org/wiki/Command_pattern">not trying hard enough</a>.  Don&#8217;t punish the users for bad design.</p>
<h2><strong>Law #3:  <a href="http://www.useit.com/alertbox/20000723.html">Jakob&#8217;s Law of Internet Experience</a></strong></h2>
<p>From <a href="http://en.wikipedia.org/wiki/Jakob_Nielsen_%28usability_consultant%29">Jakob Nielsen</a>, web usability guru, who states that users only spend a small fraction of time on your site, compared to all other sites.  Therefore, your <a href="http://www.useit.com/papers/heuristic/heuristic_list.html">site experience should be similar to all other sites</a> to minimize learning curve and maximize usability.</p>
<p><strong>The Damning Evidence</strong><strong>:</strong> Well, things like <a href="http://www.lessonsoffailure.com/companies/worst-idea-2010-firefox-personas/">Firefox Personas aside</a>, which distract your users from the actual content of the sites, we still can&#8217;t seem to come up with a consistent way to develop user interfaces on sites.  Thanks to Web 2.0, everyone is now trying to copy the success of sites like Facebook, Twitter, and other social networks to create wild, experimental web pages that are just plain awful to use.</p>
<p>Don&#8217;t get me wrong here:  <em>I&#8217;m not saying different is bad</em>, <strong>I&#8217;m saying that different is hard to get right</strong>.  Users (especially &#8220;Normals&#8221;) don&#8217;t like to be made to think how to use things.  But that doesn&#8217;t seem to stop us creating <a href="http://www.webpagesthatsuck.com/">web pages with crazy stuff</a> on them.</p>
<p><strong>Exceptions:</strong> Sometimes, user interfaces are giant evolutionary steps that simply lie outside the normal boundaries we&#8217;ve come to expect and that&#8217;s acceptable.  The iPhone was a perfect example:  no one really had mastered the touch interface until Cupertino &amp; Co came out with it and they didn&#8217;t exactly follow any of the old school rules.  But it was still a major success and <a href="http://www.cultofmac.com/usability-expert-jakob-nielsen-dubs-iphone-first-mobile-device-worth-criticizing/8491">now sets the standard for all smartphones</a>.  <em>However, most everyone else thinks they&#8217;re creating the exception when they&#8217;re just breaking the rules poorly.</em></p>
<h2><strong>Law #4:  <a href="http://blogs.msdn.com/nihitk/pages/185836.aspx">The Pesticide Paradox</a></strong></h2>
<p><img class="alignleft" src="http://www.ibm.com/developerworks/java/library/j-aopwork11/TestingPyramid.jpg" alt="" width="223" height="172" />Attributed to Bruce Beiser, the law states that every method you use to prevent or find bugs leaves a residue of subtler  bugs against which those methods are ineffectual.</p>
<p><strong>The Damning Evidence</strong><strong>: </strong>Things like Test Driven Development and Unit Testing give us the false impression that we&#8217;ve quashed the major bugs in the system when <em>all we&#8217;ve really done is quash the obvious bugs</em>, leaving the more subtle, painful, and difficult ones behind.  Many of these types of bugs are related to concurrency or particular complex data conditions that are difficult to express as unit tests.</p>
<p>Before anyone rants about this comment section claiming I think TDD is bad, or unit testing is evil, <strong>please hear me correctly:  Unit testing and TDD leave a false sense of security that we&#8217;ve managed to create stable software.</strong> <em>They are a starting point to more complete testing, but they are not the end</em>.  The meaningful problems are often in integration with other systems and modules, that are often left out of testing plans because of time constraints, schedule pressures, laziness and sometimes plain arrogance.</p>
<p><strong>Exceptions:</strong> Small, simpler systems rarely suffer from these issues because testing is much easier.  This is mostly a complex software problem, at a level of enterprise development, large applications (e.g. Microsoft Word), or operating systems.</p>
<h2><strong>Law #5:  <a href="http://www.globalnerdy.com/2007/07/18/laws-of-software-development/">Fisher&#8217;s Fundamental Theorem of Natural Selection</a></strong></h2>
<p><img class="alignright" style="margin: 5px;" src="http://encefalus.com/wp-content/uploads/2008/12/complexity_ball.jpg" alt="" width="180" height="175" />While this law stems from genetic research by R.A. Fisher, the application in software is somewhat obvious:  The more highly adapted an organism becomes, the less adaptable it is to  any new change.</p>
<p><strong>The Damning Evidence</strong><strong>:</strong> We strive to create complex, interesting, and highly useful frameworks:  Hibernate, Struts, Flex, ExtJS, and jQuery to name a few.  But every version we release generates new requests by the users for missing features or enhancements.  Each change adds more complexity.  And the more complex the software, the lower the chance those changes can be easily accommodated in subsequent versions.</p>
<p>For example, <a href="http://en.wikipedia.org/wiki/Apache_Struts">Struts went through a major rewrite for version 2.0</a>, which speaks volumes about the original version&#8217;s adaptability to change.  Spring did a major update for AOP that was a breaking change from 1.0.  ExtJS did the same for their 1.0 <em>and </em>2.0 releases.</p>
<p><strong>Exceptions</strong>:  Probably none&#8211;this seems to be the inherent nature of frameworks.  But if you know of something, please prove me wrong in the comment section.  I&#8217;d love to hear about some piece of software that didn&#8217;t follow this rule.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/LessonsOfFailure/~4/QJ5t6aT2lPo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.lessonsoffailure.com/software/stop-breaking-laws-software/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.lessonsoffailure.com/software/stop-breaking-laws-software/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.806 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-07 22:22:46 -->
