<?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: Agile Development and Software Maintenance Costs</title>
	<atom:link href="http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/</link>
	<description>Software product success.</description>
	<lastBuildDate>Sun, 12 Feb 2012 19:10:25 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>By: My Initials Are TK &#8212; You don&#8217;t write code, you maintain code.</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-816211</link>
		<dc:creator>My Initials Are TK &#8212; You don&#8217;t write code, you maintain code.</dc:creator>
		<pubDate>Fri, 16 Sep 2011 16:59:18 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-816211</guid>
		<description>[...] Depending on where you read, but software maintenance is 60-90% of project costs. [reference] [...]</description>
		<content:encoded><![CDATA[<p>[...] Depending on where you read, but software maintenance is 60-90% of project costs. [reference] [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Crouch</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-783501</link>
		<dc:creator>David Crouch</dc:creator>
		<pubDate>Fri, 25 Mar 2011 04:21:56 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-783501</guid>
		<description>&lt;span class=&quot;topsy_trackback_comment&quot;&gt;&lt;span class=&quot;topsy_twitter_username&quot;&gt;&lt;span class=&quot;topsy_trackback_content&quot;&gt;By @sehlhorst: Agile Development and Software Maintenance Costs http://bit.ly/hR8cRH #agile&lt;/span&gt;&lt;/span&gt;</description>
		<content:encoded><![CDATA[<p><span class="topsy_trackback_comment"><span class="topsy_twitter_username"><span class="topsy_trackback_content">By @sehlhorst: Agile Development and Software Maintenance Costs <a href="http://bit.ly/hR8cRH" rel="nofollow">http://bit.ly/hR8cRH</a> #agile</span></span></span></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RED GREEN REFACTOR IT! &#187; Blog Archive &#187; &#8220;Scegli la più semplice&#8221;&#8230;dimostriamo se incrementa il ROI.</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-76739</link>
		<dc:creator>RED GREEN REFACTOR IT! &#187; Blog Archive &#187; &#8220;Scegli la più semplice&#8221;&#8230;dimostriamo se incrementa il ROI.</dc:creator>
		<pubDate>Wed, 07 Mar 2007 14:54:34 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-76739</guid>
		<description>[...] Il refactoring continuo che l&#8217;euristica richiede per essere efficace, si porta come side-effect (molto) virtuoso l&#8217;abbattimento dei costi di manutenzione (si veda ad esempio questo articolo) e di cambiamento, grazie alla maggiore semplicità del sistema! [...]</description>
		<content:encoded><![CDATA[<p>[...] Il refactoring continuo che l&#8217;euristica richiede per essere efficace, si porta come side-effect (molto) virtuoso l&#8217;abbattimento dei costi di manutenzione (si veda ad esempio questo articolo) e di cambiamento, grazie alla maggiore semplicità del sistema! [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Levent Gurses</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-75993</link>
		<dc:creator>Levent Gurses</dc:creator>
		<pubDate>Mon, 05 Mar 2007 17:53:34 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-75993</guid>
		<description>Hey all, the boat is rocking again! 

I must say I am more confused now, after reading AVA&#039;s explanations than I was before. In fact, as Scott pointed earlier, it&#039;s almost certain that we are talking about different things here. I guess, we are enjoying the fruits of the internet as a communication medium!

Anyway, AVA thank you for sharing your experiences. Mine are different. 

Steve McConnell is still one of my best reads, but man, in both &quot;Code Complete (1-2)&quot; and &quot;Rapid Development&quot;, do I feel some of the stuff is so yesterday?

Scott, thanks for providing an environment to exchange ideas. As far as real data for the charts is concerned, I have to agree with you one more time. It&#039;s very difficult to get real numbers. But they&#039;ll come. There are number of studies coming lately which demonstrate Agile methods adoptions and success rates. I am sure we&#039;ll see one on the subject pretty soon.

Thank you all,
Levent Gurses</description>
		<content:encoded><![CDATA[<p>Hey all, the boat is rocking again! </p>
<p>I must say I am more confused now, after reading AVA&#8217;s explanations than I was before. In fact, as Scott pointed earlier, it&#8217;s almost certain that we are talking about different things here. I guess, we are enjoying the fruits of the internet as a communication medium!</p>
<p>Anyway, AVA thank you for sharing your experiences. Mine are different. </p>
<p>Steve McConnell is still one of my best reads, but man, in both &#8220;Code Complete (1-2)&#8221; and &#8220;Rapid Development&#8221;, do I feel some of the stuff is so yesterday?</p>
<p>Scott, thanks for providing an environment to exchange ideas. As far as real data for the charts is concerned, I have to agree with you one more time. It&#8217;s very difficult to get real numbers. But they&#8217;ll come. There are number of studies coming lately which demonstrate Agile methods adoptions and success rates. I am sure we&#8217;ll see one on the subject pretty soon.</p>
<p>Thank you all,<br />
Levent Gurses</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-75963</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Mon, 05 Mar 2007 15:32:13 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-75963</guid>
		<description>Thanks AVA for explaining more.  Your comments reminded me of how my work often happened as a developer:
&lt;ol&gt;
	&lt;li&gt;Read Requirement (guess that&#039;s how I got into requirements)&lt;/li&gt;
	&lt;li&gt;Design Solution (or solution fragment)&lt;/li&gt;
	&lt;li&gt;Design Tests (no, really - helped me keep up with the geniuses)&lt;/li&gt;
	&lt;li&gt;Not always in this order
&lt;ul&gt;
	&lt;li&gt;Write Tests&lt;/li&gt;
	&lt;li&gt;Write Comments&lt;/li&gt;
	&lt;li&gt;Write Code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
	&lt;li&gt;Check In Code (on a branch)&lt;/li&gt;
	&lt;li&gt;Redesign and Rewrite and Review and promote&lt;/li&gt;
&lt;/ol&gt;
There is a distinction that might help the discussion:

Rewriting &lt;em&gt;at the time of development&lt;/em&gt; is refactoring writ small.  It is redesigning, rewriting, testing, commenting, etc - much of the activities like you describe, and I remember doing as a developer as part of my personal development process.

Refactoring writ large is changing the design so that it adapts to new requirements.  Not just improving the encapsulated (Requirement X yields code Y) code.  But rewriting things that were done &quot;too quickly&quot; in order to get them done &quot;quickly.&quot;  It&#039;s the whole code-debt issue.  Sometimes quickness is optimized over correctness.

Some examples using patterns so I type less:)
&lt;ul&gt;
	&lt;li&gt;Rewrite a singleton db-manager to support multi-threading when new requirement is introduced for multi-user support.&lt;/li&gt;
	&lt;li&gt;Restructure class hierarchy into decorators when class explosion happens as part of introducing &quot;larger scope&quot; for the product.&lt;/li&gt;
	&lt;li&gt;Adding a state machine when the requirement to move from &quot;undo&quot; to &quot;multiple levels of undo&quot; is scheduled.&lt;/li&gt;
&lt;/ul&gt;
After typing this, I find myself wondering - did I move the discussion forward, or sideways?  Time will tell.</description>
		<content:encoded><![CDATA[<p>Thanks AVA for explaining more.  Your comments reminded me of how my work often happened as a developer:</p>
<ol>
<li>Read Requirement (guess that&#8217;s how I got into requirements)</li>
<li>Design Solution (or solution fragment)</li>
<li>Design Tests (no, really &#8211; helped me keep up with the geniuses)</li>
<li>Not always in this order
<ul>
<li>Write Tests</li>
<li>Write Comments</li>
<li>Write Code</li>
</ul>
</li>
<li>Check In Code (on a branch)</li>
<li>Redesign and Rewrite and Review and promote</li>
</ol>
<p>There is a distinction that might help the discussion:</p>
<p>Rewriting <em>at the time of development</em> is refactoring writ small.  It is redesigning, rewriting, testing, commenting, etc &#8211; much of the activities like you describe, and I remember doing as a developer as part of my personal development process.</p>
<p>Refactoring writ large is changing the design so that it adapts to new requirements.  Not just improving the encapsulated (Requirement X yields code Y) code.  But rewriting things that were done &#8220;too quickly&#8221; in order to get them done &#8220;quickly.&#8221;  It&#8217;s the whole code-debt issue.  Sometimes quickness is optimized over correctness.</p>
<p>Some examples using patterns so I type less:)</p>
<ul>
<li>Rewrite a singleton db-manager to support multi-threading when new requirement is introduced for multi-user support.</li>
<li>Restructure class hierarchy into decorators when class explosion happens as part of introducing &#8220;larger scope&#8221; for the product.</li>
<li>Adding a state machine when the requirement to move from &#8220;undo&#8221; to &#8220;multiple levels of undo&#8221; is scheduled.</li>
</ul>
<p>After typing this, I find myself wondering &#8211; did I move the discussion forward, or sideways?  Time will tell.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ~AVA</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-75825</link>
		<dc:creator>~AVA</dc:creator>
		<pubDate>Mon, 05 Mar 2007 10:51:17 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-75825</guid>
		<description>Levent Gurses, let me in turn comment on your comments.

1. &quot;... diagram...addresses the Cost of Change (CC). Why should it consider the cost of refactoring?&quot;
Because the refactoring changes the code.

2.  &quot;By Iteration 11 I am spending $1024 on refactoring alone... the cost is kept under control.&quot;
The knowing how much money is lost is not keeping cost under control. The prevention of money loss is keeping cost under control.

3.&quot; “… the resulting curve will go above black line…” - so you’re saying that doing nothing actually saves the company money?&quot;
Yes, of course. The refactoring changes the code without changing the product - from the customer&#039;s point of view that&#039;s throwing resources. The customer says: if you cannot spend my time and money for product improvement, just don&#039;t start touching my code. In this sense, when you do nothing (related to refactoring), you actually save resources (and can use them to improve the product).

4. &quot;In my 11+ years coding and architecting I am yet to meet the person who can “establish the code structure and interface conventions before coding starts”&quot;. 
Anybody who follows international and national software engineering standards can. I did and do it in ~30 my projects. I didn&#039;t do it in 3 projects (all 3 were unsuccessful).
The use of standards written by experts reduces numerous development risks. Search Internet for keywords &quot;software engineering development standard ISO&quot; to get the trend. 

5.&quot;“The refactoring really helps when you add external code to your existing product, but that does not happen often.” - wrong definition of refactoring.&quot; 
I use the same definition as you. I see that I did not provide enough details in the original post. The scenario is following: you want to merge sources of two working products A and B. Product A is your own one, you designed and implemented it, so you don&#039;t have maintenance problems. Product B doesn&#039;t follow your code structure conventions, which may lead to troubles during maintenance. So you create the refactoring support infrastructure for the product B, verify it, then refactor the code. Product B is ready for merge with A. &quot;Product&quot; may be just the free code sample from Internet. 

The idea of my original post is that refactoring is too expensive tool for producing maintainable code. Cheaper alternatives exist, such as check-in diff review. If your codebase has multiple and frequent refactorings, that&#039;s a warning sign: your developers need training. Simple reading of &quot;Code Complete&quot; and &quot;Writing Solid Code&quot; helps a lot. Obligatory written explanation of each check-in, and review of added/changed/removed code: 
- prevent undisciplinary codebase changes 
- and keep the code from degradation.

Scott Sehlhorst,
In my current projects developers do refactoring during development, as they do debugging, so the refactoring is not separated from the factoring. There is typically zero, sometimes one refactoring iteration per check-in (looks like 5% from your post is &quot;worst-case&quot; estimation for my case). The changes of code that do not add new features and do not fix bugs are prohibited: &quot;the changes aren’t arbitrary, they improve things&quot;. That saves significant efforts and keeps the codebase stable.</description>
		<content:encoded><![CDATA[<p>Levent Gurses, let me in turn comment on your comments.</p>
<p>1. &#8220;&#8230; diagram&#8230;addresses the Cost of Change (CC). Why should it consider the cost of refactoring?&#8221;<br />
Because the refactoring changes the code.</p>
<p>2.  &#8220;By Iteration 11 I am spending $1024 on refactoring alone&#8230; the cost is kept under control.&#8221;<br />
The knowing how much money is lost is not keeping cost under control. The prevention of money loss is keeping cost under control.</p>
<p>3.&#8221; “… the resulting curve will go above black line…” &#8211; so you’re saying that doing nothing actually saves the company money?&#8221;<br />
Yes, of course. The refactoring changes the code without changing the product &#8211; from the customer&#8217;s point of view that&#8217;s throwing resources. The customer says: if you cannot spend my time and money for product improvement, just don&#8217;t start touching my code. In this sense, when you do nothing (related to refactoring), you actually save resources (and can use them to improve the product).</p>
<p>4. &#8220;In my 11+ years coding and architecting I am yet to meet the person who can “establish the code structure and interface conventions before coding starts”&#8221;.<br />
Anybody who follows international and national software engineering standards can. I did and do it in ~30 my projects. I didn&#8217;t do it in 3 projects (all 3 were unsuccessful).<br />
The use of standards written by experts reduces numerous development risks. Search Internet for keywords &#8220;software engineering development standard ISO&#8221; to get the trend. </p>
<p>5.&#8221;“The refactoring really helps when you add external code to your existing product, but that does not happen often.” &#8211; wrong definition of refactoring.&#8221;<br />
I use the same definition as you. I see that I did not provide enough details in the original post. The scenario is following: you want to merge sources of two working products A and B. Product A is your own one, you designed and implemented it, so you don&#8217;t have maintenance problems. Product B doesn&#8217;t follow your code structure conventions, which may lead to troubles during maintenance. So you create the refactoring support infrastructure for the product B, verify it, then refactor the code. Product B is ready for merge with A. &#8220;Product&#8221; may be just the free code sample from Internet. </p>
<p>The idea of my original post is that refactoring is too expensive tool for producing maintainable code. Cheaper alternatives exist, such as check-in diff review. If your codebase has multiple and frequent refactorings, that&#8217;s a warning sign: your developers need training. Simple reading of &#8220;Code Complete&#8221; and &#8220;Writing Solid Code&#8221; helps a lot. Obligatory written explanation of each check-in, and review of added/changed/removed code:<br />
- prevent undisciplinary codebase changes<br />
- and keep the code from degradation.</p>
<p>Scott Sehlhorst,<br />
In my current projects developers do refactoring during development, as they do debugging, so the refactoring is not separated from the factoring. There is typically zero, sometimes one refactoring iteration per check-in (looks like 5% from your post is &#8220;worst-case&#8221; estimation for my case). The changes of code that do not add new features and do not fix bugs are prohibited: &#8220;the changes aren’t arbitrary, they improve things&#8221;. That saves significant efforts and keeps the codebase stable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-74538</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Fri, 02 Mar 2007 00:10:03 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-74538</guid>
		<description>AVA and Levent,

I think you guys are both coming from different backgrounds, and using the same terms to mean different things.

My approach to continuous refactoring doesn&#039;t mean &quot;rewrite all of the code at all times&quot; - which could lead to an increase in the cost of refactoring as the code base gets larger.  I would expect growth to be slower than the growth of the code base at this point, because the changes aren&#039;t arbitrary, they improve things.  Regardless - don&#039;t do this.

When I&#039;ve planned projects for my teams, I&#039;ve budgeted 5 hours per day of &quot;on task&quot; time, with remaining time for refactoring, self-education, and the other intangibles that come with knowledge-work.  I&#039;ve encouraged refactoring without mandating it, and most developers do it.  I&#039;ve had to make specific suggestions for more junior developers in the past - but those also served as training exercises for them (and were fun for me).

Note: by &quot;5 hours per day&quot; I specifically mean that tasks with 25 hours worth of combined estimated effort was assigned to each developer per week. 

Specific, larger, &quot;we need to refactor X&quot; tasks were estimated and incorporated into the schedule. That&#039;s where the 5% # comes from in my previous comment.

Thanks ALL for the great conversation, let&#039;s keep it going.</description>
		<content:encoded><![CDATA[<p>AVA and Levent,</p>
<p>I think you guys are both coming from different backgrounds, and using the same terms to mean different things.</p>
<p>My approach to continuous refactoring doesn&#8217;t mean &#8220;rewrite all of the code at all times&#8221; &#8211; which could lead to an increase in the cost of refactoring as the code base gets larger.  I would expect growth to be slower than the growth of the code base at this point, because the changes aren&#8217;t arbitrary, they improve things.  Regardless &#8211; don&#8217;t do this.</p>
<p>When I&#8217;ve planned projects for my teams, I&#8217;ve budgeted 5 hours per day of &#8220;on task&#8221; time, with remaining time for refactoring, self-education, and the other intangibles that come with knowledge-work.  I&#8217;ve encouraged refactoring without mandating it, and most developers do it.  I&#8217;ve had to make specific suggestions for more junior developers in the past &#8211; but those also served as training exercises for them (and were fun for me).</p>
<p>Note: by &#8220;5 hours per day&#8221; I specifically mean that tasks with 25 hours worth of combined estimated effort was assigned to each developer per week. </p>
<p>Specific, larger, &#8220;we need to refactor X&#8221; tasks were estimated and incorporated into the schedule. That&#8217;s where the 5% # comes from in my previous comment.</p>
<p>Thanks ALL for the great conversation, let&#8217;s keep it going.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sehlhorst</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-74534</link>
		<dc:creator>Scott Sehlhorst</dc:creator>
		<pubDate>Thu, 01 Mar 2007 23:53:19 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-74534</guid>
		<description>Hey Glen,

Yeah, &quot;real data&quot; is the holy grail of agile.  I&#039;ve heard several speakers wish for data.  The only study I&#039;ve found so far is one that uses a probabilistic approach (using an options-valuation model) to assessing the cost-benefits of refactoring versus the anticipated level of change.  A quick quote from &lt;a href=&quot;http://www.cs.ucl.ac.uk/staff/w.emmerich/publications/EDSER6/BahsoonEmmerichEDSER6.pdf&quot; rel=&quot;nofollow&quot;&gt;the article&lt;/a&gt;: 

Thus, refactoring is likely to add to the system a value, if ten or more changes need to be exercised during the next three years.

That should help some.

Anecdotal data from my decade in the software world is that the only enterprise project I&#039;ve been on with more than a couple man-years of effort that hit ALL of the deliverables and adapted to schedule and team changes was one that continuously refactored (at just under 5% of total dev effort, if I remember correctly).

While Levent&#039;s curves may be notional, they are definitely consistent with my experiences and expectations.</description>
		<content:encoded><![CDATA[<p>Hey Glen,</p>
<p>Yeah, &#8220;real data&#8221; is the holy grail of agile.  I&#8217;ve heard several speakers wish for data.  The only study I&#8217;ve found so far is one that uses a probabilistic approach (using an options-valuation model) to assessing the cost-benefits of refactoring versus the anticipated level of change.  A quick quote from <a href="http://www.cs.ucl.ac.uk/staff/w.emmerich/publications/EDSER6/BahsoonEmmerichEDSER6.pdf" rel="nofollow">the article</a>: </p>
<p>Thus, refactoring is likely to add to the system a value, if ten or more changes need to be exercised during the next three years.</p>
<p>That should help some.</p>
<p>Anecdotal data from my decade in the software world is that the only enterprise project I&#8217;ve been on with more than a couple man-years of effort that hit ALL of the deliverables and adapted to schedule and team changes was one that continuously refactored (at just under 5% of total dev effort, if I remember correctly).</p>
<p>While Levent&#8217;s curves may be notional, they are definitely consistent with my experiences and expectations.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Glen B. Alleman</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-74492</link>
		<dc:creator>Glen B. Alleman</dc:creator>
		<pubDate>Thu, 01 Mar 2007 20:38:54 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-74492</guid>
		<description>Scott,
Are these charts &quot;notional&quot; or do they have field data behind them? The conjecture that continuous refactoring is cheaper has alwsys been the mantr of agile. As as agile practioner, we have never seen actual data from the field - time cardds, defect numbers, sunk cost figures for a side-by-side comparison. 
Any sources for these possibly &quot;notional&quot; charts?</description>
		<content:encoded><![CDATA[<p>Scott,<br />
Are these charts &#8220;notional&#8221; or do they have field data behind them? The conjecture that continuous refactoring is cheaper has alwsys been the mantr of agile. As as agile practioner, we have never seen actual data from the field &#8211; time cardds, defect numbers, sunk cost figures for a side-by-side comparison.<br />
Any sources for these possibly &#8220;notional&#8221; charts?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Levent Gurses</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-74424</link>
		<dc:creator>Levent Gurses</dc:creator>
		<pubDate>Thu, 01 Mar 2007 16:52:47 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-74424</guid>
		<description>AVA,

Thanks for the comment. You&#039;ve obviously never done refactoring in a continuous environment. Let me try to answer your points one by one:

1. &quot;...the green line shows the cost of change, but does not consider the cost of the refactoring itself...&quot; - this is not a Total Cost of Ownership (TCO) diagram. It addresses the Cost of Change (CC). Why should it consider the cost of refactoring?

2. &quot;...If you add the exponentially growing cost of *continuous* refactoring...&quot;. Let&#039;s see the math here. Exponentially growing cost of refactoring to me is this: If my factor is 2 and if I spend $1 for refactoring in Iteration 1, then in subsequent iterations I spend $2, $4, $8, $16, $32, $64, $128...you get the picture. By Iteration 11 I am spending $1024 on refactoring alone. This could not be farther from what happens in a real life continuous refactoring project. I can say with some level of confidence that, BECAUSE OF continuous refactoring the cost is kept under control.

3. &quot;... the resulting curve will go above black line...&quot; - so you&#039;re saying that doing nothing actually saves the company money?

4. &quot;As my experience shows, refactoring as a tool to reduce maintenance efforts is not a best choice for new projects: better is to establish the code structure and interface conventions before coding starts, so you know the proper place where new code should be added...&quot; - In my 11+ years coding and architecting I am yet to meet the person who can &quot;establish the code structure and interface conventions before coding starts&quot;. 

5. &quot;The refactoring really helps when you add external code to your existing product, but that does not happen often.&quot; - wrong definition of refactoring. Refactoring application code means making changes to the internal structure of the code while preserving its external behavior. So it is not to add new features. And, yes, it does happen a lot - as it should. The customer should be able to add/remove features as their priories change.

I suggest you take a read on Agile and Refactoring. You may find it helpful for your projects. Martin Fowler is a good place to start.

Have a nice day.

Levent Gurses</description>
		<content:encoded><![CDATA[<p>AVA,</p>
<p>Thanks for the comment. You&#8217;ve obviously never done refactoring in a continuous environment. Let me try to answer your points one by one:</p>
<p>1. &#8220;&#8230;the green line shows the cost of change, but does not consider the cost of the refactoring itself&#8230;&#8221; &#8211; this is not a Total Cost of Ownership (TCO) diagram. It addresses the Cost of Change (CC). Why should it consider the cost of refactoring?</p>
<p>2. &#8220;&#8230;If you add the exponentially growing cost of *continuous* refactoring&#8230;&#8221;. Let&#8217;s see the math here. Exponentially growing cost of refactoring to me is this: If my factor is 2 and if I spend $1 for refactoring in Iteration 1, then in subsequent iterations I spend $2, $4, $8, $16, $32, $64, $128&#8230;you get the picture. By Iteration 11 I am spending $1024 on refactoring alone. This could not be farther from what happens in a real life continuous refactoring project. I can say with some level of confidence that, BECAUSE OF continuous refactoring the cost is kept under control.</p>
<p>3. &#8220;&#8230; the resulting curve will go above black line&#8230;&#8221; &#8211; so you&#8217;re saying that doing nothing actually saves the company money?</p>
<p>4. &#8220;As my experience shows, refactoring as a tool to reduce maintenance efforts is not a best choice for new projects: better is to establish the code structure and interface conventions before coding starts, so you know the proper place where new code should be added&#8230;&#8221; &#8211; In my 11+ years coding and architecting I am yet to meet the person who can &#8220;establish the code structure and interface conventions before coding starts&#8221;. </p>
<p>5. &#8220;The refactoring really helps when you add external code to your existing product, but that does not happen often.&#8221; &#8211; wrong definition of refactoring. Refactoring application code means making changes to the internal structure of the code while preserving its external behavior. So it is not to add new features. And, yes, it does happen a lot &#8211; as it should. The customer should be able to add/remove features as their priories change.</p>
<p>I suggest you take a read on Agile and Refactoring. You may find it helpful for your projects. Martin Fowler is a good place to start.</p>
<p>Have a nice day.</p>
<p>Levent Gurses</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ~AVA</title>
		<link>http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/comment-page-1/#comment-74332</link>
		<dc:creator>~AVA</dc:creator>
		<pubDate>Thu, 01 Mar 2007 08:59:50 +0000</pubDate>
		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/#comment-74332</guid>
		<description>In the image cited in the beginning of the article, the green line shows the cost of change, but does not consider the cost of the refactoring itself. If you add the exponentially growing cost of *continuous* refactoring to the cost of change, the resulting curve will go above black line. So the green area shown on the last image in fact shows savings of changing &quot;refactoring&quot; approach to traditional &quot;factoring&quot; approach. As my experience shows, refactoring as a tool to reduce maintenance efforts is not a best choice for new projects: better is to establish the code structure and interface conventions before coding starts, so you know the proper place where new code should be added. Refactoring also is not a choice for complex legacy projects, where rewriting is generally cheaper. The refactoring really helps when you add external code to your existing product, but that does not happen often. YMMV...</description>
		<content:encoded><![CDATA[<p>In the image cited in the beginning of the article, the green line shows the cost of change, but does not consider the cost of the refactoring itself. If you add the exponentially growing cost of *continuous* refactoring to the cost of change, the resulting curve will go above black line. So the green area shown on the last image in fact shows savings of changing &#8220;refactoring&#8221; approach to traditional &#8220;factoring&#8221; approach. As my experience shows, refactoring as a tool to reduce maintenance efforts is not a best choice for new projects: better is to establish the code structure and interface conventions before coding starts, so you know the proper place where new code should be added. Refactoring also is not a choice for complex legacy projects, where rewriting is generally cheaper. The refactoring really helps when you add external code to your existing product, but that does not happen often. YMMV&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

