<?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"
	>
<channel>
	<title>Comments on: The Third Law of Software Design</title>
	<atom:link href="http://www.codesimplicity.com/archives/19/feed" rel="self" type="application/rss+xml" />
	<link>http://www.codesimplicity.com/archives/19</link>
	<description></description>
	<pubDate>Mon, 08 Sep 2008 09:32:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Max Kanat-Alexander</title>
		<link>http://www.codesimplicity.com/archives/19#comment-192</link>
		<dc:creator>Max Kanat-Alexander</dc:creator>
		<pubDate>Mon, 10 Mar 2008 21:23:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-192</guid>
		<description>Sure, definitely.

-Max</description>
		<content:encoded><![CDATA[<p>Sure, definitely.</p>
<p>-Max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ignacio</title>
		<link>http://www.codesimplicity.com/archives/19#comment-189</link>
		<dc:creator>ignacio</dc:creator>
		<pubDate>Mon, 10 Mar 2008 17:14:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-189</guid>
		<description>However, it is possible to have previously-hidden defects in your software exposed by other software changing around it, viz. GCC 4.3 and the Direction Flag in the Linux kernel.</description>
		<content:encoded><![CDATA[<p>However, it is possible to have previously-hidden defects in your software exposed by other software changing around it, viz. GCC 4.3 and the Direction Flag in the Linux kernel.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Kanat-Alexander</title>
		<link>http://www.codesimplicity.com/archives/19#comment-186</link>
		<dc:creator>Max Kanat-Alexander</dc:creator>
		<pubDate>Sun, 09 Mar 2008 21:11:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-186</guid>
		<description>Also, I'm less trying to &lt;em&gt;prove&lt;/em&gt; these laws by these derivations, and more trying to help people &lt;em&gt;understand&lt;/em&gt; them, by giving some logical background for them.

-Max</description>
		<content:encoded><![CDATA[<p>Also, I&#8217;m less trying to <em>prove</em> these laws by these derivations, and more trying to help people <em>understand</em> them, by giving some logical background for them.</p>
<p>-Max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Kanat-Alexander</title>
		<link>http://www.codesimplicity.com/archives/19#comment-185</link>
		<dc:creator>Max Kanat-Alexander</dc:creator>
		<pubDate>Sun, 09 Mar 2008 21:10:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-185</guid>
		<description>Switching the compiler would be changing something about your software. The Firefox one is a good question. You didn't really &lt;em&gt;introduce&lt;/em&gt; a defect. It's more of a Second Law thing--that you have to change.

Yes, it is fundamentally an empirical science. But for me to say that something is a law, I personally like to have a philosophical basis for it--that is, I like to know &lt;em&gt;why&lt;/em&gt; it's true, not just that it is. 

I did actually arrive at all of the laws empirically, and in fact in my original drafts for my book, I called all of these "rules" instead of "laws", because I couldn't &lt;em&gt;prove&lt;/em&gt; them sufficiently for &lt;em&gt;me&lt;/em&gt;. The final test of any engineering law is "Does it work?", but I personally just like to have a "why" before I say that something is really a law.

I think your economic derivation is very interesting! I suspect many of these laws could be derived in various ways. And of course, as I said, in fact I actually observed them first and derived them second.

I can't really say much about AllPeers. Did it become unmaintainably expensive because of the code design? I don't know. I'd guess that operating costs would be high in any case, but I really have no idea. There are definitely factors outside of design that can make a project fail, but that's outside of the area of these laws. That'd be more of a management issue, and less a technical issue.

-Max</description>
		<content:encoded><![CDATA[<p>Switching the compiler would be changing something about your software. The Firefox one is a good question. You didn&#8217;t really <em>introduce</em> a defect. It&#8217;s more of a Second Law thing&#8211;that you have to change.</p>
<p>Yes, it is fundamentally an empirical science. But for me to say that something is a law, I personally like to have a philosophical basis for it&#8211;that is, I like to know <em>why</em> it&#8217;s true, not just that it is. </p>
<p>I did actually arrive at all of the laws empirically, and in fact in my original drafts for my book, I called all of these &#8220;rules&#8221; instead of &#8220;laws&#8221;, because I couldn&#8217;t <em>prove</em> them sufficiently for <em>me</em>. The final test of any engineering law is &#8220;Does it work?&#8221;, but I personally just like to have a &#8220;why&#8221; before I say that something is really a law.</p>
<p>I think your economic derivation is very interesting! I suspect many of these laws could be derived in various ways. And of course, as I said, in fact I actually observed them first and derived them second.</p>
<p>I can&#8217;t really say much about AllPeers. Did it become unmaintainably expensive because of the code design? I don&#8217;t know. I&#8217;d guess that operating costs would be high in any case, but I really have no idea. There are definitely factors outside of design that can make a project fail, but that&#8217;s outside of the area of these laws. That&#8217;d be more of a management issue, and less a technical issue.</p>
<p>-Max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kim Sullivan</title>
		<link>http://www.codesimplicity.com/archives/19#comment-184</link>
		<dc:creator>Kim Sullivan</dc:creator>
		<pubDate>Sun, 09 Mar 2008 20:56:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-184</guid>
		<description>How about switching compilers to a new version? How about a Firefox extension that gets broken with a new update of Firefox? How about an application that has worked perfectly, until MS decided to limit the maximum number of new connections in XP SP2? Of course, you could say that these defects always have been there (but in the case of FF, this really doesn't have to be true, sometimes the internal API changes and your extension just stops working without you having to do anything). Or maybe the defect isn't in my software, because I haven't changed a line, but in "the environment"?

Or maybe I've just been overexposed to rigorous mathematical texts that really don't leave any room for doubts (once you actually manage to understand the 3 page proofs for some seemingly simple theorem, that builds on at least 4 previously proven theorems...), and I should give your laws a little more breathing space. I mean, empirical science (as opposed to pure mathematics) rarely works with axiomatic laws and logical derivations, but it's laws are "based on a sufficiently large number of empirical observations that it [are] taken as fully verified". Which is maybe why I'm a bit confused. You use axioms and logical derivation as in pure math (but because it's more of an empirical science, they lack rigorous proofs), but on the other hand, for it to be an empirical science, it lacks concrete data. I confess, I've used Wikipedia's article on &lt;a href="http://en.wikipedia.org/wiki/Science#Scientific_method" rel="nofollow"&gt;science&lt;/a&gt; to put my thoughts into words and (even up to the point of citing it), but it seems to nicely express the source of my doubts.

If you feel that I'm generating too much &lt;a href="http://www.userland.com/whatIsStopEnergy" rel="nofollow"&gt;stop energy&lt;/a&gt;, feel free to ignore me ;-) I mean, the resulting law is very interesting, just the process you used to arive at it seems a bit weird. Besides, you could arrive at the last law using other, more empirically proven methods (and methods that have been studied much more deeply), such as some sort of "economics":

1. If a program satisfies demand, it makes a benefits (or profit, but it doesn't have to be $$)
2. If a program stops satisfying a demand, it makes less benefit.
3. Less benefits are bad (all of these laws are axiomatic)
4. To keep a program making benefits, it needs to keep satisfy a demand.
5. To keep satisfying a demand, it has to be developed, which has an associated cost (this could be disputed, there are other, more sinister ways to force users to be satisfied by a particular program than making the program better)
6. If we develop it too much, the cost of development will be higher than the benefits (this is bad)
7. We need to develop the program in such a way that it still satisfies a demand, but the cost doesn't overweight the benefits
8. Ergo, the less we have to develop while still keeping stable benefits, the better.

Now we copuld go into a lengthy analysis of the ways in which a program stops making benefits (defects, changes in the environment, change in demand), or say that there is a correlation between the the design of a program and it's development costs... but it just comes down to cost benefit analysis (and also explains the recent downfall of AllPeers, which has been stopped because a lack of funding. Would a better "code design" of the AllPeers software made it still exist today?)</description>
		<content:encoded><![CDATA[<p>How about switching compilers to a new version? How about a Firefox extension that gets broken with a new update of Firefox? How about an application that has worked perfectly, until MS decided to limit the maximum number of new connections in XP SP2? Of course, you could say that these defects always have been there (but in the case of FF, this really doesn&#8217;t have to be true, sometimes the internal API changes and your extension just stops working without you having to do anything). Or maybe the defect isn&#8217;t in my software, because I haven&#8217;t changed a line, but in &#8220;the environment&#8221;?</p>
<p>Or maybe I&#8217;ve just been overexposed to rigorous mathematical texts that really don&#8217;t leave any room for doubts (once you actually manage to understand the 3 page proofs for some seemingly simple theorem, that builds on at least 4 previously proven theorems&#8230;), and I should give your laws a little more breathing space. I mean, empirical science (as opposed to pure mathematics) rarely works with axiomatic laws and logical derivations, but it&#8217;s laws are &#8220;based on a sufficiently large number of empirical observations that it [are] taken as fully verified&#8221;. Which is maybe why I&#8217;m a bit confused. You use axioms and logical derivation as in pure math (but because it&#8217;s more of an empirical science, they lack rigorous proofs), but on the other hand, for it to be an empirical science, it lacks concrete data. I confess, I&#8217;ve used Wikipedia&#8217;s article on <a href="http://en.wikipedia.org/wiki/Science#Scientific_method" rel="nofollow">science</a> to put my thoughts into words and (even up to the point of citing it), but it seems to nicely express the source of my doubts.</p>
<p>If you feel that I&#8217;m generating too much <a href="http://www.userland.com/whatIsStopEnergy" rel="nofollow">stop energy</a>, feel free to ignore me <img src='http://www.codesimplicity.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> I mean, the resulting law is very interesting, just the process you used to arive at it seems a bit weird. Besides, you could arrive at the last law using other, more empirically proven methods (and methods that have been studied much more deeply), such as some sort of &#8220;economics&#8221;:</p>
<p>1. If a program satisfies demand, it makes a benefits (or profit, but it doesn&#8217;t have to be $$)<br />
2. If a program stops satisfying a demand, it makes less benefit.<br />
3. Less benefits are bad (all of these laws are axiomatic)<br />
4. To keep a program making benefits, it needs to keep satisfy a demand.<br />
5. To keep satisfying a demand, it has to be developed, which has an associated cost (this could be disputed, there are other, more sinister ways to force users to be satisfied by a particular program than making the program better)<br />
6. If we develop it too much, the cost of development will be higher than the benefits (this is bad)<br />
7. We need to develop the program in such a way that it still satisfies a demand, but the cost doesn&#8217;t overweight the benefits<br />
8. Ergo, the less we have to develop while still keeping stable benefits, the better.</p>
<p>Now we copuld go into a lengthy analysis of the ways in which a program stops making benefits (defects, changes in the environment, change in demand), or say that there is a correlation between the the design of a program and it&#8217;s development costs&#8230; but it just comes down to cost benefit analysis (and also explains the recent downfall of AllPeers, which has been stopped because a lack of funding. Would a better &#8220;code design&#8221; of the AllPeers software made it still exist today?)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Kanat-Alexander</title>
		<link>http://www.codesimplicity.com/archives/19#comment-178</link>
		<dc:creator>Max Kanat-Alexander</dc:creator>
		<pubDate>Fri, 07 Mar 2008 21:42:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-178</guid>
		<description>Hahaha, yeah. :-) At the very least, it explains why modularity is a good idea. :-)

-Max</description>
		<content:encoded><![CDATA[<p>Hahaha, yeah. <img src='http://www.codesimplicity.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> At the very least, it explains why modularity is a good idea. <img src='http://www.codesimplicity.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>-Max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Günther Noack</title>
		<link>http://www.codesimplicity.com/archives/19#comment-177</link>
		<dc:creator>Günther Noack</dc:creator>
		<pubDate>Fri, 07 Mar 2008 21:38:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesimplicity.com/archives/19#comment-177</guid>
		<description>"The best design is the one that allows for the most change in the environment with the least change in the software."

This almost sounds like a definition of "modularity". :-)</description>
		<content:encoded><![CDATA[<p>&#8220;The best design is the one that allows for the most change in the environment with the least change in the software.&#8221;</p>
<p>This almost sounds like a definition of &#8220;modularity&#8221;. <img src='http://www.codesimplicity.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
</channel>
</rss>
