<?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: The Big Redesign In The Sky</title>
    <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>The Big Redesign In The Sky</title>
      <description>&lt;p&gt;The first rule of holes:  &lt;em&gt;If you are in one, stop digging.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Many software developers take this to mean that if you have a huge legacy mess in your software you should stop working on it and rewrite it from the ground up.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;This is probably the &lt;strong&gt;worst&lt;/strong&gt; thing you could do&amp;#8230;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Everyone wants to work in a green field.  In a green field you don&amp;#8217;t have to deal with the mess that&amp;#8217;s accumulated over the years.  In a green field you can be clean.  In a green field you can build the perfect system.  All would be well if only we could start over with a green field.&lt;/p&gt;


	&lt;p&gt;What a crock.  Remember, the original mess started in a green field.  &lt;em&gt;All messes started in a green field!&lt;/em&gt;  The one irrefutable data point we have about green fields is that they frequently lead to horrible messes!&lt;/p&gt;


	&lt;p&gt;Why do green fields become messes?  Because the cows crap all over the place.  The grass tastes really good because it&amp;#8217;s virgin clean and fresh.  And who cares about the occasional cow pie?  Besides as long as we walk in the same direction, all the cow pies are behind us and we can&amp;#8217;t see them.&lt;/p&gt;


	&lt;p&gt;OK, I&amp;#8217;ve taken the metaphor too far.  But the reality of green field projects is that they create the illusion that your messes don&amp;#8217;t matter.&lt;/p&gt;


	&lt;p&gt;Your messes &lt;em&gt;do&lt;/em&gt; matter.  Every single one of your messes matters.  And if you don&amp;#8217;t clean them up from the very start, you are going to wind up with a horrible messy legacy wad in short order.&lt;/p&gt;


	&lt;p&gt;But that&amp;#8217;s not what this blog is about.  This blog is about what you are supposed to do when you actually &lt;em&gt;have&lt;/em&gt; a big ugly legacy wad.  So Uncle Bob is going to tell you what to do.&lt;/p&gt;


	&lt;p&gt;You aren&amp;#8217;t going to like it.&lt;/p&gt;


	&lt;p&gt;When you have a big messy legacy wad, what you have to do is&amp;#8230;&lt;/p&gt;


	&lt;p&gt;You really aren&amp;#8217;t going to like this.&lt;/p&gt;


	&lt;p&gt;What you have to do is&amp;#8230; is&amp;#8230;&lt;/p&gt;


	&lt;p&gt;42.&lt;/p&gt;


	&lt;p&gt;No, sorry, wrong story.  What you have to do is stop making the messes and start cleaning them up.&lt;/p&gt;


	&lt;p&gt;This does not mean you call your managers into a conference room and tell them that you aren&amp;#8217;t going to be delivering features for the next three months while you refactor the code.  &lt;em&gt;Do &lt;span class="caps"&gt;NOT&lt;/span&gt; do this!&lt;/em&gt;  Rather, it means that you are going to adopt the &amp;#8220;Boy Scout Rule&amp;#8221; and check each module in a little cleaner than when you checked it out.&lt;/p&gt;


	&lt;p&gt;From iteration to iteration, and from release to release, you are going to clean this system while continuing to add new features and functionality to it.  &lt;em&gt;There is no other way&lt;/em&gt;.&lt;/p&gt;


	&lt;h3&gt;When is a redesign the right strategy?&lt;/h3&gt;


	&lt;p&gt;I&amp;#8217;m glad you asked that question.  Here&amp;#8217;s the answer.  &lt;em&gt;Never.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Look, you &lt;em&gt;made&lt;/em&gt; the mess&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;, now clean it up.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not telling you this to punish you for making the mess.  I&amp;#8217;m telling you this because the green field effort is almost always doomed to fail.  Here&amp;#8217;s the reason:&lt;/p&gt;


	&lt;p&gt;Once systems get messy, the people who made the messes start to demand a redesign.  Managers don&amp;#8217;t want to redesign because they know how expensive it is.  But the developers beat the drums of redesign louder and louder.  Meanwhile every feature takes longer and longer to add.  Bugs accumulate faster than they can be fixed.  Bugs that are fixed reappear over and over again.  When managers ask why, the developers blame the mess, and beat the drums ever louder&amp;#8230; ever louder.&lt;/p&gt;


	&lt;p&gt;Eventually, out of sheer frustration, management authorizes the redesign.  They pick the &lt;em&gt;Tiger Team&lt;/em&gt;!  The best of the best&amp;#8230; The cream of the cream&amp;#8230;  These are the developers who are going to save the project.&lt;/p&gt;


	&lt;p&gt;The rest of us hate them because &lt;em&gt;they&lt;/em&gt; get to work on a green field while the rest of us are stuck maintaining the old system.  And the feature requests and bug fixes continue to pile in.&lt;/p&gt;


	&lt;p&gt;What does the &lt;em&gt;Tiger Team&lt;/em&gt; use for requirements?  There may have been a requirements document at one point, but it was never actually accurate, and it&amp;#8217;s hopelessly out of date by now!  No, the &lt;em&gt;Tiger Team&lt;/em&gt; has but one source for requirements.   &lt;em&gt;The old system!&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;But the old system is &lt;em&gt;changing&lt;/em&gt;!  Those of us &lt;em&gt;not&lt;/em&gt; on the &lt;em&gt;Tiger Team&lt;/em&gt; are adding new features and bug fixes every day.  And that means that we are in a&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Race!&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Remember Xeno&amp;#8217;s Paradox?  Achilles and a tortoise are in a race.  The tortoise has a head start.  Every time Achilles gets to where the tortoise &lt;em&gt;was&lt;/em&gt;, the tortoise has moved to a new point &lt;em&gt;ahead&lt;/em&gt; of Achilles.  Therefore Achilles can never catch the tortoise.&lt;/p&gt;


	&lt;p&gt;Fortunately the law of limits allows us to escape this paradox in a mathematical sense.  But in software the paradox sill holds.  The &lt;em&gt;Tiger Team&lt;/em&gt; can never catch up to the old system.  Every time they get to where the old system was, the old system has added new features.&lt;/p&gt;


	&lt;p&gt;I have seen that race go on for ten years.&lt;/p&gt;


	&lt;p&gt;When (If!) the new system eventually gets to the place where it can replace the old system, all the members of the &lt;em&gt;Tiger Team&lt;/em&gt; will be long gone having moved on to other wonderful green field projects.  Schedule pressures will have mounted until the new system is finally completed&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; through a Herculean effort.  And the developers on the new system will have already started beating the drums for a redesign.&lt;/p&gt;


	&lt;p&gt;I have seen this happen over and over again.  Big Redesigns in the Sky almost always fail horribly.  &lt;em&gt;Horribly!&lt;/em&gt;  &lt;em&gt;&lt;strong&gt;&lt;span class="caps"&gt;HORRIBLY&lt;/span&gt;!!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


	&lt;h3&gt;Moral&lt;/h3&gt;


	&lt;p&gt;It&amp;#8217;s simple really.  But you aren&amp;#8217;t going to like it.  If you have a mess, the only way to get rid of the mess is to clean it.  Remember that mess is currently paying your paycheck.  That system represents your family jewels.  You may have dragged those jewels through the mud, and dipped them in pig dung, but that&amp;#8217;s no reason to abandon them for some shiny baubles that look pretty for the moment, but can&amp;#8217;t possibly pay your paychecks.  Go get the family jewels and clean them.  It may take a long time.  It may be hard.  It may be disgusting work.  But in the end you&amp;#8217;ll have your family jewels shined and beautiful, and you&amp;#8217;ll know how to keep them that way.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; And if you didn&amp;#8217;t, you&amp;#8217;ve probably made other equivalent messes and left them behind for others to clean up.  What goes around comes around.&lt;/p&gt;


	&lt;p id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; &amp;#8220;Completed&amp;#8221; is the wrong word.  More likely the system was finally readied through a set of horrible compromises with the product people and customers.  Whole feature sets are likely missing, broken, or so different that the customer hates them.&lt;/p&gt;</description>
      <pubDate>Fri, 09 Jan 2009 16:46:23 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:fb938d1a-99e4-47c7-b620-efb8791a5e3c</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Office Furniture London</title>
      <description>&lt;p&gt;I really like the work that has gone into making the post. I will be sure to tell my blog buddies about your content keep up the good work. Thanks&lt;/p&gt;</description>
      <pubDate>Tue, 06 Jul 2010 05:15:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:77e1c7dd-4c35-45b6-be3f-5d52bc58d0bb</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-15446</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Office Design</title>
      <description>&lt;p&gt;Fantastic post. Your post was that great, keep it up.&lt;/p&gt;</description>
      <pubDate>Tue, 06 Jul 2010 02:43:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3e6cb597-9291-4de4-a917-54dfaacf4c1b</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-15396</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by petrje@gmail.com</title>
      <description>&lt;p&gt;I wonder, how to avoid &amp;#8220;BRISK&amp;#8221; when company (after couple fusions) owns three similar &lt;em&gt;but different&lt;/em&gt; legacy systems on obsolete platforms (MS VB6 + SQL, MS VFP + DBF, Clipper [do you remember?]). MS VFP and Clipper have no successors; MS VB6 is possible &amp;#8211; with many difficulties &amp;#8211; convert to MS VB.NET (my preferred way). &lt;/p&gt;
