<?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=fd969e75-2583-4d61-aff6-0fef98c64615</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,fd969e75-2583-4d61-aff6-0fef98c64615.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,fd969e75-2583-4d61-aff6-0fef98c64615.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fd969e75-2583-4d61-aff6-0fef98c64615</wfw:commentRss>
      <title>Are you doing Development or Discovery</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,fd969e75-2583-4d61-aff6-0fef98c64615.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,fd969e75-2583-4d61-aff6-0fef98c64615.aspx</link>
      <pubDate>Sat, 03 May 2008 17:43:26 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;font color=#000000 size=4&gt;&lt;strong&gt;Development
   or Discovery&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;The
   biggest cost in any software development effort is always a factor of time.&amp;nbsp;
   It became pretty obvious to me while working on a new reporting project.&amp;nbsp; I've
   worked on&amp;nbsp;a "ton" of systems over the past few years and&amp;nbsp;with very few exceptions
   I can sit down and start making tangible progress very quickly (this may not be&amp;nbsp;evident
   to my clients while I'm working on the plumbing, but that's a topic for another post)
   but with this project I've got about 4-6 hours into it and although I'm making headway
   on a couple of fronts I'm starting to sense the "churn" where it's more of&amp;nbsp;a
   discovery process than a development effort.&amp;nbsp; How much of your time is spent
   in discovery and how much in pure development?&amp;nbsp; I think the ratio of discovery
   to development is major factor in developer efficiency and thus the time/cost in a
   software development effort.&amp;nbsp; Although some external factors such as training,
   pair programming, documentation&amp;nbsp;and mature processes may help with this ratio,
   the biggest impact on the ratio will be the person doing the development.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;Discovery
   does not provide any real business value.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Discovery
   is a critical investment that needs to be made.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Just
   as you invest in your financial future, you should invest in your professional one
   as well.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Once you’ve made this investment
   you start building capital, the capital can then be used to increase your Development
   time, this is where your investments should pay off.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As
   Frederick Brooks states in his timeless classic “The difference between an exceptional
   developer and a Mediocre one is generally an order of magnitude”.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Why
   is this the case?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;One reason is &lt;/font&gt;&lt;a href="http://www.efficientcoder.net/PermaLink,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx"&gt;&lt;span style="COLOR: windowtext"&gt;Developer
   Efficiency&lt;/span&gt;&lt;/a&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;but
   the other is the capital the developer brings to the effort.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Effective
   program manager realize this.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;When we
   talk about capital/experience/knowledge this can really be in three categories, general
   technology, domain specific, implementation specific. 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;&lt;strong&gt;Technology
   Capital&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;You,
   my dear reader are 100% responsible for this.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If
   you work for a corporation that’s nice in that they may pay you to learn this knowledge,
   but in the end, this is how to program an Http Handler in ASP.NET or write a SQL Query,
   create a clustered index and so on.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;These
   skills are not implementation specific.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The
   wider background of skill sets you have the more capital you will have and the more
   value you bring.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As a consultant, if
   I am stuck doing “discovery” on a new technology I very rarely bill the client for
   this time.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My clients pay me to “develop”
   they assume I know they technology.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;&lt;strong&gt;Domain
   Specific&lt;/strong&gt; 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;This
   is where you can start developing additional capital.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Unless
   you pick on specific vertical, there will always be a portion of the time working
   on development efforts where you will be doing discovery within that domain.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;An
   example of this is my experience working in a Sales Force Automation company for 3
   years on a number of different efforts.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Although
   there was an initial learning curve in this vertical, over time the value I brought
   to the table during the system design meetings increased, the more knowledge I brought
   to the table, the quicker we could talk about what made their problems unique and
   in most cases these so-called “unique” problems were actually solved in other efforts
   and that experience could be capitalized on.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My
   goal going forward is to pick a new domain every other year and start gaining that
   knowledge.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Have you worked in one industry
   all your life?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;How many jobs are there
   in that industry?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;How well are you compensated
   in your industry with respect to others?&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;&lt;strong&gt;Client/Implementation
   Specific&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;Now
   is where it get’s interesting, each client does indeed have certain technologies,
   systems, database schemas that are unique to their organization.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I
   would suspect that a considerable number of developers are “experts” in this area.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As
   a consultant I worked at one client for about 3 or 4 years.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;They
   made a considerable investment in me in their specific data, not only just the structure,
   tables but also the subject matter.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I
   made a significant investment in time in their data.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;At
   the point I started scaling back my work on their efforts, I had a much better understanding
   of the data within their systems then anyone did internally.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This
   was a great engagement for both parties (Client &amp;amp; Software Logistics) however
   when I look back over those 3 or 4 years, what can I take away from that client specific
   data knowledge?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Not very much as it turns
   out.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;From a billing perspective, I don’t
   have any problem doing “discovery” of a clients systems on their “nickel” especially
   if in the long run that knowledge won’t be useful anywhere but their systems.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;font color=#000000&gt;The
   bottom line is in software development, the more capital you bring to the table, the
   less time you are doing discovery and the more time you do performing development.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;You
   are paid by your organization as an employee or a consultant to do development and
   not discovery.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
   -ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=fd969e75-2583-4d61-aff6-0fef98c64615" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,fd969e75-2583-4d61-aff6-0fef98c64615.aspx</comments>
      <category>Software Engineering;Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=21e6516c-079f-457d-a959-c1b2fa5cc832</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=21e6516c-079f-457d-a959-c1b2fa5cc832</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="4">Putting your Trust in Metrics</font>
        </p>
        <p>
      I'm a big fan of automating as much as you can, but blindly automating processes controlled
      by metrics may cause more problems than they solve.  The idea behind capturing
      metrics or in the case I'm currently working on, writing a suite of unit tests is
      to automate the testing so I can make changes at-will, run my unit test and know everything
      is still working good.  If I come to rely on these unit tests (or really any
      sort of metrics) to help me make business decisions as to when I am code
      complete and ready to ship;unless I'm 100% sure that the unit tests take into account
      99.99% of all the edge cases; I'm doing the recipients of the software a disservice. 
      As an efficient coder, I want to take what the customer tells me they need and turn
      it into the compiled bits that successfully solve their problem in a straight of a
      line as possible.  Unit testing and other software related automated processes
      go a long ways to helping ensure an efficient path, but as these automated processes
      are developed we need to pay special attention to make sure these are complete. 
      In a large sense, if you are capturing KPI or Key Performance Indicators about your
      organizations performance, are you sure that the core measures you capture are indeed
      complete and accurate?  Remember the purpose of capturing these metrics is to
      influence business decisions.  If your metrics are not accurate or your measures
      just can't be trusted, there are three core problems that this causes.  First
      it clouds the judgment of the people directing the efforts, they may think they need
      to do A, but the metrics tell them B really needs to happen, A is clearly the right
      thing to do, but since B is out there as a potential solution it may dilute the affect
      of implementing A.  Second it puts in place a false sense that you are indeed
      doing something to solve your problems and all you are really doing is delaying the
      true solution costing the most valuable asset in software development, time. 
      Finally it takes time to capture metrics and if done properly it is a great tool. 
      If your metrics are worthless you waste the peoples time building the infrastructure
      to capture the metrics, you waste the peoples time to capture the metrics and you
      may even unintentionally sabotage future metrics capturing initiatives.
   </p>
        <p>
      In a previous post I discussed the race car analogy, where the drivers have a significant
      amount of safety gear in their cars.  They need to be 99.99% sure that if they get
      in an accident the gear will do it's job and protect them.  If they can
      rely on their gear, they can take more risks to give themselves a competitive
      edge.  Are your sure the test cases, scenarios and metrics your are employing
      would help you prevent or survive a crash and give you a competitive edge?
   </p>
        <p>
      -ec
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=21e6516c-079f-457d-a959-c1b2fa5cc832" />
      </body>
      <title>Putting your Trust in Metrics</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx</link>
      <pubDate>Mon, 10 Mar 2008 14:17:28 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;font size=4&gt;Putting your Trust in Metrics&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
   I'm a big fan of automating as much as you can, but blindly automating processes controlled
   by metrics may cause more problems than they solve.&amp;nbsp; The idea behind capturing
   metrics or in the case I'm currently working on, writing a suite of unit tests is
   to automate the testing so I can make changes at-will, run my unit test and know everything
   is still working good.&amp;nbsp; If I come to rely on these unit tests (or really any
   sort of metrics) to help&amp;nbsp;me make&amp;nbsp;business decisions as to when I am code
   complete and ready to ship;unless I'm 100% sure that the unit tests take into account
   99.99% of all the edge cases; I'm doing&amp;nbsp;the recipients of the software a disservice.&amp;nbsp;
   As an efficient coder, I want to take what the customer tells me they need and turn
   it into the compiled bits that successfully solve their problem in a straight of a
   line as possible.&amp;nbsp; Unit testing and other software related automated processes
   go a long ways to helping ensure an efficient path, but as these automated processes
   are developed we need to pay special attention to make sure these are complete.&amp;nbsp;
   In a large sense, if you are capturing KPI or Key Performance Indicators about your
   organizations performance, are you sure that the core measures you capture are indeed
   complete and accurate?&amp;nbsp; Remember the purpose of capturing these metrics is to
   influence business decisions.&amp;nbsp; If your metrics are not accurate or your measures
   just can't be trusted, there are three core problems that this causes.&amp;nbsp; First
   it clouds the judgment of the people directing the efforts, they may think they need
   to do A, but the metrics tell them B really needs to happen, A is clearly the right
   thing to do, but since B is out there as a potential solution it may dilute the affect
   of implementing A.&amp;nbsp; Second it puts in place a false sense that you are indeed
   doing something to solve your problems and all you are really doing is delaying the
   true solution costing the most valuable asset in software development, time.&amp;nbsp;
   Finally it takes time to capture metrics and if done properly it is a great tool.&amp;nbsp;
   If your metrics are worthless you waste the peoples time building the infrastructure
   to capture the metrics, you waste the peoples time to capture the metrics and you
   may even unintentionally sabotage future metrics capturing initiatives.
