<?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: Building systems like a tailor made suit</title>
	<atom:link href="http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/feed/" rel="self" type="application/rss+xml" />
	<link>http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/</link>
	<description>a survivor's guide</description>
	<lastBuildDate>Mon, 30 Jan 2012 18:57:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Al Maloney</title>
		<link>http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/comment-page-1/#comment-51370</link>
		<dc:creator>Al Maloney</dc:creator>
		<pubDate>Sun, 20 Jun 2010 12:29:26 +0000</pubDate>
		<guid isPermaLink="false">http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/#comment-51370</guid>
		<description>Surely Y2K is a prime example of this.
And, how about the USofA penchant for allowing only one middle initial in most of the forms?</description>
		<content:encoded><![CDATA[<p>Surely Y2K is a prime example of this.<br />
And, how about the USofA penchant for allowing only one middle initial in most of the forms?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jay</title>
		<link>http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/comment-page-1/#comment-29</link>
		<dc:creator>jay</dc:creator>
		<pubDate>Thu, 14 Dec 2006 22:14:03 +0000</pubDate>
		<guid isPermaLink="false">http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/#comment-29</guid>
		<description>First, it&#039;s not waterfall since I&#039;m not talking about designing everything in advance.  Only about preparing for future change.

Second, &#039;hooks&#039; was a poor choice of word.  Good design is about things like a coherent conceptual framework (aka domain driven design), clear interfaces and reusable code.  My contention is that these can be done much better with forethought.

This forethought is basically just an extension of the pattern matching that all programmers do.  This is an iterative cycle, where each iteration sees specific code sucked up and rewritten as generic code.  My contention is that this practice should not stop when the current work is done but continue to a natural end point. 

Another way of putting this is basically OO design.  It is obviously far simpler to write basic code than to think in terms of advanced design patterns. But those patterns can allow changes far more easily than the simpler code.

Arrogant though it might sound, I think that experience is what makes these decisions likely to provide future benefit.  But if you don&#039;t try then that experience will be very slow in coming. 

Finally, I think the cost of unplanned (or at least unprepared) later change is far more than most people imagine.  It is not just the cost of the code, but also the data restructuring, the deployment etc.  All of these can be mitigated to some extent by decision made before the change is known about.</description>
		<content:encoded><![CDATA[<p>First, it&#8217;s not waterfall since I&#8217;m not talking about designing everything in advance.  Only about preparing for future change.</p>
<p>Second, &#8216;hooks&#8217; was a poor choice of word.  Good design is about things like a coherent conceptual framework (aka domain driven design), clear interfaces and reusable code.  My contention is that these can be done much better with forethought.</p>
<p>This forethought is basically just an extension of the pattern matching that all programmers do.  This is an iterative cycle, where each iteration sees specific code sucked up and rewritten as generic code.  My contention is that this practice should not stop when the current work is done but continue to a natural end point. </p>
<p>Another way of putting this is basically OO design.  It is obviously far simpler to write basic code than to think in terms of advanced design patterns. But those patterns can allow changes far more easily than the simpler code.</p>
<p>Arrogant though it might sound, I think that experience is what makes these decisions likely to provide future benefit.  But if you don&#8217;t try then that experience will be very slow in coming. </p>
<p>Finally, I think the cost of unplanned (or at least unprepared) later change is far more than most people imagine.  It is not just the cost of the code, but also the data restructuring, the deployment etc.  All of these can be mitigated to some extent by decision made before the change is known about.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Graeme Hunter</title>
		<link>http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/comment-page-1/#comment-20</link>
		<dc:creator>Graeme Hunter</dc:creator>
		<pubDate>Tue, 12 Dec 2006 19:48:30 +0000</pubDate>
		<guid isPermaLink="false">http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/#comment-20</guid>
		<description>It is simply Waterfall against agile methodologies, surely. Waterfall says design everything you think you will ever need first then build, agile says design what you know you need now, build it, then see if you need anything else.</description>
		<content:encoded><![CDATA[<p>It is simply Waterfall against agile methodologies, surely. Waterfall says design everything you think you will ever need first then build, agile says design what you know you need now, build it, then see if you need anything else.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Rimmer</title>
		<link>http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/comment-page-1/#comment-19</link>
		<dc:creator>Chris Rimmer</dc:creator>
		<pubDate>Tue, 12 Dec 2006 11:29:34 +0000</pubDate>
		<guid isPermaLink="false">http://controlfreak.net/2006/12/11/building-systems-like-a-tailor-made-suit/#comment-19</guid>
		<description>I have to reply to this, since you are insulting my religion! ;-)

This presupposes that adding hook code early on is cheaper than adding hook code when you actually need it.  Suppose that was not the case and that the cost was the same.  In that scenario you&#039;d be better off waiting because:

1) If it turned out you never needed the hooks you would have saved the wasted effort and added complexity of putting them in.
2) If you put them in when you needed them you&#039;d have more information about the problem in hand and be more likely to put the _right_ hooks in place.

I would go so far as to suggest that it is worth waiting even if it is slightly more expensive to add the hooks later.  That&#039;s because adding the hooks in early adds hidden costs.  The code is more complex which slows down all development.  The other argument is an economic one.  Consider work being done as an investment and the functionality delivered as the return on that investment.  If you think of it like that then obviously you want to invest in areas that will quickly start giving returns.  Adding hooks will take a long time to yield any return, investment that could have been made in areas that would yield returns quicker.  

I haven&#039;t even mentioned what happens if the hook code is not quite what is needed when you actually come to use it.  In my experience this sort of code almost always needs changing to some degree at the point it comes to be used...

So the question is, what are the relative costs?  Well the traditional thinking is that the &#039;cost of change&#039; curve is exponential.  So that making changes up front is much cheaper than making them later.  That would blow everything I&#039;ve said out of the water.  However, there is growing evidence that using agile techniques can make that curve much flatter.

Scott Ambler talks about the cost of change curve here:
http://www.ambysoft.com/essays/whyAgileWorksFeedback.html

Martin Fowler talks about evolutionary vs up front design here:
http://www.martinfowler.com/articles/designDead.html</description>
		<content:encoded><![CDATA[<p>I have to reply to this, since you are insulting my religion! ;-)</p>
<p>This presupposes that adding hook code early on is cheaper than adding hook code when you actually need it.  Suppose that was not the case and that the cost was the same.  In that scenario you&#8217;d be better off waiting because:</p>
<p>1) If it turned out you never needed the hooks you would have saved the wasted effort and added complexity of putting them in.<br />
2) If you put them in when you needed them you&#8217;d have more information about the problem in hand and be more likely to put the _right_ hooks in place.</p>
<p>I would go so far as to suggest that it is worth waiting even if it is slightly more expensive to add the hooks later.  That&#8217;s because adding the hooks in early adds hidden costs.  The code is more complex which slows down all development.  The other argument is an economic one.  Consider work being done as an investment and the functionality delivered as the return on that investment.  If you think of it like that then obviously you want to invest in areas that will quickly start giving returns.  Adding hooks will take a long time to yield any return, investment that could have been made in areas that would yield returns quicker.  </p>
<p>I haven&#8217;t even mentioned what happens if the hook code is not quite what is needed when you actually come to use it.  In my experience this sort of code almost always needs changing to some degree at the point it comes to be used&#8230;</p>
<p>So the question is, what are the relative costs?  Well the traditional thinking is that the &#8216;cost of change&#8217; curve is exponential.  So that making changes up front is much cheaper than making them later.  That would blow everything I&#8217;ve said out of the water.  However, there is growing evidence that using agile techniques can make that curve much flatter.</p>
<p>Scott Ambler talks about the cost of change curve here:<br />
<a href="http://www.ambysoft.com/essays/whyAgileWorksFeedback.html" rel="nofollow">http://www.ambysoft.com/essays/whyAgileWorksFeedback.html</a></p>
<p>Martin Fowler talks about evolutionary vs up front design here:<br />
<a href="http://www.martinfowler.com/articles/designDead.html" rel="nofollow">http://www.martinfowler.com/articles/designDead.html</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>

