<?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: Why programmers write unneeded code</title>
	<atom:link href="http://www.johndcook.com/blog/2009/10/05/yangi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johndcook.com/blog/2009/10/05/yangi/</link>
	<description>The blog of John D. Cook</description>
	<lastBuildDate>Sat, 11 Feb 2012 01:10:06 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Preparing for change, expressing intent &#8212; The Endeavour</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-131179</link>
		<dc:creator>Preparing for change, expressing intent &#8212; The Endeavour</dc:creator>
		<pubDate>Tue, 17 Jan 2012 13:01:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-131179</guid>
		<description>[...] easier to maintain. If you focus on maintainability alone, it might backfire. You might get lots of unneeded code, inserted with the intent of making future maintenance easier, that makes maintenance [...]</description>
		<content:encoded><![CDATA[<p>[...] easier to maintain. If you focus on maintainability alone, it might backfire. You might get lots of unneeded code, inserted with the intent of making future maintenance easier, that makes maintenance [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TS</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-130235</link>
		<dc:creator>TS</dc:creator>
		<pubDate>Fri, 13 Jan 2012 23:22:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-130235</guid>
		<description>YAGNI is dangerous since it is often considered as an excuse for applying short-sighted decisions which often conflict with the next change request or new situations.
Even worse, this ends up in adding functionality just for a single purpose usually resulting in poorly designed solutions which cannot be reused later on - thus creating a bloated pile of similar yet noninteroperable pieces which is even worse to test and extend than overengineered stuff.

That´s why I prefer YAGNIN instead: 
You Ain´t Gonna Need It NOW, meaning that one should think ahead about future use cases and extensions, but resist to put more than just basic work in it.
Practical examples: 

-if there are multiple ways on solving a problem prefer the ones which allow for easier extensibility, modification and reusability

-edge cases which do not show up now but possibly in the future need not be solved instantly: A placeholder (e.g., an info message for the user/supporters/testers and/or a comment for the developers) serves best here as it allows considering this part as &#039;done&#039; while still serving as a starting point in case it will be needed somewhere in the future

-often there are already ideas about how the not-yet-needed stuff would look like: Writing it down in a separate part of the design documentation or as comments within the implementation not only helps in case when it will be actually needed it also helps in understanding the the already-in-use stuff was created the way it is

-generally, viewing the current task from a big picture view also helps in deciding which future requirements are likely and which should be solved elsewhere: Would they be helpful for smooth integration and user experience? Or would they just look like an ugly extension messing up the overall result?

-if it is unknown how future demand will look like it is best to start with a simple &quot;quick and dirty&quot; solution. It is still good enough for learning from its first results and, once the right pattern gets more visibly, can be thrown away in order to be replaced by a more sophisticated one (Yes, throwing stuff away is an important YAGNIN principle: Trying to be overly smart for the first time usually doesn´t work out that well, but not doing it at all is hazardous as well. One needs to know when the time is right for putting it up &quot;the right way&quot;, otherwise you´re wasting time for an either unnecessary or inadequate implementation.

Thinking YAGNIN style is especially helpful when designing interfaces: Even poorly designed ones tend to last almost forever and thus create a lot of damage since effort required for bypassing its limitations quickly surpasses the time saved for not thinking about it at the first time. 

The most interesting part of my YAGNIN experience is that although only just half of the stuff I considered for future use actually gets used later on, however the decisions made for them often turns out to be helpful for upcoming requirements I haven´t even thought of back then!</description>
		<content:encoded><![CDATA[<p>YAGNI is dangerous since it is often considered as an excuse for applying short-sighted decisions which often conflict with the next change request or new situations.<br />
Even worse, this ends up in adding functionality just for a single purpose usually resulting in poorly designed solutions which cannot be reused later on &#8211; thus creating a bloated pile of similar yet noninteroperable pieces which is even worse to test and extend than overengineered stuff.</p>
<p>That´s why I prefer YAGNIN instead:<br />
You Ain´t Gonna Need It NOW, meaning that one should think ahead about future use cases and extensions, but resist to put more than just basic work in it.<br />
Practical examples: </p>
<p>-if there are multiple ways on solving a problem prefer the ones which allow for easier extensibility, modification and reusability</p>
<p>-edge cases which do not show up now but possibly in the future need not be solved instantly: A placeholder (e.g., an info message for the user/supporters/testers and/or a comment for the developers) serves best here as it allows considering this part as &#8216;done&#8217; while still serving as a starting point in case it will be needed somewhere in the future</p>
<p>-often there are already ideas about how the not-yet-needed stuff would look like: Writing it down in a separate part of the design documentation or as comments within the implementation not only helps in case when it will be actually needed it also helps in understanding the the already-in-use stuff was created the way it is</p>
<p>-generally, viewing the current task from a big picture view also helps in deciding which future requirements are likely and which should be solved elsewhere: Would they be helpful for smooth integration and user experience? Or would they just look like an ugly extension messing up the overall result?</p>
<p>-if it is unknown how future demand will look like it is best to start with a simple &#8220;quick and dirty&#8221; solution. It is still good enough for learning from its first results and, once the right pattern gets more visibly, can be thrown away in order to be replaced by a more sophisticated one (Yes, throwing stuff away is an important YAGNIN principle: Trying to be overly smart for the first time usually doesn´t work out that well, but not doing it at all is hazardous as well. One needs to know when the time is right for putting it up &#8220;the right way&#8221;, otherwise you´re wasting time for an either unnecessary or inadequate implementation.</p>
<p>Thinking YAGNIN style is especially helpful when designing interfaces: Even poorly designed ones tend to last almost forever and thus create a lot of damage since effort required for bypassing its limitations quickly surpasses the time saved for not thinking about it at the first time. </p>
<p>The most interesting part of my YAGNIN experience is that although only just half of the stuff I considered for future use actually gets used later on, however the decisions made for them often turns out to be helpful for upcoming requirements I haven´t even thought of back then!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bugs, features, and risk &#8212; The Endeavour</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-129748</link>
		<dc:creator>Bugs, features, and risk &#8212; The Endeavour</dc:creator>
		<pubDate>Thu, 12 Jan 2012 12:07:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-129748</guid>
		<description>[...] Related post: Why programmers write unneeded code [...]</description>
		<content:encoded><![CDATA[<p>[...] Related post: Why programmers write unneeded code [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andre</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-36720</link>
		<dc:creator>Andre</dc:creator>
		<pubDate>Wed, 21 Apr 2010 15:20:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-36720</guid>
		<description>Sometimes projects are just boring or you get no time for education - so you compensate this within the running project :P</description>
		<content:encoded><![CDATA[<p>Sometimes projects are just boring or you get no time for education &#8211; so you compensate this within the running project <img src='http://www.johndcook.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Learning “Just in Case” versus “Just in Time” [Learning] &#124; BlogSDN Articles</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-34076</link>
		<dc:creator>Learning “Just in Case” versus “Just in Time” [Learning] &#124; BlogSDN Articles</dc:creator>
		<pubDate>Fri, 05 Mar 2010 22:01:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-34076</guid>
		<description>[...] developers prefer just in time learning. There&#8217;s so much out there that you aren&#8217;t going to need. You can&#8217;t learn every detail of every operating system, every programming language, every [...]</description>
		<content:encoded><![CDATA[<p>[...] developers prefer just in time learning. There&#8217;s so much out there that you aren&#8217;t going to need. You can&#8217;t learn every detail of every operating system, every programming language, every [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mohan Arun L</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-30060</link>
		<dc:creator>Mohan Arun L</dc:creator>
		<pubDate>Sun, 03 Jan 2010 05:25:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-30060</guid>
		<description>Interesting thoughts, if only more programmers and people involved in software engineering/development read and followed this, then we can all see less and less &#039;bloated software&#039; - software where &#039;scope creep&#039; and &#039;functionality creep&#039; has happened. Lot of functions that have very little typical usage. If only they had started from the &#039;smallest thing that could possibly work&#039; and added only the essential features step by step with a version/saved copy every step along the way, so it would be easier to retrace such steps in the future starting again from the earliest &#039;smallest thing&#039;!  I remember seeing a version of Windows 7 that had been culled into a single 700 MB installation CD (not DVD). So much for the standard distribution of bloated Windows 7 which comes in DVDs...</description>
		<content:encoded><![CDATA[<p>Interesting thoughts, if only more programmers and people involved in software engineering/development read and followed this, then we can all see less and less &#8216;bloated software&#8217; &#8211; software where &#8217;scope creep&#8217; and &#8216;functionality creep&#8217; has happened. Lot of functions that have very little typical usage. If only they had started from the &#8217;smallest thing that could possibly work&#8217; and added only the essential features step by step with a version/saved copy every step along the way, so it would be easier to retrace such steps in the future starting again from the earliest &#8217;smallest thing&#8217;!  I remember seeing a version of Windows 7 that had been culled into a single 700 MB installation CD (not DVD). So much for the standard distribution of bloated Windows 7 which comes in DVDs&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael H.</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-29676</link>
		<dc:creator>Michael H.</dc:creator>
		<pubDate>Sat, 26 Dec 2009 20:19:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-29676</guid>
		<description>A long time ago there was a king who decided that he needed a machine that would toast his bread every morning so he called his best engineer and his best programmer to the castle to present their ideas.  The engineer was first and he described a simple machine with heating coils to toast the bread, a simple dial to adjust the time that the bread was toasted for and a timer to release the bread when the operation was complete.   Next the programmer described in great detail a machine which would not only do what the engineer described but would also cook the eggs, fry the bacon, squeeze the orange juice - all while toasting the bread.  After the programmer finished talking the king thought for a second and ordered the programmers head removed.</description>
		<content:encoded><![CDATA[<p>A long time ago there was a king who decided that he needed a machine that would toast his bread every morning so he called his best engineer and his best programmer to the castle to present their ideas.  The engineer was first and he described a simple machine with heating coils to toast the bread, a simple dial to adjust the time that the bread was toasted for and a timer to release the bread when the operation was complete.   Next the programmer described in great detail a machine which would not only do what the engineer described but would also cook the eggs, fry the bacon, squeeze the orange juice &#8211; all while toasting the bread.  After the programmer finished talking the king thought for a second and ordered the programmers head removed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew London</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-29626</link>
		<dc:creator>Andrew London</dc:creator>
		<pubDate>Fri, 25 Dec 2009 22:53:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-29626</guid>
		<description>The math analogy is a good one - sometimes stepping back and solving the general case saves maintenance and future development time by providing a considered solution that otherwise would be solved piecemeal by individual developers.

Acronyms such as YAGNI have their uses but the danger is an oversimplification that blinds us to the individuality of situations. For example, DRY and YAGNI can conflict in situations where your instinct is to stepback and solve the general case.</description>
		<content:encoded><![CDATA[<p>The math analogy is a good one &#8211; sometimes stepping back and solving the general case saves maintenance and future development time by providing a considered solution that otherwise would be solved piecemeal by individual developers.</p>
<p>Acronyms such as YAGNI have their uses but the danger is an oversimplification that blinds us to the individuality of situations. For example, DRY and YAGNI can conflict in situations where your instinct is to stepback and solve the general case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Just A Commenter</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-29617</link>
		<dc:creator>Just A Commenter</dc:creator>
		<pubDate>Fri, 25 Dec 2009 15:49:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-29617</guid>
		<description>In mathematics, a proof is sometimes simplified by proving a more general result.

In the same way, sometimes it&#039;s easier to create a more general solution than the immediate problem requires.</description>
		<content:encoded><![CDATA[<p>In mathematics, a proof is sometimes simplified by proving a more general result.</p>
<p>In the same way, sometimes it&#8217;s easier to create a more general solution than the immediate problem requires.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike McNally</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-29607</link>
		<dc:creator>Mike McNally</dc:creator>
		<pubDate>Fri, 25 Dec 2009 12:50:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-29607</guid>
		<description>I think it&#039;s pretty easy make the case that the currently-trendy Domain-Specific Language paradigm can be thought of as a huge pile of YAGNI.  Surely, designing and implementing one or more DSLs for an application domain is inherently a whole lot of functionality that, at any given point, the application doesn&#039;t need. But DSLs are also a simplifying, solidifying approach to robust design. Trimming down a DSL too strictly tends to reduce its long-term effectiveness. Of course, turning a DSL pre-project into an expansive work of genius instead of getting the application itself working is clearly a serious case of YAGNI.

However, how many of us are really so smart that we can be rock-solid confident that we&#039;re not going to need some functionality - and need it in a hurry? Surely we&#039;ve all experienced the distressing realization that some early decisions to eschew generalization were, in hindsight, unfortunate.

I think that, in the end, &quot;rules&quot; like YAGNI are just fingers pointing at the moon. A skilled, wise designer/developer will have a good instinct to judge the difference between components and facilities that are pointless fluff (or, worse, boat anchors) and those that are valuable nuggets to be tucked away for emergencies down the road.</description>
		<content:encoded><![CDATA[<p>I think it&#8217;s pretty easy make the case that the currently-trendy Domain-Specific Language paradigm can be thought of as a huge pile of YAGNI.  Surely, designing and implementing one or more DSLs for an application domain is inherently a whole lot of functionality that, at any given point, the application doesn&#8217;t need. But DSLs are also a simplifying, solidifying approach to robust design. Trimming down a DSL too strictly tends to reduce its long-term effectiveness. Of course, turning a DSL pre-project into an expansive work of genius instead of getting the application itself working is clearly a serious case of YAGNI.</p>
<p>However, how many of us are really so smart that we can be rock-solid confident that we&#8217;re not going to need some functionality &#8211; and need it in a hurry? Surely we&#8217;ve all experienced the distressing realization that some early decisions to eschew generalization were, in hindsight, unfortunate.</p>
<p>I think that, in the end, &#8220;rules&#8221; like YAGNI are just fingers pointing at the moon. A skilled, wise designer/developer will have a good instinct to judge the difference between components and facilities that are pointless fluff (or, worse, boat anchors) and those that are valuable nuggets to be tucked away for emergencies down the road.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thom</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-26864</link>
		<dc:creator>Thom</dc:creator>
		<pubDate>Sun, 01 Nov 2009 13:24:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-26864</guid>
		<description>Writing code that is never needed might still be useful. Solving problems is a good way to learn and understand what you are doing. So you might well learn something that generalizes to a new problem or you might understand the prior work better (e.g., spot bugs or important limitations in the existing code).</description>
		<content:encoded><![CDATA[<p>Writing code that is never needed might still be useful. Solving problems is a good way to learn and understand what you are doing. So you might well learn something that generalizes to a new problem or you might understand the prior work better (e.g., spot bugs or important limitations in the existing code).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Dubakov</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-25875</link>
		<dc:creator>Michael Dubakov</dc:creator>
		<pubDate>Tue, 13 Oct 2009 15:56:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-25875</guid>
		<description>I think more often developers write code for the features that NOBODY will use. It is better to fix Product Management problem first, and only then pay attention to code. For example, in our product we have several features that are used by 0.005% - 0.1% of our customers. That were bad decisions by me, but developers spent time on them. It generated more waste than redundant code. 

So YAGNI should be applied on all levels.</description>
		<content:encoded><![CDATA[<p>I think more often developers write code for the features that NOBODY will use. It is better to fix Product Management problem first, and only then pay attention to code. For example, in our product we have several features that are used by 0.005% &#8211; 0.1% of our customers. That were bad decisions by me, but developers spent time on them. It generated more waste than redundant code. </p>
<p>So YAGNI should be applied on all levels.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-25534</link>
		<dc:creator>Rick</dc:creator>
		<pubDate>Tue, 06 Oct 2009 15:03:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-25534</guid>
		<description>I think one of the fundamental issues is that programmers are usually asked to do less than what they&#039;re capable of (or at least consider themselves capable of). And they&#039;ve gotten used to a world in which what they&#039;re initially being asked to do is much less than what turns out to be needed. And you know what pain it is to have to add functionality to code that was written to do just that and nothing more.

YAGNI is a factor that only becomes measurable after the fact, and in some cases even years later. How far to go to &quot;defend&quot; the code against possible future changes is largely guesswork. The reason why we as programmers have a strong tendency to err on the wrong side, as in writing too much code, is because we&#039;re optimists: we always want to believe this one is the one that&#039;s going to last, that&#039;s going to be so successful it will be maintained and extended for years to come, well beyond the original, (in our eyes) limited vision of our employer/client.

And we have to be. Because no matter how much we all know it to be true, facing the reality that most of the code we write will never again be looked at by another human being, and most of it won&#039;t even be in existence in a few years time is just way to depressing....

Anyway, determining where the YAGNI limit lies is not something that should be left to the programmer in &quot;deep coding mode&quot;. Ideally, it should be a joint effort. It&#039;s always much easier to spot when someone else is overdoing it.</description>
		<content:encoded><![CDATA[<p>I think one of the fundamental issues is that programmers are usually asked to do less than what they&#8217;re capable of (or at least consider themselves capable of). And they&#8217;ve gotten used to a world in which what they&#8217;re initially being asked to do is much less than what turns out to be needed. And you know what pain it is to have to add functionality to code that was written to do just that and nothing more.</p>
<p>YAGNI is a factor that only becomes measurable after the fact, and in some cases even years later. How far to go to &#8220;defend&#8221; the code against possible future changes is largely guesswork. The reason why we as programmers have a strong tendency to err on the wrong side, as in writing too much code, is because we&#8217;re optimists: we always want to believe this one is the one that&#8217;s going to last, that&#8217;s going to be so successful it will be maintained and extended for years to come, well beyond the original, (in our eyes) limited vision of our employer/client.</p>
<p>And we have to be. Because no matter how much we all know it to be true, facing the reality that most of the code we write will never again be looked at by another human being, and most of it won&#8217;t even be in existence in a few years time is just way to depressing&#8230;.</p>
<p>Anyway, determining where the YAGNI limit lies is not something that should be left to the programmer in &#8220;deep coding mode&#8221;. Ideally, it should be a joint effort. It&#8217;s always much easier to spot when someone else is overdoing it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ken</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-25523</link>
		<dc:creator>Ken</dc:creator>
		<pubDate>Tue, 06 Oct 2009 08:44:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-25523</guid>
		<description>I and I think most programmers find it difficult to alter the internals of complex code, so it seems worthwhile to overspecify these parts, so that especially the data structures are all set up. It may be simple enough to add in the structure but leave the details  unfinished. That way the overall logic is worked out only once.</description>
		<content:encoded><![CDATA[<p>I and I think most programmers find it difficult to alter the internals of complex code, so it seems worthwhile to overspecify these parts, so that especially the data structures are all set up. It may be simple enough to add in the structure but leave the details  unfinished. That way the overall logic is worked out only once.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Swaim</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-25503</link>
		<dc:creator>Mike Swaim</dc:creator>
		<pubDate>Mon, 05 Oct 2009 15:33:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-25503</guid>
		<description>It might also depend on who uses your code. When I&#039;m writing code for myself, it tends to just do what I need. If I&#039;m writing a library, I try to include functionality that I think that my users will want. If a user of my library wants a new feature, then I have to add it to my library, and release it. Then they have to update their libraries that depend on my library, even if they&#039;re not using any new functionality (thanks to the way we do our builds). Then the app gets redeployed. So, a new function in my code can easily generate 4+ deployments.</description>
		<content:encoded><![CDATA[<p>It might also depend on who uses your code. When I&#8217;m writing code for myself, it tends to just do what I need. If I&#8217;m writing a library, I try to include functionality that I think that my users will want. If a user of my library wants a new feature, then I have to add it to my library, and release it. Then they have to update their libraries that depend on my library, even if they&#8217;re not using any new functionality (thanks to the way we do our builds). Then the app gets redeployed. So, a new function in my code can easily generate 4+ deployments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Guest</title>
		<link>http://www.johndcook.com/blog/2009/10/05/yangi/comment-page-1/#comment-25501</link>
		<dc:creator>Thomas Guest</dc:creator>
		<pubDate>Mon, 05 Oct 2009 14:50:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=3341#comment-25501</guid>
		<description>YAGN YANGI</description>
		<content:encoded><![CDATA[<p>YAGN YANGI</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.441 seconds -->