&lt;/p&gt;
&lt;p&gt;
   In a previous post I discussed the race car analogy, where the drivers have a&amp;nbsp;significant
   amount of safety gear in their cars.&amp;nbsp; They need to be 99.99% sure that if they&amp;nbsp;get
   in an accident&amp;nbsp;the gear will do it's job and protect them.&amp;nbsp; If they can
   rely on their gear,&amp;nbsp;they can take more risks to give themselves a competitive
   edge.&amp;nbsp; Are your sure the test cases, scenarios and metrics your are employing
   would help you prevent or survive a crash and give you a competitive edge?
&lt;/p&gt;
&lt;p&gt;
   -ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=21e6516c-079f-457d-a959-c1b2fa5cc832" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,21e6516c-079f-457d-a959-c1b2fa5cc832.aspx</comments>
      <category>Software Engineering;Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=cd3be132-4fc1-4acd-b42d-c85f32b62df1</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cd3be132-4fc1-4acd-b42d-c85f32b62df1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h4>Developer Efficiency
   </h4>
        <p>
      At the very essence of what we do as technical developer folk is take the needs of
      our business stake holders and turn those into 1's and 0's (and maybe in our lifetime we
      might figure out how to get 2 ;-) ) that business stake holder can run as software
      on our computers.  Any thing else is pure rubbish!  
   </p>
        <p>
      So what are the attributes of an efficient coder?
   </p>
        <h5>Technical Aptitude
   </h5>
        <p>
      This is a baseline of becoming an efficient coder, when it's all said and done you
      must have a certain level of Technical Aptitude, that's not to say you need to be
      a "Rocket Scientist" however you should have certain skill such as problem solving,
      a general nature to ask "hmmm...I wonder how that actually works?" or "boy that sure
      is some cool technology, I wonder if I could build that?".  I think this is something
      you either have or you don't.  Not having it is not a bad thing it just means
      this type of work may not be a good fit.  I know any time I try to do something
      creative with any sort of graphics problem, I can spend 3-4 hours on trying new things
      and in the end it probably looks worse that when I started.  This isn't a bad
      thing, but the sooner you can recognize your weaknesses, the sooner you can find other
      people around that complement your strengths that make up for those weaknesses.
   </p>
        <h5>Memory
   </h5>
        <p>
      As a developer there are just too many different technologies that could be implemented
      to solve a problem, too many Languages and API's to learn, too many object models,
      too many command prompt arguments and keywords, you get the idea.  The more of
      these you can stash away and bring to the fore-front when necessary the quicker you
      can continue developing and not doing discovery.
   </p>
        <h5>Perceptiveness
   </h5>
        <p>
      Being able to read between the lines and think to a long term strategy is important
      when developing your solutions.  I see Software Development as chess match. 
      At any given time you are presented with a certain set of facts or knowledge, each
      time you sit down to design/code the moves you make have a major impact in how the
      pieces get moved and sets you up for your next designing/coding session.  I've
      just seen too many software efforts take the fundamentally wrong approach early on,
      and those projects never really recover.  Although an extreme example, let's
      say you wanted to write a simple contact manager, do you think you would start writing
      this in Assembler?  How about some sort of auditing function where a copy of
      all items was made into a database every 15 minutes, then a process was run to detect
      and report on changes, this was a real world scenario where a developer worked
      on getting this process working for about four weeks, and never did...the efficient
      coder made the correct chess moves and had implemented in an afternoon.  I see
      this is a very common problem in software development.  Do you start coding before
      you have a true understanding of the problem you are trying to solve?
   </p>
        <h5>Attention to Detail
   </h5>
        <p>
      This is a really hard one for me, coming up with creative solutions and looking at
      the big picture sometimes blurs some of the details.  What's interesting is that
      when I'm doing low-level programming such as embedded systems development, my eye
      for detail is very sharp...go figure...to be a efficient coder means developing system
      with little or no bugs.  The challenge here is that if you pay too much attention
      to the details, you may loose site of the big picture.  Coding something that
      implements the fundamentally wrong solution even if perfect and bug free is worth
      little to no value.  I think this is one of the bigger areas where we can use
      technologies, tool and processes to improve our efficiency.  After all computers
      aren't very good at creativity however they are extremely good at the details.
   </p>
        <h5>Experience Level
   </h5>
        <p>
      I think by far the biggest impact on this ratio is the experience of the person doing
      the development.  This experience is not just in the actual programming languages
      such as Java, C, C++, or the Software Development Life Cycle/methodologies, but
      to an even greater extent programming a wide variety of business processes. 
      Just as with software, certain things can be "abstracted" the same is true with business
      processes.  This experience also helps facilitate the conversations with the
      business stake holders, the more you understand about business in general, the more
      time you can more quickly get to the specifics of what makes this problem unique.  
   </p>
        <p>
      Experience only comes with time.  You can do certain things that may not
      seem that important, but really are.  <strong>There is no substitute for spending
      time with the business stake holders</strong> even is you just sit in the room and
      not contribute anything.  That is not to say they should have a direct line or
      to influence your day-to-day scheduling.  But as a manager early on, I used
      any possible opportunity to get the developers in a room with the stake holder. 
      When doing embedded systems work it was always a good reminder going to the field
      and realizing that in the real world when my software is working it's not just a little
      LED that comes on at the right time but it's actually a 20 ton rock crusher that would
      be very bad if it came on at the wrong time.  It puts everything you do in a
      different perspective.  How often do you have actual conversations with your
      business stake holders?
   </p>
        <h5>Passion
   </h5>
        <p>
      What really differentiates you as an "efficient coder"?  Do you really just
      plain and simple love what you do?  Or are you just coding to pick up a
      paycheck?  Life is just too short to spend the majority of it working in a job
      just to pickup a paycheck.  If at a certain extent you have qualities mentioned
      above and your are passionate about taking the needs of the business stake holders
      and turning them into the 1's and 0's in exactly the right order as efficiently as
      possible (what ever that means on your particular effort) the chances of you being
      an "efficient coder" are pretty good!
   </p>
        <p>
      Are you an "efficient coder"?
   </p>
        <p>
      - ec
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=cd3be132-4fc1-4acd-b42d-c85f32b62df1" />
      </body>
      <title>Developer Efficiency</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx</link>
      <pubDate>Thu, 08 Feb 2007 15:25:32 GMT</pubDate>
      <description>&lt;h4&gt;Developer Efficiency
