<?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: Software requirements do not change</title>
	<atom:link href="http://blog.tmorris.net/software-requirements-do-not-change/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tmorris.net/software-requirements-do-not-change/</link>
	<description>The weblog of Tony Morris</description>
	<pubDate>Tue, 06 Jan 2009 08:11:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: J</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-273</link>
		<dc:creator>J</dc:creator>
		<pubDate>Mon, 28 May 2007 12:31:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-273</guid>
		<description>"Likewise, clients do not project their false view of software into their final product and instead, trust the better judgment of a more trained practitioner (ideally)."

I would like to have your clients.  Mine just demanded a /different/ database schema two weeks before delivery.  I'll leave it to the philosophers whether it was a new schema or the same one with some grubby patches on it.

Speaking of philosophers, I just read ... um... Kant?, who claimed it was immoral for one generation to bind the next into a contract.  Not exactly relevant, but an amusing coincidence for me.

Hmm... when I change my mind, is it the same mind, or a completely new one that just looks a bit similar?


-- J (Ex banana bender)</description>
		<content:encoded><![CDATA[<p>&#8220;Likewise, clients do not project their false view of software into their final product and instead, trust the better judgment of a more trained practitioner (ideally).&#8221;</p>
<p>I would like to have your clients.  Mine just demanded a /different/ database schema two weeks before delivery.  I&#8217;ll leave it to the philosophers whether it was a new schema or the same one with some grubby patches on it.</p>
<p>Speaking of philosophers, I just read &#8230; um&#8230; Kant?, who claimed it was immoral for one generation to bind the next into a contract.  Not exactly relevant, but an amusing coincidence for me.</p>
<p>Hmm&#8230; when I change my mind, is it the same mind, or a completely new one that just looks a bit similar?</p>
<p>&#8211; J (Ex banana bender)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-272</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Tue, 02 Jan 2007 12:40:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-272</guid>
		<description>You've merely redefined the term "requirement" in a manner that makes it useless for talking to actual customers about their problems. "We don't sell sprockets anymore so you can remove that from the software requirements."

"I'm sorry: I can't remove that requirement. Requirements never change and are never removed. You COULD add a new requirement that says that it is now impossible to buy sprockets, but that would put the total requrement set into a state of contradiction. Therefore you must continue to sell sprockets."</description>
		<content:encoded><![CDATA[<p>You&#8217;ve merely redefined the term &#8220;requirement&#8221; in a manner that makes it useless for talking to actual customers about their problems. &#8220;We don&#8217;t sell sprockets anymore so you can remove that from the software requirements.&#8221;</p>
<p>&#8220;I&#8217;m sorry: I can&#8217;t remove that requirement. Requirements never change and are never removed. You COULD add a new requirement that says that it is now impossible to buy sprockets, but that would put the total requrement set into a state of contradiction. Therefore you must continue to sell sprockets.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrey Khavryuchenko</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-271</link>
		<dc:creator>Andrey Khavryuchenko</dc:creator>
		<pubDate>Sun, 24 Dec 2006 10:22:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-271</guid>
		<description>While, formally, you're correct, I wonder what's the point in the distinction between "software requirements changed" and "we need to develop a similar product with slightly different features"?

As Dave pointed above, softdev clients don't think in terms of software (or lambdas).  They think in terms of "business problem" that requires a specific "business solution".  When the business solution, they envision, includes a software component, they go to, say, &lt;a href="http://www.kds.com.ua" rel="nofollow"&gt;us&lt;/a&gt; and ask for a development service.  When a business problem (or &lt;em&gt;understanding&lt;/em&gt; of a business problem, which are quite the same things) changes (e.g. the solution is thought up in more details) then they ask to develop a little bit different.

So, I don't see quite much of added benefit in your distinction.  Where I can use it?  In communication with a client?  They simply won't understand us.  Besides we already invested much effor explaining that if they request something new or changed, the whole development plan (and budget, of course) should be changed.

Use to communicate within a team?  We already know that what we develop is a seria of snapshots from requirements to the tests to the code.  If something changes, we have to make a new snapthot(s)

Please, explain?</description>
		<content:encoded><![CDATA[<p>While, formally, you&#8217;re correct, I wonder what&#8217;s the point in the distinction between &#8220;software requirements changed&#8221; and &#8220;we need to develop a similar product with slightly different features&#8221;?</p>
<p>As Dave pointed above, softdev clients don&#8217;t think in terms of software (or lambdas).  They think in terms of &#8220;business problem&#8221; that requires a specific &#8220;business solution&#8221;.  When the business solution, they envision, includes a software component, they go to, say, <a href="http://www.kds.com.ua" onclick="javascript:pageTracker._trackPageview('/outbound/comment/www.kds.com.ua');" rel="nofollow">us</a> and ask for a development service.  When a business problem (or <em>understanding</em> of a business problem, which are quite the same things) changes (e.g. the solution is thought up in more details) then they ask to develop a little bit different.</p>
<p>So, I don&#8217;t see quite much of added benefit in your distinction.  Where I can use it?  In communication with a client?  They simply won&#8217;t understand us.  Besides we already invested much effor explaining that if they request something new or changed, the whole development plan (and budget, of course) should be changed.</p>
<p>Use to communicate within a team?  We already know that what we develop is a seria of snapshots from requirements to the tests to the code.  If something changes, we have to make a new snapthot(s)</p>
<p>Please, explain?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Neuer</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-270</link>
		<dc:creator>Dave Neuer</dc:creator>
		<pubDate>Thu, 21 Dec 2006 22:58:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-270</guid>
		<description>You should really just write an article about referential transparency and how functional languages are better, instead of dressing it up in confused philosophical arguments. When we say "the requirements changed" we don't mean "the definition of the concept 'sum two integers and add four' changed" we mean the client no longer thinks that concept applies to their business situation, and please make sure that computation is not performed for them.</description>
		<content:encoded><![CDATA[<p>You should really just write an article about referential transparency and how functional languages are better, instead of dressing it up in confused philosophical arguments. When we say &#8220;the requirements changed&#8221; we don&#8217;t mean &#8220;the definition of the concept &#8217;sum two integers and add four&#8217; changed&#8221; we mean the client no longer thinks that concept applies to their business situation, and please make sure that computation is not performed for them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-269</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Fri, 15 Dec 2006 22:14:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-269</guid>
		<description>I agree, except even more so. If you have broken the contract with your clients, then it is not "just a new library", it is entirely new software. Did you know that Java 1.5 is an entirely new programming language? :)

Your qualification of "more seriously" is not necessary - it already &lt;b&gt;is&lt;/b&gt; serious. The problem is defining the bounds of the client contract. In a leaky language like Java, it is entirely possible that renaming a private class field breaks contract - since clients are free to perform logic based on that name. Even changing a class from non-final to final or adding a different return value for some given inputs e.g. throwing an exception.

Your perspective of "new library" - that I assume aligns with my existing definition of "new software" - is an extremely important aspect of writing software across the axis time. This lack of decomposability of the "software", when written in poor languages, is exactly the reason why there is now a general tendency towards more powerful (no not Lisp PG! (or Ruby/Python for that matter)) programming languages for expressing that software. I just hope that this tendency reaches a large extreme before one of the big players come along and halts it (as they do) with something like F#.</description>
		<content:encoded><![CDATA[<p>I agree, except even more so. If you have broken the contract with your clients, then it is not &#8220;just a new library&#8221;, it is entirely new software. Did you know that Java 1.5 is an entirely new programming language? <img src='http://blog.tmorris.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Your qualification of &#8220;more seriously&#8221; is not necessary - it already <b>is</b> serious. The problem is defining the bounds of the client contract. In a leaky language like Java, it is entirely possible that renaming a private class field breaks contract - since clients are free to perform logic based on that name. Even changing a class from non-final to final or adding a different return value for some given inputs e.g. throwing an exception.</p>
<p>Your perspective of &#8220;new library&#8221; - that I assume aligns with my existing definition of &#8220;new software&#8221; - is an extremely important aspect of writing software across the axis time. This lack of decomposability of the &#8220;software&#8221;, when written in poor languages, is exactly the reason why there is now a general tendency towards more powerful (no not Lisp PG! (or Ruby/Python for that matter)) programming languages for expressing that software. I just hope that this tendency reaches a large extreme before one of the big players come along and halts it (as they do) with something like F#.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ricky Clarkson</title>
		<link>http://blog.tmorris.net/software-requirements-do-not-change/#comment-268</link>
		<dc:creator>Ricky Clarkson</dc:creator>
		<pubDate>Fri, 15 Dec 2006 01:11:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/software-requirements-do-not-change/#comment-268</guid>
		<description>"you have broken your contract to all clients of your software"

Using the same logic back at you, the clients should not assume that a new version of your software is compatible with an old version - it is not just a new version, it is a new library.  It is entirely coincidental that much of it has remained compatible.

More seriously, it'd be interesting if it was practical to use more than one version of a library simultaneously from the same codebase - I expect with the OSGi model it is.</description>
		<content:encoded><![CDATA[<p>&#8220;you have broken your contract to all clients of your software&#8221;</p>
<p>Using the same logic back at you, the clients should not assume that a new version of your software is compatible with an old version - it is not just a new version, it is a new library.  It is entirely coincidental that much of it has remained compatible.</p>
<p>More seriously, it&#8217;d be interesting if it was practical to use more than one version of a library simultaneously from the same codebase - I expect with the OSGi model it is.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
