<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>The Efficient Coder</title>
    <link>http://www.efficientcoder.net/</link>
    <description>There has got to be a better way of communicating with our computers!</description>
    <language>en-us</language>
    <copyright>Kevin D. Wolf</copyright>
    <lastBuildDate>Thu, 12 Feb 2009 17:44:54 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>kevinw@software-logistics.com</managingEditor>
    <webMaster>kevinw@software-logistics.com</webMaster>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=feed9006-dca9-4fb2-b282-779c38339dc3</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,feed9006-dca9-4fb2-b282-779c38339dc3.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,feed9006-dca9-4fb2-b282-779c38339dc3.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=feed9006-dca9-4fb2-b282-779c38339dc3</wfw:commentRss>
      <title>Sitting out the Great Quality Wars of '09</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,feed9006-dca9-4fb2-b282-779c38339dc3.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,feed9006-dca9-4fb2-b282-779c38339dc3.aspx</link>
      <pubDate>Thu, 12 Feb 2009 17:44:54 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;Lines are
   starting to get drawn for the Great Quality Wars of '09.&amp;nbsp; On one side you have
   camp led by &lt;a href="http://www.joelonsoftware.com/"&gt;&lt;span style="COLOR: blue"&gt;Joel
   Spolsky&lt;/span&gt;&lt;/a&gt; and the now infamous &lt;a href="http://www.joelonsoftware.com/items/2009/01/31.html"&gt;&lt;span style="COLOR: blue"&gt;Stack
   Overflow Podcast #38&lt;/span&gt;&lt;/a&gt;, and the other camp led by &lt;a href="http://blog.objectmentor.com/articles/2009/01/31/quality-doesnt-matter-that-much-jeff-and-joel"&gt;&lt;span style="COLOR: blue"&gt;Uncle
   Bob&lt;/span&gt;&lt;/a&gt;.&amp;nbsp; I'm sitting this one out, from what I can see so far, both sides
   are going to get bloodied up where the discussion turns from a reasonable and positive
   debate to personal attacks.&lt;span&gt;&amp;nbsp; &lt;/span&gt;We have a lot of problems in our industry
   and dividing it into factions won't help anyone.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Especially when
   I see this religious war based on &lt;b&gt;&lt;i&gt;how do I get there&lt;/i&gt;&lt;/b&gt;, not &lt;b&gt;&lt;i&gt;where
   do we want to go&lt;/i&gt;&lt;/b&gt;&lt;?xml:namespace prefix = o /&gt;.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;This, being
   on a much greater scale, reminds me of the Great Coding Convention Battles I participated
   in within a company in the early 90's.&amp;nbsp; One of the stupidest things we discussed
   over the course of a month of meetings was whether to use the following syntax for
   one line after an if statement. &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;if(true)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; DoSomething();&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;or &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;if(true)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; DoSomething();&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;Looking
   back this was a tremendous waste of time, albeit a relatively fun discussion in our
   meetings where both sides decided the other side was a bunch of hacks.&amp;nbsp; 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;I was in the &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;if(true)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; DoSomething()&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;camp
   unless I wasn't.&amp;nbsp; 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;For the case
   of: &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;if(true)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
   while(someCondition)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
   DoSomethingElse();&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 12pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;I would
   use the convention:&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;if(true)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
   while(someCondition)&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
   DoSomethingElse();&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;
   &lt;br&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;where
   I would be in both camps.&amp;nbsp; What does this mean?&amp;nbsp; Does this mean I'm a moderate?&amp;nbsp;
   Well no, I do have very strong views on both coding (and politics but I'll spare you
   the pain on discussing my political views here).&amp;nbsp; I think the main reason I had
   strong feelings on my approach was that the other camp wasn't using C/C++ in their
   day to day work and kept bringing up examples and what *experts* said about the topic
   and under no circumstance should we have a block of code not enclosed in curly brackets.&lt;span&gt;&amp;nbsp; &lt;/span&gt;My
   camp lived in a C/C++ editor for most of our work.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;Do I agree
   with the statement that Quality doesn't matter?&amp;nbsp; No.&amp;nbsp; Do I agree with the
   statement that Quality is the most important thing?&amp;nbsp; No.&amp;nbsp; For any system
   there is really only one true measurement of success: 
   &lt;br&gt;
   &lt;br&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;font size=5&gt;&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;i&gt;In