&lt;p&gt;I&amp;#8217;m frighten from preparation of &amp;#8220;BRISK&amp;#8221; to MS Silverlight&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Wed, 09 Jun 2010 03:15:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fe603759-8ecd-4e17-bf7b-0d1336c7fa06</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-12861</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Convert DVD to HTC</title>
      <description>&lt;p&gt;ah ha ,it is really good!
Here ,our &lt;a href="http://www.pdftobmpconverter.net" rel="nofollow"&gt;PDF to BMP Converter&lt;/a&gt; will show you its main features and the easy-to use&lt;/p&gt;


	&lt;p&gt;steps that how to convert PDF to BMP. With PDF to BMB Converter, you will find that it is very simple to convert PDF to BMP.also&lt;/p&gt;


	&lt;p&gt;,you can try fdg&lt;/p&gt;</description>
      <pubDate>Thu, 13 May 2010 02:14:05 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c9641f71-1f26-46f0-a285-2c61e7076ac3</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-11393</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by betting strategies</title>
      <description>&lt;p&gt;Project ReDeSign has the major goal to develop new technologies and technology strategies enabling cable operators to migrate&lt;/p&gt;</description>
      <pubDate>Thu, 18 Mar 2010 10:00:04 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f75b4dd0-8652-4902-8d04-9d4d1da09b95</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-8079</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Tom Harris</title>
      <description>&lt;p&gt;Yes, and need to emphasize more that code doesn&amp;#8217;t design and write itself&amp;#8212;people write it. Same people rewriting will make same mess. New people rewriting will make new mess. Must help the people make less mess per functionality delivered or improved. Here&amp;#8217;s a way:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://talkaboutquality.wordpress.com/2009/07/18/product-quality-3-in-1/" rel="nofollow"&gt;http://talkaboutquality.wordpress.com/2009/07/18/product-quality-3-in-1/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Feb 2010 12:12:32 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b97ecd15-7d55-442c-99c7-e51db290a98e</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-7627</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Endep</title>
      <description>&lt;p&gt;Great post, can&amp;#8217;t argue&lt;/p&gt;</description>
      <pubDate>Fri, 19 Feb 2010 09:49:56 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ca253a14-39b3-4b60-90ba-bf8f4138f864</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-7588</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by pigmeat</title>
      <description>&lt;p&gt;&amp;#8220;Bullshido.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;If evolution took this tactic, you&amp;#8217;d still be an amoeba.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Apr 2009 15:13:49 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4b90581b-2d88-4f83-81d7-3fbc6adb5509</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-3154</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by tottinge</title>
      <description>&lt;p&gt;The question is not whether or not they should have changed, but how they should have gone about it.  And mind you, M$ is an unusual case because it&amp;#8217;s not an issue whether they can afford to keep multiple systems running.  They quit adding features to the old as they built the new to be feature complete, and it costs them about the amount Bill loses in the couch at night.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Feb 2009 14:11:14 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:768631ab-f832-4a91-8fc0-356f1b7b3930</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2707</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Daniel Meyer</title>
      <description>&lt;p&gt;Bob,