&lt;/h4&gt;
&lt;p&gt;
   At the very essence of what we do as technical developer folk is take the needs of
   our business stake holders and turn those into 1's and 0's (and maybe in our lifetime&amp;nbsp;we
   might figure out how to get&amp;nbsp;2 ;-) ) that business stake holder can run as software
   on our computers.&amp;nbsp; Any thing else is pure rubbish!&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
   So what are the attributes of an efficient coder?
&lt;/p&gt;
&lt;h5&gt;Technical Aptitude
&lt;/h5&gt;
&lt;p&gt;
   This is a baseline of becoming an efficient coder, when it's all said and done you
   must have a certain level of Technical Aptitude, that's not to say you need to be
   a "Rocket Scientist" however you should have certain skill such as problem solving,
   a general nature to ask "hmmm...I wonder how that actually works?" or "boy that sure
   is some cool technology, I wonder if I could build that?".&amp;nbsp; I think this is something
   you either have or you don't.&amp;nbsp; Not having it is not a bad thing it just means
   this type of work may not be a good fit.&amp;nbsp; I know any time I try to do something
   creative with any sort of graphics problem, I can spend 3-4 hours on trying new things
   and in the end it probably looks worse that when I started.&amp;nbsp; This isn't a bad
   thing, but the sooner you can recognize your weaknesses, the sooner you can find other
   people around that complement your strengths that make up for those weaknesses.