the &lt;b&gt;long term&lt;/b&gt; is your user community satisfied and will they continue to use
your software to enhance their business or personal lives&lt;/i&gt;.&amp;nbsp; &lt;/span&gt;&lt;/font&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;/span&gt;&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   Anything else is pure rubbish.&amp;nbsp; You may have a very high quality system that
   is just a joy to maintain, but unless people use your software, you probably won't
   (and shouldn't) get past V1.0.&amp;nbsp; You also could have a system that you deploy
   within a month or two that people just love, but it has tons of bugs in the core architecture
   and can't be maintained, you probably won't get beyond V1.0 either.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   Quality is an important attribute of your system, however &lt;b&gt;quality is not free&lt;/b&gt;.&amp;nbsp;
   Building a quality systems is not ensured by a set of tools, techniques or processes.&amp;nbsp;
   Quality is a result of an &lt;b&gt;individual's commitment&lt;/b&gt; and a &lt;b&gt;culture within your
   organization&lt;/b&gt;. &amp;nbsp; 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;There is a
   danger on both ends of the spectrum.&amp;nbsp; On one end of the spectrum there is "we
   don't need these new fangled tools and techniques, our Cobol and Assembly Language
   application runs just fine", yeah right, there's a real competitive edge.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I'm &lt;i&gt;probably &lt;/i&gt;not
   going to buy or use your software, and if I do, I'm probably not going to apply any
   updates unless absolutely necessary.&amp;nbsp; On the other end of the spectrum, we try
   to rigorously follow the latest fads something like not writing a single line of code
   without a test, attempting to achieve 100% code coverage, or program exclusively against
   interfaces.&amp;nbsp; While this does sound good in reality are you putting too much &lt;a href="http://www.efficientcoder.net/PermaLink,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx"&gt;&lt;span style="COLOR: blue"&gt;trust
   in your metrics&lt;/span&gt;&lt;/a&gt;?&amp;nbsp; Code coverage of 100% (or even 90%) means your code
   was run, that's it.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;I may be different, but
   I know most of my bugs are edge conditions I don't account for even if I do have a
   test suite covering that chunk of code.&amp;nbsp; The code coverage metric does little
   to protect me against these problems.&lt;span&gt;&amp;nbsp; &lt;/span&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   What is the middle ground here?&amp;nbsp; It's actually pretty simple, &lt;b&gt;think for yourself&lt;/b&gt;,
   make sure you &lt;b&gt;write lots code&lt;/b&gt; that &lt;b&gt;makes it into production, &lt;/b&gt;it doesn't
   do much good to get your code to a certain point and gloss over all the little details&lt;b&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;Also &lt;b&gt;read
   as much as possible&lt;/b&gt;.&amp;nbsp; 
   &lt;br&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;br&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
&lt;link href="file:///C:%5CUsers%5Ckevinw%5CAppData%5CLocal%5CTemp%5C1%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel=File-List&gt;
&lt;link href="file:///C:%5CUsers%5Ckevinw%5CAppData%5CLocal%5CTemp%5C1%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel=themeData&gt;
&lt;link href="file:///C:%5CUsers%5Ckevinw%5CAppData%5CLocal%5CTemp%5C1%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel=colorSchemeMapping&gt;
&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;
&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;Although I
   think the &lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"&gt;SOLID
   Principles&lt;/a&gt; offer a number of good concepts, &lt;span&gt;&amp;nbsp;&lt;/span&gt;I personally don't
   agree with all those concepts.&amp;nbsp; You may agree with all those concepts.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;i&gt;That's
   OK&lt;/i&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;One area I disagree with is the Single Responsibility Principle
   or &lt;a href="http://www.objectmentor.com/resources/articles/srp.pdf"&gt;SRP&lt;/a&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I've
   seen implementations of this in code a code base I needed to extend, and it's just
   not my cup-of-tea, too much noise, classes are not free.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The developer
   swore by this technique.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;i&gt;That's OK.&lt;/i&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;I wish I could
   find the transcript, but let me paraphrase a discussion of SRP from Uncle Bob's &lt;a href="http://www.hanselminutes.com/default.aspx?showID=163"&gt;Hanselminutes&lt;/a&gt; interview
   (right around&amp;nbsp;3 inutes into the podcast)&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;Uncle Bob:
   This is somewhat out of the norm for object oriented design.&amp;nbsp; Early Object Oriented
   Design Principals had us grouping together functions of that operated on the same
   data structures so that the methods of the class manipulate the same variables.&amp;nbsp; 
   &lt;br&gt;
   &lt;br&gt;
   Scott: That definitely flips things on its head&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;. 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;
      &lt;br&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font size=3&gt;E&lt;font size=4&gt;arly
   on I learned one of the core principals of Object Oriented Analysis and Design is
   it's all about the &lt;a href="http://www.amazon.com/Object-Oriented-Systems-Analysis-Computing/dp/013629023X"&gt;data&lt;/a&gt; and
   methods acting upon that data via &lt;a href="http://en.wikipedia.org/wiki/Encapsulation_%28computer_science%29"&gt;encapsulation&lt;/a&gt;.&amp;nbsp;
   Over time your business rules will probably change, however the structure of your
   data will remain fairly static.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The way I design LOB type apps
   is ruthlessly focus on my physical data model.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you don't get
   that right, you will be fighting with an impedance mismatch all through your development
   cycle.&amp;nbsp; Although I could certainly see the value of a different approach, I keep
   my business objects 1:1 in sync with the database tables.&amp;nbsp; The primary reason
   for this is simplicity, once you break that relationship you introduce a mapping layer
   that is sometime necessary but comes at a cost of additional code.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The
   only code you know has zero bugs is code you don't write.&lt;/font&gt;&lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;M&lt;font size=4&gt;aybe
   I'm "old-school" but my process has allowed me to pay the bills for the past 20 years
   now.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In some cases the developers picking up my code said, this
   is so incredibly easy to maintain and the hand off went smoothly with very few support
   calls.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In other cases, people just said it was a mess.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It
   seemed like people that liked my code have been in the industry 10+ years and have
   handed over legacy code themselves.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The people that thought I was
   a &lt;i&gt;hack&lt;/i&gt; usually had less than 5 years and already knew everything there was
   about writing software.&lt;span&gt;&amp;nbsp; &lt;/span&gt;They were just waiting for their first
   chance to start from scratch, build a product and show us old-timers how it's done.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I
   suspect, at one time I thought I knew everything about writing code.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Maybe
   this is a right-of-passage?&lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font size=4&gt;Using
   classes to group together functions just doesn't smell right to &lt;i&gt;me,&lt;/i&gt; it may
   to &lt;i&gt;you. That is ok&lt;/i&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I have the right to express my opinion
   just as Joel and Uncle Bob did, neither of these two people are hacks and I don't
   think I am either.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;b&gt;&lt;i&gt;&lt;font size=4&gt;We as an industry
   need to do a better job of leaving out the religion and personal attacks, software
   is hard.&amp;nbsp; Period.&amp;nbsp; What works for one person on one project would cause
   a different person to fail&lt;/font&gt;.&lt;/i&gt;&lt;/b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;br&gt;
   &lt;font size=4&gt;Another thing to think about in adopting and evaluating new techniques
   and technologies is one of the concepts of the &lt;a href="http://en.wikipedia.org/wiki/Capability_Maturity_Model"&gt;Software
   Capability Maturity Model&lt;/a&gt; or CMM.&amp;nbsp; If you are a Level 1 organization, you
   cannot skip directly to a Level 3 or 4 organization.&amp;nbsp; You must go through Level
   2.&amp;nbsp; If you attempt to implement processes found at Level 3 or 4 you will fail.&amp;nbsp; 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font size=4&gt;At
   any point in your career your toolbox contains a finite number of tools, over time
   you should be continually adding tools to your tool box or you won't advance in your
   career.&amp;nbsp; If you attempt to implement something like the SOLID principals before
   having in place effective requirements gathering, defect tracking, or a continuous
   integration process your time would be much better spent focusing on blocking and
   tackling exercises rather than more advanced techniques.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It's surprising
   how many organizations I've worked with that try to adopt the latest advanced technique,
   but their bug tracking is emails, source control is sorely lacking and requirements
   gathering consists of meetings where the main goal is for people to hear themselves
   talk and sound important! I've seen many more projects fail because of the lack of
   effective leadership, poor requirements or project management than I have because
   the programmers used the wrong technique or pattern.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Before we
   put stealth on our airplane, let's make sure our airplanes fly&lt;/font&gt;.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font size=4&gt;Over
   time there have a been considerable advances in our field of software engineering,
   some stick around some don't.&amp;nbsp; Are we still using those old Rational Rose Puffy
   Clouds.&amp;nbsp; I liked my Puffy Clouds!&amp;nbsp; I want my Puffy Clouds back!&amp;nbsp; None
   of these should be considered 100% bad and ignored, learn something from these, but
   don't just jump in and blindly implement without thinking.&amp;nbsp; Put what works for
   you in your tool box, have a full tool box and select the &lt;b&gt;exact right tool&lt;/b&gt; to
   solve your problem and more importantly, &lt;b&gt;know why you picked that tool&lt;/b&gt;.&lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font size=4&gt;I'm
   looking forward to the "smack-down" between Joel and Uncle Bob in an upcoming Stack
   Overflow episode!&lt;span&gt;&amp;nbsp; &lt;/span&gt;Would be very interesting to see them on &lt;a href="http://www.ufc.com/"&gt;UFC&lt;/a&gt; as
   well.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In the mean time, I'm going to keep writing software, reading
   blogs and keep adding more tools to my tool box. &lt;/font&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;
   &lt;font face="Times New Roman" size=4&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"&gt;
   &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font size=4&gt;&lt;span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;font face="Times New Roman"&gt;-ec&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=feed9006-dca9-4fb2-b282-779c38339dc3" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,feed9006-dca9-4fb2-b282-779c38339dc3.aspx</comments>
      <category>Business of Software;Project Delivery;Software Engineering;Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=0928cae8-2bb3-410a-9fcb-e798a7a12bd1</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,0928cae8-2bb3-410a-9fcb-e798a7a12bd1.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,0928cae8-2bb3-410a-9fcb-e798a7a12bd1.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0928cae8-2bb3-410a-9fcb-e798a7a12bd1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3">With all the grim economic
   news, there has never been a better time to be a developer (well maybe during the
   internet bubble, but that wasn't sustainable).  As an independent consultant,
   I'm always just a little worried about what the next six months will bring. 
   I've been doing this for about 8 years now and so far there has been no shortage of
   work, but you never know what the future will hold.  I think 2009 may provide
   a different way of thinking about how I perform my craft to pay the bills, let me
   explain.  When doing client work there is really no long term guarantee. 
   It's a process of identifying a need for their organization, doing an excellent job
   filling that need, get a check, rinse and repeat.  You are really establishing
   a "dependency" on your client, their needs and cash flow have a big influence on your
   future.  As a developer we know that in most cases dependencies are not a good
   thing.<br /><br />
   That's where I think there are some great opportunities these days for us developers
   to break these dependencies and really take control of our future.  As much as
   I enjoying developing systems to make my clients succeed, I would rather develop systems
   to make <b>myself</b> succeed!  How is this possible?  
   <br />
   Well I'm pursuing two opportunities right now that you can too!  The costs and
   barriers for entry are negligible.<br /><br /></font>
        <p>
        </p>
        <img src="http://www.efficientcoder.net/content/binary/XNA_Banner_Club_final.jpg" border="0" />
        <br />
        <br />
        <font size="3">The first one is really sort of fun, I'm building a game for <a href="http://creators.xna.com/en-US/">XBox
   Community Games</a>.  The idea is I build software, publish it, and it becomes
   available to millions of XBox users to download and play for a very small fee where
   a large portion of that goes into my account.  This means if I can make the game
   interesting enough to tap into an extremely small percentage of the millions of users,
   the income may not be all that trivial.  I'm not buying that 54 foot yacht yet,
   but who knows.  The point here is that I have a high level of control over the
   success and outcome of this effort, the advertising and sales are taken care of via
   the Community Games site.  I can focus on cuttin' code and not have to build
   a business with dozens of employees and all the headaches that come with that.<br /></font>
        <br />
        <img src="http://www.efficientcoder.net/content/binary/servicesPlatform.jpg" border="0" />
        <br />
        <br />
        <font size="3">I think the next opportunity is even more exciting and beginning the
   second half of this year will merit a considerable investment in my time.  I'm
   already getting my feet wet with this technology and I'm excited for the RTM date. 
   This approach and techonology changes things, period.  Over the past eight years,
   I've been working on a product I call The Chaos Filter.  I've spun off a few
   little products that generate some revenue, but really haven't cranked up the marketing
   engine yet.  My thought is once I do this, my primary role will shift from building
   and extending the product to building and extending the business to support that product. 
   The challenge has always been, how can I focus on what I enjoy and outsource 95% of
   everything else yet remain in enough control to be successful.  My product is
   really a set of highly configurable services that work together well.  My goal
   is to allow subject matter experts; non programmers but technical folks; to very quickly
   customize and assemble those services into things I'm calling MicroApps.  These
   will be built for highly specialized niche markets.  My thought is not to sell
   these for hundreds or thousands of dollars, but a monthly subscription fee that will
   usually be less than $20.  Basically a high value, low cost solution that will
   be very easy for people to sign up for and keep coming back.  To make any money
   at this effort, I'm going to need a ton of people signing up.  </font>
        <font size="3">That's
   where I see the <a href="http://www.microsoft.com/azure/whatisazure.mspx">Azure Services
   Platform</a> come in.  Without building a large company, I can partner with subject
   matter experts to build these MicroApps.  Then make these products available
   to the Windows Live user base.  This also offers a highly scalable platform that
   as my product grows and I need more capacity, I'll just need to adjust the number
   of server instances in a configuration file and wha-la I'm more scalable.  Again,
   as with the XBox game, I can focus on my core competency, cuttin' code.<br /><br /><br /></font>
        <img src="http://www.efficientcoder.net/content/binary/image20080609.png" border="0" />
        <br />
        <font size="3">Another awesome opportunity would be to start writing applications
   for the iPhone and iPod Touch.  Although being a .NET developer, I'll probably
   focus on the two opportunities I've outlined above, however this once can't be ignored. 
   Apple did a great job of making it super simple for people to trade you their money
   for your apps.  I purchased a MacBook and have started to learn Objective C. 
   Even though this seems very appealing, I just don't see spending my valuable time
   on this anytime soon.  I guess the XBox and Azure Live Services just turn out
   to be a fad *cough* there are other opportunities out there.<br /><br />
   I'm spending about two thirds of my time doing client work and the other third trying
   to figure out what type of killer app I'm going to develop that will allow me to spend
   all my time programming for fun, not necessarily to pay the bills.  This approach
   isn't for everyone, if you enjoy the security of working for a company and thrill
   of being part of a high performance team you may have found your niche, if not, maybe
   it's time to start looking at what you can do on your own.<br /><br />
   -ec<br /></font>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=0928cae8-2bb3-410a-9fcb-e798a7a12bd1" />
      </body>
      <title>It's a Great Time to be a Developer</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,0928cae8-2bb3-410a-9fcb-e798a7a12bd1.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,0928cae8-2bb3-410a-9fcb-e798a7a12bd1.aspx</link>
      <pubDate>Fri, 06 Feb 2009 15:39:35 GMT</pubDate>
      <description>&lt;font size="3"&gt;With all the grim economic news, there has never been a better time
to be a developer (well maybe during the internet bubble, but that wasn't sustainable).&amp;nbsp;
As an independent consultant, I'm always just a little worried about what the next
six months will bring.&amp;nbsp; I've been doing this for about 8 years now and so far
there has been no shortage of work, but you never know what the future will hold.&amp;nbsp;
I think 2009 may provide a different way of thinking about how I perform my craft
to pay the bills, let me explain.&amp;nbsp; When doing client work there is really no
long term guarantee.&amp;nbsp; It's a process of identifying a need for their organization,
doing an excellent job filling that need, get a check, rinse and repeat.&amp;nbsp; You
are really establishing a "dependency" on your client, their needs and cash flow have
a big influence on your future.&amp;nbsp; As a developer we know that in most cases dependencies
are not a good thing.&lt;br&gt;
&lt;br&gt;
That's where I think there are some great opportunities these days for us developers
to break these dependencies and really take control of our future.&amp;nbsp; As much as
I enjoying developing systems to make my clients succeed, I would rather develop systems
to make &lt;b&gt;myself&lt;/b&gt; succeed!&amp;nbsp; How is this possible?&amp;nbsp; 
&lt;br&gt;
Well I'm pursuing two opportunities right now that you can too!&amp;nbsp; The costs and
barriers for entry are negligible.&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.efficientcoder.net/content/binary/XNA_Banner_Club_final.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size="3"&gt;The first one is really sort of fun, I'm building a game for &lt;a href="http://creators.xna.com/en-US/"&gt;XBox
Community Games&lt;/a&gt;.&amp;nbsp; The idea is I build software, publish it, and it becomes
available to millions of XBox users to download and play for a very small fee where
a large portion of that goes into my account.&amp;nbsp; This means if I can make the game
interesting enough to tap into an extremely small percentage of the millions of users,
the income may not be all that trivial.&amp;nbsp; I'm not buying that 54 foot yacht yet,
but who knows.&amp;nbsp; The point here is that I have a high level of control over the
success and outcome of this effort, the advertising and sales are taken care of via
the Community Games site.&amp;nbsp; I can focus on cuttin' code and not have to build
a business with dozens of employees and all the headaches that come with that.&lt;br&gt;
&lt;/font&gt;
&lt;br&gt;
&lt;img src="http://www.efficientcoder.net/content/binary/servicesPlatform.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size="3"&gt;I think the next opportunity is even more exciting and beginning the
second half of this year will merit a considerable investment in my time.&amp;nbsp; I'm
already getting my feet wet with this technology and I'm excited for the RTM date.&amp;nbsp;
This approach and techonology changes things, period.&amp;nbsp; Over the past eight years,
I've been working on a product I call The Chaos Filter.&amp;nbsp; I've spun off a few
little products that generate some revenue, but really haven't cranked up the marketing
engine yet.&amp;nbsp; My thought is once I do this, my primary role will shift from building
and extending the product to building and extending the business to support that product.&amp;nbsp;
The challenge has always been, how can I focus on what I enjoy and outsource 95% of
everything else yet remain in enough control to be successful.&amp;nbsp; My product is
really a set of highly configurable services that work together well.&amp;nbsp; My goal
is to allow subject matter experts; non programmers but technical folks; to very quickly
customize and assemble those services into things I'm calling MicroApps.&amp;nbsp; These
will be built for highly specialized niche markets.&amp;nbsp; My thought is not to sell
these for hundreds or thousands of dollars, but a monthly subscription fee that will
usually be less than $20.&amp;nbsp; Basically a high value, low cost solution that will
be very easy for people to sign up for and keep coming back.&amp;nbsp; To make any money
at this effort, I'm going to need a ton of people signing up.&amp;nbsp; &lt;/font&gt;&lt;font size="3"&gt;That's
where I see the &lt;a href="http://www.microsoft.com/azure/whatisazure.mspx"&gt;Azure Services
Platform&lt;/a&gt; come in.&amp;nbsp; Without building a large company, I can partner with subject
matter experts to build these MicroApps.&amp;nbsp; Then make these products available
to the Windows Live user base.&amp;nbsp; This also offers a highly scalable platform that
as my product grows and I need more capacity, I'll just need to adjust the number
of server instances in a configuration file and wha-la I'm more scalable.&amp;nbsp; Again,
as with the XBox game, I can focus on my core competency, cuttin' code.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;img src="http://www.efficientcoder.net/content/binary/image20080609.png" border="0"&gt;
&lt;br&gt;
&lt;font size="3"&gt;Another awesome opportunity would be to start writing applications
for the iPhone and iPod Touch.&amp;nbsp; Although being a .NET developer, I'll probably
focus on the two opportunities I've outlined above, however this once can't be ignored.&amp;nbsp;
Apple did a great job of making it super simple for people to trade you their money
for your apps.&amp;nbsp; I purchased a MacBook and have started to learn Objective C.&amp;nbsp;
Even though this seems very appealing, I just don't see spending my valuable time
on this anytime soon.&amp;nbsp; I guess the XBox and Azure Live Services just turn out
to be a fad *cough* there are other opportunities out there.&lt;br&gt;
&lt;br&gt;
I'm spending about two thirds of my time doing client work and the other third trying
to figure out what type of killer app I'm going to develop that will allow me to spend
all my time programming for fun, not necessarily to pay the bills.&amp;nbsp; This approach
isn't for everyone, if you enjoy the security of working for a company and thrill
of being part of a high performance team you may have found your niche, if not, maybe
it's time to start looking at what you can do on your own.&lt;br&gt;
&lt;br&gt;
-ec&lt;br&gt;
&lt;/font&gt;&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=0928cae8-2bb3-410a-9fcb-e798a7a12bd1" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,0928cae8-2bb3-410a-9fcb-e798a7a12bd1.aspx</comments>
      <category>Business of Software;Project Delivery;Software Engineering</category>
    </item>
  </channel>
</rss>