Microsoft&amp;#8217;s (I think green field) development of its NT architecture and subsequent migration of its customer base to it was painful and took several years, but it seems to me it was necessary so that Microsoft didn&amp;#8217;t fall behind in the OS market.  Do you think Microsoft should have stayed with their Windows 95-based architecture?  In my mind, the Win95 to WinNT transition was one of those (rare, maybe) green field projects that succeeded.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Feb 2009 13:25:33 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c7c167fa-3587-4a1b-9e4e-b88cc2273394</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2706</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Joe Ballard</title>
      <description>&lt;p&gt;I&amp;#8217;ve personally been involved in a successful greenfield rewrite. Granted, it was a small scale app (two developers, 18 months). This was right at the time .NET and C# first came out, so we had an ulterior motive to play with new dev toys while doing the rewrite. .NET had stuff that we needed already built in, that we would have had to write ourselves (or purchase third party components for) if we had stayed with the existing VB6 app.&lt;/p&gt;


	&lt;p&gt;So when I hear industry experts such as yourself and Spolsky proclaim that this is &amp;#8220;never&amp;#8221; a good idea, and will &amp;#8220;always&amp;#8221; end in &amp;#8220;failure&amp;#8221;, my BS alarm goes off. Then I get skeptical about other proclaimed &amp;#8220;truths&amp;#8221;, and wonder if they are also misguided and overstated opinions also.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Feb 2009 06:45:22 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d917dc20-0511-4adb-b735-c28be0ea7f64</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2676</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Chris Johnston</title>
      <description>&lt;p&gt;I complete agree, however, I would like to offer up a different approach to possibly solving the same problem.&lt;/p&gt;


	&lt;p&gt;One idea that has come out of ThoughtWorks is that off a &lt;a href="http://martinfowler.com/bliki/StranglerApplication.html" rel="nofollow"&gt;Strangler Application as documented by Martin Fowler&lt;/a&gt;. Instead of rewriting the existing code, you develop new features using new code in such a way that you slowly strangle the legacy code. The new code is created using the underlying integration points and ideas, but is implemented using new code. This allows you to slowly replace parts of the new system without having the problem of parallel development.&lt;/p&gt;</description>
      <pubDate>Wed, 04 Feb 2009 06:33:12 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:81e5d97e-ba3f-4762-b904-1f273823eb9c</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2575</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by James Brechtel</title>
      <description>&lt;p&gt;Fadzlan,&lt;/p&gt;


	&lt;p&gt;If you read Joel Spolsky&amp;#8217;s article against rewrites (more from a business owner perspective) from some years ago&amp;#8230;.he uses Mozilla as his example of why not to do a rewrite.  Look at all the market share they lost while Netscape went dark.&lt;/p&gt;</description>
      <pubDate>Mon, 02 Feb 2009 14:45:38 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b12db824-e099-4f7a-8ba0-d24924d3a130</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2533</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Fadzlan</title>
      <description>&lt;p&gt;What about Mozilla? Following the old structure would have been a mess.&lt;/p&gt;


	&lt;p&gt;Then again, I believe, they still use some parts from the old Mozilla (XUL engine maybe), so its not entirely rewrite, though from architecture point of view, it is.&lt;/p&gt;


	&lt;p&gt;How about if other companies write another browser then? The thing about browser back then was that IE was quite stagnant, so you don&amp;#8217;t have to play catch up in terms of features. If they don&amp;#8217;t rewrite, Google might have released their own browser in time (which is almost from scratch).&lt;/p&gt;


	&lt;p&gt;I guess its depends on how much of the old stuff that you could reuse, which also means reducing uncertainty, since those codes have been field tested and all. Given that, you could rewrite incrementally, cleaning parts by parts, provided your components are isolated enough.&lt;/p&gt;


	&lt;p&gt;I guess that is the direction of Mozilla until now. Maybe someone can confirm this.&lt;/p&gt;</description>
      <pubDate>Thu, 29 Jan 2009 09:40:03 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8960a6f3-416a-4afb-8012-77d251fec6f4</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2439</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Hodicska Gergely</title>
      <description>&lt;p&gt;Great article!&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 07:46:52 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:679c00b9-97d3-43ed-8181-70ebd651472d</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2436</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by http://www.dotnettricks.com</title>
      <description>&lt;p&gt;We&amp;#8217;re about to do a rewrite of a large, enterprise application.&lt;/p&gt;


	&lt;p&gt;Its written in .NET 1.1.  very poorly by a handful of developers 6 years ago who were learning asp.net and programming (apparently) for the first time.  There are bugs everywhere.  There is data access in the code behind (User interface.)  There are almost no objects.  The database is a denormalized mess.  Data integration from the clients office is done using DTS which makes changes almost impossible to version control or track and many of those DTS packages are horrendous because they copy data all over the place.   There is a giant god object that does &lt;strong&gt;some&lt;/strong&gt; of the data access.  There are mountains of duplicated C# code and duplicated stored procedures.&lt;/p&gt;


	&lt;p&gt;Those developers are gone.  We use domain objects and interfaces now.  We use NHibernate, Dependency Injection, and domain driven design.  We use TDD.  We use MVC for our UI.  We use layered architecture.&lt;/p&gt;


	&lt;p&gt;The application hardly ever receives changes or new functionality, other than bug fixes.  The client has agreed to freeze functionality on the old site until this one is done.&lt;/p&gt;


	&lt;p&gt;Does it not make sense to do a rewrite in this case?  Does it really make sense to hobble this thing gradually,= into something sort of coherent of the next 3-5 years, rather than to rewite it over the next 6 months to a year?&lt;/p&gt;</description>
      <pubDate>Wed, 21 Jan 2009 00:03:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5a91fc55-231d-48ae-83fe-b349b1ccc29f</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2426</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by YvesHanoulle</title>
      <description>&lt;p&gt;I agree with Uncle Bob that rewriting from scratch is not a good idea.