&lt;/p&gt;
&lt;h5&gt;Memory
&lt;/h5&gt;
&lt;p&gt;
   As a developer there are just too many different technologies that could be implemented
   to solve a problem, too many Languages and API's to learn, too many object models,
   too many command prompt arguments and keywords, you get the idea.&amp;nbsp; The more of
   these you can stash away and bring to the fore-front when necessary the quicker you
   can continue developing and not doing discovery.
&lt;/p&gt;
&lt;h5&gt;Perceptiveness
&lt;/h5&gt;
&lt;p&gt;
   Being able to read between the lines and think to a long term strategy is important
   when developing your solutions.&amp;nbsp; I see Software Development as chess match.&amp;nbsp;
   At any given time you are presented with a certain set of facts or knowledge, each
   time you sit down to design/code the moves you make have a major impact in how the
   pieces get moved and sets you up for your next designing/coding session.&amp;nbsp; I've
   just seen too many software efforts take the fundamentally wrong approach early on,
   and those projects never really recover.&amp;nbsp; Although an extreme example, let's
   say you wanted to write a simple contact manager, do you think you would start writing
   this in Assembler?&amp;nbsp; How about some sort of auditing function where a copy of
   all items was made into a database every 15 minutes, then a process was run to detect
   and report on changes, this was a real world scenario where&amp;nbsp;a developer worked
   on getting this process working for about four weeks, and never did...the efficient
   coder made the correct chess moves and had implemented in an afternoon.&amp;nbsp; I see
   this is a very common problem in software development.&amp;nbsp; Do you start coding before
   you have a true understanding of the problem you are trying to solve?
