<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Rewrite or Rescue</title>
	<atom:link href="http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue</link>
	<description></description>
	<lastBuildDate>Fri, 12 Mar 2010 00:31:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Kamal Shah</title>
		<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/comment-page-1#comment-87</link>
		<dc:creator>Kamal Shah</dc:creator>
		<pubDate>Wed, 24 Sep 2008 22:29:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.carbonfive.com/?p=164#comment-87</guid>
		<description>Alon,

Great article.  I&#039;ve been involved in a number of these types of situations, and I have my $.02.

Pulling this up one level, one of the key factors in this decision is to convince everyone in the company that this is key strategic business decision that needs to be analyzed from many angles.  Key business problems that drive this kind of evaluation often include customer satisfaction problems, customer delivery problems (especially in the case of software+service type solutions), the inability to innovate and falling behind competitors, cost of development.  Talking to folks in all parts of the business (executives, sales, marketing, support and services) is critical to truly understand the key business problems that may help drive the rewrite or rescue problem.  It also help ensure that its not just that the development team wants to rewrite.... 

I&#039;ve found if you can demonstrate how a certain direction will alleviate these issues, you can get strong decisions made from the top that help drive the decision through the organization.

Another key factor, is that a rewrite decision is a huge risk from a business perspective as it takes a significant investment and based on the &quot;average&quot; success rate of software projects.  That risk goes up exponentially if there is not solid buy in and commitment from all key people in the organization. 

Finally, for us, in all these cases where the analysis was done, the case for rewrite made in solid business terms, getting buy in from all parties involved, and then doing all the right things in terms of doing the rewrite (good architecture, good team, good process) it was a big success and the best decision for the business.