I see some comments on funding that I don&amp;#8217;t understand.
From what uncle bob writes, you don&amp;#8217;t have to ask for funding. You write new features and you clean up while you are doing it.&lt;/p&gt;</description>
      <pubDate>Fri, 16 Jan 2009 10:00:54 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f13ba0bc-3663-4acf-aeee-a3b86537c1e6</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2401</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Inflecto Systems (Software Developers)</title>
      <description>&lt;p&gt;I completely agree with the point about tidying your mess as you go along but sometimes the requirements of a system shift over time in such a way that a complete redesign ends up being cheaper and more robust in the long run.&lt;/p&gt;</description>
      <pubDate>Wed, 14 Jan 2009 15:00:23 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e72c8430-cce2-4a7c-ac4e-db09476ee257</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2380</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Andrew Gibson</title>
      <description>&lt;p&gt;Correction:&lt;/p&gt;
&lt;p&gt;&amp;#8220;Frequently this means that someone other than the person(s) who sponsored the original system&#8217;s development must be replaced.&amp;#8221;&lt;/p&gt;
&lt;p&gt;should read:&lt;/p&gt;
&lt;p&gt;&amp;#8220;Frequently this means that the person(s) who sponsored the original system&#8217;s development must be replaced.&amp;#8221;&lt;/p&gt;</description>
      <pubDate>Tue, 13 Jan 2009 14:12:27 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:22041552-0fb8-42eb-9eda-ba9ca79bd0a2</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2379</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Andrew Gibson</title>
      <description>&lt;p&gt;Uncle Bob,&lt;/p&gt;