&lt;/p&gt;
&lt;h5&gt;Attention to Detail
&lt;/h5&gt;
&lt;p&gt;
   This is a really hard one for me, coming up with creative solutions and looking at
   the big picture sometimes blurs some of the details.&amp;nbsp; What's interesting is that
   when I'm doing low-level programming such as embedded systems development, my eye
   for detail is very sharp...go figure...to be a efficient coder means developing system
   with little or no bugs.&amp;nbsp; The challenge here is that if you pay too much attention
   to the details, you may loose site of the big picture.&amp;nbsp; Coding something that
   implements the fundamentally wrong solution even if perfect and bug free is worth
   little to no value.&amp;nbsp; I think this is one of the bigger areas where we can use
   technologies, tool&amp;nbsp;and processes to improve our efficiency.&amp;nbsp; After all computers
   aren't very good at creativity however they are extremely good at the details.
&lt;/p&gt;
&lt;h5&gt;Experience Level
&lt;/h5&gt;
&lt;p&gt;
   I think by far the biggest impact on this ratio is the experience of the person doing
   the development.&amp;nbsp; This experience is not just in the actual programming languages
   such as Java, C, C++,&amp;nbsp;or the Software Development Life Cycle/methodologies, but
   to an even greater extent&amp;nbsp;programming a wide variety of business processes.&amp;nbsp;
   Just as with software, certain things can be "abstracted" the same is true with business
   processes.&amp;nbsp; This experience also helps facilitate the conversations with the
   business stake holders, the more you understand about business in general, the more
   time you can more quickly get to the specifics of what makes this problem unique.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
   Experience only comes with time.&amp;nbsp;&amp;nbsp;You can do certain things that may not
   seem that important, but really are.&amp;nbsp; &lt;strong&gt;There is no substitute for spending
   time with the business stake holders&lt;/strong&gt; even is you just sit in the room and
   not contribute anything.&amp;nbsp; That is not to say they should have a direct line or
   to influence your day-to-day scheduling.&amp;nbsp; But as a manager early on,&amp;nbsp;I used
   any possible opportunity&amp;nbsp;to get the developers in a room with the stake holder.&amp;nbsp;
   When doing embedded systems work it was always a good reminder going to the field
   and realizing that in the real world when my software is working it's not just a little
   LED that comes on at the right time but it's actually a 20 ton rock crusher that would
   be very bad if it came on at the wrong time.&amp;nbsp; It puts everything you do in a
   different perspective.&amp;nbsp; How often do you have actual conversations with your
   business stake holders?