-Kamal</description>
		<content:encoded><![CDATA[<p>Alon,</p>
<p>Great article.  I&#8217;ve been involved in a number of these types of situations, and I have my $.02.</p>
<p>Pulling this up one level, one of the key factors in this decision is to convince everyone in the company that this is key strategic business decision that needs to be analyzed from many angles.  Key business problems that drive this kind of evaluation often include customer satisfaction problems, customer delivery problems (especially in the case of software+service type solutions), the inability to innovate and falling behind competitors, cost of development.  Talking to folks in all parts of the business (executives, sales, marketing, support and services) is critical to truly understand the key business problems that may help drive the rewrite or rescue problem.  It also help ensure that its not just that the development team wants to rewrite&#8230;. </p>
<p>I&#8217;ve found if you can demonstrate how a certain direction will alleviate these issues, you can get strong decisions made from the top that help drive the decision through the organization.</p>
<p>Another key factor, is that a rewrite decision is a huge risk from a business perspective as it takes a significant investment and based on the &#8220;average&#8221; success rate of software projects.  That risk goes up exponentially if there is not solid buy in and commitment from all key people in the organization. </p>
<p>Finally, for us, in all these cases where the analysis was done, the case for rewrite made in solid business terms, getting buy in from all parties involved, and then doing all the right things in terms of doing the rewrite (good architecture, good team, good process) it was a big success and the best decision for the business.</p>
<p>-Kamal</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Make the things you do often fast and easy at Carbon Five Community</title>
		<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/comment-page-1#comment-71</link>
		<dc:creator>Make the things you do often fast and easy at Carbon Five Community</dc:creator>
		<pubDate>Wed, 10 Sep 2008 15:35:22 +0000</pubDate>
		<guid isPermaLink="false">http://blog.carbonfive.com/?p=164#comment-71</guid>
		<description>[...] the way we do things. Not all of our projects are from scratch though (see Alon&#8217;s post about Rewrite or Rescue), so we sometimes end up dealing with years worth of history and crufty code. It&#8217;s safe to [...]</description>
		<content:encoded><![CDATA[<p>[...] the way we do things. Not all of our projects are from scratch though (see Alon&#8217;s post about Rewrite or Rescue), so we sometimes end up dealing with years worth of history and crufty code. It&#8217;s safe to [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Willie Wheeler</title>
		<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/comment-page-1#comment-66</link>
		<dc:creator>Willie Wheeler</dc:creator>
		<pubDate>Sun, 07 Sep 2008 05:01:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.carbonfive.com/?p=164#comment-66</guid>
		<description>Good article. Even though I rarely admit it to my development teams, there are certainly times where it makes sense to rewrite an application. The problem though is that developers are too eager to rewrite software, partly because it&#039;s easier to write new stuff than it is to read somebody else&#039;s code (especially somebody else&#039;s crappy code), and partly because it&#039;s just more fun to write new stuff than maintain old stuff. I always become super skeptical when somebody claims that we need to rewrite an app. Could be, but I really doubt it.

There is a classic article on this subject (and the thoughts above mostly parrot things I&#039;ve read in the following):

http://www.joelonsoftware.com/articles/fog0000000069.html</description>
		<content:encoded><![CDATA[<p>Good article. Even though I rarely admit it to my development teams, there are certainly times where it makes sense to rewrite an application. The problem though is that developers are too eager to rewrite software, partly because it&#8217;s easier to write new stuff than it is to read somebody else&#8217;s code (especially somebody else&#8217;s crappy code), and partly because it&#8217;s just more fun to write new stuff than maintain old stuff. I always become super skeptical when somebody claims that we need to rewrite an app. Could be, but I really doubt it.</p>
<p>There is a classic article on this subject (and the thoughts above mostly parrot things I&#8217;ve read in the following):</p>
<p><a href="http://www.joelonsoftware.com/articles/fog0000000069.html" rel="nofollow">http://www.joelonsoftware.com/articles/fog0000000069.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Slava Imeshev</title>
		<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/comment-page-1#comment-65</link>
		<dc:creator>Slava Imeshev</dc:creator>
		<pubDate>Sat, 06 Sep 2008 21:11:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.carbonfive.com/?p=164#comment-65</guid>
		<description>Alon,

You might also want look at our Parabuild for Continuous Integration http://www.viewtier.com/products/parabuild/index.htm</description>
		<content:encoded><![CDATA[<p>Alon,</p>
<p>You might also want look at our Parabuild for Continuous Integration <a href="http://www.viewtier.com/products/parabuild/index.htm" rel="nofollow">http://www.viewtier.com/products/parabuild/index.htm</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul O'Rorke</title>
		<link>http://blog.carbonfive.com/2008/09/java/rewrite-or-rescue/comment-page-1#comment-64</link>
		<dc:creator>Paul O'Rorke</dc:creator>
		<pubDate>Fri, 05 Sep 2008 22:00:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.carbonfive.com/?p=164#comment-64</guid>
		<description>nice article, Alon.  The issues you raise are especially interesting to me at the moment because I just finished a re-write of some code written by non-professional developers.  The code was written by smart people but without a lot of good design or development practices (e.g., minimal modularization and very little systematic testing).

I would add the following based on this experience:

it can be good to identify a core piece of the existing system, break it out as a module or subsystem, and re-implement it first.

Sometimes attempting to re-write an entire system is too overwhelming given the people and time available.  Once a core part is rewritten, spec&#039;d out, nicely documented in psuedo-code or whatever, and solid testing is in place, it becomes much easier to expand out and rework the remaining parts.

Being able to test the behavior of the new implementation and compare it with the existing system is really critical.  The tests help people become confident in the new implementation and also expose differences between the new and old systems.

The system I worked on was somewhat gnarly and had evolved over time and there was no complete specification.  It turned out to be easiest to write a compact description of the desired behavior as a side-effect of the re-implementation effort.  This work also exposed a significant bug in the old system, where its actual behavior failed to satisfy one of the key high level behavioral goals.

Another point:  sometimes it helps to pretty much ignore the existing implementation (especially at the code level).  In this case, re-implementing from the desired behavior without looking at the existing code seemed to go much faster than attempting to rework the original system.  This worked in combination with the first point:  trying to rework the entire system and trying to understand the whole thing all at once was like walking thru a bog.

By the way, I&#039;d like to put in a plug for test-driven development.  Even in a situation like this where you&#039;re re-implementing something, it really helps to first think of examples of the desired behavior, write tests, and then implement to pass the test.</description>
		<content:encoded><![CDATA[<p>nice article, Alon.  The issues you raise are especially interesting to me at the moment because I just finished a re-write of some code written by non-professional developers.  The code was written by smart people but without a lot of good design or development practices (e.g., minimal modularization and very little systematic testing).</p>
<p>I would add the following based on this experience:</p>
<p>it can be good to identify a core piece of the existing system, break it out as a module or subsystem, and re-implement it first.</p>
<p>Sometimes attempting to re-write an entire system is too overwhelming given the people and time available.  Once a core part is rewritten, spec&#8217;d out, nicely documented in psuedo-code or whatever, and solid testing is in place, it becomes much easier to expand out and rework the remaining parts.</p>
<p>Being able to test the behavior of the new implementation and compare it with the existing system is really critical.  The tests help people become confident in the new implementation and also expose differences between the new and old systems.</p>
<p>The system I worked on was somewhat gnarly and had evolved over time and there was no complete specification.  It turned out to be easiest to write a compact description of the desired behavior as a side-effect of the re-implementation effort.  This work also exposed a significant bug in the old system, where its actual behavior failed to satisfy one of the key high level behavioral goals.</p>
<p>Another point:  sometimes it helps to pretty much ignore the existing implementation (especially at the code level).  In this case, re-implementing from the desired behavior without looking at the existing code seemed to go much faster than attempting to rework the original system.  This worked in combination with the first point:  trying to rework the entire system and trying to understand the whole thing all at once was like walking thru a bog.</p>
<p>By the way, I&#8217;d like to put in a plug for test-driven development.  Even in a situation like this where you&#8217;re re-implementing something, it really helps to first think of examples of the desired behavior, write tests, and then implement to pass the test.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
