<?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>Enjoy Chaos &#187; agile</title>
	<atom:link href="http://blog.thiagoarrais.com/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thiagoarrais.com</link>
	<description>Thoughts, ideas and useless ranting about software development and technology</description>
	<lastBuildDate>Sat, 29 Aug 2009 16:38:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Fixing software into existence</title>
		<link>http://blog.thiagoarrais.com/2009/08/29/fixing-software-into-existence/</link>
		<comments>http://blog.thiagoarrais.com/2009/08/29/fixing-software-into-existence/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 16:38:13 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com/?p=23</guid>
		<description><![CDATA[Software always needs fixing. Always. As soon as the first line of code gets written, you&#8217;re already in maintenance mode. You may even call it development, but you&#8217;re really doing maintenance. You are always trying to fix something. When you add the second line, you need to make sure the first one still works as [...]]]></description>
			<content:encoded><![CDATA[<p>Software always needs fixing. Always. As soon as the first line of code gets written, you&#8217;re already in maintenance mode. You may even call it development, but you&#8217;re really doing maintenance. You are always trying to fix something. When you add the second line, you need to make sure the first one still works as intended and the software still solves the problem it was built to solve.</p>
<p>If we take a closer look, we&#8217;ll see that even the first line gets written to fix something: the fact that you don&#8217;t have anything to show to the customer or to experiment with yet. You write the first line to fix that problem. Being the good dedicated programmer that you are, you know that people don&#8217;t really have the slightest idea of what they need until they see something that they certainly <em>don&#8217;t</em> need. That is just the first thing that needs fixing and it&#8217;s all downhill from there. If you keep fixing stuff that is &#8220;broken&#8221; in your software, you will always have something to show or deliver when needed. Namely, that previous version without the fix that is admittedly broken for some definition of broken, but is also done for some other definition of done.</p>
<p>So the way to build something is to start with the most simple user need and move forward from there. The user cannot sign up for an account? Fix that! There is no a way to enter data? Fix that! Your website doesn&#8217;t talk to that related one that most of your users use? Fix that!</p>
<p>Repeat until you have a fairly usable solution and you&#8217;ll have successfully fixed a piece of software into existence. The goal here is <em>not</em> to cowboy code your way out of everything, but to have something working that can be shown to anyone interested at any given time. When you have something to fix, you have something to show, you have something to help people figure out what they <em>don&#8217;t</em> want.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com/2009/08/29/fixing-software-into-existence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code doesn&#8217;t matter</title>
		<link>http://blog.thiagoarrais.com/2008/10/06/code-doesnt-matter/</link>
		<comments>http://blog.thiagoarrais.com/2008/10/06/code-doesnt-matter/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 03:17:14 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com/2008/10/06/code-doesnt-matter/</guid>
		<description><![CDATA[Have you ever noticed that making code beautiful isn&#8217;t that hard once you know what it is supposed to do? When the problem is well defined, there is very little difficulty in changing the solution to be more elegant. Take the problem of sorting, for instance. There are all sorts of elegant solutions built over [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever noticed that making code beautiful isn&#8217;t <em>that</em> hard once you know what it is supposed to do? When the problem is well defined, there is very little difficulty in changing the solution to be more elegant. Take the problem of sorting, for instance. There are all sorts of elegant solutions built over many years for sorting just because the problem is pretty simple and well understood. But try entering into the realm of business apps instead and you&#8217;ll see a lot of ugly code.</p>
<p>Business apps programmers can&#8217;t make their code beautiful because most of the time they don&#8217;t really know what to build. Sure they need to study a lot about coding and master the latest coding techniques, but they don&#8217;t stand a chance if they don&#8217;t know what they&#8217;re building.</p>
<p>The real and hard work in software development is figuring out what the hell the customer needs, not programming the computer to solve it. If you want to use an waterfallish word, the hard work is figuring out the <em>requirements</em>. In fact the whole Agile thing is about getting the needs right. That&#8217;s why we strive to deliver early. That&#8217;s why we work iteratively. That&#8217;s why we value <em>working software</em>. After all, software is not <em>working</em> software unless the requirements are right.</p>
<p>By the way, working software is an interesting topic in itself. You can try to understand the customer needs using schematics, diagrams, use case documents or even with a cardboard poster hanging in the development team room.</p>
<p>Or you could use good old working software&#8230;</p>
<p>When the software is minimally ready &#8212; when it is at least working &#8212; customers can see what is does and ask for changes where needed. They can&#8217;t do that with use cases because they can&#8217;t see use cases working. It can even be worse: they can look at the schematics (that don&#8217;t work either) and think that it will work in a different way than what the team really meant.</p>
<p>Plain old software can be seen as a requirement gathering tool too. We fortunately are writing computer software, not <a href="http://jamesshore.com/Blog/That-Damned-Construction-Analogy.html">building schematics</a>. We don&#8217;t need to wait for the building to get done, we can run a compiler and our programs are ready to run. Civil engineers cannot tear their buildings apart and start all over again, so they invest a lot of time in getting the specs right before they start building. Programmers can destroy their buildings and rebuild them again as easily as saying <code>make clean &#038;&#038; make</code>. Instead of wasting our time with dead documents, we can work with the real living thing. That&#8217;s why they call it <u>soft</u>ware, exactly because it&#8217;s pretty easy to change. Not taking advantage from this flexibility is just dumb.</p>
<p>The logic goes pretty much like that. Code doesn&#8217;t matter because the most valuable work is the requirements work. Requirements work is really about figuring out customer needs. Figuring out customer needs is much easier when you have working software to show them. Working software needs code. Thus, code matters.</p>
<p>Well, code alone doesn&#8217;t actually matter, but it is your most valuable tool for understanding requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com/2008/10/06/code-doesnt-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