&lt;/p&gt;
&lt;h5&gt;Passion
&lt;/h5&gt;
&lt;p&gt;
   What really differentiates you as an "efficient coder"?&amp;nbsp; Do you&amp;nbsp;really just
   plain and simple love&amp;nbsp;what you do?&amp;nbsp; Or are you just coding to pick up a
   paycheck?&amp;nbsp; Life is just too short to spend the majority of it working in a job
   just to pickup a paycheck.&amp;nbsp; If at a certain extent you have&amp;nbsp;qualities mentioned
   above and your&amp;nbsp;are passionate about taking the needs of the business stake holders
   and turning them into the 1's and 0's in exactly the right order as efficiently as
   possible (what ever that means on your particular effort) the chances of you being
   an "efficient coder" are pretty good!
&lt;/p&gt;
&lt;p&gt;
   Are you an "efficient coder"?
&lt;/p&gt;
&lt;p&gt;
   - ec
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=cd3be132-4fc1-4acd-b42d-c85f32b62df1" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,cd3be132-4fc1-4acd-b42d-c85f32b62df1.aspx</comments>
      <category>Software Engineering;Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=bc386e0f-4095-4ffc-a118-c3e8e89f8971</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,bc386e0f-4095-4ffc-a118-c3e8e89f8971.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,bc386e0f-4095-4ffc-a118-c3e8e89f8971.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bc386e0f-4095-4ffc-a118-c3e8e89f8971</wfw:commentRss>
      <title>Getting Started With Static Code Analysis</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,bc386e0f-4095-4ffc-a118-c3e8e89f8971.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,bc386e0f-4095-4ffc-a118-c3e8e89f8971.aspx</link>
      <pubDate>Sat, 03 Jun 2006 15:07:41 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
   &lt;p&gt;
      &lt;font face=Verdana color=#003300 size=3&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;strong&gt;&lt;font size=3&gt;Static
      Code Analysis on Visual Studio .NET 2005&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;font face=Verdana color=#003300 size=2&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o /&gt;I've
      always been very intrigued with the idea of Static Code Analysis, or checking to make
      sure you follow the design rules on your code.&amp;nbsp; This is built in to Visual Studio
      .NET 2005, within the Project Settings on the “Code Analysis” tab.&lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt;&lt;/font&gt;
   &lt;/p&gt;
   &lt;p&gt;
      &lt;font face=Verdana color=#003300 size=2&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Once
      you have a project of any size and then turn this on, you may find thousands of violations,
      some of these may be helpful, but most will probably not be.&amp;nbsp; One way to start
      distinguishing between the helpful items and items that may be considered “too-picky”
      would be to turn this on in your project before you write your first line of code.&amp;nbsp;
      As you add code you will see which items get flagged with warnings and if they are
      considered “too-picky” or there isn’t anything you can do about this, you can just
      turn that item off.&lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt;&lt;/font&gt;
   &lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=bc386e0f-4095-4ffc-a118-c3e8e89f8971" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,bc386e0f-4095-4ffc-a118-c3e8e89f8971.aspx</comments>
      <category>Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=a8855f4f-28e7-4cf9-9f22-b19514c56570</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,a8855f4f-28e7-4cf9-9f22-b19514c56570.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,a8855f4f-28e7-4cf9-9f22-b19514c56570.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a8855f4f-28e7-4cf9-9f22-b19514c56570</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      How can you tell how efficient your software development/migration process is?
   </p>
        <p>
      It might be interesting to develop a set of metrics that capture the amount of time
      and steps involved with doing certain common activitives on a development effort. 
      A simple but I think effective measurement might be what is involved with adding a
      data-driven, context sensitive drop down list to a WinForm or WebForm.  This
      would involve steps similar to the following:
   </p>
        <ul>
          <li>
         Adding the data source to populate the drop down</li>
          <li>
         Adding the field to be controlled to the data base</li>
          <li>
         Getting the source from your source control repository</li>
          <li>
         Modifying the data transfer objects to get the selected value between the database
         and the control</li>
          <li>
         Modify the user interface to add the control</li>
          <li>
         Checking in the changes</li>
          <li>
         Add some sort of help documentation</li>
          <li>
         Develop any required tests</li>
          <li>
         Migration to the three typical environments (Dev, Stage, Prod) for both the application
         code and database objects.</li>
        </ul>
        <p>
      Come to think of it if this process was captured (even without any metrics) it would
      go a long ways for developer documentation.
   </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=a8855f4f-28e7-4cf9-9f22-b19514c56570" />
      </body>
      <title>Interesting measurement of an Efficient Process</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,a8855f4f-28e7-4cf9-9f22-b19514c56570.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,a8855f4f-28e7-4cf9-9f22-b19514c56570.aspx</link>
      <pubDate>Wed, 19 Apr 2006 20:53:45 GMT</pubDate>
      <description>&lt;p&gt;
   How can you tell how efficient your software development/migration process is?
