<?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>Photoquarium Blog &#187; Software Engineering</title>
	<atom:link href="http://blog.photoquarium.com/category/tech/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.photoquarium.com</link>
	<description>A bit of everything and anything that I find interesting</description>
	<lastBuildDate>Fri, 06 Feb 2009 18:37:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Agilility where order and chaos meet.</title>
		<link>http://blog.photoquarium.com/2009/02/06/agilility-where-order-and-chaos-meet/</link>
		<comments>http://blog.photoquarium.com/2009/02/06/agilility-where-order-and-chaos-meet/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:37:52 +0000</pubDate>
		<dc:creator>Lucus Crawford</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[adaptation]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[complexity science]]></category>
		<category><![CDATA[game theory]]></category>

		<guid isPermaLink="false">http://blog.photoquarium.com/2009/02/06/agilility-where-order-and-chaos-meet/</guid>
		<description><![CDATA[Awesome, Aw &#8230; wait for it &#8230; wait for it &#8230;. SOME
I don&#8217;t think I could do justice to this post by summarizing it so I won&#8217;t.
If you have a few minutes to read this post I really encourage you to do so. Also post your comments here about the article, I would love to [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome, Aw &#8230; wait for it &#8230; wait for it &#8230;. SOME</p>
<p>I don&#8217;t think I could do justice to this post by summarizing it so I won&#8217;t.</p>
<p>If you have a few minutes to read this post I really encourage you to do so. Also post your comments here about the article, I would love to hear everyones take on this.</p>
<p>I&#8217;m off to read a bit on &#8220;complex adaptive systems theory&#8221; and &#8220;Evolutionary Stable Strategies&#8221;.</p>
<p><a href="http://www.noop.nl/2009/02/the-decline-and-fall-of-agilists.html">http://www.noop.nl/2009/02/the-decline-and-fall-of-agilists.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.photoquarium.com/2009/02/06/agilility-where-order-and-chaos-meet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Developers and Technical Debt</title>
		<link>http://blog.photoquarium.com/2009/01/12/good-developers-and-technical-debt/</link>
		<comments>http://blog.photoquarium.com/2009/01/12/good-developers-and-technical-debt/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 22:51:39 +0000</pubDate>
		<dc:creator>Lucus Crawford</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[craptastic]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[legacy code]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[Technical Debt]]></category>

		<guid isPermaLink="false">http://blog.photoquarium.com/2009/01/12/good-developers-and-technical-debt/</guid>
		<description><![CDATA[
During one of my many discussions with James, he brought up the question &#8220;What makes a good developer?&#8221; I didn&#8217;t have any really good answers but, as most things, someone else had encountered a similar question that has given me a bit of insight. Davey Brion wrote a post on his blog ElegantCode on Ethics [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/84296325@N00/262096844/" target="_blank" title="Good Developers?"><img src="http://farm4.static.flickr.com/3241/3023355393_a7e5b6322b.jpg?v=0" style="BORDER-RIGHT: 10px; BORDER-TOP: 10px; DISPLAY: inline; FLOAT: right; MARGIN-LEFT: auto; BORDER-LEFT: 10px; WIDTH: 254px; MARGIN-RIGHT: auto; BORDER-BOTTOM: 10px; HEIGHT: 173px" height="240" width="180" alt="What could I read tonight?" border="0" class="alignleft"/></a></p>
<p>During one of my many discussions with James, he brought up the question &#8220;What makes a good developer?&#8221; I didn&#8217;t have any really good answers but, as most things, someone else had encountered a similar question that has given me a bit of insight. Davey Brion wrote a post on his blog <a href="http://elegantcode.com/">ElegantCode</a> on <a href="http://elegantcode.com/2009/01/11/ethics-in-software-development-pragmatism-over-dogmatism">Ethics In Software Development:Pragmatism Over Dogmatism</a> where he describes what he thinks is the primary goal of a developer and how writing crappy code (or maintainingcrappy code over fixing it) is counterintuitive to the goals of a developer.</p>
<blockquote><h4><em><em>A software developer&#8217;s primary goal should be to create value for the users of a system. Value can mean a lot of things here. First and foremost, it should be about things that users actually experience. Features, ease of use, performance, etc. You can get all of those with crappy code, but that leads to a situation where you won&#8217;t be able to sustain that value in the long term. A system can be very useful to its users, but if the code is in such bad shape that it can&#8217;t easily be maintained and extended with new features over time, the value of the system will slowly reduce. New features will introduce new bugs. Bug fixes will introduce new bugs. Eventually, the system starts to collapse under its own rot and the dreaded rewrite commences. Nobody really wants this, do they? If you write good, clean code from the beginning, you can usually avoid these problems.</em></em></h4>
</blockquote>
<p> <span id="more-22"></span>
<p>This is a great standard to develop by and a great answer to Jame&#8217;s question. If we create good code that is clean and easily maintainable the system will not only satisfy our users but also our bosses. The users will have that system that is fast, user friendly and issues can be dealt with quickly and confidently, while the bosses will like the fact that it is not a land mine of issues that always have to be circumvented whenever something needs to be fixed and you won&#8217;t cringe every time you have to step into the code base to fix something. Good clean code is a great measurement of a good developer but how is it ultimately measured? I will leave that question for you guys to help answer in the comments.</p>
<p>But how do we keep the code base clean and maintainable, every issues potential fix has risk to be weighted and sometimes &#8220;fixing it the right way&#8221; has to much potential of breaking other stuff so you opt for the simpler &#8220;hacky&#8221; solution. This hacky solution is not wrong it is just what needed to be done at the moment to alleviate the risk. But you have to be discipline enough to fix it when the time permits, maybe during your next iteration or release cycle. You should be adding a case to your bug tracking software right away on the correct fix so it can be put into your backlog and at least it is visible and can be prioritized accordingly. If you don&#8217;t have this visibility I will guarantee you that the right fix will be lost and never implemented and you will eventually end up with crappy code.</p>
<p>As you can see having crappy code and leaving it will just keep the technical debt rising and eventually the system will become of no value to the customer/user since any change or bug that needs to be implemented has more potential of harm then good. So how do we fix this application that is already in such a craptastic state? I would suggest that we take a parallel road that we did to get it here in the first place. Slow and steady.</p>
<p>As in my other article <a href="http://blog.int.pason.com/?p=162">Fix it or rewrite it</a>, I would not go suggest rewriting the whole application. Instead we should take a slow road that will chip away at all the technical debt we have incurred by being undisciplined. There might have to be some big leaps in the code, and also some that may not be visible to the customer but eventually everything will be visible since they will get a better product and better support.</p>
<p>I hope you have caught on that I believe a good developer is a discipline developer, I don&#8217;t think that you can say a good developer always fixes or codes something &#8220;the right way&#8221;, since each situation is unique and &#8220;the right way&#8221; changes all the time. I would say a good developer does the job that needs to be done but has the discipline to know when a solution is just a stop gap and makes it visible enough that the correct solution can be implemented when time and resources permit. Also a good developer should never allow the application they are working on get to that craptastic state they should always bring the technical debt to the surface and making it visible and helping improve the application are working on. Even if it isn&#8217;t something that they haven&#8217;t done themselves. Ok enough of my preaching.</p>
<p>ps. That cute kid is <a href="http://www.flickr.com/photos/jbirchall/">James Birchall&#8217;s</a> son from his flickr account.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.photoquarium.com/2009/01/12/good-developers-and-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix it or rewrite it &#8230; That is the question!</title>
		<link>http://blog.photoquarium.com/2009/01/09/fix-it-or-rewrite-it-that-is-the-question/</link>
		<comments>http://blog.photoquarium.com/2009/01/09/fix-it-or-rewrite-it-that-is-the-question/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 20:40:59 +0000</pubDate>
		<dc:creator>Lucus Crawford</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[green field]]></category>
		<category><![CDATA[legacy code]]></category>
		<category><![CDATA[maintenance]]></category>

		<guid isPermaLink="false">http://blog.photoquarium.com/2009/01/09/fix-it-or-rewrite-it-that-is-the-question/</guid>
		<description><![CDATA[Sometimes you encounter things at just the right time. This article is one of those things at the right time. Please read this article if you have ever had to deal with legacy code and muttered under you breath, &#8220;Can&#8217;t we just scrap this crap and start over&#8221;, when trying to fix an issue. Below [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you encounter things at just the right time. This <a title="The Big Redesign In The Sky" href="http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky">article</a> is one of those things at the right time. Please read this <a title="The Big Redesign In The Sky" href="http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky">article</a> if you have ever had to deal with legacy code and muttered under you breath, &#8220;Can&#8217;t we just scrap this crap and start over&#8221;, when trying to fix an issue. Below is my spin on it for the situation I am in.</p>
<p><span id="more-21"></span></p>
<p><strong>Fix it or rewrite it</strong></p>
<p>We have all had to face this dilemma at one point in out development careers, do we take that old crappy broken piece of software that we have been patching and re-patching and scrap it for a brand spanking new rewrite that will solve all of out issues, or do we take the time to properly fix what we have and evolve it into the application that we wished it was.</p>
<p>I have been struggling with this with one of the applications that I have maintained for years, is it worthy of scrapping for a full rewrite or should we just take the time and effort to fix it once and for all. There is no need to say its name we all know what it is (plus I wouldn&#8217;t want it to find out I am bad mouthing it, more things might go wrong).</p>
<p>I see both sides of the coin here:</p>
<p><strong>On the Heads Side</strong>:</p>
<p>The developer in me wants to scrap it and be able to work on that pretty, clean, all mine application that will not have all the headaches and stigma that the original application has. I will be able to design it from the ground up and it will be prefect. The perfection of green field projects:</p>
<blockquote><p>In a green field you don&#8217;t have to deal with the mess that&#8217;s accumulated over the years. In a green field you can be clean. In a green field you can build the perfect system. All would be well if only we could start over with a green field.</p></blockquote>
<p>We will be able to use that new technology, remove some of the constraints that are ingrained in the old venison learn from all our pains and make this new fancy 2.0 version that we all dream of.</p>
<p><strong>On the Tails Side:</strong></p>
<p>But wait, what about all the years of evolving that the original application had gone through, how do I get that in this green field application? Can I extract all the correct requirements and business logic that is all ready included? What about new requirements, do I stop maintaining the old application and only add these new requirements to version 2.0.</p>
<blockquote><p>Remember Xeno&#8217;s Paradox? Achilles and a tortoise are in a race. The tortoise has a head start. Every time Achilles gets to where the tortoise <em>was</em>, the tortoise has moved to a new point <em>ahead</em> of Achilles. Therefore Achilles can never catch the tortoise.</p>
<p>Fortunately the law of limits allows us to escape this paradox in a mathematical sense. But in software the paradox sill holds. The <em>Tiger Team</em> can never catch up to the old system. Every time they get to where the old system was, the old system has added new features</p></blockquote>
<p>I don&#8217;t know what part of me this is coming from but I do think that the best solution would be to take this ailing, almost dying application and revive it, give it the million dollar man makeover. We can make it better. I know we can. This might be a little bit of my ego saying I can fix anything but more realistically there is to much inherent knowledge inside the existing application that take years to duplicate, heck it took us years to get it in there in the first place.</p>
<p>Taking the existing structure of the application and improving upon piece by piece will help keep this knowledge in the system but as we slowly evolve the existing application. We can address the most painful points first and take it one step at a time. This doesn&#8217;t have to mean that we are going to stop maintaining and fixing issues as they arise, we just have to make some due diligence and fix them properly with an eye to the future. This may mean no more 1-2 day turn around time, instead more like 1-2 week turn around time (or longer depending on the underlying issue). But over time we will see a new and improved application break free from the cocoon of crappy code.</p>
<p>It may be easier in the short term to scrap the old application but unless we face the reasons why the old application became that way we are destine to repeat them. If we step up and face the fact that we contributed to this crap, promise to fix it, and deal with the decisions we have made we can learn and evolve just as our application has to and not repeat history be it on new projects or on the same one.</p>
<p>Now I could just keep going on and on about this but instead here is a few more articles from people that you might respect a bit more (or might not) that echo my opinion:</p>
<p><a href="http://www.joelonsoftware.com/articles/fog0000000069.html">Things You Should Never Do, Part I</a> &#8211; Joel Spolsky</p>
<p><a href="http://chadfowler.com/the-big-rewrite">The Big Rewrite Series</a> &#8211; Chad Folwer</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.photoquarium.com/2009/01/09/fix-it-or-rewrite-it-that-is-the-question/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few software engineering books.</title>
		<link>http://blog.photoquarium.com/2008/10/30/a-few-software-engineering-books/</link>
		<comments>http://blog.photoquarium.com/2008/10/30/a-few-software-engineering-books/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 14:48:45 +0000</pubDate>
		<dc:creator>Lucus Crawford</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Reading]]></category>
		<category><![CDATA[Sofware Engineering]]></category>

		<guid isPermaLink="false">http://blog.photoquarium.com/?p=15</guid>
		<description><![CDATA[
For all of you out there that need or want to read up on software engineering or just want to pad their geek library with books that will get noticed, check out this list of The Top 100 best Software Engineering Books, Ever. 
This is a huge list and maybe you don&#8217;t agree with all these [...]]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;"><a title="What could I read tonight?" href="http://www.flickr.com/photos/84296325@N00/262096844/" target="_blank"><img class="alignleft" style="border: 0; float: left;" src="http://farm1.static.flickr.com/89/262096844_6a626dc51b_m.jpg" border="0" alt="What could I read tonight?" /></a></span><br />
For all of you out there that need or want to read up on software engineering or just want to pad their geek library with books that will get noticed, check out this list of <a href="http://www.noop.nl/2008/06/top-100-best-software-engineering-books-ever.html" target="_blank">The Top 100 best Software Engineering Books, Ever</a>. </p>
<p>This is a huge list and maybe you don&#8217;t agree with all these books as a &#8220;<em>best ever</em>&#8221; but it will give you some books to keep in mind as a start to increase you knowledge.  Also he posted a follow up to this post <a href="http://www.noop.nl/2008/06/top-100-best-software-engineering-books-ever-comments.html" target="_blank">here</a>.  Enjoy.</p>
<p> </p>
<p> </p>
<p> </p>
<p><a title="Attribution-NonCommercial-ShareAlike License" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" target="_blank"><img src="http://blog.photoquarium.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="blu_blue" href="http://www.flickr.com/photos/84296325@N00/262096844/" target="_blank">blu_blue</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.photoquarium.com/2008/10/30/a-few-software-engineering-books/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
