<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Good things come ... eventually</title>
    <link>http://blog.objectmentor.com/articles/2007/01/23/good-things-come-eventually</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Good things come ... eventually</title>
      <description>&lt;p&gt;There is an old adage that good things come to those who wait, provided they work &lt;i&gt;real hard&lt;/i&gt; while waiting.&lt;/p&gt;


	&lt;p&gt;I read &lt;a href="http://community.ative.dk/blogs/ative/archive/2006/11/02/Code-Reviews-and-the-Developer-Handbook.aspx"&gt;a blog article&lt;/a&gt; today that made me sad.  The blogger mentioned that they were doing &lt;span class="caps"&gt;TDD&lt;/span&gt; and using Clean Code techniques and building a working system.  His company, apparently distrustful of the newness of his approach, hired a consultant to come and critique the team&amp;#8217;s code.  I like that the company lets the team try new things, and that they decided to check on the team&amp;#8217;s results. So far, this is all good.&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s the sad thing: the consultant (allegedly) made a number of old-school recommendations based on practices that have been obviated.&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;He suggested having comments and name warts and other ugliness. It was almost like he was recommending regression based on the idea that "normal" programmers aren't able to deal with good code, being accustomed to ugly code with &lt;a href="http://butunclebob.com/ArticleS.TimOttinger.ApologizeIncode"&gt;apologies&lt;/a&gt; scattered throughout.  That's unfortunate, and I suspect it's extremely good-intentioned.  I would call it a "misplaced kindness."&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;I don&amp;#8217;t know the blogger&amp;#8217;s company and wouldn&amp;#8217;t ask, but in general I am always surprised at how slowly transition takes place in larger companies.  &lt;i&gt;Body inertia&lt;/i&gt; (in the F=ma sense)  is hard to overcome so people are using expensive version control systems that are two generations behind the times, old-fashioned waterfall methods, code documentation practices that are completely obviated, a total sense of denial toward open-source tools, and rigid frameworks whose owners have abandoned them for more workable systems.  It&amp;#8217;s an ugly situation, but on the other hand countless fads and bad ideas have caught fire only to die out. Those companies nearer the trailing edge didn&amp;#8217;t jump on the wagon only to jump off painfully later.  There is an advantage to being a late adapter.&lt;/p&gt;


	&lt;p&gt;The trick in working with the slow transition is that we mustn&amp;#8217;t confuse frustration with failure.  Ultimately, the world does move forward and new practices are eventually accepted.  It is an issue of patience with those who drag behind and perseverance in moving them forward.  It&amp;#8217;s primarily a matter of education and evidence and time.&lt;/p&gt;


	&lt;p&gt;Somehow OO and dynamic languages and version control and CM and all of various other breakthroughs eventually permeate the work-o-sphere.  Few of us need to ask permission to use OO or to draw &lt;span class="caps"&gt;UML&lt;/span&gt; on a whiteboard or to use color syntax highlighting or &amp;#8220;intellisense&amp;#8221; or word processors or our favorite text editors, but at one time we had to fight about it.&lt;/p&gt;


	&lt;p&gt;If the Agile ways are better (and I think they are) then we&amp;#8217;ll eventually see these techniques as the mainstream and the idea of naming warts, long functions with long comments,  and test-last programming will seem laughable and quaint to the most conservative organization. Refactoring tools will be the least we expect from our IDEs, and open source servers and libraries will be prevalent.  I think that 