&lt;p&gt;I&#8217;m going to have to tentatively suggest that your conclusion of &#8220;Here&#8217;s the answer. Never.&#8221; Should in fact be &#8220;Almost never.&#8221;&lt;/p&gt;
&lt;p&gt;Your logic that a race condition will always result is inaccurate becase it is possible to freeze a legacy system (or subsystem) long enough to perform a rewrite. However, a rewrite will still fail if the underlying causes of the original mess are still in existence.&lt;/p&gt;
&lt;p&gt;e.g. if the cause was a poor conception of the system&#8217;s goals and this was the only cause of the mess, a rewrite will fail unless this underlying cause is fixed. Frequently this means that someone other than the person(s) who sponsored the original system&#8217;s development must be replaced.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Successful rewrites&lt;/b&gt;&lt;br /&gt;
A heuristic for how to perform a successful rewrite would be as follows: 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Determine &lt;i&gt;all&lt;/i&gt; causes of original mess being developed&lt;/li&gt;
&lt;li&gt;Fix &lt;i&gt;all&lt;/i&gt; causes&lt;/li&gt;
&lt;li&gt;Freeze system/subsystem&lt;/li&gt;
&lt;li&gt;Rewrite&lt;/li&gt;
&lt;/ol&gt;</description>
      <pubDate>Tue, 13 Jan 2009 13:38:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:09e59623-0c14-45b3-a2b0-7689903d1f80</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2378</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Carfield Yim</title>
      <description>&lt;p&gt;Agree technically, but in term of finance, it would be tough to ask for funding if don&amp;#8217;t rewrite something :-)&lt;/p&gt;</description>
      <pubDate>Tue, 13 Jan 2009 04:18:01 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:25d2db5e-d18a-4320-9a23-c892f8bbdc8f</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2377</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Aviv Ben-Yosef</title>
      <description>&lt;p&gt;I hear what you&amp;#8217;re saying, and I do agree that a rewrite is not needed in 99% of the time &amp;#8211; developers have an urge to write things from the ground up instead of maintaining code.&lt;/p&gt;


	&lt;p&gt;But, I don&amp;#8217;t think that a rewrite should NEVER be done. I&amp;#8217;m currently involved in one of those new-SOA-rewrite-of-whole-business-which-would-make-us-much-cooler projects. Leaving aside the whole &amp;#8216;SOA is dead stuff&amp;#8217;, I think the need is quite obvious. We are working on an in-house process server and have hundreds of processes written in an in-house language (don&amp;#8217;t ask). That language is, of course, weak, obscure, unknown to most of the staff and is the spawn of the devil. Do you really think that developers should keep learning that language for writing new processes and maintaining old ones instead of introducing a new process server and migrating those processes that are still maintained?&lt;/p&gt;</description>
      <pubDate>Mon, 12 Jan 2009 19:51:18 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:3089fd25-8416-407d-8967-6558d5cb6c67</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2373</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Dagfinn Reiers&#248;l</title>
      <description>&lt;p&gt;I strongly agree, and I&amp;#8217;ve seen several stupid re-implementations myself. As far as &amp;#8220;never&amp;#8221; is concerned,
