<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-16695194</id><updated>2011-04-21T14:44:04.303-05:00</updated><title type='text'>Uncommon Sense (for Software)</title><subtitle type='html'>I can't believe that 70% of software projects fail.  It's embarrassing.  Something is fundamentally broken here.  Left to their own devices, people have a way of over-complicating things.  It really doesn't have to be that hard.  The trick is knowing what to look for and what key factors to manage.  The rest is noise.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16695194.post-116492068527792028</id><published>2006-11-30T16:03:00.000-05:00</published><updated>2006-11-30T16:04:45.306-05:00</updated><title type='text'>New Feed URL for Uncommon Sense (for Software)</title><content type='html'>I've hopped over to Typepad for my blogging needs.  The Web URL is still the same:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.uncommonsenseforsoftware.com"&gt;www.UncommonSenseForSoftware.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;... because I've remapped the domain to point to &lt;a href="http://www.typepad.com"&gt;Typepad&lt;/a&gt;.  However, the RSS feed URL has changed to:&lt;br /&gt;&lt;br /&gt;&lt;a href="feed://www.uncommonsenseforsoftware.com/index.rdf"&gt;www.UncommonSenseForSoftware.com/index.rdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please update your feed readers with the new feed!&lt;br /&gt;&lt;br /&gt;Happy trails,&lt;br /&gt;&lt;br /&gt;Craig.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-116492068527792028?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/116492068527792028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=116492068527792028' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/116492068527792028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/116492068527792028'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/11/new-feed-url-for-uncommon-sense-for.html' title='New Feed URL for Uncommon Sense (for Software)'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114589639995949856</id><published>2006-04-24T11:32:00.000-05:00</published><updated>2006-04-24T11:34:26.500-05:00</updated><title type='text'>Last reminder that the blog has moved...</title><content type='html'>Hi there,&lt;br /&gt;&lt;br /&gt;Last call to let you know that this blog as moved to:&lt;br /&gt;&lt;a href="http://www.uncommonsenseforsoftware.com"&gt;www.UncommonSenseForSoftware.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please update your bookmarks and feed reader.&lt;br /&gt;&lt;br /&gt;Thanks!&lt;br /&gt;&lt;br /&gt;Craig.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114589639995949856?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114589639995949856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114589639995949856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114589639995949856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114589639995949856'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/04/last-reminder-that-blog-has-moved.html' title='Last reminder that the blog has moved...'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114468217053392305</id><published>2006-04-10T10:15:00.000-05:00</published><updated>2006-04-10T10:16:10.570-05:00</updated><title type='text'>Outsourcing Development = Giving Away Your Success</title><content type='html'>There's a new article over at the new location for this blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.uncommonsenseforsoftware.com"&gt;www.UncommonSenseForSoftware.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't already, please update your feeds and bookmarks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114468217053392305?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114468217053392305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114468217053392305' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114468217053392305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114468217053392305'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/04/outsourcing-development-giving-away.html' title='Outsourcing Development = Giving Away Your Success'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114412002869085538</id><published>2006-04-03T22:05:00.000-05:00</published><updated>2006-04-03T22:07:08.703-05:00</updated><title type='text'>It's the details that separate us from the apes.</title><content type='html'>There's a new article over at the new location for this blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.uncommonsenseforsoftware.com"&gt;www.UncommonSenseForSoftware.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't already, please update your feeds and bookmarks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114412002869085538?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114412002869085538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114412002869085538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114412002869085538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114412002869085538'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/04/its-details-that-separate-us-from-apes.html' title='It&apos;s the details that separate us from the apes.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114364271840861036</id><published>2006-03-29T09:28:00.000-05:00</published><updated>2006-03-29T09:31:58.453-05:00</updated><title type='text'>Uncommon Sense (for Software) is moving...</title><content type='html'>I've been double posting for a while now, here and at my new domain:  &lt;a href="http://www.uncommonsenseforsoftware.com"&gt;www.UncommonSenseForSoftware.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll only be posting over there from this point forward.  Please update your feeds and bookmarks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114364271840861036?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114364271840861036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114364271840861036' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114364271840861036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114364271840861036'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/uncommon-sense-for-software-is-moving.html' title='Uncommon Sense (for Software) is moving...'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114355547684584144</id><published>2006-03-28T09:17:00.000-05:00</published><updated>2006-03-28T09:22:49.803-05:00</updated><title type='text'>My dreamPod</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/71637292@N00/119315317/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/14/119315317_7edb3ea490_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/71637292@N00/119315317/"&gt;My dreamPod&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/71637292@N00/"&gt;craig_in_ottawa&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;So, I saw this &lt;a href="http://news.zdnet.com/2036-2_22-6035707.html"&gt;funny video&lt;/a&gt; about DRM (Digital Rights Management; video by David Berlind at ZDNet).  Damn, he makes a good point.  I was really getting the itch to pick up a video iPod too.  Guess I'll wait a bit.  Afterall, unless consumers put pressure on vendors to open up, they'll stay proprietary - it's in their best interests.&lt;br /&gt;&lt;br /&gt;Then, I got to thinking...  The other problem with picking up a device like this is that 4 months later, I'm gonna wish I had waited for that one extra feature that the "next" version has.&lt;br /&gt;&lt;br /&gt;What would I want in my dreamPod?  Here it is (photo).  Let me give you a tour...&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;1.  Camera - facing away from the user.  This is the one that let's you snap a quick photo while you're watching the LCD screen to make sure you've got everything "in frame".&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2.  Camera - facing the user.  This one's used for the inevitable two-way video phone functionality, or for you to annotate a picture you just snapped, or to film you and your buddy/girlfriend standing in front of Niagra Falls.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;3.  Speaker - just enough for you to hear it with your ear pressed to it - because of course, this device is also a phone now.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;4.  KEYS button - one of my pet peeves with the otherwise brilliantly simple input design of the iPod is that you can't input the Contacts, Calendar or other typical PDA data that it's now starting to support.  If you had a quick key for KEYBOARD, then you could just use the touch pad to zoom around the on-screen keyboard and press the center button to "press" a key.  This I think would actually be better than a physical keyboard for text-messaging, and also better than a stylus and hand-writing recognition that doesn't work anyway.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5.  MIC - Most phone mics are pretty good now.  They don't need to be "exactly" where you put your mouth, just in the general area.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;6.  PIC button - 'cause for candid pics, you've gotta be quick!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;7.  Center button mod - let's make the touch sensitive surface include the whole circle (button included), not just the donut shape around the perimeter.  This opens up a lot more input possibilities than just a "dial" experience.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Dare to dream.  I think Apple could do it if they put their minds to it.  Maybe they already are...&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114355547684584144?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114355547684584144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114355547684584144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114355547684584144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114355547684584144'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/my-dreampod.html' title='My dreamPod'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114347005060308953</id><published>2006-03-27T09:14:00.000-05:00</published><updated>2006-03-27T09:34:10.703-05:00</updated><title type='text'>Tembria - Server monitoring for the rest of us.</title><content type='html'>After finally moving the &lt;a href="http://www.devshop.com"&gt;Devshop&lt;/a&gt; web-site to a real server in a real hosting facility (&lt;a href="http://www.savvis.net/corp/flash/facilities/index.html"&gt;SAVVIS&lt;/a&gt; via &lt;a href="http://www.layeredtech.com"&gt;LayeredTech&lt;/a&gt;), it was time to get some server monitoring software up and running.  I want to know that my site is always up and for something to tap me on the shoulder immediately if it goes down.&lt;br /&gt;&lt;br /&gt;My pet peeve about monitoring software is that it typically looks like it's been run over repeatedly by a mac truck.  I mean it's so ugly I wouldn't kiss it with your lips.  Difficult to use, far too much use of command lines and console output, the list goes on.  There are a select group of real network admin experts out there who don't seem to mind these kinds of products.  After all, form follows function, they would say.&lt;br /&gt;&lt;br /&gt;Unfortunately for a lot of folks like me, we inherit the responsibility of making sure servers are up and running even though we are not as knowledgeable about this sort of thing as our network admin friends are.&lt;br /&gt;&lt;br /&gt;So thankfully, there's &lt;a href="http://www.tembria.com"&gt;Tembria&lt;/a&gt;.  Tembria's server monitor not only has so many of the bells and whistles that our network admin friends would expect, but it's actually usable by non-experts like me.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://www.tembria.com/products/servermonitor/screenshots/index.html"&gt;screen shots&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114347005060308953?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114347005060308953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114347005060308953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114347005060308953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114347005060308953'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/tembria-server-monitoring-for-rest-of.html' title='Tembria - Server monitoring for the rest of us.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114303721840209219</id><published>2006-03-22T09:11:00.000-05:00</published><updated>2006-03-22T09:20:18.423-05:00</updated><title type='text'>More on the upcoming Ottawa BarCamp</title><content type='html'>A location for the upcoming &lt;a href="http://barcamp.org/BarCampOttawa"&gt;BarCamp Ottawa&lt;/a&gt; has been chosen:  &lt;a href="http://www.bitheads.com/index.php"&gt;BitHeads&lt;/a&gt; at Carling and Merivale (Ottawa).  Apparently the space is very swank.  It used to be an old movie theatre, converted by the BitHead folks for just these kinds of events.&lt;br /&gt;&lt;br /&gt;We've reached our sponsorship goal.  Many local companies have pitched in to make this event happen.  The list of attendees and sponsors can be found on the &lt;a href="http://barcamp.org/BarCampOttawa"&gt;BarCamp Ottawa wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We're still looking for more participants!  If you're interested in leading a session on a cool topic, or just in coming along to participate, sign up on the wiki.&lt;br /&gt;&lt;br /&gt;Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114303721840209219?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114303721840209219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114303721840209219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114303721840209219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114303721840209219'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/more-on-upcoming-ottawa-barcamp.html' title='More on the upcoming Ottawa BarCamp'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114264853783563794</id><published>2006-03-17T21:20:00.000-05:00</published><updated>2006-03-17T21:22:17.836-05:00</updated><title type='text'>Review of Devshop site</title><content type='html'>Geof Harries over at &lt;a href="http://www.yukonbiz.com/archives/38"&gt;YukonBiz&lt;/a&gt; has reviewed the new site and material we put up about the product.&lt;br /&gt;&lt;br /&gt;He even throws in a Batman/Robin reference...  Can I use that in my Marketing materials?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114264853783563794?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114264853783563794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114264853783563794' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114264853783563794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114264853783563794'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/review-of-devshop-site.html' title='Review of Devshop site'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114262039018093843</id><published>2006-03-17T13:31:00.000-05:00</published><updated>2006-03-17T13:33:10.280-05:00</updated><title type='text'>New Devshop site is up...</title><content type='html'>The new Devshop site was put up at 2am this morning.  Take a look!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devshop.com"&gt;Devshop&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114262039018093843?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114262039018093843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114262039018093843' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114262039018093843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114262039018093843'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/new-devshop-site-is-up.html' title='New Devshop site is up...'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114247693194476480</id><published>2006-03-15T19:56:00.000-05:00</published><updated>2006-03-16T13:53:01.550-05:00</updated><title type='text'>Death by a thousand cuts</title><content type='html'>One of the biggest &lt;strong&gt;software project killer factors&lt;/strong&gt; is requirements management - or more accurately, lack of requirements management.  You've seen it:  requirements that either keep growing, long after development has begun, or change more regularly than you could possibly keep track.&lt;br /&gt;&lt;br /&gt;(I once worked for a company where the leadership team was still arguing about what the product was supposed to be, a month before it was supposed to be done.)&lt;br /&gt;&lt;br /&gt;Everyone knows that requirements management is a problem.  So if knowing is half the battle, then what's the other half?  Why isn't there a well known, clear solution?  What does it actually mean to "manage" requirements?&lt;br /&gt;&lt;br /&gt;The trouble with most cases of changing requirements is two fold:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Each individual change is small enough to slide under the radar:&lt;/strong&gt;  If it only takes a developer 4 hours to knock off a new feature, where's the harm?  So it's not tracked...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Since the changes aren't tracked&lt;/strong&gt; (and tallied), the sum of the changes quietly adds up, but is never addressed in the schedule.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Before you know it, you're now 2 months behind schedule, and sliding fast.  This is like &lt;strong&gt;death by a thousand cuts&lt;/strong&gt;.  A single paper-cut may be little more than a nuisance, but a thousand at once can make you bleed to death.  I saw a movie once (can't remember what it was) where the bad guy was stealing money from a bank by hacking into their computers and collecting all of the fractions of a cent that resulted from certain bank transactions.  Since it was fractions of a cent, it was virtually untraceable, except that over billions of transactions, it eventually added up.&lt;br /&gt;&lt;br /&gt;Most people intuitively know that changing requirements mid-cycle is bad, but they don't realize how often it happens, or what the impact is, so they're powerless to adapt for it and schedule around it.  Since they don't see the impact, they have no incentive or reason to knock it off.  And in the end, it's not the changing requirements that kill us (adaptability = good), but the fact that we didn't plan for them or that we let them get out of control that does.  It's the unwelcome surprise.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Managing&lt;/em&gt; requirements doesn't necessarily mean determining them all up front, before development begins, then freezing them through a development cycle, and saying no to every request until the thing ships.  That's just not realistic.  Adaptability afterall, is a key strength in business.&lt;br /&gt;&lt;br /&gt;Well, if not that, then what?  The first part of the solution is quantification.  It's no use trying to use anecdotes to show people how "requirements keep changing and it's going to make us late."  Chances are, the only examples you'll have at your finger tips are those "4 hour" requests that don't have the shock factor you're going to need illustrate your point.  Remember, no single change request is the problem, it's the cumulative effect where dealing with.  So if you can't demonstrate the cumulative effect, the message just comes off as complaining and falls on deaf ears.  To show the cumulative effect, you need to have tracked them - all of them.  That's the only way you'll have a shot at credibly demonstrating the impact.  Each one may only be 4 hours, but x3 per week is a minimum of a 30% reduction in some poor developer's productivity, not even including the context switch (arguably another 20%).  Then there's the fact that every seemingly 4 hour request actually balloons to a full day when all's said and done.&lt;br /&gt;&lt;br /&gt;Suppose you've quantified the impact early on.  Let's say, in the first 2 months of a 6 month project, you've calculated that requirements changes have added up to 2 weeks  worth of extra effort.  Not only are you now 2 weeks behind schedule, but if the trend continues, you're likely to add another 4 weeks of requirements change in the remaining 4 months of the schedule, for a total impact of 1.5 months of your original 6 month schedule.  All for seemingly little requests here and there.&lt;br /&gt;&lt;br /&gt;So &lt;em&gt;managing&lt;/em&gt; requirements doesn't mean Big Up Front Design and &lt;em&gt;no&lt;/em&gt; changes mid-cycle, it means:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Tracking and trending the changes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Using the trend to assess impact&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Making good decisions around how much of this change you should plan for in your schedule&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Only by tracking the seemingly harmless change requests can you see their cumulative effect before it's too late.  Not letting them surprise you and catch you flat-footed is key.  Only by using real data instead of anecdotes can you have productive conversations about requirements change with those that need to know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114247693194476480?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114247693194476480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114247693194476480' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114247693194476480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114247693194476480'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/death-by-thousand-cuts.html' title='Death by a thousand cuts'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114191251815860209</id><published>2006-03-09T08:43:00.000-05:00</published><updated>2006-03-09T08:55:18.186-05:00</updated><title type='text'>BarCamp Ottawa Coming Soon</title><content type='html'>I've offered to pitch in and help organize &lt;a href="http://barcamp.org/BarCampOttawa"&gt;BarCamp Ottawa&lt;/a&gt; with Peter Childs, &lt;a href="http://saunderslog.com/"&gt;Alec Saunders&lt;/a&gt; and David Keys.&lt;br /&gt;&lt;br /&gt;BarCamp is called an "&lt;a href="http://en.wikipedia.org/wiki/Unconference"&gt;unconference&lt;/a&gt;", which makes it very much cooler than just a conference, you know, without the &lt;em&gt;un&lt;/em&gt;.  Seriously, it's a way for us folks down in the trenches of Ottawa's high-tech to get together, meet eachother, swap stories and experiences, and discuss some topics that are near and dear to our own hearts.&lt;br /&gt;&lt;br /&gt;Yesterday we had a meeting and the following theme suggestions came up:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Web 2.0 (obviously!)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Voice 2.0 (over IP)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wi-fi&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extreme Programming&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As BarCamps go though, it's not the organizers speaking and the attendees listening.  It's very much the attendees as participants and speakers.  If you've got a topic area you'd like to huddle on with some folks, head over to the &lt;a href="http://barcamp.org/BarCampOttawa"&gt;Wiki&lt;/a&gt; and post it!  Add yourself to the list of attendees if you can make it.&lt;br /&gt;&lt;br /&gt;The date is Saturday, April 22nd, location TBD.  It's totally casual, and free, but you have to participate!  Spread the word!&lt;br /&gt;&lt;br /&gt;Also check out:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/TheRulesOfBarCamp"&gt;The rules of BarCamp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114191251815860209?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114191251815860209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114191251815860209' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114191251815860209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114191251815860209'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/barcamp-ottawa-coming-soon.html' title='BarCamp Ottawa Coming Soon'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114182090792876036</id><published>2006-03-08T07:20:00.000-05:00</published><updated>2006-03-08T07:29:36.913-05:00</updated><title type='text'>Project Management Quotes</title><content type='html'>Stephen Seay over at &lt;a href="http://projectsteps.blogspot.com"&gt;Project Steps&lt;/a&gt; posted a long list of &lt;a href="http://projectsteps.blogspot.com/2006/03/collection-of-project-management.html"&gt;project management quotes&lt;/a&gt;.  Some of them are kind of funny and just a little cynical.&lt;br /&gt;&lt;br /&gt;These are my favorites:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The sooner you begin coding the later you finish.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Good time estimators aren't modest:  if it's huge they say so.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Everyone asks for a strong project manager - when they get him they don't want him.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;The first 90% of a project takes 90% of the time the last 10% takes the other 90%.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;If it wasn't for the 'last minute', nothing would get done.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;If project content is allowed to change freely the rate of change will exceed the rate of progress.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114182090792876036?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114182090792876036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114182090792876036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114182090792876036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114182090792876036'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/project-management-quotes.html' title='Project Management Quotes'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114135975191395872</id><published>2006-03-02T23:15:00.000-05:00</published><updated>2006-03-02T23:31:48.223-05:00</updated><title type='text'>The Power of the Suite</title><content type='html'>A week or so ago, I was chatting with someone about what I often bash as the "one kind fits all" approach to project management.  The idea being that different kinds of projects have different risks and challenges, and therefore, require different techniques to really nail them.  Anyway, this person mentioned another "one fits all" phenomenon where he worked...  The customer (internal users) and the development team of this organization kept wrestling with this "one application that does everything."  Over time, it seemed that this one in-house application had become responsible for nearly every aspect of operations.  In other words, they had tried to automate every aspect of their business, and as if that wasn't bad enough, they were trying to do it inside a single application.  This is enterprise software at its worst.&lt;br /&gt;&lt;br /&gt;This "one app that does it all" approach is dangerous for a couple reasons, both having to do with complexity.  First, there's the complexity for the user - good luck training someone on something that has a zillion whirly-dos, what's-its and gizmos, and has completely lost any resemblance to the original metaphor that was supposed to intuitively convey how to use the thing in the first place - or worse, is nothing but 45 tabs across the top of your page, each with another 20 tabs below them (you know who you are!)  Second, there's the complexity for the developers.  The more business rules and features crammed into a single code-base, the harder it is to maintain, the slower it is to innovate with and long story short, the more expensive it becomes (serious diminishing returns with each added bell or whistle, or whirly-do or gizmo).&lt;br /&gt;&lt;br /&gt;And then the pendulum started swinging back the other way...  Over the last year in particular (ok, maybe starting 2 years ago) there has been a significant movement back towards simple, single purpose apps.  For anyone claiming to have nearly invented this, they're just too young to remember that before applications got so big and complex, they were in fact much smaller and more simple (ahhhhh, the good ol' days).  I really hope nobody labels themselves the "Grandfather" of simple, single purpose apps.  I've read there's a Grandfather of AJAX, but, really?  Did he invent or write the XMLHTTPRequest objects that have existed in browsers from different vendors for years?  People love to have a hero.  But that's another story.  We just got carried away with ourselves for about a decade, us and our big ol' enterprise apps, that's all.  &lt;br /&gt;&lt;br /&gt;So here's the paradox:  (or maybe conundrum, I’m not sure which):  Bigger, more sophisticated enterprise apps will always win the feature battle.  Some functions just require a lot more flexibility and programmability than small, lightweight tools can offer.  These monsters will always be expensive and time consuming, but they serve some purpose - assuming they're not taken overboard with the "one app for all needs" approach.&lt;br /&gt;&lt;br /&gt;On the other hand, I've never been a big believer that businesses in particular have needs that are soooooooo unique that they can't possibly find an off-the-shelf tool to do about 80% of what they're looking for and then get all those really smart employees to use their brains, arms and hands to do the other 20% - thus avoiding the pitfalls of never-ending-software altogether.  But, that's just me.  It's a good practice to always look around for the commercial tool that does most of what you want and be realistic that it may not be cost-effective to try and build something from scratch just to get the other 20%.  If you're building your own timesheet software, stop it right now!  Shame on you!  Never mind the fact that delegating every single aspect of your operations to a computer program tends to tie the hands of your employees, especially in situations of customer service.  How many times have you heard, "I'm sorry, the computer won't let me do that.  I can't help you."  Gee thanks.  Hooray for progress.&lt;br /&gt;&lt;br /&gt;So I guess you could say, I'm warm to the "simple, single purpose app" movement - with one caveat:  At some point, when people max out their potential with a simple app, they inevitably want more.  So how do you give them more, and still keep the app simple and follow a single design metaphor?  This is the product life cycle challenge that forces so many companies who at one point early in their lives sang the virtues of simplicity, to change their tune to one of feature richness and customizability.  In short, they grew up.  And so they traded one set of challenges (not having as many features as the big guys) for a different set of challenges (not being as nimble and easy as the little guys).  It’s kind of like a 16 year old complaining he’s not being given enough responsibility and then turning 35 and wishing he was 16 again without a care in the world.&lt;br /&gt;&lt;br /&gt;Truth is, there's a happy, blissful middle ground:  the product suite.  See, with the suite, you get a handful of related, compatible, yet independent "simple, single purpose apps" that talk to each other.  The benefits, they are a plenty:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Users get to dip their toe in the water by adopting one of the products in the suite without adopting everything at once and possibly being overwhelmed.  They can grow with you and adopt other related tools as they need.  Better still, they are motivated to use YOUR other tools instead of the competition’s, because yours are all integrated and that provides added value.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Individual products can stick to a single metaphor and be super easy to use, but gain some of the benefits of "big" software by relying on and exchanging with their brother and sister products.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Because the overall functionality of the suite has been split up among distinct products (something us techies call partitioning), complexity is reduced for the user and the development team, so everybody wins.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;The only thing you're left with is the odd user saying, "I don't want 4 apps, I just want one." (lazy ;)), but with a good talking-to and maybe quoting a couple paragraphs from this blog entry, you can turn them around so they see the light.  The one legitimate complaint I hear about having to use multiple apps, is having to log-in all over the place.  Single sign-on is probably THE killer feature for a suite of products - don't forget it.&lt;br /&gt;&lt;br /&gt;So, hooray for the movement back to simplicity in design - let's just not forget that sometimes people need more than one app can give, and let's get these apps talking to each other in meaningful ways instead of cramming everything into one box.&lt;br /&gt;&lt;br /&gt;Happy trails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114135975191395872?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114135975191395872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114135975191395872' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114135975191395872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114135975191395872'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/power-of-suite.html' title='The Power of the Suite'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114122304150581683</id><published>2006-03-01T09:22:00.000-05:00</published><updated>2006-03-01T09:24:01.506-05:00</updated><title type='text'>Contact info...</title><content type='html'>I've had a couple comments recently asking for contact info.  You can reach me by email &lt;a href="mailto:craig_fitzpatrick_blog@rogers.com"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now you can send me all kinds of secret messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114122304150581683?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114122304150581683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114122304150581683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114122304150581683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114122304150581683'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/03/contact-info.html' title='Contact info...'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114070335906739073</id><published>2006-02-23T08:49:00.000-05:00</published><updated>2006-02-23T09:02:39.130-05:00</updated><title type='text'>Presentation to Ottawa developer group</title><content type='html'>Last night I had the opportunity to present my company (&lt;a href="http://www.devshop.com"&gt;Devshop&lt;/a&gt;) to a group of local Ottawa developers.  Devshop is currently developing a radical new web-based project management tool specifically designed for software teams to address the common challenges associated with software projects.  More on that coming soon.  The forum was a monthly OGRE meeting (Ottawa Group of Ruby Enthusiasts), hosted by the team at &lt;a href="http://www.jadedpixel.com"&gt;JadedPixel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I know at least a few of the folks at the meeting last night will be checking out this blog, so to you, thanks for the opportunity to present and the brews shared at the pub afterwards.  Good times.&lt;br /&gt;&lt;br /&gt;Devshop has been in stealth mode for some time now.  In the next couple of months, I'll be free to start letting the cat out of the bag (at least up to its ears &amp; eyebrows).  The first real web-site explaining the goals and the product (and most importantly, what it means to software developers of the world) is in progress and will be up in the next few weeks.  Hope you'll come back for a visit to check it out.&lt;br /&gt;&lt;br /&gt;Many thanks to everyone that attended last night.  'Be seeing you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114070335906739073?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114070335906739073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114070335906739073' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114070335906739073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114070335906739073'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/02/presentation-to-ottawa-developer-group.html' title='Presentation to Ottawa developer group'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-114009745395099574</id><published>2006-02-16T08:13:00.000-05:00</published><updated>2006-02-16T08:47:06.750-05:00</updated><title type='text'>Design a couple versions at a time</title><content type='html'>Every day in the software world, you run into people that rather neatly fall into 2 camps:&lt;ol&gt;&lt;li&gt;Design snobs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Those that think design is icing on the cake&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;I personally am in the design snob category.  I believe that design (or lack of) makes or breaks a product.  A lot of times, I'm talking just about user interface design, but the truth is, anything said about user interface design can typically be applied equally well to technical design.  The technical equivalent of user interface design, for a coder, is the design of their public interfaces - the methods and properties you can call on their class library.&lt;br /&gt;&lt;br /&gt;In both cases, there is always a tension for designer between "what would make it easier to implement" and "what would make it easier for the end-user".  This is equally true whether the end user is someone clicking a button on the user interface, or another developer trying to use your API.  Either way, the designer's #1 job is to empathise with the end-user.  The biggest danger a designer faces (interface or technical) is to start thinking too much about implementation too early.  Design is an expression of the end-goal.  Start with "here's what we want to get to".  Even if you aren't able to get there in a single release, or have to make some tradeoffs along the way, start with the best design you can come up with, and work backwards to what is feasible given your constraints.  That way, with your user interface or your technical architecture, you'll be able to come back later to fit things in that didn't make it in the first go-round.&lt;br /&gt;&lt;br /&gt;If you design only what you think you can accomplish right now, you're going to have to bend and twist your design in unnatural ways in the next iteration, to account for things that you didn't account for in the original design.  In short, over-design up front - do a couple versions at once.  This thinking might throw a few folks into a panic because we've all heard from our ancestors that back-in-the-day large software systems experienced "paralysis by analysis", meaning, they never got off the drawing-board.  That was before the 'Net.  Given how easy it is to publish and distribute an application nowadays, people are slapping them together and shoveling them out the door with comparably little design (not to mention testing).  Don't worry about over-designing.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If you spend about twice as much time designing as the next guy, you're probably spending just the right amount of time and your product will show it.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Plan for a couple of iterations, so you know where you're headed.  Then you can break up the implementation of that design over a couple of iterations or releases.  Since ripping up a design document is way easier than ripping out a chunk of code, it's better to design a few iterations at a time, so that if in iteration #2 you realize something in iteration #1 was going to create a conflict, you've caught it before it was actually implemented.  The more we design a couple iterations at a time, the less products come out looking like Frankenstein later.&lt;br /&gt;&lt;br /&gt;And just for the heck of it, here's a link to some great &lt;a href="http://www.lukew.com/resources/quotes.asp"&gt;"importance of design" quotes&lt;/a&gt; I stumbled across, at &lt;a href="http://www.lukew.com"&gt;LUKEW Interface Designs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A couple of my favorites:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[Users] make their credibility-based decisions about the people or organization behind the site based upon the site's overall visual appeal.&lt;br /&gt;- &lt;a href="http://www.consumerwebwatch.org/news/report3_credibilityresearch/stanfordPTL_abstract.htm"&gt;Stanford Persuasive Technology Lab, 2002&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Design is not just what it looks like and feels like. Design is how it works.&lt;br /&gt;- &lt;a href="http://www.nytimes.com/2003/11/30/magazine/30IPOD.html"&gt;Steve Jobs, 2003&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Visual appearance is one of the most effective variables for quickly differentiating one application from another.&lt;br /&gt;- &lt;a href="http://www.baxleydesign.com/"&gt;Bob Baxley, 2003&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If a site is perfectly usable but it lacks an elegant and appropriate design style, it will fail.&lt;br /&gt;- &lt;a href="http://www.lab404.com/dan/"&gt;Curt Cloninger, 2001&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The details are not the details. They make the design.&lt;br /&gt;- &lt;a href="http://www.eamesoffice.com/"&gt;Charles Eames&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Problems with visual design can turn users off so quickly that they never discover all the smart choices you made with navigation or interaction design.&lt;br /&gt;- &lt;a href="ttp://www.jjg.net/ia/#http://www.jjg.net/ia/"&gt;Jesse James Garrett, 2002&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Good design is the most important way to differentiate ourselves from our competitors.&lt;br /&gt;- &lt;a href="http://www.businessweek.com/magazine/content/04_48/b3910003.htm"&gt;Samsung CEO Yun Jong Yong, 2004&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Design is the easiest way to reenergize a product.&lt;br /&gt;- &lt;a href="http://www.fastcompany.com/magazine/88/fast-forward-index.html"&gt;Fast Company, 2005&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Your products run for election every day and good design is critical to winning the campaign.&lt;br /&gt;- &lt;a href="http://www.fastcompany.com/magazine/95/design-qa.html"&gt;Procter &amp; Gamble CEO A.G. Lafley, 2005&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;You can't just ask customers what they want and then try to give that to them. By the time you get it built, they'll want something new.&lt;br /&gt;- &lt;a href="http://www.apple.com/pr/bios/jobs.html"&gt;Steve Jobs, 2005&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-114009745395099574?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/114009745395099574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=114009745395099574' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114009745395099574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/114009745395099574'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/02/design-couple-versions-at-time.html' title='Design a couple versions at a time'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113957989166128066</id><published>2006-02-10T08:48:00.000-05:00</published><updated>2006-02-10T08:58:11.690-05:00</updated><title type='text'>In Software Project Management, Size Doesn't Matter</title><content type='html'>A few months ago, I was discussing project management with someone from the financial sector.  This person, who is rather good at his own line of work, admitted he didn't know much about project management (but had some clients that did).  We were talking about some new ways of looking at project management, particularly, the &lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/10/more-general-purpose-project.html"&gt;domain specific&lt;/a&gt; approach that I often advocate.  Wanting to test my theories, he picked up the phone and proceeded to call one of his clients, whom he knew to be a real top-notch expert in project management.  What is interesting is that this project manager client of his was perceived to be an expert not because of any particularly extraordinary skills he had displayed, or even a long list of stellar accomplishments but rather, because he managed really BIG projects - like 4 years, 200 people, $50 million projects.  Big ones.&lt;br /&gt;&lt;br /&gt;At first, I didn't even think twice.  Of course, I thought, I suppose you would have to be really good to handle those kinds of projects.  I mean, if co-ordinating 10 people is tough, 200 must be about 20 times tougher.  A lot of people would certainly reason this way.  After meeting this manager, which was a rather familiar experience (nothing much new), it triggered a line of thinking:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;It is often far more difficult to manage a 10 person project than a 200 person project.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Let me explain.  It's not that I'm saying that the person managing the 10 person team is more important that the person managing 200 people on a $50 million project.  I'm not equating difficulty with importance - and by difficulty, I'm talking about the project management responsibilities, not other duties they may have to perform.&lt;br /&gt;&lt;br /&gt;Speaking with this project manager in particular gave me deja vu.  It was more like speaking with a CEO than a project manager.&lt;br /&gt;&lt;br /&gt;In chatting with any "project manager" with a team size of 100 or so people, what you quickly realize is that they're not project managing anymore at all.  They're more like a CEO, involved at the capital allocation level, for multi-year operations.  They are running an organization.  They're tuned in to major technological shifts and trends, like "If we bet the farm on Lotus Notes, will it still be the platform of choice when we finish in 4 years?"  Heh heh.  Oops.  When you're talking about a project that big, the head honcho is managing managers, who possibly manage other managers, who have team leads, who lead the people actually producing the work.  They are more like mentors to the managers who are actually managing.  The organization is large enough then, that it becomes really difficult to see the direct impact that the top decision maker is having on the success or failure of the project.  I liken it to riding (or steering) the wave, rather than causing it directly.  How many debates have you heard after some political or fortune 500 scandal where hoards of people say things like, "Well, you can't blame the top dog for something that some underling in another office did.  It's not his fault."  There you have it, by popular opinion, less direct accountability for large teams.  If you can't blame the top dog for failures, then how can you attribute success to him?&lt;br /&gt;&lt;br /&gt;Life in a small team however (say 10 people), is much more likely to give you a heart attack.  There's nowhere to hide.  The pace is way faster.  It's very easy to see the direct impact (good or bad) that each person is having on a daily basis.  When you're managing a software team of less than 10 people, chances are, you're not just the manager, but one of the developers as well (or at least a designer or architect).  The dynamic of a 10 person software team is much more clear - one person managing, and 9 people producing.  I think it's at about 10 to 15 people, where it is no longer practical for a manager to even touch the source code - in fact, it can be down right dangerous.  Coding is not something you should dabble in.  Either let it consume you and be really good at it, or don't touch it.  After 15 or more team members, it's quite likely that there will be a lot more delegation.  At 15, you may have 1 manager and 1 technical team lead.  At 35, you probably have a Director or a couple managers and a couple technical team leads.  At 100, well, you get the picture.  With each round of delegation (which IS necessary by the way), some amount of pressure, and direct accountability is taken away from the top dog.  I'm not just theorizing here, I've actually experienced it.  While I haven't managed a 100 person team yet, I can already see the difference between 10 and 35 developers, team sizes I have managed.  To manage 35 developers you really need to break them up into teams of 5 to 7, with technical team leads, and a manager or two.  So even at 35, there's a couple degrees of separation between the top policy maker, and the folks actually producing code.&lt;br /&gt;&lt;br /&gt;In that awkward team size of about 10 developers, you're likely to be as much a producer as a manager.  It's really tough to be great at both.  Just like you shouldn't dabble at coding, dabbling at managing just makes you a manager with a disadvantage.  It's at the point in time where it is clear to everyone around you that it is no longer practical for you do be doing any producing, but that you should be managing full time, that your project management life actually starts to get a bit easier.  At that point in time where you have managers reporting to you, your project management worries get lighter still (though you probably have new responsibilities keeping you up nights).&lt;br /&gt;&lt;br /&gt;All this to say, over that last 13 years of managing software teams, I haven't seen convincing evidence that project management difficulty increases linearly with team size.  There's a breaking point at which the project management (only) difficulty actually decreases when the team sizes breaks a certain point.  Project management worries then get replaced by other worries (like what the heck should we be betting the farm on...  'cause if I'm wrong, we go out of business - easy stuff like that).&lt;br /&gt;&lt;br /&gt;Am I right?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113957989166128066?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113957989166128066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113957989166128066' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113957989166128066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113957989166128066'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/02/in-software-project-management-size.html' title='In Software Project Management, Size Doesn&apos;t Matter'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113750736732610863</id><published>2006-01-17T09:02:00.000-05:00</published><updated>2006-01-17T09:17:38.016-05:00</updated><title type='text'>Software Ideals.</title><content type='html'>How many times in your life have you ever thought to yourself, "I'll just slap this together now, and fix it later."  I'm not sure what it is about the brain's wiring that makes us think that somehow tomorrow we'll be much less busy, have much more money and more energy to do the things that we either don't have the energy for today, don't have the money for, or just don't want to do.  Only in hind-sight, and apparently after quite a bit of experience do you learn it's just not true.  Every day I wake up, there seems to be even more to do, with less money, and it's needed faster than ever - not the other way around.  So in reality, that "tomorrow" we’re thinking about (the one with all the extra time, energy and money) never comes.  So things never get fixed/patched/improved like we thought they would.  After a long while, you look back at your work and realize all you've done was produce half-assed work always thinking you'd fix it "tomorrow".  And here we were thinking we were just making those tough decisions, the compromises, to live to fight another day.&lt;br /&gt;&lt;br /&gt;This realization begs a change in behavior.  If in fact tomorrow isn't going to be any easier than today (and you're actually going to realize there are 5 more things you need to do on top of your current to-do list), then there's no time like the present to patch that hole, fix that bug, or do those sit-ups that you aren't going to feel like doing tomorrow any more than you feel like doing today.&lt;br /&gt;&lt;br /&gt;"There's no time like the present."  "Do it right the first time."  "Anything worth doing is worth doing right."  "Good enough, isn't."  "Relentless improvement."  "Whatever you're doing, do it better than the next guy."  "Do a smaller number of things, but do them better."&lt;br /&gt;&lt;br /&gt;These are phrases that have been rolling around in my brain for a while now.  Over the last year I've been building a software project management application that will be released this year (not a small endeavor).  My company's mission (&lt;a href="http://www.devshop.com"&gt;Devshop.com&lt;/a&gt;) is to help teams produce better software.  During this time, I've had a chance to re-evaluate many of the patterns and habits I've developed (and witnessed) over the years, in producing software for the companies I've worked for.  One of the great things about striking out on your own is that you get to chose how you're going to "follow" the good patterns, and how you're going to break the mold and do things differently ("lead the pack").&lt;br /&gt;&lt;br /&gt;We all know that no matter what we're doing, there's always going to be some kind of time pressure on us.  I personally have always placed extra emphasis on not only getting a job done, but hitting your target date as well.  In truth, looking back I've made some of those common decisions (mistakes) like cutting testing, cutting documentation, cutting user interface design all to hit what seems like a fairly arbitrary deadline, so that we can say we made the release date.&lt;br /&gt;&lt;br /&gt;It just doesn't make good business sense.  Not that you should keep your application in development forever until it's perfect – we've all heard the stories about applications that never got off the drawing board.  But I'm assuming you have a set of reasonably fixed requirements.  Those stories about applications that never saw the light of day got that way because of never-ending requirements change – not because some perfectionist didn’t want to release their code because it wasn't perfect yet.  So that's really a different issue.&lt;br /&gt;&lt;br /&gt;I think that the moral of that old story, "We need to ship at some point otherwise the software will never get off the drawing board" is out-dated.  For the last 10 years at least, the trend has been to release software far too early (with not enough testing, refinement and design) rather than after too much fine tuning.  Look at the state of software today.  It's buggy.  Slapped together.  Rushed.  Do not fear taking the extra time to get it right – fear shipping sloppy products.  There's enough evidence out there that the "first mover" advantage is a myth.  Too many times a "fast follower" has come along with a better implementation and kicked the inventor's butt with his own invention.  All you accomplish by shipping a pre-mature product with a great idea is give the idea away to your competition at a time when you have a poor implementation of it - a bad idea.  Getting the customer "first" is really important when it's nearly impossible to get them to switch later - but switching software is easy.  Focus on keeping them once you get them, rather than just getting them first.&lt;br /&gt;&lt;br /&gt;I've heard it said that the development phase of a product's life cycle is a small one-time cost (say, for one particular release), whereas support and maintenance is a large recurring cost.  It's true.  If you look at established software companies, their product development expenses are often far less than any other department – marketing, sales, support, operations...  That's one of the great things about the software biz.  If done right, you can spend (relatively) a little to build a great product, then sell it a billion times and make a pile of money.  At least that's what everyone is aiming for.  But notice I said "great" product.  That's the hard part.&lt;br /&gt;&lt;br /&gt;"Great" products aren't rushed, slapped together, ill-designed or buggy.  They are the result of a steadfast belief that quality comes first.  Not just quality only in the quantitative bug-count sort of way, but in terms of design, user experience and ability to solve the original problem.  Great products aren't just a bag of features or a brochure as long as your arm.  They are an "elegant" solution to a problem.&lt;br /&gt;&lt;br /&gt;I think that we as software producers need to stop deluding ourselves that we'll fix it tomorrow, or that hitting a release date is the #1 goal of a software team.  Tomorrow will never come (at least the tomorrow we're thinking about) and a timeline-over-quality approach leads to weak products.&lt;br /&gt;&lt;br /&gt;I was recently faced with a business decision about when to launch my own product, and with what feature set.  The choice was to launch sooner (a Quarter at least) with a much reduced feature set (that solved the problem "less well" than the original design) or to stay the course and deliver on the original mission.  Giving up short-term revenue is not an easy choice to make for anyone.  But ultimately I believe that it's the substantially better product that is going to win, not hitting the market 3 to 5 months sooner.&lt;br /&gt;&lt;br /&gt;This decision has caused me adopt different habits.  Like, when you find a bug, stop what you're doing and fix it now.  It won't be easier or cheaper to fix later – it'll be harder and more expensive (time and money), when you've lopped another 20% of code on top of your application – or after it hits the street and starts affecting customers.  My personal commitment, is to ship with "zero known bugs".  Not that I and my customers won't find some after release, like with any software product, but I'm not going to use a "known issues" list as a crutch to ship early.&lt;br /&gt;&lt;br /&gt;The need to stick to your ideals and put quality first is even more important for small companies.  Maybe if you have a monopoly you can get away with bad customer service and poor quality products, because customers have nowhere else to go.  But if you're an up-and-comer looking for an angle to compete on, make it quality.  It's something that people sacrifice far too often and can give you a leg-up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113750736732610863?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113750736732610863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113750736732610863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113750736732610863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113750736732610863'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2006/01/software-ideals.html' title='Software Ideals.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113448488796082451</id><published>2005-12-13T09:11:00.000-05:00</published><updated>2006-03-30T23:14:33.260-05:00</updated><title type='text'>A Quick Recap</title><content type='html'>My brain will soon be in holiday mode so rather than a whole article this week, we get a "flashback episode" of sorts.&lt;br /&gt;&lt;br /&gt;I started this Blog in September 2005 just to give it a whirl.  So far, over 2,000 unique visitors have stopped by and the list is growing.  A few of you even keep coming back, so thank-you for that.&lt;br /&gt;&lt;br /&gt;I believe very strongly that the way we all produce software needs some work.  I believe that we as an industry need to get better at predicting when we'll ship our products and without falling back on sacrificing quality to hit some arbitrary date just so that we can say we hit the date.&lt;br /&gt;&lt;br /&gt;I also believe very strongly that the general purpose project management approach doesn't cut it for software projects, which are by nature extremely complex.  We need to focus on the things that are tripping us up specifically in software projects if we're going to crack this nut.&lt;br /&gt;&lt;br /&gt;Here are some past articles in case you haven't seen them yet.  Also, check out &lt;a href="http://www.devshop.com"&gt;Devshop.com&lt;/a&gt; and put your e-mail address on file if you'd like to be notified when my product ships in the new year.&lt;br /&gt;&lt;br /&gt;See you in 2006!&lt;br /&gt;&lt;br /&gt;Craig.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Past articles:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/11/trick-question-could-you-manage-space.html"&gt;Trick Question: Could You Manage a Space Shuttle Launch?&lt;/a&gt;  This one is about how we intuitively know that domain specific experience counts, but haven't quite built that into project management methodology yet.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/11/customers-dont-buy-solutions-they-buy.html"&gt;Customers don't buy "solutions", they buy products and services. May the best products and services win.&lt;/a&gt;  Some thoughts contradicting the "solution selling" style.  It's not for everyone.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/10/if-you-get-1-thing-right-in-your.html"&gt;If you get 1 thing right in your application, make it the User Interface.&lt;/a&gt;  The importance of "look and feel" to your customers and your revenue.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/10/more-general-purpose-project.html"&gt;More General Purpose Project Management Theology Isn't Helping Matters!&lt;/a&gt;  A mild rant.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/10/projectsteps-keep-it-simple.html"&gt;Keeping it simple.&lt;/a&gt;  A point about focusing on the right things and forgetting the noise.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/10/cost-of-late-software.html"&gt;The Cost of Late Software.&lt;/a&gt;  Do you know how much this costs your company?  It's big.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/building-it-front-to-back.html"&gt;Building Front-to-Back&lt;/a&gt;  The benefits you can achieve by building your User Interface and getting approval on it before building out the back-end.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/how-to-explain-good-architecture-to.html"&gt;How to Explain Good Architecture to the Non-techie.&lt;/a&gt;  It's more about operational effectiveness than anything.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/isolated-occurance-might-be-managable.html"&gt;A Trend Can Kill You.&lt;/a&gt;  Hiccups aren't usually one-offs.  They can often indicate trends you should be watching.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/software-wasnt-late-it-was-supposed-to.html"&gt;The Software Wasn't Late, It Was Supposed to Take That Long.&lt;/a&gt;  The difference between really "late" software, and software that was estimated wrong.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/power-of-suggestion.html"&gt;The Power of Suggestion.&lt;/a&gt;  A word about the denial that many of us live in with respect to software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113448488796082451?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113448488796082451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113448488796082451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113448488796082451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113448488796082451'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/12/quick-recap.html' title='A Quick Recap'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113278275873124837</id><published>2005-11-23T16:34:00.000-05:00</published><updated>2006-03-30T23:02:01.206-05:00</updated><title type='text'>Raising your Credibility</title><content type='html'>As a project manager of a software project, one of your biggest responsibilities and greatest challenges will be to make people understand things they don't want to understand and believe things they don't want to believe.  You will be fighting a kind of self-hypnosis, where people believe what they want to believe because it's just easier that way.  (See also:  &lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/power-of-suggestion.html"&gt;The Power of Suggestion&lt;/a&gt;)  This is the hardest kind of convincing.  In order to pull it off, you're going to need to have a lot of credibility saved up.  Credibility is like money - you earn it today so you can spend it tomorrow.  Like with money, you can do things to invest in your credibility that will have bigger credibility payoffs later (a kind of Return on Investment).  And of course, nothing builds credibility like a solid track record of delivery.  It’s hard to argue with results.&lt;br /&gt;&lt;br /&gt;Here are the kinds of beliefs you will have to dispel before you can get your various messages through:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"Other Co. is pumping out products at twice this rate, why can't we?"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"The development department has a pool table, so they aren't working hard enough."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"The developers all wear jeans and rock T-shirts so they don't take their work as seriously as the rest of us."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Nothing else the company does takes as long as the software does, so something must be wrong with the way we develop."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"If we ship it now, we can fix the architecture later."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;“We can’t just freeze all of the requirements for the next 8 months while we build the software.  We need to be responsive to the market.”&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Here's the strangest factor you’ll be battling:  The very people that claim development takes way too long and is always late are the very people that will try to beat you up to lower your time estimates and cut any buffer time you put into the schedule (and thus jeopardize the project’s chance of success).  Some of your stakeholders will be Sales people – professional negotiators.  When they convince you to strip your buffers from the schedule and lower your time estimates, they believe they’ve won something.  Go figure.&lt;br /&gt;&lt;br /&gt;One approach to dispelling these development myths would be to arm you with various well written explanations and superbly logical arguments as to why they are false.  In my experience, that doesn’t work.  The truth is the very nature of software development starts you off with a negative credibility balance:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The net productivity difference (all-in) between a good developer and an average one can be as much as 10 times (various organizations have studied this), so attracting the “good” ones is very important&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Attracting and retaining good developers is a highly competitive business, so perks like a casual (comfortable) work environment, good pay, stock options and flexible work hours are thrown in to sweeten the deal&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developers typically love their jobs, so even when the pressure mounts, they may not show the stress cracks as much as someone who is equally pressured but doesn’t love their job quite as much&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Add to the mix the fact that most development projects (even some of your own) have been late or troubled, and you don’t have a lot of credibility to begin with.  Because of these software development realities, you as a leader need to be on top of your game to counter the negative perception of the nature of software development.  If you want to convince one of your stakeholders of something unintuitive, you need to be the pinnacle of professionalism with credibility to boot.&lt;br /&gt;&lt;br /&gt;Here are the things I’ve found that build credibility and help you get your message through without falling into the trap of arguing about how hard the developers work, whether or not shirts and ties make you more professional or why attracting and retaining top-notch developers is in the company’s best interest, compared to another type of employee:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;You need to deliver&lt;/strong&gt;.  You need to keep your word.  When you say you’re going to be done in 6 months, it is critical that you are.  If you succeed, the next time you need to convince someone of something counter-intuitive, you’ll have more credibility in the bank, so it will be easier.  If you fail, the next time will be even harder.  It’s a cumulative thing.  Each success or failure affects your credibility balance.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In order to deliver, you need to &lt;strong&gt;protect your schedules&lt;/strong&gt;.  I call it &lt;em&gt;Risk Management&lt;/em&gt; and it’s your #1 job as a software project manager.  Since statistically most software projects fail (70%), you’re inherently on the defensive anyway, so you need to think like everything is a possible risk.  One of the best techniques you can use to protect the schedule is to build-in time for all of the things that typically throw software projects off the rails.  Things like:  Time Estimation Error, Distraction Rates, Overhead, Requirements Churn, etc.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In order to protect your schedule and the “padding” you’ve put in, you’re going to need a solid rationale as to why that particular % of time was chosen, and what factors you’re padding for.  Otherwise, when you go up against a professional negotiator (like a Sales person), you’re going to walk away having been talked out of your padding.  And while simply “refusing to give in” is better at protecting the schedule than giving-in, being able to convincingly articulate what you’ve padded for and why you chose the amounts you did is even better.  It protects the schedule and builds your credibility at the same time.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Never use your “gut” as an unsubstantiated argument.  You can talk about how good your instincts were after-the-fact, but it’s not very convincing up-front unless you already have a huge credibility balance.  While I’m a big believer in using your instincts as one of the data points in decision making, it’s best to figure out a way to prove or disprove them anyway.  If you disprove a gut instinct, you save yourself a costly mistake.  If you prove it, you gain more credibility anyway, so it’s a win-win.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Be an obsessive note taker&lt;/strong&gt;.  Most people don’t do this.  It takes discipline to get in the habit.  In the moment, it’s hard to know which decisions or facts you’re going to need as corroborating evidence later, so write them all down.  Any time you can point to written historical evidence of decisions that were made, when, and by whom, you’re going to have a psychological advantage in getting your point across.  People regularly (and conveniently) forget how often they’ve changed their minds on their priorities, or a feature list.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Use metrics&lt;/strong&gt;.  Figure out what metrics you think are important for your type of project and track them.  Whether it’s the rate of change for requirements, or how often time estimates are wrong (and you are therefore padding for that fact), nothing backs up padding in the schedule like stats.  It’s hard to argue that a 30% buffer in the schedule is too much when you can point to statistical proof that developer time estimates are off by 30% on average, over time.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Hopefully some of these tips will help you incrementally increase your credibility balances.  Unfortunately there’s no overnight solution, but with discipline and a structured approach, you can do it.&lt;br /&gt;&lt;br /&gt;If anyone has any other tips or tricks on the subject, I’d love to hear about them.  Please post a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113278275873124837?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113278275873124837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113278275873124837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113278275873124837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113278275873124837'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/11/raising-your-credibility.html' title='Raising your Credibility'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113198367785635088</id><published>2005-11-14T10:46:00.000-05:00</published><updated>2006-03-30T23:01:09.856-05:00</updated><title type='text'>Trick Question:  Could You Manage a Space Shuttle Launch?</title><content type='html'>A few months ago I spent a couple hours with a project manager who by all accounts, is rather good at her job (I know several people that know her professionally and did some background checking).  We were discussing domain (software) specific project management techniques, like tracking Time Estimation Error, Distraction Rates, and keeping &lt;em&gt;requirements&lt;/em&gt; in-sync with schedule.  As our meeting was ending, she mentioned that someone had asked her a while ago whether or not a good project manager (or a project manager with a good project management methodology) could manage any type of project – like a space shuttle launch.  She quickly said yes, because the basic elements are the same in any project.  It occurred to me on the drive home that this is not an uncommon belief – that a project is a project is a project...&lt;br /&gt;&lt;br /&gt;So – why we are we (the project management discipline at large) so terrible at running software projects specifically?  It’s a well known fact that the majority of software projects globally are considered failures (Standish Group’s Chaos Report) – failure being defined as: late, off-spec, and/or over budget.  If general purpose project management methodologies aren’t making software projects slam dunks, then either the methodology isn’t all it’s cracked up to be, or there’s something about software projects in particular that continues to trip us up.  I say both.&lt;br /&gt;&lt;br /&gt;Here’s a trick question.  I will read all sorts of things into your answer to this question and tell you about them in a minute:  If you were the head of NASA, responsible for choosing the project manager for the next space shuttle launch, and you had 3 candidates to choose from, which would you choose?  Here are the candidates:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;“Newbie PM (Project Manager)”&lt;/strong&gt; – has accreditation from a leading project management school; graduated top of class; knows the PMBOK (Project Management Body of Knowledge) like nobody’s business; can quote the process to you word for word; never managed a project.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;“General purpose PM”&lt;/strong&gt; – has accreditation, and has 10 years experience managing all sorts of projects (but never any 2 of the same type); sample projects ranged from:  building a new home, a Windows 2003 server rollout, a training program for a new software system in an organization with 10,000 employees, planning a sales conference, etc.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;“NASA veteran PM”&lt;/strong&gt; – has accreditation, 2 years experience managing a variety of projects (similar to candidate #2), but has been managing space shuttle launches for the last 6 years.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Which would you choose?  You’d probably want to know their track record too, but for the purpose of this little game, that information is not available.  I’d bet dollars to donuts you’d pick #3 – the NASA veteran.  But if you also started this article thinking that with a good process you can manage any type of project, then something is at odds – those 2 opinions are inconsistent with each other.  If you truly believed that the process was the key, then technically any of those 3 candidates should do fine, because they all have the process down pat (the accreditation).  And candidate #2 actually has more years experience overall.  Reading between the lines, here’s what I think is going on:&lt;br /&gt;&lt;br /&gt;Managing isn’t a true/false binary thing.  Of course you &lt;em&gt;can&lt;/em&gt; manage any project with any project management methodology, but the real question is:  what would your success rate be?  If you chose candidate #3, it’s because your instincts told you that experience with that particular type of project (a space shuttle launch) counts for a lot.  Most people  would intuitively believe that candidate #3 has something above and beyond the other 2 candidates.&lt;br /&gt;&lt;br /&gt;Most project management methodologies are general purpose.  For whatever reason, they continue to embody the opinion that all projects are the same – and should be managed the same.  They are specifically designed to take the human element out of the equation – to say that anyone following the process can manage a project well – it’s the process that counts.  For software projects en-mass, this approach clearly isn’t working, as evidenced by the poor success rates.&lt;br /&gt;&lt;br /&gt;Today’s project management methodologies are useful for teaching someone the ABC’s of project management.  There certainly is a lot of useful stuff to be learned.  Unfortunately, there’s also a lot missing.  Just like in school, consider that the typical project management accreditation is like a Bachelor’s degree.  And we all know how dazzled prospective employers are when we tell them that we have a Bachelor’s degree right?  Well, maybe not so much.  Current project management methodology is the scholastic equivalent of reading and writing.  You may need it, but you only learn the good stuff &lt;em&gt;after&lt;/em&gt; you learn to read and write.&lt;br /&gt;&lt;br /&gt;The real power (of success) – the advanced stuff - comes from some degree of specialization.  If you want to go beyond the basics of project management, and hike up your success rate, you’ve got to focus on a particular type of project.  Most of us do at some point in our careers anyway, because the organizations we work for are somewhat specialized:  IT, Construction, Legal, whatever.  What isn’t typically specialized however, is the methodology we use to manage those different types of projects.  Our organizations specialize in some type of business, &lt;em&gt;we&lt;/em&gt; specialize in some kind of project, and then we go use a general purpose methodology – no wonder software projects are late most of the time.&lt;br /&gt;&lt;br /&gt;Specializing a project management methodology simply means looking for factors that typically affect a certain type of project (example:  software projects), and modifying the methodology to account for those factors.  (This is another way of saying:  leveraging domain specific experience.)  For software projects, some of the top factors that throw them off the rails are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Time estimates are wrong&lt;/strong&gt; – granted it’s difficult to produce accurate estimates, but few actually try anything more scientific than gut feel estimates, so we haven’t quite exhausted the possibilities here.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Distraction is rampant&lt;/strong&gt; – software projects are long term (6 to 12 months) by nature, and are planned to have teams work on them near full-time, but the actual amount of time they get to spend on them is typically far less than near full-time; such is the nature of business.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Requirements consistently fall out-of-sync with schedules&lt;/strong&gt; – we’ve somehow convinced ourselves that we can continue to evolve requirements and designs all the way through the project, but somehow the initial (gut feel) time estimate should stick.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;If we know that these are the biggest common factors that throw a particular type of project off the rails, then what have we done to our methodology to account for them?  Not much.  Typically, most project managers of software projects are still trying to get away with that plain vanilla (“goes with everything”) project management methodology.  It’s never going to work.  It’s only half the solution.&lt;br /&gt;&lt;br /&gt;Veteran project managers that have a high success rate typically use domain specific tips and best practices to run their projects.  They’ve developed their own checks and balances to alert them when something is sliding off track.  They’ve learned over the years, what the common factors influencing their particular type of projects are, and how to manage them effectively.  Mostly, they do it in their head – they rely on experience and intuition to side-step the common pitfalls.  For example, a veteran software project manager keeps tight control over requirements and schedule – keeping them constantly synchronized.  He or she knows enough to take developer time estimates and pad the heck out of them, because there is typically an error margin with them.  He or she also knows that on any v2 of some project, there had better be some time built in to fix bugs from v1, based on experience.&lt;br /&gt;&lt;br /&gt;It stands to reason that these domain specific habits of the successful veterans would be of tremendous value to all other project managers in that particular domain.  The trouble is, currently, it takes years to develop that experience and success rate.  Wouldn’t it be great if this stuff was sharable, given to each newbie project manager in a particular field, and more widely and explicitly adopted?  I think it would have a dramatic impact on the software industry’s track record as a whole.  In fact, wouldn’t it be great if that acumen, those tips, tricks and experiences were built into your project management tool so that tracking, trending and reporting on all of it was automatic?!  (Blatant plug:  My company[&lt;a href="http://www.devshop.com"&gt;Devshop.com&lt;/a&gt;], still in stealth mode, is working on a solution to this very problem – stay tuned!)&lt;br /&gt;&lt;br /&gt;If you want to improve your success rate with project management, specialize.  If you’re taking on projects of similar types (all software projects for example), don’t automatically look to more accreditation or general purpose PM methodology for the answer.  First look for the patterns that throw your particular type of project off the rails, and manage those factors first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113198367785635088?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113198367785635088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113198367785635088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113198367785635088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113198367785635088'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/11/trick-question-could-you-manage-space.html' title='Trick Question:  Could You Manage a Space Shuttle Launch?'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113098232197765980</id><published>2005-11-02T19:58:00.000-05:00</published><updated>2005-11-03T16:13:11.530-05:00</updated><title type='text'>Customers don't buy "solutions", they buy products and services.  May the best products and services win.</title><content type='html'>Several years ago, I remember being enlightened by some Marketing folks about "solution selling".  The idea is that there are some strong advantages to elevating the discussion with prospects from simple feature lists and head-on comparisons with other products, to the broader topic of which "solution" is better than the other "solutions".  See, a "solution" is fuzzy concept.  It's really hard to quantify a solution, or say with certainty that one solution is better than another solution.  Unlike feature lists.  With feature list comparisons, one product typically comes out quantifiably ahead.  Not good if yours is the weaker product.  And so for many companies, solution selling became a great way of taking attention away from the feature lists (where they didn't look so good) and also made them feel like they were taking the high road.  "Oh, Mr. Customer, feature lists aren't important.  Look over here."&lt;br /&gt;&lt;br /&gt;Over the years, I allowed myself to be convinced of this tidbit.  After many years of working in the enterprise software space, I've come full circle and no longer believe it.  Customers don't buy solutions.  They buy products and services.  The reason they buy products and services instead of solutions is that in the buying cycle, they typically only hook up with a prospective vendor after they've gone through the first few steps:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Feeling the pain of some problem&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Understanding what that problem is in broad strokes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Looking around to get at least a light understanding of what some of the categorical solutions may be&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choosing the most suitable "category" of solutions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Begin researching products and services in that category&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;For example:  If I have the problem of not being able to get everywhere I need to go with the two legs I was given at birth, then I don't start looking around for a "transportation solution".  I already know enough about the various categories of transportation options (bikes, cars, buses, motorcycles) to weigh the various pros and cons of each, without ever talking to a vendor.  If I settle on the idea of a car, then a bike vendor is going to have a real tough time convincing me I should go with a bike instead of a car.  But, I've still got several car vendors and products (and services) to choose from, so there the selling game begins.  Either I approach a handful of vendors on my own, or they "pull" me in with various advertisements, cold calls and free x-boxes with the purchase of every new vehicle.  By that time, I'm a qualified lead.  I'm not so much looking for a conceptual "solution" to my transportation problem, I've already narrowed it down and I'm now looking for a product or service with which I can solve my own problem.&lt;br /&gt;&lt;br /&gt;Sales people know that it is way too costly and difficult to "create" demand.  They land more sales and get bigger commissions by seeking out prospects that already have demand, and have determined what kind of "solution" they need.  They are now at the product (or service) comparison stage.  Now it's your product vs. the other guy's.&lt;br /&gt;&lt;br /&gt;Besides.  If a legitimate business problem is "we can't keep track of each time we interact with a customer", then most businesses figure out on their own that a CRM system is a categorical solution, and then enter the product comparison stage all by their lonesome, without the CRM company having to do too much to convince them that they actually need to keep track of all their customer interactions in the first place.  And as further proof, I submit to you:  When's the last time you saw a contract or invoice that read:  "Ability to keep track of all customer interactions = $50,000".  No, but many read:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Server license:  $10,000&lt;/li&gt;&lt;br /&gt;&lt;li&gt;User licenses:  $30,000&lt;/li&gt;&lt;br /&gt;&lt;li&gt;End-user training: $5,000&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Telephone support: $5,000&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;There we go.  They bought products and services.  Not a solution.  It's the things that appear on the invoice and in the contract that they actually bought.  Not what problem they intend to solve with those things.&lt;br /&gt;&lt;br /&gt;The reason this is significant is because it informs some strategic decisions for software companies.  If you're selling a "solution", you're probably one of those companies that doesn't put a feature list, sticker price, or screen shots of your product on your web-site because you feel it cheapens you.  You expect prospects to call you to ask to get a demo from sales rep that's going to hound them until they either buy or tell them to bugger off.  I can tell you from experience, droves of possible customers will turn away without going past your front page if there aren't clear links to some or all of those things prominently displayed on page 1.  The reason is, they don't need you to tell them what their problem is or what the solution is.  Rightly or wrongly, they already believe they know, and now just want to easily compare your product (or service) to someone else's.  I really can't see why hiding important information like that is a smart move.&lt;br /&gt;&lt;br /&gt;In the last year I've gone looking through several product categories:  Project Management software, Content Management software and Web-site Tracking software to name a few.  Those companies that thought they were selling me a "solution" to "knowing my Web-site visitors", "creating predictability for my projects", or "consistent customer service" and hid their key feature lists, screen shots and price from me, didn't get more than 5 seconds of my attention. I don't have time to call a sales rep for each of the 20 products I want to have a peak at.  Nor do I want to give you permission to keep emailing me or calling me just because I asked you how much your product was or if I could see some screen shots.  If all of that kind of information is hidden, then I proceed to assume:  it's too expensive, too hard to get started, and I generally won't like the product.&lt;br /&gt;&lt;br /&gt;All this to say, put the focus where the customer is going to put it.  On the product.  What does it do?  How does it do it?  Is it easy to use?  How much does it cost?  What's better about it than the competing products?  The one exception to this rule is if you're in a space that is so entirely new that consumers in general haven't even figured out that they have a problem yet, or what any possible solution may be.  In which case, you've got a lot of education to do before you can sell anything, and I don't envy you.&lt;br /&gt;&lt;br /&gt;It's not that I'm advocating your message and materials should only consist of a price and feature list for comparison shoppers.  But somewhere in between the two extremes of completely abstract solution selling, and totally comoditized selling of a bag of features, lies a happy medium, where the focus is still on the products that solve the problem.  Being "product" (or service) focused with your messaging doesn't just mean you're a list of features and nothing more.  In fact, many times, products with less features are better than their bloated competition.  The magic is how those features (I prefer capabilities to features) are sewn together in ways that are more useful, valuable or easier to use than the competition.  Those things translate into competitive edge.&lt;br /&gt;&lt;br /&gt;The funny thing is, I hear from several Marketing folks as they flip through product web-sites, particular technology companies' sites, a snort of contempt:  "They're all so product and feature focused.  They don't understand solution selling.  They need to elevate the discussion."  Actually, I think they just know their audience and want to make it real easy for them to make a qualified decision.  If your product is weak, then invest in making it stronger - don't go hiding it from plain site behind a lot of abstract "solution" talk.  Stand by your product, and at the end of the day, may the best products win.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113098232197765980?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113098232197765980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113098232197765980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113098232197765980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113098232197765980'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/11/customers-dont-buy-solutions-they-buy.html' title='Customers don&apos;t buy &quot;solutions&quot;, they buy products and services.  May the best products and services win.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113054762666215711</id><published>2005-10-28T19:16:00.000-05:00</published><updated>2005-10-31T16:23:14.216-05:00</updated><title type='text'>If you get 1 thing right in your application, make it the User Interface</title><content type='html'>Here's a train of thought that further proves to me that a good User Interface can make or break an application.&lt;br /&gt;&lt;br /&gt;The thinking goes like this...  To be &lt;em&gt;really&lt;/em&gt; successful, a great strategy is to do a smaller number of things, but do them noticeably better than the next guy.  In other words, don't spread yourself too thin.  Nobody ever became fabulously successful by doing a long list of things in a mediocre way.  If you want to get noticed, you've got to do something worthy of notice, something that most other people stop short of doing (because it's too hard, or takes too much investment for them to do).  You need to take something to the next level.  That's what gets you noticed and gets people talking.  That buzz creates momentum and can bring all sorts of good things (reputation included) your way.&lt;br /&gt;&lt;br /&gt;If you want to do something &lt;em&gt;really&lt;/em&gt; well, a good place to start is figuring out what "well" means.  By what factors will your task be measured?  And exactly who will do the measuring?  Knowing what buttons you need to push, and who owns those buttons is a tremendous advantage.  It helps you plan your game - how you're going to go get that high score in the right people's eyes.  It's worth a few minutes, days even, to make these things explicit.  Think about them.  Write them down.  Once you've got a handle on those things, choices about how you're going to spend your time, what pieces of the overall puzzle you're going to invest your energy in become a lot easier to make.  You can make wiser decisions.  For example, the Dot-com bust taught a bunch of people that there's no point in investing heavily in getting "clicks" or "eyeballs" if you're ultimately going to be measured only by actual sales.  Oops, a bunch of people were measuring themselves on the wrong scale.&lt;br /&gt;&lt;br /&gt;Now to apply this to software products...  What buttons do you need to push to make a software product successful?  When you hear high-flying CEO's being asked about what made their companies successful, I've never heard, "Well we have 47 features and the competition only has 40, so we're more value for the money."  Rather, you'll hear things like, "We're the ones who made it really simple to do X."  Making a software product simple is all about the User Interface.&lt;br /&gt;&lt;br /&gt;In software, who's going to score the product?  Not your boss.  Maybe not even the person that "purchased" the software (on behalf of an organization full of end-users), but the actual end-users themselves.  They are the ones that are going to love or hate your product and determine the level of repeat business and referrals you get - or don't get.&lt;br /&gt;&lt;br /&gt;That being the case, it's a shame that most User Interface work is tacked onto the end of a project like a necessary evil.  (And we all know that things left to the end of a software project are the first ones to get cut.)  Seems to me that people have it backwards.  Do the most important things first.  Make them absolutely shine before you spend your time doing anything else.  Because if you haven't got those things right, nothing else matters.  If that means you had to cut some features, but shipped the features you did finish in a product with a User Interface that is really strong, you'll be far better off - in the eyes of the people who matter most:  the people holding those buttons you've got to push - the users.&lt;br /&gt;&lt;br /&gt;I don't know a single software company or team that wants to deliver a piece of software to their customer and never get repeat business.  What that means is that the end-goal isn't just getting the contract signed off or getting paid "this time".  It's about creating fans of your work, so that they keep coming back and actually refer their colleagues to you.&lt;br /&gt;&lt;br /&gt;The importance of User Interface investment is sometimes a controversial topic.  I've seen people argue very passionately on both sides.  I'm a gear-head by trade.  I came up through the ranks of development organizations and am certainly not a graphic designer.  But I'm often the minority in the development organization when it comes to my strong beliefs in putting User Interface first.  Developers pride themselves on not being influenced by shiny, glitzy User Interface baubles.  But baubles are not what I'm talking about, of course.&lt;br /&gt;&lt;br /&gt;If the scale your success is going to be measured on, is how often you get repeat business, and referrals - how many fans of your work you create; and the people doing the scoring are your users, then it's clear that User Interface design has to be your priority.  Nothing is worth doing if it isn't worth doing well.&lt;br /&gt;&lt;br /&gt;Here's a bit of irony:  I'm currently developing a software product aimed specifically at development teams (&lt;a href="http://www.devshop.com"&gt;Devshop.com&lt;/a&gt;).  These are the very folks who claim to be immune to the hypnotic effects of a great User Interface, and argue regularly that it's not important, compared to all of the very technically challenging things (and interesting things to them) that happen on the back-end.  I've demo'd the tool to close to 50 of these people in the last 6 months.  More often than not, one of the first things out of their mouth is, "Wow.  That UI is incredible."  Their eyes light up when they say it too.  It's like a little spark of desire was created inside them.  Now I know that as long as my feature set is comparable to others in my category, they will desire mine more than the other guy's, because I took the time to do one thing better than the next guy:  focused on User Interface design, to make my end-user's experience actually desirable.  I put the user first, brochure second.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113054762666215711?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113054762666215711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113054762666215711' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113054762666215711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113054762666215711'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/if-you-get-1-thing-right-in-your.html' title='If you get 1 thing right in your application, make it the User Interface'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113016303496779489</id><published>2005-10-24T09:10:00.000-05:00</published><updated>2005-10-25T15:48:06.126-05:00</updated><title type='text'>More General Purpose Project Management Theology Isn't Helping Matters!</title><content type='html'>I spent the bulk of yesterday searching the 'Net for focused, practical project management for software development.  What I found was not very inspiring.  I have to admit, I've been preaching for a while that overly generalized project management theology doesn't work - at least for software projects.  How can I say that?  Statistics.  70% of software projects fail.  I didn't do the research personally, but it's fairly well known.  One particular company (The Standish Group) produced quite a famous report (CHAOS) on the subject if you don't believe me.  You can't say things are working when 70% of the projects fail.  Something's fundamentally broken.&lt;br /&gt;&lt;br /&gt;A couple times this past year, I've gone out in search of the kind of specific nuggets of wisdom and experience that can help dramatically improve the chances of success for software projects.  So far however, the project management discipline at large seems to creep along, abstracting ideas further and further out to make them equally applicable to every kind of project, and none.&lt;br /&gt;&lt;br /&gt;Here's some of the so-called "wisdom" I've found in my journeys:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Good Planning] Take the time to plan your project properly.&lt;/em&gt;  K.  Thanks.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Agreed-Upon Objectives] ...that can be reviewed throughout and at the end of the project to ensure they have been met.&lt;/em&gt;  Come on now, we all know that no set of product requirements ever look the same at the end of the project as they did at the beginning of the project.  How about some help dealing with that?&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Milestones in your Schedule] ...will assist you to measure real progress.&lt;/em&gt;  Oh we have the milestones alright, trouble is they're never reached on-time.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Resolve Project Issues in a Timely Manner]&lt;/em&gt;  Don't slack off.  Gotcha.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Assess Your Risks throughout] ...meeting with your team...&lt;/em&gt;  We keep telling the project sponsors that changing their mind's every week keeps delaying the delivery of the project, but they don't listen or think we're just whining.  Give me something real to go to them with.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The trouble with all of the advice out there that I've seen is that it's ineffectual.  It's definitely hard to argue with because on some ultra high-level, it's all true.  But that doesn't make it useful.  It's like saying, "You need to work hard to be successful."  Gee, thanks.  Give me something tangible please.  Something I can do tomorrow that will have a real impact.&lt;br /&gt;&lt;br /&gt;There's another related process called "The Demming Wheel". Plan, Do, Check, Act. (PDCA) [Every good process or methodology needs at least a 3 letter acronym, afterall].  There's a whole lot of fluff behind each phase of course, but it's all so utterly abstract that it's just a vehicle for false hope, unless you can make it tangible.  SDLC's (Software Development Life Cycles) are a dime a dozen.  Everyone's got one they think is magic.  And still, 70% of software projects fail.&lt;br /&gt;&lt;br /&gt;I honestly don't understand why more people aren't focusing in on certain types of projects more, when developing methodology.  Maybe because the more specific you get, the more you can actually be held accountable.  Application development is more than a $10 billion dollar industry.  Surely it's big enough now to stop folding it in with the project management mother ship and create a specialty around just managing software projects, with all of their unique challenges, risks and techniques?&lt;br /&gt;&lt;br /&gt;This is what I'm currently working on in the shadows right now, with &lt;a href="http://www.devshop.com"&gt;Devshop.com&lt;/a&gt;.  I plan to blow your minds in the new year.  My big bold claim is that I've boiled down the essential elements of success for software projects, and am building a product around it to capture and share it all with you.  It may not be applicable to any other kind of project, but for software projects, there's nothing else that can touch it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113016303496779489?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113016303496779489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113016303496779489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113016303496779489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113016303496779489'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/more-general-purpose-project.html' title='More General Purpose Project Management Theology Isn&apos;t Helping Matters!'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-113016280055761783</id><published>2005-10-24T09:06:00.000-05:00</published><updated>2006-03-30T23:13:48.243-05:00</updated><title type='text'>ProjectSteps: Keep IT Simple</title><content type='html'>Stephen makes a point illustrating the 80/20 rule, including 80% of the beer being consumed by 20% of the drinkers!&lt;br /&gt;&lt;br /&gt;He's commenting on a survey that asked successful business leaders about their success.  They said they focussed on simplicity in everything they did.  The study concluded that focused companies were more profitable.&lt;br /&gt;&lt;br /&gt;It's so easy to make things complicated for ourselves.  In so many cases, the things you only spend 20% of your time on will account for 80% of your success.  Doing a "lot" of things makes us feel productive, but doesn't necessarily increase our chance of success.&lt;br /&gt;&lt;br /&gt;This is also true in managing software projects.  There are only a handful of factors that throw most software projects off the rails - not hundreds.  Manage these, and you'll do just fine.&lt;br /&gt;&lt;br /&gt;Here are the ones I focus on:&lt;br /&gt;&lt;br /&gt;1.  &lt;strong&gt;Time Estimation Error&lt;/strong&gt; - If you can't trust the estimates coming from the team, the project plan will never be accurate.  There are ways to manage this.&lt;br /&gt;&lt;br /&gt;2.  &lt;strong&gt;Team Distraction Rates&lt;/strong&gt; - If your plan doesn't account for the times the team is going to inevitably be pulled off the project, your plan will never be accurate.&lt;br /&gt;&lt;br /&gt;3.  &lt;strong&gt;Requirements&lt;/strong&gt; - If you can't keep a handle on the requirements for the product you're building, or can't express the true impact of changing requirements while you're making those decisions to approve the change, your plan will never be right.&lt;br /&gt;&lt;br /&gt;These ones are the secret to delivering software on time.  Forget about critical path analysis, Pert charts and automated workload balancing.  Projects don't fail because you didn't spend enough time looking at the critical path.  They fail because the time estimates were wrong, people got pulled off the team, or requirements changed too much.  Manage those.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-113016280055761783?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://projectsteps.blogspot.com/2005/08/keep-it-simple.html' title='ProjectSteps: Keep IT Simple'/><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/113016280055761783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=113016280055761783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113016280055761783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/113016280055761783'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/projectsteps-keep-it-simple.html' title='ProjectSteps: Keep IT Simple'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112973315674351873</id><published>2005-10-19T09:39:00.000-05:00</published><updated>2005-10-19T09:45:56.750-05:00</updated><title type='text'>A Really Cool Way to Watch Your Web-site Traffic.</title><content type='html'>Very cool.  I just stumbled across this site/product:  &lt;a href="http://www.visitorville.com"&gt;www.visitorville.com&lt;/a&gt;.  It's a hosted service, that's free for less than 50 unique visitors per day, and becomes a paid subscription with higher volumes.  Anyway, the really neat thing is that it comes with a desktop reporting tool - only it's not so much reports, as a Sim-City view of your web-site, with little folks taking taxi's and buses to your various pages (represented by office towers).&lt;br /&gt;&lt;br /&gt;If you want, you can click to follow a particular visitor around your site, start a chat with them, see their passport, and a surprising amount of other tid-bits.  This is one of the most creative products I've seen in an otherwise mundane product category.&lt;br /&gt;&lt;br /&gt;I installed it on my home PC, behind a firewall, and had it monitoring this blog.  No firewall issues.  I was up and running in 5 mins, watching my little visitors go about their business.&lt;br /&gt;&lt;br /&gt;Very cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112973315674351873?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112973315674351873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112973315674351873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112973315674351873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112973315674351873'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/really-cool-way-to-watch-your-web-site.html' title='A Really Cool Way to Watch Your Web-site Traffic.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112955157221898251</id><published>2005-10-17T06:26:00.000-05:00</published><updated>2005-10-17T07:19:32.236-05:00</updated><title type='text'>Managing Distraction</title><content type='html'>Just a quickie today.  In software land, people get &lt;strong&gt;pulled off&lt;/strong&gt; their primary projects &lt;strong&gt;regularly&lt;/strong&gt;.  Happens all the time.  &lt;strong&gt;What's interesting&lt;/strong&gt;, is that even though &lt;strong&gt;experienced project managers&lt;/strong&gt; know this and pad for it to some degree, even they can still &lt;strong&gt;drastically underestimate&lt;/strong&gt; just how often people get pulled.&lt;br /&gt;&lt;br /&gt;I've heard numbers like &lt;strong&gt;20 or 30%&lt;/strong&gt; being passed around as the &lt;strong&gt;rule of thumb&lt;/strong&gt; for padding a schedule for &lt;strong&gt;unforseen difficulties&lt;/strong&gt;.  In my experience, if things &lt;strong&gt;only deviate&lt;/strong&gt; from plan by 20 to 30%, &lt;strong&gt;it's a dream project&lt;/strong&gt;.  In reality, &lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/eliminate-impact-of-bad-time-estimates.html"&gt;Time Estimation Error&lt;/a&gt; alone can account for as much as &lt;strong&gt;25% of the entire schedule&lt;/strong&gt;, not including &lt;strong&gt;Distraction Rate&lt;/strong&gt; (can be another 20%), &lt;strong&gt;changing requirements&lt;/strong&gt; (another 30%), or &lt;strong&gt;truly unforseen&lt;/strong&gt; technical difficulties like wasting an entire day trying to figure out why you can't cast the result of a SQL Server SCOPE_IDENTITY() call to an Integer (because it returns a Variant, which needs to be parsed rather than casted).  It's &lt;strong&gt;no coincidence&lt;/strong&gt; that many software projects take cleanly twice as long as expected.  It's because if you &lt;strong&gt;add up the impacts&lt;/strong&gt; of the top 3 &lt;strong&gt;software project killer factors&lt;/strong&gt;, it's near 100% of the original schedule.&lt;br /&gt;&lt;br /&gt;Here's one you should track if you're not already:  &lt;strong&gt;Distraction Rates&lt;/strong&gt;.  Just keep a spreadsheet of each time someone on the team gets &lt;strong&gt;pulled off the project&lt;/strong&gt; to go do some other work, &lt;strong&gt;not related to the project&lt;/strong&gt;.  I'm not talking about counting half-hours.  You can even just do a proxy estimation at the &lt;strong&gt;end of each week&lt;/strong&gt;.  By the time 2 months has passed, you should see a &lt;strong&gt;pretty good chunk of time&lt;/strong&gt; that's slipped away.  If you've kept your spreadsheet up to date, you should be able to calculate on average, &lt;strong&gt;what % of each person's time&lt;/strong&gt; is spent doing work not related to the project, and also for the &lt;strong&gt;team as a whole&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Now that you've got the &lt;strong&gt;Distraction Rate&lt;/strong&gt; for each person, you can take the &lt;strong&gt;remaining portion&lt;/strong&gt; of the project (say, another 5 months), and multiply the remaining duration by the Distraction Rate.  So if you've got 5 months to go, and your team's distraction rate is 20%, then you're going to be &lt;strong&gt;1 month late due to distractions&lt;/strong&gt;, if you haven't already included an extra month in the schedule just to account for &lt;strong&gt;this one factor&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;This kind of trending let's you know &lt;strong&gt;what's going to happen&lt;/strong&gt;, before it actually does.  While on any given day, &lt;strong&gt;one individual distraction&lt;/strong&gt; might seem like an anomaly, if you look over a &lt;strong&gt;larger window of time&lt;/strong&gt; (monthly, for example), these kinds of things typically &lt;strong&gt;repeat themselves&lt;/strong&gt;.  If it's not one thing taking you away from the project, &lt;strong&gt;it's another&lt;/strong&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112955157221898251?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112955157221898251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112955157221898251' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112955157221898251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112955157221898251'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/managing-distraction.html' title='Managing Distraction'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112842593839696302</id><published>2005-10-04T06:33:00.000-05:00</published><updated>2005-10-04T06:38:58.406-05:00</updated><title type='text'>Think like the customer.  You are not the customer.</title><content type='html'>I'm reading this &lt;strong&gt;great book&lt;/strong&gt; called, "&lt;strong&gt;The Art of the Start&lt;/strong&gt;", by &lt;strong&gt;Guy Kawasaki&lt;/strong&gt;.  It's a &lt;strong&gt;no fluff&lt;/strong&gt; guide to getting a &lt;strong&gt;startup company&lt;/strong&gt; off the ground.  There's several great lines in this book, but one that particularly got me was this:&lt;br /&gt;&lt;br /&gt;Apparently, DELL has a sign in their office that says, "&lt;strong&gt;Think like the customer&lt;/strong&gt;" in big bold letters.  Not too far from it is another sign that says, "&lt;strong&gt;You are not the customer&lt;/strong&gt;".  Brilliant.&lt;br /&gt;&lt;br /&gt;I think that &lt;strong&gt;it's a mistake&lt;/strong&gt; to let &lt;strong&gt;customers design products&lt;/strong&gt;.  Anyone see the Simpsons episode about &lt;strong&gt;the car that Homer built&lt;/strong&gt;?  Customers &lt;strong&gt;aren't&lt;/strong&gt; usually designers.  BUT...  &lt;strong&gt;You can't be a good designer without understanding them&lt;/strong&gt;...&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112842593839696302?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112842593839696302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112842593839696302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112842593839696302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112842593839696302'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/think-like-customer-you-are-not.html' title='Think like the customer.  You are not the customer.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112834429559370393</id><published>2005-10-03T07:18:00.000-05:00</published><updated>2005-10-03T08:00:48.596-05:00</updated><title type='text'>The Cost of Late Software</title><content type='html'>&lt;strong&gt;Whatever you may think&lt;/strong&gt; the cost of late software is, it's at least &lt;strong&gt;an order of magnitude more&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Since software development &lt;strong&gt;isn't a capital intensive business&lt;/strong&gt;, requiring lots of up-front investment in materials or equipment, most people would think the &lt;strong&gt;cost of a late software project&lt;/strong&gt; is simply the extra cost of carrying the dev team's salaries for the extra time.  Not even including the intangibles like credibility, reputation, missed opportunites, etc., the &lt;strong&gt;REAL cost of late software is much higher&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The example&lt;/strong&gt; I always use comes from a &lt;strong&gt;small company&lt;/strong&gt; I worked with a couple years ago.  This company was &lt;strong&gt;about 20 people&lt;/strong&gt;, with &lt;strong&gt;1 flagship product&lt;/strong&gt; on the market, and another one still being developed in the basement.  So all of the company's &lt;strong&gt;$4 million/yr revenue&lt;/strong&gt; came from this one product.  It was a piece of enterprise software, that sold for about &lt;strong&gt;$50k for several thousand seats&lt;/strong&gt;.  The sales cycle was &lt;strong&gt;6 months&lt;/strong&gt; - from first introduction, to educating the customer, jumping through all the hoops, and &lt;strong&gt;finally closing the sale&lt;/strong&gt;.  The development team was &lt;strong&gt;5 people&lt;/strong&gt;, and they were working on the &lt;strong&gt;next version&lt;/strong&gt; of the flagship product - a development cycle of &lt;strong&gt;6 to 9 months&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;For any company like this, &lt;strong&gt;a slip of 30%&lt;/strong&gt; to the schedule is a &lt;strong&gt;BIG deal&lt;/strong&gt;.  Let's say it was a 9 month project.  &lt;strong&gt;30% is almost 3 full months&lt;/strong&gt;.  While the cost of carrying the 5 person dev team for another 3 months &lt;strong&gt;isn't a heck of a lot of money&lt;/strong&gt;, the real costs are &lt;strong&gt;indirect, and not so obvious&lt;/strong&gt;.  But they are still &lt;strong&gt;quantifiable&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To figure out&lt;/strong&gt; the &lt;strong&gt;real cost&lt;/strong&gt; of the &lt;strong&gt;late software&lt;/strong&gt; in a case like this requires &lt;strong&gt;a little modelling&lt;/strong&gt;, and &lt;strong&gt;talking about it&lt;/strong&gt; with each of the project stakeholders.  With a sales cycle of 6 months, Sales teams often end up &lt;strong&gt;selling the 'next' version&lt;/strong&gt; of the product, because by the time they close a deal, the current version has been &lt;strong&gt;replaced by the next version anyway&lt;/strong&gt;.  With a 3 month delay (one full Quarter), most of the leads the Sales team is trying to close will also &lt;strong&gt;hold their purchase&lt;/strong&gt; until the &lt;strong&gt;software is done&lt;/strong&gt;.  No point in rolling something out, only to have to patch or upgrade it 2 to 3 months later.  &lt;strong&gt;A whole Quarter's worth of revenue&lt;/strong&gt; can &lt;strong&gt;evaporate in a snap&lt;/strong&gt;.  While it's technically &lt;strong&gt;not disappearing&lt;/strong&gt; (it's merely being delayed), &lt;strong&gt;it might as well be&lt;/strong&gt; for this fiscal year because &lt;strong&gt;while the revenue was put on hold&lt;/strong&gt;, the &lt;strong&gt;expenses weren't&lt;/strong&gt;.  So the company &lt;strong&gt;loses money&lt;/strong&gt; during that period.  With a longer sales cycle, the Sales team &lt;strong&gt;doesn't have the time&lt;/strong&gt; to quickly react, find new leads, run them through the whole sales process and close new deals to account for the ones delayed.  For a company like I described above, that's a &lt;strong&gt;$1 million price tag&lt;/strong&gt; on that &lt;strong&gt;3 month slip&lt;/strong&gt; in product schedule.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Even if you're not producing enterprise software&lt;/strong&gt; with really big price tags and long sales cycles, &lt;strong&gt;your business&lt;/strong&gt; has beened planned around &lt;strong&gt;so much money coming in&lt;/strong&gt; during the year (revenue), and &lt;strong&gt;so much going out&lt;/strong&gt; (expenses).  &lt;strong&gt;Delayed revenue is lost revenue&lt;/strong&gt; in the context of &lt;strong&gt;your current year&lt;/strong&gt;.  It means during the period when the product was &lt;strong&gt;supposed to ship&lt;/strong&gt; and when it &lt;strong&gt;actually does&lt;/strong&gt;, the company is &lt;strong&gt;losing money&lt;/strong&gt;.  It doesn't matter how much your product costs or how quickly you can sell it.  &lt;strong&gt;Even more scary&lt;/strong&gt;, since revenue for new versions or new products is typically on a slope, &lt;strong&gt;don't look at the first 3 months&lt;/strong&gt; of revenue being lost (delayed), look at the &lt;strong&gt;last 3 months&lt;/strong&gt; of the year - those numbers will be &lt;strong&gt;significaly higher&lt;/strong&gt;.  (Think of a product that is planned to earn $50k per month in the &lt;strong&gt;first few months&lt;/strong&gt;, but climb to &lt;strong&gt;$100k per month&lt;/strong&gt; by the end of the year).&lt;br /&gt;&lt;br /&gt;Then there's the &lt;strong&gt;mis-coordination costs&lt;/strong&gt;.  Marketing dollars get pre-committed, often with &lt;strong&gt;non-refundable&lt;/strong&gt; advertising spots.  Or if not non-refundable, there's at least a &lt;strong&gt;cancellation penalty&lt;/strong&gt;.  In a company of &lt;strong&gt;any size&lt;/strong&gt;, or with a customer of any size, there are &lt;strong&gt;people&lt;/strong&gt; often booked to rollout these products around their ship date.  &lt;strong&gt;When the ship date slips&lt;/strong&gt;, it can cost both organizations for the time that those folks &lt;strong&gt;could have been doing other things&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Even if the organization producing the software &lt;strong&gt;doesn't sell it for profit&lt;/strong&gt; - in cases where it's only used internally:  The software project was undertaken to &lt;strong&gt;improve some facet of operations&lt;/strong&gt; - to bring &lt;strong&gt;new capabilities&lt;/strong&gt;, or likely to &lt;strong&gt;reduce costs&lt;/strong&gt;.  When the software slips, &lt;strong&gt;the economic potential&lt;/strong&gt; of that application (even if it was just to save costs) &lt;strong&gt;is not realized&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Every day the software is late, the organization loses money.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;factors&lt;/strong&gt; may differ from company to company, but the &lt;strong&gt;cost &lt;/strong&gt;of just carrying the dev team's salaries for a couple extra months is usually &lt;strong&gt;only a small fraction&lt;/strong&gt; of the &lt;strong&gt;indirect costs&lt;/strong&gt;.  If you sit down with a spreadsheet and run a quick model, the bottom line &lt;strong&gt;will often surprise you&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;No wonder&lt;/strong&gt; people get so upset with the software is late!&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112834429559370393?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112834429559370393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112834429559370393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112834429559370393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112834429559370393'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/10/cost-of-late-software.html' title='The Cost of Late Software'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112782588255476481</id><published>2005-09-27T07:14:00.000-05:00</published><updated>2005-09-27T08:07:38.876-05:00</updated><title type='text'>Building it Front-to-Back</title><content type='html'>&lt;strong&gt;Wow&lt;/strong&gt;. I wish I'd tried this sooner. &lt;strong&gt;Conventional wisdom&lt;/strong&gt; in software development says that &lt;strong&gt;first you design your architecture&lt;/strong&gt;, then you lay the foundation, build the back-end, and somewhere &lt;strong&gt;near the end&lt;/strong&gt; of your project, features start to &lt;strong&gt;bubble up&lt;/strong&gt; through the user interface (UI). Maybe it's because we &lt;strong&gt;keep comparing software development to construction&lt;/strong&gt;, where first the foundation goes in, then the framing, and the &lt;strong&gt;color of the paint&lt;/strong&gt; and countertops &lt;strong&gt;doesn't even need to be decided&lt;/strong&gt; until the very end. I'm not sure.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How many times&lt;/strong&gt; have you experienced this: A gaggle of developers &lt;strong&gt;working feverishly&lt;/strong&gt; for months, all the while, stakeholders asking, "&lt;strong&gt;Can we see it yet&lt;/strong&gt;?" "Nope.", comes the reply, "We're still building the system that &lt;strong&gt;the UI is going to sit on top of&lt;/strong&gt;." Then, one day, "&lt;strong&gt;Tada&lt;/strong&gt;! Here's the UI!" "But that's &lt;strong&gt;not what we wanted&lt;/strong&gt;!" Oh oh.  (Or best case, the UI is &lt;strong&gt;functionally sound&lt;/strong&gt;, but &lt;strong&gt;looks like ass&lt;/strong&gt; because you're too pressed for time to polish it up and make it &lt;strong&gt;esthetically appealing&lt;/strong&gt; and &lt;strong&gt;ergonomically friendly&lt;/strong&gt;).&lt;br /&gt;&lt;br /&gt;I never really thought to question it before. &lt;strong&gt;Not until&lt;/strong&gt; I had the &lt;strong&gt;complete freedom&lt;/strong&gt; to try it a different way, without having to &lt;strong&gt;fight to convince anyone&lt;/strong&gt; that doing things in reverse might actually be a better way. I'm building a large system &lt;strong&gt;front-to-back&lt;/strong&gt; right now (user interface to data storage), and am thrilled with &lt;strong&gt;all of the benefits&lt;/strong&gt; this approach is offering.&lt;br /&gt;&lt;br /&gt;Most people in development know that the &lt;strong&gt;last things&lt;/strong&gt; on the project schedule are the things &lt;strong&gt;at most risk of being cut&lt;/strong&gt; in a time crunch. Most development projects see the &lt;strong&gt;bulk of the user interface&lt;/strong&gt; being developed &lt;strong&gt;after all the system work&lt;/strong&gt; has been done. But the user interface is &lt;strong&gt;the only thing the customer sees&lt;/strong&gt; - it's &lt;strong&gt;what they buy&lt;/strong&gt;. See the problem? You're leaving the &lt;strong&gt;most important thing&lt;/strong&gt; to last. This is way &lt;strong&gt;too risky&lt;/strong&gt;, for you and your customer.&lt;br /&gt;&lt;br /&gt;The idea that you can &lt;strong&gt;reduce an application design&lt;/strong&gt; down to a bunch of nicely written Word documents is nice, &lt;strong&gt;but not realistic&lt;/strong&gt;. Try and try again, with this approach, it'll &lt;strong&gt;never match&lt;/strong&gt; having a &lt;strong&gt;living breathing example (UI)&lt;/strong&gt; of what you're building, &lt;strong&gt;while&lt;/strong&gt; you build all of the system architecture level things that no-one else gets to see but us developers.&lt;br /&gt;&lt;br /&gt;Not that you shouldn't spend a &lt;strong&gt;really sizable chunk of time&lt;/strong&gt; designing and building your architecture. (See my &lt;a href="http://uncommonsenseforsoftware.blogspot.com/2005/09/how-to-explain-good-architecture-to.html"&gt;last post on architecture&lt;/a&gt;). But rather, the architecture &lt;strong&gt;should be derived&lt;/strong&gt; from a &lt;strong&gt;living mockup&lt;/strong&gt;, or UI design. &lt;strong&gt;Not just screen caps&lt;/strong&gt; (not enough), and not necessarily a full &lt;strong&gt;prototype&lt;/strong&gt; (too much, and too likely to get thrown into production), but &lt;strong&gt;something in the middle&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Here's the steps I followed with my current project (a web-based modelling tool, built to be hosted ASP style; = large scale deployments):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Started in Excel&lt;/strong&gt;:  'cause it's a data modelling type tool, so I wanted to layout the main tables and views that people would have available to them&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Moved to Photoshop&lt;/strong&gt;:  to put some lipstick on the pig and make it look pretty (don't forget, &lt;strong&gt;esthetics sell&lt;/strong&gt;)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Got feedback on the concept&lt;/strong&gt; - Was the concept right?  How does it look?  Good.  Ready to proceed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Moved to HTML/CSS/Javascript&lt;/strong&gt;:  This step might be unique to me, but I really wanted to have the &lt;strong&gt;richness of the desktop&lt;/strong&gt; in my web-based application (drag/drop, inline editing, etc.), so I built a bunch of re-usable, cross-browser Javascript controls for this and demonstrated them on a few sample pages of the application&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Got feedback on the interactivity&lt;/strong&gt; - how does this behave compared to regular web-apps?  What do you think?  Good.  Ready to proceed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Moved back to PowerPoint&lt;/strong&gt;:  I wanted to mock-up every single screen in the application so that I could get feedback and &lt;strong&gt;make any changes quickly&lt;/strong&gt; without having to &lt;strong&gt;rip-out months worth of coding&lt;/strong&gt;.  PowerPoint is great for UI design because you can throw in image pieces and move them around with text and rectangles quickly.  And with one-slide-per-screen, you can still have 60 screens in one file, with annotations, printer-friendly, and sharable.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Got feedback&lt;/strong&gt; - How does the functionality set look?  Anything missing?  Anything wrong?  Good.  Ready to proceed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Implemented each screen in HTML/CSS/Javascript&lt;/strong&gt;:  At this point, I took the time to do some "real" development.  Not hacking, not prototyping, but the real &lt;strong&gt;take-the-time-to-do-it-right&lt;/strong&gt; design and development, but &lt;strong&gt;ONLY for the UI&lt;/strong&gt;.  The goal was to have every screen built to do nothing but show dummy data and move around to the other screens.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Got feedback&lt;/strong&gt; - This was the &lt;strong&gt;single most important feedback stage&lt;/strong&gt;, and allowed me to get the detailed kind of comments that would only otherwise be available &lt;strong&gt;at the end of a development cycle&lt;/strong&gt; (when it's too late), because the application "appeared" to be complete, from the user's perspective - just that it was all dummy data.  At this point, beyond looking at screen caps, they could &lt;strong&gt;actually click around and "use" it&lt;/strong&gt;.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Business Logic and Back-end&lt;/strong&gt;:  Now things start to look like a normal development cycle from here-on-in.  Do your architectural design, but this time with a &lt;strong&gt;living specification staring you in the face&lt;/strong&gt; (one that the customer has actually approved), and proceed to implement it.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;With this approach, I've pretty well &lt;strong&gt;eliminated the risk&lt;/strong&gt; that the product won't match customer expectations because they've &lt;strong&gt;actually been able to see it and play with it&lt;/strong&gt; before I go do the lion's share of the development.  Not only that, but now that I'm building the back-end, while I still want to build a somewhat future-proof architecture and be fairly generic with it, I have an &lt;strong&gt;extremely specific, living example&lt;/strong&gt; of the application I ultimately want to build with it.&lt;br /&gt;&lt;br /&gt;Some might call this &lt;strong&gt;rapid prototyping&lt;/strong&gt;, but there are a couple &lt;strong&gt;important differences&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Only the UI was mocked up&lt;/strong&gt;:  do we really need to demonstrate that we can read and write from a database?  No.  Skip that stuff.  Just mockup the screens and connect them so the user can get a feel for the navigation.  Populate the screens with dummy data.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;There was nothing "rapid" about it&lt;/strong&gt;:  while the PowerPoint mockups were done quickly, &lt;strong&gt;they could also be changed quickly&lt;/strong&gt;.  When it came time to move the screens into HTML/CSS/Javascript, it was &lt;strong&gt;solid development practices the whole way&lt;/strong&gt;.  Not prototyping, not throw-away, but solid design and re-usability.  This was production UI code.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;While the goal&lt;/strong&gt; of this approach was similar to one of the goals of Extreme Programming (get the customer in early), I think the &lt;strong&gt;approach is stronger&lt;/strong&gt; because while you get &lt;strong&gt;all the benefits&lt;/strong&gt; of the user being involved early on to validate what you're doing, you &lt;strong&gt;don't have to sacrifice&lt;/strong&gt; the benefits of solid up-front design &lt;strong&gt;for each tier&lt;/strong&gt; (UI, Biz Logic, Data Storage), by making it up as you go along and trying to convince yourself you can re-factor quickly.&lt;br /&gt;&lt;br /&gt;I can't tell you how useful this front-to-back approach has been.  Virtually all of the requirements and design &lt;strong&gt;unknowns have been squashed&lt;/strong&gt;, and makes building the back-end a dream.  &lt;strong&gt;Descreased risk, increased predictability, increased quality&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;This approach definitely took more time upfront than a "document only" approach to design, but I believe the &lt;strong&gt;time saved later&lt;/strong&gt;, and the &lt;strong&gt;risks mitigated&lt;/strong&gt; make it an &lt;strong&gt;exceptional investment&lt;/strong&gt;.  I would highly recommend it to anyone.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112782588255476481?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112782588255476481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112782588255476481' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112782588255476481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112782588255476481'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/09/building-it-front-to-back.html' title='Building it Front-to-Back'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112740944537790031</id><published>2005-09-22T11:44:00.000-05:00</published><updated>2005-09-22T12:23:10.456-05:00</updated><title type='text'>How to Explain Good Architecture to the Non-Techie</title><content type='html'>&lt;strong&gt;How many times&lt;/strong&gt; have you tried to explain &lt;strong&gt;the importance of good architecture&lt;/strong&gt; to one of the &lt;strong&gt;many stake-holders&lt;/strong&gt; in one of your software projects?  Could be from &lt;strong&gt;sales, or marketing&lt;/strong&gt;, or even &lt;strong&gt;your boss&lt;/strong&gt;, depending on your company.  &lt;strong&gt;If you have&lt;/strong&gt;, you've probably seen their &lt;strong&gt;nose wrinkle&lt;/strong&gt;, or their &lt;strong&gt;eyes glaze over&lt;/strong&gt;.  After an &lt;strong&gt;honest attempt&lt;/strong&gt; to make them &lt;strong&gt;see the light&lt;/strong&gt;, you probably got frustrated and thought that &lt;strong&gt;they just don't care&lt;/strong&gt;, or just &lt;strong&gt;don't get it&lt;/strong&gt; - and &lt;strong&gt;never will&lt;/strong&gt;.  The frustration that both of you feel actually creates &lt;strong&gt;a kind of tension&lt;/strong&gt; and over time, this lack of being able to relate to each other makes it more &lt;strong&gt;difficult to be shooting for the same goals&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wise people&lt;/strong&gt; say that to be a &lt;strong&gt;good communicator&lt;/strong&gt; isn't about having any particular &lt;strong&gt;mastery of the language&lt;/strong&gt;, or about demonstrating through over use of &lt;strong&gt;industry jargon&lt;/strong&gt; how incredibly &lt;strong&gt;smart you are&lt;/strong&gt;.  It's about being able to &lt;strong&gt;put yourself in your listener's shoes&lt;/strong&gt; and hear what they hear - or, simply about relating.&lt;br /&gt;&lt;br /&gt;Although I've been managing software teams for many years now, it finally &lt;strong&gt;just occured to me&lt;/strong&gt; while walking the dogs at lunch, what good architecture is all about, and how to &lt;strong&gt;get the point across&lt;/strong&gt; to your non-technical peers.  Like many, I &lt;strong&gt;intuitively knew&lt;/strong&gt; what it was, but couldn't quite &lt;strong&gt;nail the explanation&lt;/strong&gt; when trying to describe it to a non-techie.&lt;br /&gt;&lt;br /&gt;I'm a &lt;strong&gt;firm believer&lt;/strong&gt; that good architecture is actually &lt;strong&gt;a pillar of a successful product company&lt;/strong&gt;.  It's just that &lt;strong&gt;it's not for reasons you would necessarily think&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It'll sound a bit funny&lt;/strong&gt; at first, but stick with me:  Good architecture &lt;strong&gt;has nothing to do with the quality of the product&lt;/strong&gt; you're building.  You can have a product that customers &lt;strong&gt;absolutely adore&lt;/strong&gt;, that is about to &lt;strong&gt;fall over dead&lt;/strong&gt; tomorrow if one more tiny little feature is added to it because &lt;strong&gt;nobody can see the house of cards it's built on&lt;/strong&gt;, except you.  &lt;strong&gt;Customers don't buy architecture&lt;/strong&gt; (unless your product is a platform, then they do).  Even if your product is extendable through some API, they still &lt;strong&gt;don't care too much&lt;/strong&gt; about what goes on under the covers.  &lt;strong&gt;Customers buy a solution&lt;/strong&gt; to a problem.  Even if the problem is simply that they're bored and they're buying a video game &lt;strong&gt;to amuse them&lt;/strong&gt; (problem solved).  They buy &lt;strong&gt;features, benefits, and capabilities&lt;/strong&gt;, but they &lt;strong&gt;don't buy architecture&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Good architecture is &lt;strong&gt;not about the product&lt;/strong&gt;.  It is about &lt;strong&gt;operational effectiveness&lt;/strong&gt;.  Ahhh, now &lt;strong&gt;your boss is listening&lt;/strong&gt;.  It's about being able to &lt;strong&gt;react more quickly&lt;/strong&gt; to customers &lt;strong&gt;and the market&lt;/strong&gt;, even the competition.  Ahhhh, now &lt;strong&gt;Sales and Marketing are listening&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Understanding good architecture&lt;/strong&gt; comes from understanding the &lt;strong&gt;symptoms of bad architecture&lt;/strong&gt;, and knowing that good architecture &lt;strong&gt;prevents those symptoms&lt;/strong&gt;.  So.  &lt;strong&gt;Bad architecture&lt;/strong&gt;:  Can't scale the system up; can't increase performance; can't make it easier to install; can't add any more features because of the unforseen conflicts they create with existing features; takes too long to fix bugs and add what new features are possible.  Most of these things are about the &lt;strong&gt;company's ability to innovate&lt;/strong&gt;, to &lt;strong&gt;react quickly&lt;/strong&gt; to threats, to &lt;strong&gt;support their customers&lt;/strong&gt;, to &lt;strong&gt;solve problems&lt;/strong&gt;, to &lt;strong&gt;add new features&lt;/strong&gt;, and to &lt;strong&gt;pump out new products&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A good architecture&lt;/strong&gt; can get you:  &lt;strong&gt;faster turnaround&lt;/strong&gt; time on &lt;strong&gt;fixes&lt;/strong&gt; and &lt;strong&gt;new feature development&lt;/strong&gt;, more &lt;strong&gt;flexibility&lt;/strong&gt; for &lt;strong&gt;supporting customers&lt;/strong&gt;, a stronger ability to &lt;strong&gt;compete in the market place&lt;/strong&gt;, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The difference&lt;/strong&gt; between a good architecture and bad architecture can often affect each of those symptoms &lt;strong&gt;by as much as 2 or 3 times&lt;/strong&gt;.  It makes the product team &lt;strong&gt;more effective&lt;/strong&gt; at doing their jobs, even &lt;strong&gt;multiplying their productivity&lt;/strong&gt; in many cases.  Good for &lt;strong&gt;the team&lt;/strong&gt;, good for &lt;strong&gt;the company&lt;/strong&gt;, good for &lt;strong&gt;all the stake-holders&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Those are things that your stake-holders care about.  And hopefully, this is a way to help get the point across.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112740944537790031?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112740944537790031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112740944537790031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112740944537790031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112740944537790031'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/09/how-to-explain-good-architecture-to.html' title='How to Explain Good Architecture to the Non-Techie'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112713273255373159</id><published>2005-09-19T06:45:00.000-05:00</published><updated>2006-03-30T22:58:52.076-05:00</updated><title type='text'>An isolated occurance might be managable but a trend can kill you.</title><content type='html'>&lt;strong&gt;Suppose you're running a software project&lt;/strong&gt; and a task that was &lt;strong&gt;originally estimated&lt;/strong&gt; to take &lt;strong&gt;5 days&lt;/strong&gt; actually took &lt;strong&gt;8 days&lt;/strong&gt; (60% longer). What &lt;strong&gt;impact&lt;/strong&gt; to the schedule might that slip have?&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;intuitive response&lt;/strong&gt; is to think that the person that owned that task is now &lt;strong&gt;3 days behind schedule&lt;/strong&gt;.  The &lt;strong&gt;intuitive response would be wrong&lt;/strong&gt;.  If managing software projects were that intuitive, the &lt;strong&gt;global failure rate on I.T. projects wouldn't be 70%&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Worse&lt;/strong&gt;, it might be &lt;strong&gt;tempting to think&lt;/strong&gt; that there is &lt;strong&gt;no impact&lt;/strong&gt;, because that person can &lt;strong&gt;make up the 3 days later&lt;/strong&gt; in the schedule.  (If you ever convince yourself of this in a software project, &lt;strong&gt;go stand in the corner&lt;/strong&gt; and think about what you've done.)&lt;br /&gt;&lt;br /&gt;Here's the &lt;strong&gt;not-so-intuitive&lt;/strong&gt; "real" story on that 3 day slip:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Firstly&lt;/strong&gt;:  We can &lt;strong&gt;make up&lt;/strong&gt; those 3 days later.  &lt;strong&gt;Really?&lt;/strong&gt;  You mean there is &lt;strong&gt;3 full days&lt;/strong&gt; in the schedule where this person is supposed to be &lt;strong&gt;sitting on their butt&lt;/strong&gt; doing nothing, and we'll just use &lt;strong&gt;those 3 days&lt;/strong&gt; to make up for this slip?  &lt;strong&gt;No way.&lt;/strong&gt;  9 times out of 10, a slip like that is &lt;strong&gt;not recoverable&lt;/strong&gt; just by &lt;strong&gt;"willing" it&lt;/strong&gt; to be so.  If you actually do have buffer time to account for slips like these, &lt;strong&gt;pat yourself on the back&lt;/strong&gt;.  (But hope you have &lt;strong&gt;enough buffer&lt;/strong&gt; to account for this sort of thing &lt;strong&gt;repeating itself&lt;/strong&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Secondly&lt;/strong&gt;:  Working overtime &lt;strong&gt;probably won't help&lt;/strong&gt;.  Do you know &lt;strong&gt;what it takes&lt;/strong&gt; to make up 3 full days working overtime?  &lt;strong&gt;Best case&lt;/strong&gt;, suppose someone could work an extra &lt;strong&gt;half-day each day&lt;/strong&gt; (4 extra hours).  That's 6 days, &lt;strong&gt;more than a week&lt;/strong&gt;, of working a day and a half shifts.  If they can only &lt;strong&gt;sustain&lt;/strong&gt; 10 hours per day (2 extra hours per day), then &lt;strong&gt;that's 12 days&lt;/strong&gt; (over 2 weeks) of overtime to make up for &lt;strong&gt;a measly 3 day slip&lt;/strong&gt;.  Overtime makes up for schedule slips at a &lt;strong&gt;surprisingly unhelpful rate&lt;/strong&gt;, and burns people out at the same time.  Not to mention the &lt;strong&gt;poor quality code&lt;/strong&gt; they produce while seriously &lt;strong&gt;demotivated and tired&lt;/strong&gt; - poor quality code that they'll have to &lt;strong&gt;come back and fix&lt;/strong&gt; later with, what...  &lt;strong&gt;More overtime?&lt;/strong&gt;  And, while working overtime to correct for one slip, chances are that &lt;strong&gt;something else&lt;/strong&gt; has slipped that will require even more overtime after that.  Eventually the whole schedule &lt;strong&gt;just blows up.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thirdly&lt;/strong&gt;:  Even if you &lt;strong&gt;re-jig&lt;/strong&gt; the schedule so that the 3 day slip doesn't seem to hurt the product at all, what will you do with &lt;strong&gt;the next slip&lt;/strong&gt;, and the one after that?  Because unless this is your first software project, this &lt;strong&gt;isn't the first slip&lt;/strong&gt;, and it &lt;strong&gt;won't be the last&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Finally&lt;/strong&gt;:  Don't &lt;strong&gt;you dare&lt;/strong&gt; go reduce the amount of time scheduled for some &lt;strong&gt;future task&lt;/strong&gt; unless you actually &lt;strong&gt;reduced the amount of requirements&lt;/strong&gt; for that task.  Otherwise, you've just &lt;strong&gt;swept the problem under the rug&lt;/strong&gt; for now and it'll come back to bite you &lt;strong&gt;twice as hard&lt;/strong&gt; later.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Crap&lt;/strong&gt;.  So, now what?  Stop looking at a slip as an &lt;strong&gt;isolated occurance&lt;/strong&gt;.  What ever caused the slip, however it &lt;strong&gt;might appear isolated&lt;/strong&gt; and unique, it is in some way &lt;strong&gt;part of a larger trend&lt;/strong&gt;.  Whether it was an error in the &lt;strong&gt;original time estimate&lt;/strong&gt;, or the fact that this person &lt;strong&gt;got pulled off the project&lt;/strong&gt; to go do something else for a while (a distraction), these things tend to repeat themselves &lt;strong&gt;if not managed as a trend&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;The differences between an &lt;strong&gt;occurance&lt;/strong&gt; and a &lt;strong&gt;trend&lt;/strong&gt; are their &lt;strong&gt;perceived impact&lt;/strong&gt; and the way you &lt;strong&gt;deal with them&lt;/strong&gt;.  The &lt;strong&gt;impact&lt;/strong&gt; of a 3 day slip might seem small and recoverable, but if it is part of a &lt;strong&gt;trend&lt;/strong&gt; (say every 10 days worth of work, there's a 3 day slip), its impact is &lt;strong&gt;much larger&lt;/strong&gt;.  An isolated occurance might be managable &lt;strong&gt;but a trend can kill you&lt;/strong&gt;.  3 days is nothing, but 30% on a 6 month schedule is almost 2 months.&lt;br /&gt;&lt;br /&gt;If someone on the team was &lt;strong&gt;off&lt;/strong&gt; on a time estimate by 30%, what do you think the chances are that &lt;strong&gt;every other time estimate&lt;/strong&gt; this person has given will be 100% accurate?  &lt;strong&gt;Not very good&lt;/strong&gt;.  By the time someone has completed a few tasks, there's &lt;strong&gt;enough data&lt;/strong&gt; to predict a trend that can have &lt;strong&gt;far more impact&lt;/strong&gt; on your schedule than an &lt;strong&gt;isolated occurance&lt;/strong&gt;, but thankfully is also &lt;strong&gt;easier to manage&lt;/strong&gt; because a &lt;strong&gt;trend is more predictable&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;The same goes for any time that this person may have been &lt;strong&gt;taken away from the project&lt;/strong&gt; to go do other work.  Was this the first time?  Do you think that it could ever possibly happen again?  &lt;strong&gt;Probably&lt;/strong&gt;.  By the time it happens a few times, again, there's &lt;strong&gt;enough data to form a trend&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;So, if on average, tasks are slipping by 3 days for every 10 days worth of work, the &lt;strong&gt;pace&lt;/strong&gt; of the project is &lt;strong&gt;off by 30%&lt;/strong&gt;.  By thinking about this as a trend instead of an isolated occurance, &lt;strong&gt;your approach&lt;/strong&gt; to solving the problem is likely &lt;strong&gt;different&lt;/strong&gt;.  For an &lt;strong&gt;isolated occurance&lt;/strong&gt;, you may be tempted to &lt;strong&gt;crack the whip&lt;/strong&gt; and just try to get people to &lt;strong&gt;work harder&lt;/strong&gt; or longer to make up for the 3 days slip.  But as soon as you recognize it as a &lt;strong&gt;trend&lt;/strong&gt;, you know that will never work - &lt;strong&gt;it's not sustainable&lt;/strong&gt;.  Your next option should be to &lt;strong&gt;re-cast the schedule&lt;/strong&gt;, but this time you've got some &lt;strong&gt;real data&lt;/strong&gt; (say, average Time Estimation Error or Distraction Rates) to &lt;strong&gt;pad the schedule&lt;/strong&gt; with, thus &lt;strong&gt;negating the effects&lt;/strong&gt; of the trend.  Each trend that you &lt;strong&gt;spot and measure&lt;/strong&gt;, gets some padding.  &lt;strong&gt;Problem solved&lt;/strong&gt; - well, immediate problem solved.  You may still want to then &lt;strong&gt;attack the particular trends&lt;/strong&gt; that are tripping you up in the first place, like improving your Time Estimation Error rates or reducing the Distraction Rates, but at least &lt;strong&gt;your project will be insulated&lt;/strong&gt; from them while you figure out how to improve the trends themselves.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Better yet&lt;/strong&gt;, if you tracked the trends from your &lt;strong&gt;last project&lt;/strong&gt;, then you've already &lt;strong&gt;built them into this project&lt;/strong&gt; schedule right?  &lt;strong&gt;If not&lt;/strong&gt;, then you should have enough data after the &lt;strong&gt;first month&lt;/strong&gt; of a &lt;strong&gt;6 month project&lt;/strong&gt; to extend the trend over the &lt;strong&gt;balance of the project&lt;/strong&gt; to figure out what its impact could be.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112713273255373159?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112713273255373159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112713273255373159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112713273255373159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112713273255373159'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/09/isolated-occurance-might-be-managable.html' title='An isolated occurance might be managable but a trend can kill you.'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112670034244509476</id><published>2005-09-14T07:17:00.000-05:00</published><updated>2005-09-14T08:01:55.486-05:00</updated><title type='text'>The software wasn't late, it was supposed to take that long</title><content type='html'>Over time, &lt;strong&gt;new words&lt;/strong&gt; keep getting introduced into the English language.  It may take tens or hundreds of years of people using a particular term, but &lt;strong&gt;if it’s used enough&lt;/strong&gt;, eventually it gets put in the dictionary.  My spell-checker keeps telling me that &lt;strong&gt;verticalize&lt;/strong&gt; isn’t a word, but enough business folks use it that I’m pretty sure some day it will be.  Another term I think has a shot is:  &lt;strong&gt;thesoftwareislateagain&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;For the past year and a half, I’ve been &lt;strong&gt;working on a solution&lt;/strong&gt; to that very problem.  Unfortunately I can’t tell you about it yet because my company is &lt;strong&gt;still in stealth mode&lt;/strong&gt;.  But it is a multi-faceted solution, with one significant piece of the equation being &lt;strong&gt;time estimation&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;People &lt;strong&gt;keep calling the software “late”&lt;/strong&gt;.  Of all the times we perceive a software project to be late, I submit to you that &lt;strong&gt;only half the time it actually is late&lt;/strong&gt;.  A software project can really only be late if it &lt;strong&gt;took longer than it should have&lt;/strong&gt;.  That “should have” part implies that we have some &lt;strong&gt;divine control&lt;/strong&gt; over the duration, and we &lt;strong&gt;decide&lt;/strong&gt; how long something should take &lt;strong&gt;like we decide what color it should be&lt;/strong&gt;.  Hate to burst the bubble, but &lt;strong&gt;we don’t&lt;/strong&gt;.  If a software project’s requirements (what it needs to do) and designs (how it’s going to be accomplished) &lt;strong&gt;stay reasonably fixed&lt;/strong&gt; during the life of the project, and the team and platform are truly qualified for the job, then &lt;strong&gt;the duration is what it is&lt;/strong&gt;.  Our job as project managers (and developers) is to &lt;strong&gt;figure out that duration&lt;/strong&gt; ahead of time - &lt;strong&gt;accurately&lt;/strong&gt;.  &lt;strong&gt;We estimate&lt;/strong&gt; how long it should take – &lt;strong&gt;we don’t decide it&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;If it didn’t ship on time&lt;/strong&gt; and &lt;strong&gt;it wasn’t late&lt;/strong&gt;, then what is it?  It was &lt;strong&gt;estimated wrong&lt;/strong&gt;.  It’s that simple.  If all other variables about a task were &lt;strong&gt;reasonably fixed&lt;/strong&gt;, and it wasn’t done when you &lt;strong&gt;thought it would be&lt;/strong&gt;, then it was &lt;strong&gt;estimated wrong&lt;/strong&gt;.  As a rule, &lt;strong&gt;we tend to underestimate&lt;/strong&gt; things a lot.  Software development in particular is difficult and complex (at least, to produce good software is – &lt;strong&gt;banging out crap is easy&lt;/strong&gt;).  That makes time estimation hard.  &lt;strong&gt;Too hard&lt;/strong&gt; to do with &lt;strong&gt;hallway conversations&lt;/strong&gt; and &lt;strong&gt;incomplete requirements&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Most people think&lt;/strong&gt; if a task was scheduled to take 10 days but really took 15, that it was &lt;strong&gt;5 days late&lt;/strong&gt;.  In most cases, it wasn’t late, it &lt;strong&gt;was supposed to take&lt;/strong&gt; 15 days.  It was just underestimated by 5 days.  Assuming everyone was working at capacity, and even if there were unforeseen technical difficulties along the way, the original estimate of 10 days &lt;strong&gt;was an illusion&lt;/strong&gt;.  The &lt;strong&gt;real duration&lt;/strong&gt; of the task was 15 days, not 10.  This is an &lt;strong&gt;important distinction&lt;/strong&gt; because &lt;strong&gt;it determines your choices for action&lt;/strong&gt;.  If something was late, it’s tempting to start looking for ways to &lt;strong&gt;“make people work harder”&lt;/strong&gt;, which often isn’t the solution.  The &lt;strong&gt;only bad thing&lt;/strong&gt; about the task taking the 15 days was that you &lt;strong&gt;thought it would take 10&lt;/strong&gt;, so you planned around it.  Then other parts of the organization got &lt;strong&gt;screwed up&lt;/strong&gt; because you missed some deliverable to them.  If you knew &lt;strong&gt;ahead of time&lt;/strong&gt; that it was really going to take 15 days, there likely wouldn’t have been a problem.  By &lt;strong&gt;shifting your thinking&lt;/strong&gt; to time estimation instead, &lt;strong&gt;you can correct&lt;/strong&gt; the problem at the source and &lt;strong&gt;insulate&lt;/strong&gt; the rest of the organization from these &lt;strong&gt;costly inaccuracies&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;People all over software-land&lt;/strong&gt; would be &lt;strong&gt;better served&lt;/strong&gt; by doing more of the &lt;strong&gt;homework upfront&lt;/strong&gt;, so that their time estimates are &lt;strong&gt;more accurate&lt;/strong&gt;.  We've all heard the stories of big shaggy software projects &lt;strong&gt;never getting off the drawing-board&lt;/strong&gt; because of too much design up-front.  Does that really apply &lt;strong&gt;anymore&lt;/strong&gt;?  Seems to me that today, &lt;strong&gt;the trend has reversed&lt;/strong&gt;.  People rush ahead without knowing &lt;strong&gt;what they're trying to build&lt;/strong&gt;.  How the heck do you estimate the time required for &lt;strong&gt;something you haven't even written down&lt;/strong&gt; in detail?&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112670034244509476?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112670034244509476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112670034244509476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112670034244509476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112670034244509476'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/09/software-wasnt-late-it-was-supposed-to.html' title='The software wasn&apos;t late, it was &lt;em&gt;supposed&lt;/em&gt; to take that long'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16695194.post-112664128879249554</id><published>2005-09-13T14:50:00.000-05:00</published><updated>2005-09-13T16:33:00.713-05:00</updated><title type='text'>The power of suggestion</title><content type='html'>&lt;strong&gt;Big fat books&lt;/strong&gt; have been written on the subject of &lt;strong&gt;delivering software on time&lt;/strong&gt;.  Expensive courses are offered.  You can actually go get your Masters Degree in Project Management.  &lt;strong&gt;The success rate of software projects still stinks&lt;/strong&gt;:  sitting somewhere around the &lt;strong&gt;30%&lt;/strong&gt; mark.&lt;br /&gt;&lt;br /&gt;I don't know of any other kind of business project that fails as often as software projects do.  The strange thing is, people in the biz &lt;strong&gt;seem to know why&lt;/strong&gt; they get off track, they just haven't figured out &lt;strong&gt;what to do about it!&lt;/strong&gt;  If you ask anyone in the software biz why projects fall off track, they'd tell you:&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;- Changing requirements&lt;br /&gt;- Bad time estimates&lt;br /&gt;- People getting pulled off the project to go do other work&lt;br /&gt;- Etc.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;If so many people know the &lt;strong&gt;text-book reasons&lt;/strong&gt; that software projects run off the tracks, then &lt;strong&gt;why the unbelievable failure rate?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I think it's the &lt;strong&gt;power of suggestion&lt;/strong&gt;.  People &lt;em&gt;&lt;strong&gt;want&lt;/strong&gt;&lt;/em&gt; to believe they can get it done faster than they really can.  They &lt;em&gt;&lt;strong&gt;want&lt;/strong&gt;&lt;/em&gt; to believe that they can keep playing with requirements after the schedule is set and the developers are off to the races, and they &lt;em&gt;&lt;strong&gt;want&lt;/strong&gt;&lt;/em&gt; to believe that the software keeps getting built even while the whole team is taken off to go help the Sales department figure out &lt;strong&gt;their new CRM system&lt;/strong&gt;.  So they keep telling themselves, &lt;strong&gt;"I think I can, I think I can..."&lt;/strong&gt;, until they actually become convinced of it.&lt;br /&gt;&lt;br /&gt;So countless software project managers &lt;strong&gt;run off&lt;/strong&gt; trying to come up with a Gantt chart that, while structurally sound, &lt;strong&gt;has no chance of ever being implemented on time&lt;/strong&gt;.  They've &lt;strong&gt;fallen victim&lt;/strong&gt; to the trap of drawing out &lt;strong&gt;what they want to believe&lt;/strong&gt; will happen, rather than what &lt;strong&gt;statistics and experience&lt;/strong&gt; should be telling them &lt;strong&gt;will actually happen&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The tools don't help either&lt;/strong&gt;.  They say that people that give-in to addictive personalities are called "enablers".  Like, if you take your alcoholic friend to a bar, then you're an "enabler".  You're supposedly partly to blame for your friend &lt;strong&gt;falling off the wagon&lt;/strong&gt; (or is it jumping back on the wagon again?  I can't remember).  If that's the case, then today's project management tools are &lt;strong&gt;enablers of bad schedules and failed projects&lt;/strong&gt;.  They show you want &lt;strong&gt;you want to see&lt;/strong&gt;, not what &lt;strong&gt;will actually happen&lt;/strong&gt;.  Tsk.  Tsk.  Those pesky tools should know better.  Countless failed schedules have been typed into those bloody tools and a few good ones too.  You'd think by now they'd be able to &lt;strong&gt;stop you from making the same mistakes&lt;/strong&gt; over and over again, by saying, &lt;strong&gt;"Ahem.  Did you think about this?"&lt;/strong&gt;, and, &lt;strong&gt;"Um, I can tell you from your history that this schedule is just not going to work.  Try this, that and the other."&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What we really need are &lt;strong&gt;virtual project management Nanny's&lt;/strong&gt; that slap us when we forget to build in vacations, sick time, holidays (the basics), and coach us with their vast historical references by telling us that &lt;strong&gt;on average, Suzy Queue is off her time estimates by 30%&lt;/strong&gt; and &lt;strong&gt;Little Boy Blue&lt;/strong&gt; always gets called off the project for at least &lt;strong&gt;5 days each month&lt;/strong&gt; to go help lead customers - so build that into your schedule!  &lt;strong&gt;Reading a book once&lt;/strong&gt; and subsequently forgetting it doesn't work.  Neither does going to that annual conference in &lt;strong&gt;Las Vegas&lt;/strong&gt; on Project Management.  It's got to be &lt;strong&gt;in the tool, in your face, all the time.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We &lt;strong&gt;want to believe&lt;/strong&gt; so badly that we &lt;strong&gt;suppress our experience&lt;/strong&gt; and in some cases, &lt;strong&gt;actual historical data&lt;/strong&gt; from &lt;strong&gt;our own environment&lt;/strong&gt; so that we get the Gantt chart that makes us all &lt;strong&gt;feel good&lt;/strong&gt;.  Unless it's &lt;strong&gt;staring us in the face&lt;/strong&gt; every time we look at that Gantt chart, we conveniently overlook the &lt;strong&gt;things that kill us every time&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;If only there were such a tool.  Wouldn't &lt;strong&gt;that&lt;/strong&gt; be nice.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16695194-112664128879249554?l=uncommonsenseforsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uncommonsenseforsoftware.blogspot.com/feeds/112664128879249554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16695194&amp;postID=112664128879249554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112664128879249554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16695194/posts/default/112664128879249554'/><link rel='alternate' type='text/html' href='http://uncommonsenseforsoftware.blogspot.com/2005/09/power-of-suggestion.html' title='The power of suggestion'/><author><name>Craig Fitzpatrick</name><uri>http://www.blogger.com/profile/17525171149988944428</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