day is coming.&lt;/p&gt;</description>
      <pubDate>Tue, 23 Jan 2007 16:19:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:53e1ef9f-0d3e-4ec7-b920-1a3340851492</guid>
      <author>Tim Ottinger</author>
      <link>http://blog.objectmentor.com/articles/2007/01/23/good-things-come-eventually</link>
      <category>Tim's Tepid Torrent</category>
    </item>
    <item>
      <title>"Good things come ... eventually" by Wilhelm Schwarz</title>
      <description>&lt;p&gt;I would think about this the other way around:&lt;/p&gt;


	&lt;p&gt;If some companies know how to do better and some companies are still in the stone age, this is good for the companies that know better.&lt;/p&gt;


	&lt;p&gt;Companies compete among themselves, so it is important that most of them fail for others to succeed. If they choose to use older practice, which has shown to make projects fail, that is good.&lt;/p&gt;


	&lt;p&gt;Just choose a company that is willing to succeed and to pay the price for success, which mostly means that it lets its developers learn new techniques and feel responsible for what they are doing.&lt;/p&gt;</description>
      <pubDate>Sun, 04 Mar 2007 21:29:05 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:00760e5d-4dc5-43e3-b9c0-8fb58fb5d319</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/23/good-things-come-eventually#comment-141</link>
    </item>
    <item>
      <title>"Good things come ... eventually" by Martin Jul</title>
      <description>&lt;p&gt;Let me provide some more background on the case.&lt;/p&gt;


	&lt;p&gt;One that particular project I was a consultant (architect/tech lead) working with a customer&amp;#8217;s team. Our customer itself was another consulting company working for an enterprise organisation. The project was to replace their legacy mainframe with a .NET application. The enterprise organisation had hired a code reviewer to check the project. He came from yet another consulting company.&lt;/p&gt;


	&lt;p&gt;We used standard, but modern techniques like TDD, an inversion-of-control container (Castle Project) and an OR-mapper (NHibernate).&lt;/p&gt;


	&lt;p&gt;The consulting company we helped learned to appreciate our agile practices &amp;#8211; initially there was the normal resistance to change but in the end it is hard to argue against results.&lt;/p&gt;


	&lt;p&gt;For example, when we introduced the OR-mapper (NHibernate) the DBAs put up a fight since myth has it that  Stored Procedures always perform better. Only when we measured and showed that it did in fact perform well and that it would free up four DBAs from writing SPs for many months did the resistance die out. It is hard to argue against facts like that.&lt;/p&gt;


	&lt;p&gt;The resistance from the code reviewer was basically due to his assignment. He was asked to review the documentation. The intention was to check the documentation to make sure that the enterprise organisation could hire someone else to work on the application afterwards. The underlying agenda was to avoid supplier lock-in. This, of course, is perfectly reasonable.&lt;/p&gt;


	&lt;p&gt;The problem was that the reviewer had almost fourty years of experience in application development but none with unit testing, mocks, inversion-of-control, OR-mappers and Selenium (automated web integration testing).&lt;/p&gt;


	&lt;p&gt;From that perspective, documentation is the green comments in the source code &amp;#8211; the XML that can be extracted to a help file. And &amp;#8211; since comments provide the only value from this perspective &amp;#8211; no value was assigned to properly named methods or simple, readable code with tests that document the expected behaviour.&lt;/p&gt;


	&lt;p&gt;He actually managed to find one piece of code in the system that he liked. It had comments (apoligies!) &amp;#8211; it was a complicated business rule reverse engineered from the legacy system.&lt;/p&gt;


	&lt;p&gt;To make a point I refactored it to its simplest extreme and removed all the comments and at that point it became apparent that the business rule was specified in a way that made no sense.&lt;/p&gt;


	&lt;p&gt;From my perspective that proved the case for readable code.&lt;/p&gt;


	&lt;p&gt;However from the perspective of the organisation paying for the project all they saw was consultants disagreeing about the right approach.&lt;/p&gt;


	&lt;p&gt;Eventually however some Asian consultants were in-sourced to the project to write a bunch of data export jobs and after we proved that we were able to get them up to speed quickly we did not have any more interference from the code reviewer.&lt;/p&gt;


	&lt;p&gt;So the story ends well.&lt;/p&gt;


	&lt;p&gt;There will be resistance to new ways of working, but it is possible to overcome it by showing good results.&lt;/p&gt;


	&lt;p&gt;The big lesson learned was that if code reviews or other external factors are allowed to interfere there is good wisdom to be found in the principles behind the Agile Manifesto &amp;#8211; &amp;#8220;customer collaboration over contract negotiation&amp;#8221;. Focus the work on proving that the method is sound by showing good results.&lt;/p&gt;


	&lt;p&gt;For non-developers direct experience is much more powerful than quarrelling over abstract concepts of &amp;#8220;good code&amp;#8221;, so demonstrating that their concern about vendor lock-in was addressed properly removed the obstacles.&lt;/p&gt;


&lt;p&gt;That&amp;#8217;s another facet of agile development.&lt;/p&gt;

	&lt;p&gt;&lt;i&gt;thanks for the extra detail &amp;#8211; tim&lt;/i&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 24 Jan 2007 13:56:03 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:cb928f92-b093-4ee8-a63c-5e6da6f189fa</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/23/good-things-come-eventually#comment-48</link>
    </item>
  </channel>
</rss>