it may be an acceptable approximation to the correct answer to the question, &amp;#8220;when a redesign is the right strategy?&amp;#8221; If you&amp;#8217;re using a linear scale, that is. I&amp;#8217;ll bet less than 5% of suggested redesigns are worthwhile, probably less than 1%, possibly less than .1%.&lt;/p&gt;


	&lt;p&gt;But it&amp;#8217;s easy to find counterexamples on a small scale. It does happen sometimes that there is a new technology or design that cuts the amount of code required by an order of magnitude or more. In the days when Java was unstable and kept crashing frequently, I had responsibility for a program that monitored instances of a Java program and restarted them when they crashed. Once, in a flash of insight, I realized that it could be re-implemented in three lines of shell script: just start the program inside an eternal while loop.&lt;/p&gt;


	&lt;p&gt;I could have thought of that before. Or someone else could have. But we didn&amp;#8217;t.&lt;/p&gt;</description>
      <pubDate>Sun, 11 Jan 2009 16:44:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c752b9e4-7c41-4cc9-ba08-73d2cc6dfe90</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2370</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Llewellyn Falco</title>
      <description>&lt;p&gt;It&amp;#8217;s the forgotten requirements that are the biggest problem to actually being able to USE the software.&lt;/p&gt;


	&lt;p&gt;Everybody thinks that green field has all the requirements out there. Easy to see. But this is never true. And if you decide to rewrite rather than migrate, it will cause trouble.&lt;/p&gt;


	&lt;p&gt;Ironically, I&amp;#8217;ve been hit by a much more subtle version of this.
