<?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: A Creaky Old Man&#8217;s Defense of Creaky old Code</title>
	<atom:link href="http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code/feed" rel="self" type="application/rss+xml" />
	<link>http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code</link>
	<description>Adventures in Programming</description>
	<lastBuildDate>Wed, 04 Jan 2012 02:38:56 -0800</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
	<item>
		<title>By: mcherm</title>
		<link>http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code/comment-page-1#comment-166</link>
		<dc:creator>mcherm</dc:creator>
		<pubDate>Sun, 06 Apr 2008 18:02:22 +0000</pubDate>
		<guid isPermaLink="false">http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code#comment-166</guid>
		<description>Bud:

Good point -- I have certainly seen this pattern before. I guess that the key thing to keep in mind is the ratio between extra  functionality provided by the custom system and extra effort required to maintain it.

What&#039;s most difficult about it is that these things are quite difficult to measure. Take the example from my original essay. The extra functionality provided is things like the failover, the admin screens and the protection against failure to close cursors. How much value do these things add? The admin screens -- little to none (any good standard solution should have such tools); the others are harder to estimate.

In some cases the maintenance effort is difficult to estimate also. For instance, Joe encountered a bug when upgrading oracle which he thinks (but as far as I know never actually demonstrated) may be caused by our connection pooling. So he thinks of it as requiring a significant amount of effort. I have 4+ years of experience using it with only the one reported issue that I know of (and that one just suspected), so I think of the effort as low. We could dig to the bottom of the issue to find out, but the effort it would take to do so is more than it&#039;s worth! So either way we&#039;re just guessing.</description>
		<content:encoded><![CDATA[<p>Bud:</p>
<p>Good point &#8212; I have certainly seen this pattern before. I guess that the key thing to keep in mind is the ratio between extra  functionality provided by the custom system and extra effort required to maintain it.</p>
<p>What&#8217;s most difficult about it is that these things are quite difficult to measure. Take the example from my original essay. The extra functionality provided is things like the failover, the admin screens and the protection against failure to close cursors. How much value do these things add? The admin screens &#8212; little to none (any good standard solution should have such tools); the others are harder to estimate.</p>
<p>In some cases the maintenance effort is difficult to estimate also. For instance, Joe encountered a bug when upgrading oracle which he thinks (but as far as I know never actually demonstrated) may be caused by our connection pooling. So he thinks of it as requiring a significant amount of effort. I have 4+ years of experience using it with only the one reported issue that I know of (and that one just suspected), so I think of the effort as low. We could dig to the bottom of the issue to find out, but the effort it would take to do so is more than it&#8217;s worth! So either way we&#8217;re just guessing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Emil Lefkof</title>
		<link>http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code/comment-page-1#comment-165</link>
		<dc:creator>Emil Lefkof</dc:creator>
		<pubDate>Thu, 03 Apr 2008 14:33:40 +0000</pubDate>
		<guid isPermaLink="false">http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code#comment-165</guid>
		<description>I definitely see your points. However the real problem is &quot;throwing something together in a week&quot; and then it&#039;s in production.  Once it becomes pervasive in production it can be SO hard to extract it later on when you realize an API&#039;s shortcomings.  I think reaching the conclusion to home grow a piece of code should only be reached after you have researched the options out there.  It is usually the first thing I do when I attack a problem...I ask &quot;did someone else solve this problem already?&quot;.  And if the answer is NO then I look at writing something custom.  

What I have learned in the many many clients I have had is it&#039;s not just your company.  Lots of companies have similar problems with pervasive homegrown code and it is pretty much 90% of their problems and their cost in maintenance and downtime.  A perfect example is my current client.  They have decided to log all application to a central log like Syslog.  Its high performance UDP based logging so their monitoring group can be watching gobs and gobs of data in one central location and eventing and alarming on that log with something like Tivoli.  Great idea right?  Sure, except they decided to home grow the API and its a total POS.  They spent about 3 months working on it and in the end it was a steaming pile that we poked about 100 holes in on code review.  I spent 15 minutes and had the exact functionality to Syslog done in both Log4J and Logback.  Two open source API&#039;s with Syslog capabilities already built in.  They could have spent 25$ for my time and a great standard solution, instead they spent about 45,000$ over the two months.

But they are going ahead with their homegrown solution because they can&#039;t justify throwing it out.  So now it will be pervasive in the company and when it rears its ugly head with deficiencies it will already be EVERYWHERE in the company.  It just makes me shake my head.

Hope all is well with you guys!

  Bud</description>
		<content:encoded><![CDATA[<p>I definitely see your points. However the real problem is &#8220;throwing something together in a week&#8221; and then it&#8217;s in production.  Once it becomes pervasive in production it can be SO hard to extract it later on when you realize an API&#8217;s shortcomings.  I think reaching the conclusion to home grow a piece of code should only be reached after you have researched the options out there.  It is usually the first thing I do when I attack a problem&#8230;I ask &#8220;did someone else solve this problem already?&#8221;.  And if the answer is NO then I look at writing something custom.  </p>
<p>What I have learned in the many many clients I have had is it&#8217;s not just your company.  Lots of companies have similar problems with pervasive homegrown code and it is pretty much 90% of their problems and their cost in maintenance and downtime.  A perfect example is my current client.  They have decided to log all application to a central log like Syslog.  Its high performance UDP based logging so their monitoring group can be watching gobs and gobs of data in one central location and eventing and alarming on that log with something like Tivoli.  Great idea right?  Sure, except they decided to home grow the API and its a total POS.  They spent about 3 months working on it and in the end it was a steaming pile that we poked about 100 holes in on code review.  I spent 15 minutes and had the exact functionality to Syslog done in both Log4J and Logback.  Two open source API&#8217;s with Syslog capabilities already built in.  They could have spent 25$ for my time and a great standard solution, instead they spent about 45,000$ over the two months.</p>
<p>But they are going ahead with their homegrown solution because they can&#8217;t justify throwing it out.  So now it will be pervasive in the company and when it rears its ugly head with deficiencies it will already be EVERYWHERE in the company.  It just makes me shake my head.</p>
<p>Hope all is well with you guys!</p>
<p>  Bud</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe Campbell</title>
		<link>http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code/comment-page-1#comment-157</link>
		<dc:creator>Joe Campbell</dc:creator>
		<pubDate>Tue, 01 Apr 2008 16:15:51 +0000</pubDate>
		<guid isPermaLink="false">http://mcherm.com/permalinks/1/a-creaky-old-mans-defense-of-creaky-old-code#comment-157</guid>
		<description>In theory I agree with you - but the value point that I think you are missing is, while this does work and in someways works as designed it is starting to get in the way.  What I mean by this is

1) specific to an upgrade paths, when attempting to change drivers to newer versions (which should be a simple drop in replacement) issues have arisen that can not seem to be worked around and are deeply ingrained in the way the pooling &#039;was written&#039;.   Some have attempted to write this off as an oracle driver issue, you and I both know that it is more likely the home grown code causing issues.
2) There has been alot of talk on the blog-o-sphere about things being intuitive and how much one has to keep in their head when doing work.  How the connection items function in relation to my code should not be an issue I should have to worry about.  I should be able to just assume it works as I would expect (it gives me a connection) and move on.  Currently this is not true as the connection pool does alot of work that is protectionary - and one could argue &#039;good&#039; but it does it in a way that &#039;newer&#039; programmers are not familiar with and as such have to &#039;bootstrap&#039; into their head when they are working on the project.  I would much rather they work on Business functionality and not have to worry about &#039;how&#039; a bit of plumbing works when that plumbing isn&#039;t something they have &#039;done&#039; in the past.

Yes it works - and yes it has features but it just might be a good time to revisit and look for something that is &#039;newer&#039; that meets a good number of the needs and extend that rather then continue to use something that we wrote FORCING the decision of weather to support it or not.</description>
		<content:encoded><![CDATA[<p>In theory I agree with you &#8211; but the value point that I think you are missing is, while this does work and in someways works as designed it is starting to get in the way.  What I mean by this is</p>
<p>1) specific to an upgrade paths, when attempting to change drivers to newer versions (which should be a simple drop in replacement) issues have arisen that can not seem to be worked around and are deeply ingrained in the way the pooling &#8216;was written&#8217;.   Some have attempted to write this off as an oracle driver issue, you and I both know that it is more likely the home grown code causing issues.<br />
2) There has been alot of talk on the blog-o-sphere about things being intuitive and how much one has to keep in their head when doing work.  How the connection items function in relation to my code should not be an issue I should have to worry about.  I should be able to just assume it works as I would expect (it gives me a connection) and move on.  Currently this is not true as the connection pool does alot of work that is protectionary &#8211; and one could argue &#8216;good&#8217; but it does it in a way that &#8216;newer&#8217; programmers are not familiar with and as such have to &#8216;bootstrap&#8217; into their head when they are working on the project.  I would much rather they work on Business functionality and not have to worry about &#8216;how&#8217; a bit of plumbing works when that plumbing isn&#8217;t something they have &#8216;done&#8217; in the past.</p>
<p>Yes it works &#8211; and yes it has features but it just might be a good time to revisit and look for something that is &#8216;newer&#8217; that meets a good number of the needs and extend that rather then continue to use something that we wrote FORCING the decision of weather to support it or not.</p>
]]></content:encoded>
	</item>
</channel>
</rss>


