<?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: The Fallacy Of ReUse</title>
	<atom:link href="http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sat, 11 Feb 2012 15:16:10 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Mathias Holmgren</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-2/#comment-38280</link>
		<dc:creator>Mathias Holmgren</dc:creator>
		<pubDate>Fri, 02 Dec 2011 13:47:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-38280</guid>
		<description>Awesome! Touche...love it</description>
		<content:encoded><![CDATA[<p>Awesome! Touche&#8230;love it</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evert</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-37926</link>
		<dc:creator>Evert</dc:creator>
		<pubDate>Thu, 07 Jul 2011 14:23:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-37926</guid>
		<description>Maybe this an old topic, but it is a shame this discussion has never reached mainstream. I am an old programmer, I have seen many APIs, frameworks and systems come and go. And in the end I have always felt that re-usability was a farce.
No program or system is the same. So code needs to be adapted toe ach specific situation. not only that but the amount of time one may save by not rewriting something is actually wasted in reading the specification or documentation. All these documents, classes, frameworks, APIs have added to the knowledge one must have of programming. Just knowing math, physics, the language and the patterns is no longer enough. We must now know everything about specific libraries of re-usable code.
I really think the concept of &quot;Don&#039;t repeat yourself&quot; has been taken too far.</description>
		<content:encoded><![CDATA[<p>Maybe this an old topic, but it is a shame this discussion has never reached mainstream. I am an old programmer, I have seen many APIs, frameworks and systems come and go. And in the end I have always felt that re-usability was a farce.<br />
No program or system is the same. So code needs to be adapted toe ach specific situation. not only that but the amount of time one may save by not rewriting something is actually wasted in reading the specification or documentation. All these documents, classes, frameworks, APIs have added to the knowledge one must have of programming. Just knowing math, physics, the language and the patterns is no longer enough. We must now know everything about specific libraries of re-usable code.<br />
I really think the concept of &#8220;Don&#8217;t repeat yourself&#8221; has been taken too far.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Clarified CQRS</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36861</link>
		<dc:creator>Clarified CQRS</dc:creator>
		<pubDate>Wed, 09 Dec 2009 14:57:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36861</guid>
		<description>[...] thus guiding developers away from introducing dependencies in the name of reuse (it&#8217;s a fallacy). If you do decide as a deployment concern, that you want to put them all in the same process [...]</description>
		<content:encoded><![CDATA[<p>[...] thus guiding developers away from introducing dependencies in the name of reuse (it&#8217;s a fallacy). If you do decide as a deployment concern, that you want to put them all in the same process [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SOA Manifesto - Colin Jack&#39;s Blog - Los Techies : Blogs about software and anything tech!</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36822</link>
		<dc:creator>SOA Manifesto - Colin Jack&#39;s Blog - Los Techies : Blogs about software and anything tech!</dc:creator>
		<pubDate>Mon, 26 Oct 2009 21:46:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36822</guid>
		<description>[...] in different contexts, such as when you go for an entity service based approach. However there are arguments against too much premature focus on reuse and use is far more important than reuse. I also think that reuse [...]</description>
		<content:encoded><![CDATA[<p>[...] in different contexts, such as when you go for an entity service based approach. However there are arguments against too much premature focus on reuse and use is far more important than reuse. I also think that reuse [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Coding: The primitive obsession at Mark Needham</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36808</link>
		<dc:creator>Coding: The primitive obsession at Mark Needham</dc:creator>
		<pubDate>Thu, 22 Oct 2009 13:09:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36808</guid>
		<description>[...] Udi Dahan explains why this often doesn&#039;t work but the problem that I see from this attempt at writing reusable code is that it will get reused in places where the concept doesn&#039;t quite make sense. [...]</description>
		<content:encoded><![CDATA[<p>[...] Udi Dahan explains why this often doesn&#39;t work but the problem that I see from this attempt at writing reusable code is that it will get reused in places where the concept doesn&#39;t quite make sense. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36479</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Mon, 27 Jul 2009 17:34:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36479</guid>
		<description>Robert,

You&#039;re certainly entitled to your opinion, both on the topic at hand and my blog in general. In terms of confusion, well, to make an omelet, you&#039;ve got to break some eggs - especially those that people have been using as a crutch. Sometimes, the questions are more important than the answers.

Thanks again for voicing your thoughts.</description>
		<content:encoded><![CDATA[<p>Robert,</p>
<p>You&#8217;re certainly entitled to your opinion, both on the topic at hand and my blog in general. In terms of confusion, well, to make an omelet, you&#8217;ve got to break some eggs &#8211; especially those that people have been using as a crutch. Sometimes, the questions are more important than the answers.</p>
<p>Thanks again for voicing your thoughts.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert Eriksson</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36476</link>
		<dc:creator>Robert Eriksson</dc:creator>
		<pubDate>Mon, 27 Jul 2009 13:34:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36476</guid>
		<description>The article generated some good discussions, but considering the amount of confusion it also generated I must ask myself if this is a good article?

The majority of the posts are about how to use &quot;reuse&quot; and &quot;use&quot; where  most people seem to use &quot;reuse&quot; where the author prefers &quot;use&quot;. That most posts discuss &quot;use&quot; vs. &quot;reuse&quot; appears to me as an indication that the article isn&#039;t particularly good.

In my opinion way to &quot;theoretical&quot; with no real substance and doesn&#039;t touch or addresses the problem around proper reuse (or should I say use so the author gets it?).</description>
		<content:encoded><![CDATA[<p>The article generated some good discussions, but considering the amount of confusion it also generated I must ask myself if this is a good article?</p>
<p>The majority of the posts are about how to use &#8220;reuse&#8221; and &#8220;use&#8221; where  most people seem to use &#8220;reuse&#8221; where the author prefers &#8220;use&#8221;. That most posts discuss &#8220;use&#8221; vs. &#8220;reuse&#8221; appears to me as an indication that the article isn&#8217;t particularly good.</p>
<p>In my opinion way to &#8220;theoretical&#8221; with no real substance and doesn&#8217;t touch or addresses the problem around proper reuse (or should I say use so the author gets it?).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Simon says... : [PL] Having The Infrastructure vs having a infrastructure</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36458</link>
		<dc:creator>Simon says... : [PL] Having The Infrastructure vs having a infrastructure</dc:creator>
		<pubDate>Thu, 23 Jul 2009 06:50:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36458</guid>
		<description>[...] problemu w inny sposób, który w tamtym projekcie może być dużo lepszy. Nawiązując do świetnego posta Udiego, nie widzę już zysku w reużywaniu kodu. Widzę natomiast zysk, i to ogromny, w reużywaniu [...]</description>
		<content:encoded><![CDATA[<p>[...] problemu w inny sposób, który w tamtym projekcie może być dużo lepszy. Nawiązując do świetnego posta Udiego, nie widzę już zysku w reużywaniu kodu. Widzę natomiast zysk, i to ogromny, w reużywaniu [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36379</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Fri, 10 Jul 2009 01:14:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36379</guid>
		<description>Christian,

You hit the nail right on the head.</description>
		<content:encoded><![CDATA[<p>Christian,</p>
<p>You hit the nail right on the head.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cristian</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36334</link>
		<dc:creator>Cristian</dc:creator>
		<pubDate>Fri, 03 Jul 2009 16:00:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36334</guid>
		<description>It&#039;s interesting to see that most (all) of the examples of reuse when this is discussed are actually reuse of technical infrastructure components, e.g. an XML Parser.

Reuse is very simple in the technical domain because components are not dependendent on the client&#039;s requirements and therefore not subject to changes in those clients (an XML Parser implements an agreed upon standard that will only change in a very controlled way, and not very often).

A technical component can be autonomous in that it doesn&#039;t depend on its clients.

A component implementing logic in a business (functional) domain will be dependent on its specific use by each of its specific clients. 
A service providing customer information may have to accomodate clients from the marketing domain and from the accounting domain.
New clients and changing requirements in existing clients leads to the rebugging problem that Udi mentions.

The fallacy is the belief that this functional reuse problem can be solved by technical means (RPC/CORBA/WebServices/etc.), when it&#039;s simply a problem of conceptual dependency between components of a system, regardless of their implementation.</description>
		<content:encoded><![CDATA[<p>It&#8217;s interesting to see that most (all) of the examples of reuse when this is discussed are actually reuse of technical infrastructure components, e.g. an XML Parser.</p>
<p>Reuse is very simple in the technical domain because components are not dependendent on the client&#8217;s requirements and therefore not subject to changes in those clients (an XML Parser implements an agreed upon standard that will only change in a very controlled way, and not very often).</p>
<p>A technical component can be autonomous in that it doesn&#8217;t depend on its clients.</p>
<p>A component implementing logic in a business (functional) domain will be dependent on its specific use by each of its specific clients.<br />
A service providing customer information may have to accomodate clients from the marketing domain and from the accounting domain.<br />
New clients and changing requirements in existing clients leads to the rebugging problem that Udi mentions.</p>
<p>The fallacy is the belief that this functional reuse problem can be solved by technical means (RPC/CORBA/WebServices/etc.), when it&#8217;s simply a problem of conceptual dependency between components of a system, regardless of their implementation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36304</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 01 Jul 2009 12:39:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36304</guid>
		<description>Alberto,

Glad you liked it.

Fully agree with additional communication costs you mention.</description>
		<content:encoded><![CDATA[<p>Alberto,</p>
<p>Glad you liked it.</p>
<p>Fully agree with additional communication costs you mention.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alberto Brandolini</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36283</link>
		<dc:creator>Alberto Brandolini</dc:creator>
		<pubDate>Mon, 29 Jun 2009 11:08:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36283</guid>
		<description>Hi Udi,

I really liked this post.
I tend also to think about the myth of the reuse in terms of communication costs involved: sometimes just being able to know a that a piece of software does (something similar to) what we need is a cost. And this cost increases with team and project size. So, if the DRY principle makes perfectly sense within a well defined and manageable context, the cost of finding similarities in a large code base is probably higher than the benefits of reuse.

One thing I really liked is the fact that reuse increases coupling. There is an implicit cost in reusing components, and also in designing for reuse. Too often we tend to forget that.

Cheers

Alberto</description>
		<content:encoded><![CDATA[<p>Hi Udi,</p>
<p>I really liked this post.<br />
I tend also to think about the myth of the reuse in terms of communication costs involved: sometimes just being able to know a that a piece of software does (something similar to) what we need is a cost. And this cost increases with team and project size. So, if the DRY principle makes perfectly sense within a well defined and manageable context, the cost of finding similarities in a large code base is probably higher than the benefits of reuse.</p>
<p>One thing I really liked is the fact that reuse increases coupling. There is an implicit cost in reusing components, and also in designing for reuse. Too often we tend to forget that.</p>
<p>Cheers</p>
<p>Alberto</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36271</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 25 Jun 2009 11:47:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36271</guid>
		<description>Jonathan,

Good point.</description>
		<content:encoded><![CDATA[<p>Jonathan,</p>
<p>Good point.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Parker</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36264</link>
		<dc:creator>Jonathan Parker</dc:creator>
		<pubDate>Thu, 25 Jun 2009 04:52:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36264</guid>
		<description>This is a great post though it doesn&#039;t mention the granularity integration complexity trade-off.

1. Your whole app is one method:

0 integration, Infinite complexity in the one method.

2. Your app is broken into minute components:

Near-zero complexity in each component, Near-infinite complexity in integration.</description>
		<content:encoded><![CDATA[<p>This is a great post though it doesn&#8217;t mention the granularity integration complexity trade-off.</p>
<p>1. Your whole app is one method:</p>
<p>0 integration, Infinite complexity in the one method.</p>
<p>2. Your app is broken into minute components:</p>
<p>Near-zero complexity in each component, Near-infinite complexity in integration.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36260</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Tue, 23 Jun 2009 12:13:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36260</guid>
		<description>Ulu,

The DRY principle - don&#039;t repeat yourself, is not just about specific lines of code, more important is to not duplicate semantics. 

There are other ways of getting the necessary code to run without calling it directly (or via some interface) thus avoiding setting up an additional dependency. Moving the code to an extension point of some framework is one very effective way.

Does that make sense?</description>
		<content:encoded><![CDATA[<p>Ulu,</p>
<p>The DRY principle &#8211; don&#8217;t repeat yourself, is not just about specific lines of code, more important is to not duplicate semantics. </p>
<p>There are other ways of getting the necessary code to run without calling it directly (or via some interface) thus avoiding setting up an additional dependency. Moving the code to an extension point of some framework is one very effective way.</p>
<p>Does that make sense?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36258</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Mon, 22 Jun 2009 05:41:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36258</guid>
		<description>Aaron,

So it seems that we&#039;re in agreement - there is more difficult (and therefore less common) good kind of use/reuse, and the easier/more common bad kind (abuse).

This post is in hopes of getting more people to stop and think which one they&#039;re doing before justifying anything and everything with &quot;reuse&quot;.</description>
		<content:encoded><![CDATA[<p>Aaron,</p>
<p>So it seems that we&#8217;re in agreement &#8211; there is more difficult (and therefore less common) good kind of use/reuse, and the easier/more common bad kind (abuse).</p>
<p>This post is in hopes of getting more people to stop and think which one they&#8217;re doing before justifying anything and everything with &#8220;reuse&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36256</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sun, 21 Jun 2009 19:37:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36256</guid>
		<description>Kyle,

Re, &quot;There’s good reason to believe your conclusion is true, but you have not proven it&quot; - my most expounded apologies :-)

On &quot;Reuse of code can only be attained when interfaces are closed&quot;, I think we need to add some phrase to the tune of &quot;the purported benefits of code reuse can only be attained...&quot;

Will probably do a follow-up post.

Thanks for your comments.</description>
		<content:encoded><![CDATA[<p>Kyle,</p>
<p>Re, &#8220;There’s good reason to believe your conclusion is true, but you have not proven it&#8221; &#8211; my most expounded apologies <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>On &#8220;Reuse of code can only be attained when interfaces are closed&#8221;, I think we need to add some phrase to the tune of &#8220;the purported benefits of code reuse can only be attained&#8230;&#8221;</p>
<p>Will probably do a follow-up post.</p>
<p>Thanks for your comments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36255</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sun, 21 Jun 2009 09:08:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36255</guid>
		<description>Mihai,

Like you said, there&#039;s good (re)use, and there&#039;s bad, which can easily devolve into procedural programming.</description>
		<content:encoded><![CDATA[<p>Mihai,</p>
<p>Like you said, there&#8217;s good (re)use, and there&#8217;s bad, which can easily devolve into procedural programming.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ulu</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36250</link>
		<dc:creator>ulu</dc:creator>
		<pubDate>Sat, 20 Jun 2009 07:10:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36250</guid>
		<description>Udi,

As I understood, by &quot;use&quot; you mean using your service in several places, and by &quot;reuse&quot; -- subclassing a base service class (reusing it) and overriding some members. Am I right?

How does it correlate with the DRY principle? 

Thanks
ulu</description>
		<content:encoded><![CDATA[<p>Udi,</p>
<p>As I understood, by &#8220;use&#8221; you mean using your service in several places, and by &#8220;reuse&#8221; &#8212; subclassing a base service class (reusing it) and overriding some members. Am I right?</p>
<p>How does it correlate with the DRY principle? </p>
<p>Thanks<br />
ulu</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kyle Szklenski</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36248</link>
		<dc:creator>Kyle Szklenski</dc:creator>
		<pubDate>Thu, 18 Jun 2009 21:33:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36248</guid>
		<description>Aaron, by that definition, EVERY single piece of code you write is reuse, because after all, you&#039;re using all of the keywords that come with the language, right?

Since we&#039;re talking about fallacies, I suppose we should bring up the fallacy of equivocation.</description>
		<content:encoded><![CDATA[<p>Aaron, by that definition, EVERY single piece of code you write is reuse, because after all, you&#8217;re using all of the keywords that come with the language, right?</p>
<p>Since we&#8217;re talking about fallacies, I suppose we should bring up the fallacy of equivocation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aaron Lewis</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36244</link>
		<dc:creator>Aaron Lewis</dc:creator>
		<pubDate>Wed, 17 Jun 2009 17:52:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36244</guid>
		<description>Actually, /reuse/ is the process of /reusing/ existing code.

http://en.wikipedia.org/wiki/Code_reuse

Of course, reusing code is still using code (using it /again/).

If you have code that hashes a string and you happen to need to use that same hashing algorithm in another application, you can hopefully reuse it. There may well be no need to extend it, especially if you had written it from the start to be reusable.

That&#039;s what libraries and frameworks are for! Reuse! Write some code that solves a problem in a reusable way to save time in the many applications that need to solve that same problem.

Extending and overriding behavior is not reuse. It&#039;s actually somewhat the opposite. Rather than reusing existing code you&#039;re writing new code. You may be reusing design patterns or interfaces, but you&#039;re still writing new code. It&#039;s polymorphism, which is difficult for most people to get right, which explains why it so often leads to poor design and buggy code. If those design patterns or interfaces aren&#039;t applicable to your current application then you probably will spend more time patching, hacking, and debugging then you would have writing from scratch. I call that /abuse/ and /misuse/.</description>
		<content:encoded><![CDATA[<p>Actually, /reuse/ is the process of /reusing/ existing code.</p>
<p><a href="http://en.wikipedia.org/wiki/Code_reuse" rel="nofollow">http://en.wikipedia.org/wiki/Code_reuse</a></p>
<p>Of course, reusing code is still using code (using it /again/).</p>
<p>If you have code that hashes a string and you happen to need to use that same hashing algorithm in another application, you can hopefully reuse it. There may well be no need to extend it, especially if you had written it from the start to be reusable.</p>
<p>That&#8217;s what libraries and frameworks are for! Reuse! Write some code that solves a problem in a reusable way to save time in the many applications that need to solve that same problem.</p>
<p>Extending and overriding behavior is not reuse. It&#8217;s actually somewhat the opposite. Rather than reusing existing code you&#8217;re writing new code. You may be reusing design patterns or interfaces, but you&#8217;re still writing new code. It&#8217;s polymorphism, which is difficult for most people to get right, which explains why it so often leads to poor design and buggy code. If those design patterns or interfaces aren&#8217;t applicable to your current application then you probably will spend more time patching, hacking, and debugging then you would have writing from scratch. I call that /abuse/ and /misuse/.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kyle Szklenski</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36243</link>
		<dc:creator>Kyle Szklenski</dc:creator>
		<pubDate>Wed, 17 Jun 2009 12:04:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36243</guid>
		<description>&quot;Actually, the more generic a piece of code, the less likely it is that we’ll be changing something in it when fixing a bug in the system...the likelihood of a bug fix needing to touch that [domain-specific] code is higher than in the generic/use-not-reuse case, often much higher.&quot;

These statements are fallacious as well. There&#039;s good reason to believe your conclusion is true, but you have not proven it. My reasoning would go more along these lines: You, as a developer, are less likely to know the specific business process so well that you never code any bugs into it with respect to the business needs. Combine that with the fact that you write generic kinds of code all the time for your different applications, and it becomes more likely to make the generic code more robust, and the domain-specific code buggy. You may also need to make a distinction between business-process-buggy and language-syntax-buggy. I would hope that most professional programmers don&#039;t make syntax mistakes (or use a component incorrectly, for example), but we all know that&#039;s going to happen...even quite frequently.

Having said that, I pretty much fully agree with your post. I realized something similar the other day. In the system I&#039;m working on right now, there&#039;s a lot of gateway/repository use. There is no gateway/repository REuse, though, and that makes me question usefulness of those patterns altogether, at least within the specific context that we&#039;re using them. After all, if one of the interfaces changes, we have to fix all of the various implementations of said interface, which is breaking the whole concept of a closed interface.

Perhaps that&#039;s a non-terrible way of putting it:
Reuse of code can only be attained when interfaces are closed.

Might also need to add the line: ... are closed, and that interface&#039;s objects are used throughout the system.

Not sure if I like that last part. What do you think?

Mihai, I think you missed a few of the subtleties of his argument, and I don&#039;t think the title of the argument (unless it&#039;s changed since you wrote your last comment) is as powerful a statement as you seem to think.</description>
		<content:encoded><![CDATA[<p>&#8220;Actually, the more generic a piece of code, the less likely it is that we’ll be changing something in it when fixing a bug in the system&#8230;the likelihood of a bug fix needing to touch that [domain-specific] code is higher than in the generic/use-not-reuse case, often much higher.&#8221;</p>
<p>These statements are fallacious as well. There&#8217;s good reason to believe your conclusion is true, but you have not proven it. My reasoning would go more along these lines: You, as a developer, are less likely to know the specific business process so well that you never code any bugs into it with respect to the business needs. Combine that with the fact that you write generic kinds of code all the time for your different applications, and it becomes more likely to make the generic code more robust, and the domain-specific code buggy. You may also need to make a distinction between business-process-buggy and language-syntax-buggy. I would hope that most professional programmers don&#8217;t make syntax mistakes (or use a component incorrectly, for example), but we all know that&#8217;s going to happen&#8230;even quite frequently.</p>
<p>Having said that, I pretty much fully agree with your post. I realized something similar the other day. In the system I&#8217;m working on right now, there&#8217;s a lot of gateway/repository use. There is no gateway/repository REuse, though, and that makes me question usefulness of those patterns altogether, at least within the specific context that we&#8217;re using them. After all, if one of the interfaces changes, we have to fix all of the various implementations of said interface, which is breaking the whole concept of a closed interface.</p>
<p>Perhaps that&#8217;s a non-terrible way of putting it:<br />
Reuse of code can only be attained when interfaces are closed.</p>
<p>Might also need to add the line: &#8230; are closed, and that interface&#8217;s objects are used throughout the system.</p>
<p>Not sure if I like that last part. What do you think?</p>
<p>Mihai, I think you missed a few of the subtleties of his argument, and I don&#8217;t think the title of the argument (unless it&#8217;s changed since you wrote your last comment) is as powerful a statement as you seem to think.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mihai Danila</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36234</link>
		<dc:creator>Mihai Danila</dc:creator>
		<pubDate>Tue, 16 Jun 2009 15:37:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36234</guid>
		<description>I wrote the original coment prior to reading the other comments. I happen to agree with David with regard to many of the points he&#039;s making.

We live in an imperfect world, and with a lot of complexity, more so on computing than in other aspects of our life. The best method we have to deal with this complexity is reuse. It brings about its own problems, and is often misused, but it&#039;s the best we have.

I can see how bad reuse in SOA might be more prominent than in software development in general. After all, reuse in coarser grained APIs (I took the liberty of seeing services as APIs) is harder to achieve and the error of trying it erroneously is clearer. But the title of your article makes a much stronger claim, one with which I can&#039;t agree. I would consider toning down the claim laid out in the title -- I might see the value of the argument with a punchline like &quot;Reuse in SOA is overrated&quot;.</description>
		<content:encoded><![CDATA[<p>I wrote the original coment prior to reading the other comments. I happen to agree with David with regard to many of the points he&#8217;s making.</p>
<p>We live in an imperfect world, and with a lot of complexity, more so on computing than in other aspects of our life. The best method we have to deal with this complexity is reuse. It brings about its own problems, and is often misused, but it&#8217;s the best we have.</p>
<p>I can see how bad reuse in SOA might be more prominent than in software development in general. After all, reuse in coarser grained APIs (I took the liberty of seeing services as APIs) is harder to achieve and the error of trying it erroneously is clearer. But the title of your article makes a much stronger claim, one with which I can&#8217;t agree. I would consider toning down the claim laid out in the title &#8212; I might see the value of the argument with a punchline like &#8220;Reuse in SOA is overrated&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mihai Danila</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36233</link>
		<dc:creator>Mihai Danila</dc:creator>
		<pubDate>Tue, 16 Jun 2009 15:19:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36233</guid>
		<description>A play on words that aims to downplay the importance of reuse.

When you write your second project on the .NET framework, you reuse the framework. Don&#039;t believe you&#039;re doing anything else. Your whole argument should be more careful about the facets of reuse that you find problematic.

True, there is also the not-so-smart reuse, but that&#039;s not enough to cross the word from our vocabulary when talking about software success stories. I have no doubt that the most successful software reuses a lot. And here I&#039;m referring of course to the frameworks that emerge. Photoshop contains code that applies filters and performs other operations to images -- that is code reuse. Polymorphism, Strategy, Adapter are all tools to enable code reuse. The generic sorting method I would have written if someone hadn&#039;t already written for me represents code reuse.

Cohesive components with a clear statement = reusable code. Componetization goes hand in hand with good reuse. I&#039;d rather reuse the already written inference engines out there than write one from scratch in the name of minimizing, what did you call it, &quot;rebugging&quot;?

I urge care in the interpretation of words.</description>
		<content:encoded><![CDATA[<p>A play on words that aims to downplay the importance of reuse.</p>
<p>When you write your second project on the .NET framework, you reuse the framework. Don&#8217;t believe you&#8217;re doing anything else. Your whole argument should be more careful about the facets of reuse that you find problematic.</p>
<p>True, there is also the not-so-smart reuse, but that&#8217;s not enough to cross the word from our vocabulary when talking about software success stories. I have no doubt that the most successful software reuses a lot. And here I&#8217;m referring of course to the frameworks that emerge. Photoshop contains code that applies filters and performs other operations to images &#8212; that is code reuse. Polymorphism, Strategy, Adapter are all tools to enable code reuse. The generic sorting method I would have written if someone hadn&#8217;t already written for me represents code reuse.</p>
<p>Cohesive components with a clear statement = reusable code. Componetization goes hand in hand with good reuse. I&#8217;d rather reuse the already written inference engines out there than write one from scratch in the name of minimizing, what did you call it, &#8220;rebugging&#8221;?</p>
<p>I urge care in the interpretation of words.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/comment-page-1/#comment-36203</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 13 Jun 2009 12:41:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1026#comment-36203</guid>
		<description>Richard,

I remember that ratio being bandied around too. The thing is, that that&#039;s not what&#039;s important.

The question is the organization&#039;s commitment to support this code, version it, test it, etc over the lifetime of any and all systems that use it. What happens when a bug is discovered in that code? Are all systems that use it patched? Do we have management in place to know where the code is being used? What if the patch breaks backwards-compatibility? Are we going to support multiple streams in production at the same time?

There&#039;s more going on than just not writing code.</description>
		<content:encoded><![CDATA[<p>Richard,</p>
<p>I remember that ratio being bandied around too. The thing is, that that&#8217;s not what&#8217;s important.</p>
<p>The question is the organization&#8217;s commitment to support this code, version it, test it, etc over the lifetime of any and all systems that use it. What happens when a bug is discovered in that code? Are all systems that use it patched? Do we have management in place to know where the code is being used? What if the patch breaks backwards-compatibility? Are we going to support multiple streams in production at the same time?</p>
<p>There&#8217;s more going on than just not writing code.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