Not a rewrite, but development for many months on new stuff. No automated deploy, and every deploy having to be rolled back because of new bugs to existing functionality.&lt;/p&gt;


	&lt;p&gt;No one wanted to throw away the months of development. Including myself. But it made us unable to react to the business needs (can&amp;#8217;t deploy). Finally we realized that we needed to get a automatic deploy of exactly what was in production (roll back the previous months) then move forward. Unfortunately, it took us 2 months to come to this conclusion.&lt;/p&gt;


	&lt;p&gt;2 months and 1 week later though, we were providing value to the users, something that hadn&amp;#8217;t been done in the last 5 months.&lt;/p&gt;


	&lt;p&gt;Green field development needs to be at least as good (read same) as the previous before the investment pays off.
so now it becomes a different question.&lt;/p&gt;


	&lt;p&gt;If i spend 30 hours this week that will be usable next week, is it cheaper than spending 15 hours that can&amp;#8217;t be used till next year?&lt;/p&gt;</description>
      <pubDate>Sat, 10 Jan 2009 16:33:07 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7f2473a2-43a6-42db-bc16-268a782566f5</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2368</link>
    </item>
    <item>
      <title>"The Big Redesign In The Sky" by Al Mellor</title>
      <description>&lt;p&gt;I have certainly been the guilty party for drum-banging redesign in my time. I really believed it was the right way forward.&lt;/p&gt;


My experience confirms Uncle Bob&amp;#8217;s observations:
	&lt;ul&gt;
	&lt;li&gt;the team hated me. I now think rightly so, as well.&lt;/li&gt;
		&lt;li&gt;the rewrite miserably failed. Some bits were a bit neater, but it didn&amp;#8217;t work properly in the end.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;There were many issues with this that Bob describes. There was moving target pressure from new features in the &amp;#8216;mess&amp;#8217;. There was also a &amp;#8216;dont change&amp;#8217; pressure from needing to parse legacy data formats in disk files. Some files contained errors, and the &amp;#8216;mess&amp;#8217; was cleverly written to overcome the problems. So some &amp;#8216;clean&amp;#8217; algorithms just could never work. The exact requirements were impossible to reverse engineer.&lt;/p&gt;


	&lt;p&gt;There was an interesting comment above about a rewrite making business sense if it is cheaper to produce than the cost of maintaining the mess. One thing I have learned since 1982 is that projecting the cost of a software rewrite with any accuracy borders between very difficult to utterly impossible.&lt;/p&gt;


	&lt;p&gt;Given that the cost to rewrite cannot be known, this essentially reduces the business case to a gamble. But the other caveats Uncle Bob mentions still apply.&lt;/p&gt;


	&lt;p&gt;I would urge extreme reticence before deciding to &amp;#8216;big-bang&amp;#8217; rewrite. It&amp;#8217;s tempting, it&amp;#8217;s personally satisfying, it seems like it is adding business value, and in theory it does.&lt;/p&gt;


	&lt;p&gt;But then, who do you think is going to be maintaining and extending the rewrite in your organisation, even supposing it is not canned (along with your credibility) before completion?  It could be you &amp;#8211; or the &amp;#8216;mess maker&amp;#8217; team &amp;#8211; or the latest graduate hire with limited experience &amp;#8211; or some outsource company. The point is, these people will vary in how they approach your code from being &amp;#8216;in line&amp;#8217; with your ideas &amp;#8230; up to making &amp;#8216;a worse mess&amp;#8217; in your opinion.&lt;/p&gt;


	&lt;p&gt;Our CTO has a very good take on this, and I&amp;#8217;ve learned from him. Even the most intentional coding cannot explain all the motivations, rationale, and aspirations for a piece of software. You can see what was done, how it was done fairly well with clean code. But you can&amp;#8217;t see why the alternatives were rejected. And that becomes a significant barrier to other maintainers no matter what you do.&lt;/p&gt;


	&lt;p&gt;As a result, I can only support this little &amp;#8216;accept it; clean as you go&amp;#8217; philosophy. What goes around does indeed come around. Maybe you&amp;#8217;ll even influence some mess makers along the way!&lt;/p&gt;


	&lt;p&gt;Not forgetting that there isn&amp;#8217;t just one way to write good software &amp;#8230; so one person&amp;#8217;s &amp;#8216;mess&amp;#8217; is another persons &amp;#8216;excellent algorithm&amp;#8217; ...&lt;/p&gt;</description>
      <pubDate>Sat, 10 Jan 2009 15:26:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d1291a35-044d-424b-8421-aa8e3de8b0a5</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky#comment-2367</link>
    </item>
  </channel>
</rss>
