<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code for Concinnity &#187; Agile</title>
	<atom:link href="http://cfc.kizzx2.com/index.php/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://cfc.kizzx2.com</link>
	<description>beautiful and elegant solutions</description>
	<lastBuildDate>Fri, 10 Feb 2012 13:24:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Start doing Requirement Specifications &#8212; start programming in English!</title>
		<link>http://cfc.kizzx2.com/index.php/start-doing-requirement-specifications-start-programming-in-english/</link>
		<comments>http://cfc.kizzx2.com/index.php/start-doing-requirement-specifications-start-programming-in-english/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 12:41:32 +0000</pubDate>
		<dc:creator>kizzx2</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[project-management]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[specification]]></category>

		<guid isPermaLink="false">http://cfc.kizzx2.com/?p=139</guid>
		<description><![CDATA[As a freelance developer, I&#8217;ve always thought that formal requirements specifications are just too much overhead. Sure, big projects in big corporations will have to ensure the budget and time-frame very accurately using rigorous methods like IBM&#8217;s RUP or the ISO approved Function Point Analysis, etc. But for a one-man show, I mean, I could [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="margin-left: 10px; float: right;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fstart-doing-requirement-specifications-start-programming-in-english%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fstart-doing-requirement-specifications-start-programming-in-english%2F&amp;source=kizzx2&amp;style=normal&amp;b=2" height="61" width="50" />
			</a>
		</div><p>As a freelance developer, I&#8217;ve always thought that formal requirements specifications are just too much overhead. Sure, big projects in big corporations will have to ensure the budget and time-frame very accurately using rigorous methods like IBM&#8217;s <a href="http://www-01.ibm.com/software/awdtools/rup/">RUP</a> or the ISO approved <a href="http://en.wikipedia.org/wiki/Function_point">Function Point Analysis</a>, etc. But for a one-man show, I mean, I could have got the whole project done in the time I had to prepare the specifications, right?</p>

<h2>Wrong</h2>

<p>Programmers have always notoriously over-estimated how fast they can write code. Of course, we enjoy writing code and time passes by just so quickly, but it doesn&#8217;t mean writing code is as really as efficient as writing English. Many small teams shy away from formal specifications because they think they could have written the damn code by the time they&#8217;ve got the specification down.</p>

<p>I&#8217;ve always believed that, as much as I believed I&#8217;m a programmer with adequate skill, until a recent revelation hit me:</p>

<h2>Writing the program is, in itself, a DAMN SPECIFICATION PROCESS</h2>

<p>That&#8217;s right. Instead of confirming with the customer what the requirements are about in clear concise English, we somehow feel better describing the problem to a computer using programming languages. We have advanced through several decades and have lived past the dark eras of Assembly programming to higher level programming languages like Ruby, Python and idioms like functional programming. Why did we choose to move away from low level languages like Assembly and C? Because higher level languages are inherently more expressive &#8212; we can say much more with fewer words in a higher level language. In other words, high level languages allow us to program faster.</p>

<p>And what&#8217;s the highest level language of all?</p>

<p><strong>English!!</strong></p>

<p>That&#8217;s right. Surprise.</p>

<h2>But computers can&#8217;t read English, doesn&#8217;t that mean duplication? We now need to define it in two sets of languages.</h2>

<p>Yeah, and that upsets my <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> spirit a lot.</p>

<p>In an ideal world, we could understand the requirements 100% accurately, code it once in the programming language of our choice (Ruby anyone?), deliver the product and bring home the bacon. <em>Everybody is happy</em></p>

<p>But how often does that ideal scenario happen?</p>

<h2>The ideal never happens. Let&#8217;s face it, we need to rewrite the damn code anyway.</h2>

<p>That&#8217;s right. Unless you are an uber skillz haxx0r incarnate, I believe you don&#8217;t expect your program to work totally correctly the first time you run it, right? For any programs that more than 10 lines long, I&#8217;m it takes at least a couple of retries at least to get it compile without errors. Even if you get it to work correctly, how many times have you written a program and say to yourself &#8220;Yeah, this is the perfect solution to the problem&#8221;?</p>

<p>That is, even after you get it to work technically correctly, you&#8217;ll realize there are some ways to improve it, some quirks that really shouldn&#8217;t be there. It&#8217;s called &#8220;I know it when I see it.&#8221;</p>

<h2>See? So much for DRY, we need to rewrite it over and over. It&#8217;s our damn fate.</h2>

<p>If you have to throw away &#8220;code,&#8221; would you rather throw away a couple of English descriptions plus some wireframes, or a full set of engineered objects?</p>

<p>Many <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> proponents advocate writing code as soon as possible. Ironically, it&#8217;s pretty stupid once you think about the pseudo-math behind it:</p>

<pre><code>Let the total number of iterations needed be R
Let the amount of time needed for each English iteration be E
Let the amount of time needed for each Coding iteration be C

Obviously,
    R ≥ 1
    C ≥ 1

For total amount of time needed T:
    T = (R - 1)C + RN
        where N is either E or C

For example, in an ideal case, we do no specification,
just code it once and everything goes fine:
    T = C

Scenario 2: the first version gets rejected by client since we
misunderstood the requirements (or they think we
misunderstood, whatever). It took 3 times of coding:
    T = 3C

Scenario 3: we made a detailed specification, client realized
they mispresented the requirements (notice how the client seem
to understand their own faults when you just tell them in English
instead of code). It still took 3 iterations:
    T = 2E + C

Obviously, E &lt; C. Which means we've saved time!
</code></pre>

<p>You see, <strong>the only case</strong> where writing the detailed specification would &#8220;waste&#8221; time is when you get everything right the first time. Honestly, how often does that happen?</p>

<h2>So what should I do?</h2>

<p>Should I go out and read on all rigorous processes out there? Probably, I went down that route and it was quite fun to learn each of them. But ultimately, I must also acknowledge the huge overheads those processes incur. And enforcing the client to go through rigid processes don&#8217;t always work without a full team of experienced lawyers and contract writers.</p>

<p>After a lot of trial and errors, the approach I&#8217;m adopting now is to have as detailed specification as possible before writing any code. It doesn&#8217;t necessarily have to be 100% accurate UML diagrams with spell-checked use cases. I find that just a set of PowerPoint slides, annotated wireframes along with some rough use case scenarios seem to work fine. I try to avoid having charts because people tend to misinterpret quite often. It&#8217;s the right mix of flexibility and details that maximizes my productivity.</p>
]]></content:encoded>
			<wfw:commentRss>http://cfc.kizzx2.com/index.php/start-doing-requirement-specifications-start-programming-in-english/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Requirements and Management</title>
		<link>http://cfc.kizzx2.com/index.php/software-requirements-and-management/</link>
		<comments>http://cfc.kizzx2.com/index.php/software-requirements-and-management/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 19:21:22 +0000</pubDate>
		<dc:creator>kizzx2</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software management]]></category>

		<guid isPermaLink="false">http://cfc.kizzx2.com/?p=44</guid>
		<description><![CDATA[I&#8217;ve been reading about software project management, agile practices and stuffs for several months now, almost becoming the metaphorical PM that&#8217;s read 20 books on agile. Came across this post that&#8217;s hands down the most true, funniest description about software management I&#8217;ve seen. A man is flying in a hot air balloon and realizes he [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="margin-left: 10px; float: right;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fsoftware-requirements-and-management%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fsoftware-requirements-and-management%2F&amp;source=kizzx2&amp;style=normal&amp;b=2" height="61" width="50" />
			</a>
		</div><p>I&#8217;ve been reading about software project management, agile practices and stuffs for several months now, almost becoming the metaphorical PM that&#8217;s read 20 books on agile. Came across <a href="http://hubpages.com/hub/Software_Requirements">this post</a> that&#8217;s hands down the most true, funniest description about software management I&#8217;ve seen.</p>

<p><img src="http://cfc.kizzx2.com/wp-content/uploads/2009/06/68408_f520.jpg" alt="Software Requirements Reality" title="Software Requirements Reality" width="520" height="390" class="size-full wp-image-45" /></p>

<blockquote>
A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: &#8220;Excuse me, can you tell me where I am?&#8221;

The man below says: &#8220;Yes you&#8217;re in a hot air balloon, hovering 30 feet above this field.&#8221;

&#8220;You must be a software developer,&#8221; says the balloonist.

&#8220;I am,&#8221; replies the man. &#8220;How did you know?&#8221;

&#8220;Well,&#8221; says the balloonist, &#8220;everything you have told me is technically correct, but it&#8217;s of no use to anyone.&#8221;

The man below says, &#8220;You must work in business as a manager.&#8221; &#8220;I do,&#8221; replies the balloonist, &#8220;but how did you know?&#8221;

&#8220;Well,&#8221; says the man, &#8220;you don&#8217;t know where you are or where you are going, but you expect me to be able to help. You&#8217;re in the same position you were before we met but now it&#8217;s my fault.&#8221; 
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://cfc.kizzx2.com/index.php/software-requirements-and-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile methods &#8212; too good to be true?</title>
		<link>http://cfc.kizzx2.com/index.php/agile-methods-too-good-to-be-true/</link>
		<comments>http://cfc.kizzx2.com/index.php/agile-methods-too-good-to-be-true/#comments</comments>
		<pubDate>Tue, 26 May 2009 18:28:27 +0000</pubDate>
		<dc:creator>kizzx2</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://cfc.kizzx2.com/?p=35</guid>
		<description><![CDATA[There has been a lot of fuss about agile methods &#8212; XP, Scrum in this decade. My experience is primarily with fixed-price so I can&#8217;t speak for myself the effectiveness of agile methods. On the other hand, what I do feel is how sucks when the client is firing change requests: often trying to get [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="margin-left: 10px; float: right;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fagile-methods-too-good-to-be-true%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcfc.kizzx2.com%2Findex.php%2Fagile-methods-too-good-to-be-true%2F&amp;source=kizzx2&amp;style=normal&amp;b=2" height="61" width="50" />
			</a>
		</div><p>There has been a lot of fuss about agile methods &#8212; XP, Scrum in this decade. My experience is primarily with fixed-price so I can&#8217;t speak for myself the effectiveness of agile methods. On the other hand, what I <strong>do</strong> feel is how sucks when the client is firing change requests: often trying to get it free.</p>

<p>I recently worked with a client who just <em>refuses</em> to write any detailed specs. When I pressed him, he put up <em>agile</em> to his defense.</p>

<p>Recently read the book <a href="http://www.amazon.com/Extreme-Programming-Refactored-Case-Against/dp/1590590961">Extreme Programming Refactored</a>, which sums up my thoughts pretty well:</p>

<blockquote>
In the real world it’s called making your mind up, having a clue. Yet XP wants to stand all this on its head and encourage ever-changing directions and goals.
</blockquote>

<p>Yeah, it&#8217;s called making your mind up, adults.</p>
]]></content:encoded>
			<wfw:commentRss>http://cfc.kizzx2.com/index.php/agile-methods-too-good-to-be-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

