<?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: You shall not compromise quality !</title>
	<atom:link href="http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/feed/" rel="self" type="application/rss+xml" />
	<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/</link>
	<description>Notes on software development</description>
	<pubDate>Tue, 06 Jan 2009 01:32:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: Denis</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-201</link>
		<dc:creator>Denis</dc:creator>
		<pubDate>Tue, 08 Jan 2008 04:34:22 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-201</guid>
		<description>Hering,

I think the article does not fully convey what I mean by quality. &lt;a href="http://digitalbrikes.com/onebrikeatatime/2007/12/06/a-quick-analogy-to-explain-quality/" rel="nofollow"&gt;This one&lt;/a&gt; was the result of a chat with Cesar to try to surface what I really mean by quality insurance.

Also, I fully agree with you on the achieved quality and the difficulty of having quality requirements. Which in turn is why I believe Agile methodologies are the best practical approach in many cases. In a few others formal methods help.</description>
		<content:encoded><![CDATA[<p>Hering,</p>
<p>I think the article does not fully convey what I mean by quality. <a href="http://digitalbrikes.com/onebrikeatatime/2007/12/06/a-quick-analogy-to-explain-quality/" rel="nofollow">This one</a> was the result of a chat with Cesar to try to surface what I really mean by quality insurance.</p>
<p>Also, I fully agree with you on the achieved quality and the difficulty of having quality requirements. Which in turn is why I believe Agile methodologies are the best practical approach in many cases. In a few others formal methods help.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Hering Cheng</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-122</link>
		<dc:creator>Hering Cheng</dc:creator>
		<pubDate>Fri, 21 Dec 2007 19:24:32 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-122</guid>
		<description>I used to think like Denis, in the sense of being a perfectionist in the software I build.  Over the years I have learned, as Cesar points out, that my software is not the center of the little universe I am in.

More importantly, software quality is a continuum, like the line of real numbers, and one can only define what sufficient quality is.  If one is a true perfectionist of quality, then one must refuse to work on a project unless formal methods are applied and the entire program is mechanically derived from a specification written in predicate logic (or something of equivalent power), regardless of whether one practices waterfall or agile or anything in between.

In the discussion above, the word "guarantee" is used in a number of places, but I wonder if even the perfectionists can "guarantee" anything -- even when formal methods are used.  You see, the initial specification I mentioned above, even thought it elegantly summarizes the requirement precisely, may be in error.   There is no formal way to prove that this spec meets the requirement.  To do that, the requirement will have to be specified rigorously, and then how does one prove that it is what is in users' heads?

In summary, I am in general agreement with Cesar that one must look at the practicality of achieving high quality, this level of quality differs from one person to another, even among perfectionists.</description>
		<content:encoded><![CDATA[<p>I used to think like Denis, in the sense of being a perfectionist in the software I build.  Over the years I have learned, as Cesar points out, that my software is not the center of the little universe I am in.</p>
<p>More importantly, software quality is a continuum, like the line of real numbers, and one can only define what sufficient quality is.  If one is a true perfectionist of quality, then one must refuse to work on a project unless formal methods are applied and the entire program is mechanically derived from a specification written in predicate logic (or something of equivalent power), regardless of whether one practices waterfall or agile or anything in between.</p>
<p>In the discussion above, the word &#8220;guarantee&#8221; is used in a number of places, but I wonder if even the perfectionists can &#8220;guarantee&#8221; anything &#8212; even when formal methods are used.  You see, the initial specification I mentioned above, even thought it elegantly summarizes the requirement precisely, may be in error.   There is no formal way to prove that this spec meets the requirement.  To do that, the requirement will have to be specified rigorously, and then how does one prove that it is what is in users&#8217; heads?</p>
<p>In summary, I am in general agreement with Cesar that one must look at the practicality of achieving high quality, this level of quality differs from one person to another, even among perfectionists.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Denis</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-45</link>
		<dc:creator>Denis</dc:creator>
		<pubDate>Thu, 06 Dec 2007 05:36:32 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-45</guid>
		<description>Cesar, the description of the system shows that the only quality attribute is the quantity of water delivered. So how do you guarantee that, despite all the leaks enough (or at least some) poisoned water arrives in the village ?

Compromising quality in this case means that you are prepared to lay down pipes that will not deliver enough (or any) water when you could have delivered pipes that delivered water by applying best pratices.</description>
		<content:encoded><![CDATA[<p>Cesar, the description of the system shows that the only quality attribute is the quantity of water delivered. So how do you guarantee that, despite all the leaks enough (or at least some) poisoned water arrives in the village ?</p>
<p>Compromising quality in this case means that you are prepared to lay down pipes that will not deliver enough (or any) water when you could have delivered pipes that delivered water by applying best pratices.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: One brike at a time &#187; Blog Archive &#187; A quick analogy to explain quality</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-44</link>
		<dc:creator>One brike at a time &#187; Blog Archive &#187; A quick analogy to explain quality</dc:creator>
		<pubDate>Thu, 06 Dec 2007 05:22:40 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-44</guid>
		<description>[...] Agile        &#171; You shall not compromise quality ! [...]</description>
		<content:encoded><![CDATA[<p>[...] Agile        &laquo; You shall not compromise quality ! [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cesar</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-42</link>
		<dc:creator>Cesar</dc:creator>
		<pubDate>Wed, 05 Dec 2007 21:33:13 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-42</guid>
		<description>I may have overloaded the term "quality" but in my examples the point is that quality is a scale. It takes longer to deliver higher quality so I fail to see how my assumption is flawed. I agree with your other factors affecting time to market.

The trader, the client and the developer may have expected and been used to a minimum quality level and this was not met. However, neither quality nor in fact the software itself were the common goal of the project. The goal was to deliver the structured product. Another (implicit) point is that I have seen some software developers behave as if the center of every project is the software, and failing to adapt when it is not.

The customer (i.e. the trader) expressed some requirements which needed to be delivered, but also some guiding principles that the project had to meet. Principles were more important than requirements, and they were things like "speed to market" and "focus on the outcome". There was also a drop-dead date.

The initial delivery was barely fit for purpose. The trader was barely able to use the software and some of the requests-for-price were lost. The client was barely able to construct an order and experienced frequent errors and timeouts. Often, at least at the beginning, the communication reverted to the telephone or email, and the processing to excel. Both trader and client were happy though, because the transaction went through and they accepted this overhead not because they were used to buggy code but because they acknowledged that their minimum standards and stated requirements could not have been met in the time they provided even compromising quality. They also had control over prioritizing quality improvements or additional structured products or allowing other traders to process the existing product.

I may not sway you but I think I'm trying to express that there are environments and circumstances where saying "you shall not compromise quality" is too inflexible. Here is an extreme (and imperfect) analogy I will probably regret. How about a project where you are building a pipe to bring water to a village? Your customers request a pipe and you know how to build pipes so you set about doing that to the quality you know you can deliver. Now imagine that because of a natural disaster, you have to get water to that village before its population starts to die. Maybe the roads are impassable, there are no helicopters available, and there is no way to get them enough water in time. Say you have three days. The only thing you might deliver in that time is a low-quality solution that leaks badly and delivers water which will poison the village, but the villagers will thank you. While you are doing this, you recruit local people on foot to take bags of medicines to combat the disease your water might bring, and bags of sterilizing tablets to treat the water and minimize this disease. You have delivered according to their priorities which placed the flow of water above the quality of the water or the quality of your pipe system. Low quality, but overall goal accomplished. You then prioritize between doing the same for another village or improving the quality of the water and the pipe system for this village.</description>
		<content:encoded><![CDATA[<p>I may have overloaded the term &#8220;quality&#8221; but in my examples the point is that quality is a scale. It takes longer to deliver higher quality so I fail to see how my assumption is flawed. I agree with your other factors affecting time to market.</p>
<p>The trader, the client and the developer may have expected and been used to a minimum quality level and this was not met. However, neither quality nor in fact the software itself were the common goal of the project. The goal was to deliver the structured product. Another (implicit) point is that I have seen some software developers behave as if the center of every project is the software, and failing to adapt when it is not.</p>
<p>The customer (i.e. the trader) expressed some requirements which needed to be delivered, but also some guiding principles that the project had to meet. Principles were more important than requirements, and they were things like &#8220;speed to market&#8221; and &#8220;focus on the outcome&#8221;. There was also a drop-dead date.</p>
<p>The initial delivery was barely fit for purpose. The trader was barely able to use the software and some of the requests-for-price were lost. The client was barely able to construct an order and experienced frequent errors and timeouts. Often, at least at the beginning, the communication reverted to the telephone or email, and the processing to excel. Both trader and client were happy though, because the transaction went through and they accepted this overhead not because they were used to buggy code but because they acknowledged that their minimum standards and stated requirements could not have been met in the time they provided even compromising quality. They also had control over prioritizing quality improvements or additional structured products or allowing other traders to process the existing product.</p>
<p>I may not sway you but I think I&#8217;m trying to express that there are environments and circumstances where saying &#8220;you shall not compromise quality&#8221; is too inflexible. Here is an extreme (and imperfect) analogy I will probably regret. How about a project where you are building a pipe to bring water to a village? Your customers request a pipe and you know how to build pipes so you set about doing that to the quality you know you can deliver. Now imagine that because of a natural disaster, you have to get water to that village before its population starts to die. Maybe the roads are impassable, there are no helicopters available, and there is no way to get them enough water in time. Say you have three days. The only thing you might deliver in that time is a low-quality solution that leaks badly and delivers water which will poison the village, but the villagers will thank you. While you are doing this, you recruit local people on foot to take bags of medicines to combat the disease your water might bring, and bags of sterilizing tablets to treat the water and minimize this disease. You have delivered according to their priorities which placed the flow of water above the quality of the water or the quality of your pipe system. Low quality, but overall goal accomplished. You then prioritize between doing the same for another village or improving the quality of the water and the pipe system for this village.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Denis</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-36</link>
		<dc:creator>Denis</dc:creator>
		<pubDate>Wed, 05 Dec 2007 05:11:04 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-36</guid>
		<description>Your are putting too many -ilities (scalability, maintainability, extensibility, reuseability,...) under your understanding of quality. Quality is how close your product fits the stated requirements.

In your examples, how do you guarantee that the application you bang up satisfies its purpose ? I also specifically stated that in this kind of case, a barbarian approach may be acceptable if it is explicit.

Still my experience is that when you bang together an application that is actually useful, it pretty soon grows in size and user base and becomes very expansive to support. It is actually stuff of legend that the software that last longest in financial institution is the 'temporary' one.

Your remark is also based on the (flawed) assumption that ensuring quality lengthens the time to market. In my experience the main factors that lengthen time to market are: 
     inadequate requirements,
     inadequate tools (like building a webapp in C++),
     deploy-break-fix cycles (the barbarian qualiity insurane),
     the learning curve (new tool, architecture,...).</description>
		<content:encoded><![CDATA[<p>Your are putting too many -ilities (scalability, maintainability, extensibility, reuseability,&#8230;) under your understanding of quality. Quality is how close your product fits the stated requirements.</p>
<p>In your examples, how do you guarantee that the application you bang up satisfies its purpose ? I also specifically stated that in this kind of case, a barbarian approach may be acceptable if it is explicit.</p>
<p>Still my experience is that when you bang together an application that is actually useful, it pretty soon grows in size and user base and becomes very expansive to support. It is actually stuff of legend that the software that last longest in financial institution is the &#8216;temporary&#8217; one.</p>
<p>Your remark is also based on the (flawed) assumption that ensuring quality lengthens the time to market. In my experience the main factors that lengthen time to market are:<br />
     inadequate requirements,<br />
     inadequate tools (like building a webapp in C++),<br />
     deploy-break-fix cycles (the barbarian qualiity insurane),<br />
     the learning curve (new tool, architecture,&#8230;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cesar</title>
		<link>http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-35</link>
		<dc:creator>Cesar</dc:creator>
		<pubDate>Wed, 05 Dec 2007 00:33:36 +0000</pubDate>
		<guid isPermaLink="false">http://digitalbrikes.com/onebrikeatatime/2007/12/02/you-shall-not-compromise-quality/#comment-35</guid>
		<description>Let me start by saying that I'm interpreting this compromise on quality as separate from the skill to determine the "needs" of a client from the stated "wants". A client once asked me for a shared spreadsheet and I refused to comply because it would not solve the problem they actually had. I stated my reasons and my alternative proposal. This was grudgingly accepted and they resulting system was ultimately used across many businesses to handle thousands of trades for seven years.

Instead, I am reading this as an educated ranking of quality against other priorities. I have seen situations where a trader comes up with a new financial structured product and simply needs sufficient capability to be able to sell it to a client. Integration with the firm's systems, scalability, automation and all that other good stuff is secondary. This can be because the first one to market will typically take all the revenue for the next 18 months, and the second to market will get zero during that time.

The stated need here was for an outcome-oriented solution. In that spirit, I have seen IT and various support functions collaborate successfully in knocking together a simple web interface for the client (to see positions or net value, or even to place orders) and all of the processing behind the scenes being done manually for 6-12 month - i.e. the solution was buggy software combined with hiring x low-skilled people to do repetitive and mundane paperwork. The client valued the opportunity to trade, and cared less about having to restart his PC every time an order was placed.

Don't think that you can spend the next 6 months cleaning that up either. Now imagine that the following week another trader thinks up a new great product and that needs to be made available to the client asap...

This is my most extreme example of what you're describing and it is a situation where you're delivering well below your standards and not always  able to enhance the functionality. However, the trader is prepared to take the risks and the company makes a lot of money with each one of these. In fact just about any other way to do this would result in losing the business opportunity or the client and their future business.

Agile works well in this environment, particularly because you can "bank" the value of every iteration where you get the chance to improve the technical foundation underneath all those products. 

Where I oppose the "client veto" is where it would not be professional or ethical to allow certain choices. If the decision is made openly and with the participation of relevant groups (operations, compliance, risk, legal, audit...) then I have no issue. If the same trader attempted to put something on my queue without that involvement, I would not tolerate it and push it back or walk away.</description>
		<content:encoded><![CDATA[<p>Let me start by saying that I&#8217;m interpreting this compromise on quality as separate from the skill to determine the &#8220;needs&#8221; of a client from the stated &#8220;wants&#8221;. A client once asked me for a shared spreadsheet and I refused to comply because it would not solve the problem they actually had. I stated my reasons and my alternative proposal. This was grudgingly accepted and they resulting system was ultimately used across many businesses to handle thousands of trades for seven years.</p>
<p>Instead, I am reading this as an educated ranking of quality against other priorities. I have seen situations where a trader comes up with a new financial structured product and simply needs sufficient capability to be able to sell it to a client. Integration with the firm&#8217;s systems, scalability, automation and all that other good stuff is secondary. This can be because the first one to market will typically take all the revenue for the next 18 months, and the second to market will get zero during that time.</p>
<p>The stated need here was for an outcome-oriented solution. In that spirit, I have seen IT and various support functions collaborate successfully in knocking together a simple web interface for the client (to see positions or net value, or even to place orders) and all of the processing behind the scenes being done manually for 6-12 month - i.e. the solution was buggy software combined with hiring x low-skilled people to do repetitive and mundane paperwork. The client valued the opportunity to trade, and cared less about having to restart his PC every time an order was placed.</p>
<p>Don&#8217;t think that you can spend the next 6 months cleaning that up either. Now imagine that the following week another trader thinks up a new great product and that needs to be made available to the client asap&#8230;</p>
<p>This is my most extreme example of what you&#8217;re describing and it is a situation where you&#8217;re delivering well below your standards and not always  able to enhance the functionality. However, the trader is prepared to take the risks and the company makes a lot of money with each one of these. In fact just about any other way to do this would result in losing the business opportunity or the client and their future business.</p>
<p>Agile works well in this environment, particularly because you can &#8220;bank&#8221; the value of every iteration where you get the chance to improve the technical foundation underneath all those products. </p>
<p>Where I oppose the &#8220;client veto&#8221; is where it would not be professional or ethical to allow certain choices. If the decision is made openly and with the participation of relevant groups (operations, compliance, risk, legal, audit&#8230;) then I have no issue. If the same trader attempted to put something on my queue without that involvement, I would not tolerate it and push it back or walk away.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