&lt;/p&gt;
&lt;p&gt;
   It might be interesting to develop a set of metrics that capture the amount of time
   and steps involved with doing certain common&amp;nbsp;activitives on a development effort.&amp;nbsp;
   A simple but I think effective measurement might be what is involved with adding a
   data-driven, context sensitive drop down list to a WinForm or WebForm.&amp;nbsp; This
   would involve steps similar to the following:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Adding the data source to populate the drop down&lt;/li&gt;
   &lt;li&gt;
      Adding the field to be controlled to the data base&lt;/li&gt;
   &lt;li&gt;
      Getting the source from your source control repository&lt;/li&gt;
   &lt;li&gt;
      Modifying the data transfer objects to get the selected value between the database
      and the control&lt;/li&gt;
   &lt;li&gt;
      Modify the user interface to add the control&lt;/li&gt;
   &lt;li&gt;
      Checking in the changes&lt;/li&gt;
   &lt;li&gt;
      Add some sort of help documentation&lt;/li&gt;
   &lt;li&gt;
      Develop any required tests&lt;/li&gt;
   &lt;li&gt;
      Migration to the three typical environments (Dev, Stage, Prod) for both the application
      code and database objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Come to think of it if this process was captured (even without any metrics) it would
   go&amp;nbsp;a long ways for developer documentation.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=a8855f4f-28e7-4cf9-9f22-b19514c56570" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,a8855f4f-28e7-4cf9-9f22-b19514c56570.aspx</comments>
      <category>Continuous Integration;Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b</wfw:commentRss>
      <title>Metrics Viewer from Campwood Software</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b.aspx</link>
      <pubDate>Thu, 30 Mar 2006 13:31:28 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;I recently came
   across an interesting tool for looking at source code metrics &lt;a href="http://www.campwoodsw.com/sourcemonitor.html"&gt;SourceMonitor&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt; from
   Campwood Software.&amp;nbsp; This tool looks at source within a set of sub-directories
   and gives you basic measures about your software.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;The following
   are a sample of&amp;nbsp;measures captured through this application:&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;ul type=disc&gt;
   &lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
      &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Total Source Lines 
      &lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt; 
   &lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
      &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Total Statements 
      &lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt; 
   &lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
      &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Percentage of documentation 
      &lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt; 
   &lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
      &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Complexity 
      &lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt; 
   &lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
      &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Block Depth&lt;o:p&gt;&lt;/o:p&gt;
      &lt;/span&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;A very interesting
   chart is the summary one below; this gives you an idea of how well your source fits
   within a predefined set of measures.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
   &lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img src="http://www.efficientcoder.net/content/binary/Kiviat Graph.png" border=0&gt;&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,4a4a00ee-f1c2-4e68-a1a7-fe671bf64b0b.aspx</comments>
      <category>Software Metrics</category>
    </item>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=ee7195cd-3321-4fce-b0cd-9a73d509c68e</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,ee7195cd-3321-4fce-b0cd-9a73d509c68e.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,ee7195cd-3321-4fce-b0cd-9a73d509c68e.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ee7195cd-3321-4fce-b0cd-9a73d509c68e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <table id="Table1" cellspacing="1" cellpadding="1" width="100%" border="0">
            <tbody>
              <tr>
                <td colspan="2">
                  <span class="Normal" id="dnn_ctr372_MainView_ViewEntry_lblEntry">
                    <p>
                      <font size="2">The Chaos Filter allows for identifying and capturing metrics on day-to-day
                     assignments for a large number of knowledge workers.  As processes are defined
                     they are put into a "portal" that will be used as a dash-board to capture metrics
                     as work is completed.  Targets are established for tasks down to a fine level
                     of granularity, if those targets are not met, that is OK in that they will be adjusted
                     however and reasons are captured as to why things take longer than they should. </font>
                    </p>
                    <p>
                      <font size="2">Once it is established why things are taking longer than they should,
                     the process/job aids can be modified so that the next time the process is executed
                     actual time may be closer than expected.</font>
                    </p>
                    <p>
                      <font size="2">This same model can also be applied to the sales process.  Reasons
                     can be captured as to why sales are not be closed.  These reasons can then be
                     addressed.</font>
                    </p>
                    <p>
                      <font size="2">An interesting challenge here is how to allow for an environment where
                     the knowledge workers can feel empowered to suggest changes to optimze the process
                     as well as try new things and make mistakes in an effort to be more efficient. 
                     The problem here is not where people try and not meet the targets for their processes/tasks
                     but where people try to "game" the system and take advantage of a situation where
                     processes are closely being tracked.</font>
                    </p>
                    <p>
                      <font size="2">The key here is worker efficiency, not making people work harder.</font>
                    </p>
                  </span>
                </td>
              </tr>
              <tr>
                <td align="middle" colspan="2">
                  <font size="2">
                  </font>
                </td>
              </tr>
            </tbody>
          </table>
        </p>
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=ee7195cd-3321-4fce-b0cd-9a73d509c68e" />
      </body>
      <title>Chaos Filter Metrics</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,ee7195cd-3321-4fce-b0cd-9a73d509c68e.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,ee7195cd-3321-4fce-b0cd-9a73d509c68e.aspx</link>
      <pubDate>Sat, 14 Jan 2006 14:28:30 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;table id=Table1 cellspacing=1 cellpadding=1 width="100%" border=0&gt;
      &lt;tbody&gt;
         &lt;tr&gt;
            &lt;td colspan=2&gt;
               &lt;span class=Normal id=dnn_ctr372_MainView_ViewEntry_lblEntry&gt; 
               &lt;p&gt;
                  &lt;font size=2&gt;The Chaos Filter allows for identifying and capturing metrics on day-to-day
                  assignments for a large number of knowledge workers.&amp;nbsp; As processes are defined
                  they are put into a "portal" that will be used as a dash-board to capture metrics
                  as work is completed.&amp;nbsp; Targets are established for tasks down to a fine level
                  of granularity, if those targets are not met, that is OK in that they will be adjusted
                  however and reasons are captured as to why things take longer than they should. &lt;/font&gt;
               &lt;/p&gt;
               &lt;p&gt;
                  &lt;font size=2&gt;Once it is established why things are taking longer than they should,
                  the process/job aids can be modified so that the next time the process is executed
                  actual time may be closer than expected.&lt;/font&gt;
               &lt;/p&gt;
               &lt;p&gt;
                  &lt;font size=2&gt;This same model can also be applied to the sales process.&amp;nbsp; Reasons
                  can be captured as to why sales are not be closed.&amp;nbsp; These reasons can then be
                  addressed.&lt;/font&gt;
               &lt;/p&gt;
               &lt;p&gt;
                  &lt;font size=2&gt;An interesting challenge here is how to allow for an environment where
                  the knowledge workers can feel empowered to suggest changes to optimze the process
                  as well as try new things and make mistakes in an effort to be more efficient.&amp;nbsp;
                  The problem here is not where people try and not meet the targets for their processes/tasks
                  but where people try to "game" the system and take advantage of a situation where
                  processes are closely being tracked.&lt;/font&gt;
               &lt;/p&gt;
               &lt;p&gt;
                  &lt;font size=2&gt;The key here is worker efficiency, not making people work harder.&lt;/font&gt;
               &lt;/p&gt;
               &lt;/span&gt;&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td align=middle colspan=2&gt;
               &lt;font size=2&gt;&lt;/font&gt;&lt;/td&gt;
         &lt;/tr&gt;
      &lt;/tbody&gt;
   &lt;/table&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=ee7195cd-3321-4fce-b0cd-9a73d509c68e" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,ee7195cd-3321-4fce-b0cd-9a73d509c68e.aspx</comments>
      <category>Software Metrics</category>
    </item>
  </channel>
</rss>