<?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>Praj&#039;s Site &#187; Thoughts</title>
	<atom:link href="http://www.praj.com.au/category/thoughts/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.praj.com.au</link>
	<description></description>
	<lastBuildDate>Sat, 24 Jul 2010 23:22:52 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>That&#8217;s nice, but we never use it</title>
		<link>http://www.praj.com.au/thats-nice-but-we-never-use-it/</link>
		<comments>http://www.praj.com.au/thats-nice-but-we-never-use-it/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 09:29:40 +0000</pubDate>
		<dc:creator>praj</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blog.praj.com.au/?p=321</guid>
		<description><![CDATA[Not the words you want to be hearing from your users if you are a developer on a web site or application. Unfortunately it happens more often than you would think. A fantastic new feature is dreamed up and added. It&#8217;s tested thoroughly, it looks really good, it will save heaps of time. But no [...]]]></description>
			<content:encoded><![CDATA[<p>Not the words you want to be hearing from your users if you are a developer on a web site or application. Unfortunately it happens more often than you would think. A fantastic new feature is dreamed up and added. It&#8217;s tested thoroughly, it looks really good, it will save heaps of time. But no one uses it. Why? Because it isn&#8217;t needed.</p>
<p>Its an easy trap to fall into and I don&#8217;t always think its the developer&#8217;s fault. I&#8217;ve seen more than few cases where the analyst has <em>misunderstood </em>(read: not correctly identified) what the user <strong>needs</strong> and that has been translated into code by the developer. You also tend to get users that want things that seem like a good idea at the time (to them) but isn&#8217;t something they will ever use.</p>
<p>A good way to avoid this situation is to follow the advice from <a href="http://gettingreal.37signals.com/toc.php" target="_blank">Getting Real</a>, a free eBook from 37 signals, the company behind BaseCamp and Ruby on Rails among other things. In the chapter on feature selection, they point out that you should <a href="http://gettingreal.37signals.com/ch05_Start_With_No.php" target="_blank">Start with No</a>. This might seem harsh, but it makes perfect sense. Every feature you add is a burden. It requires ongoing maintenance. As suggested in the book, you should look for trends &#8212; reoccurring requests before you add something new.</p>
<p>My basic strategy for adding a new feature into a web site or system <em>after it has gone live</em> is something like this:</p>
<ul>
<li>Is there a workaround for the feature?<br />
Yes -&gt; don&#8217;t fix it.<br />
No -&gt; Next question.</li>
</ul>
<ul>
<li>Has the feature been requested before?<br />
Yes -&gt; Next question.<br />
No -&gt; Say no (nicely). Don&#8217;t fix a system used by hundreds/thousands/millions of people just because of one request.</li>
</ul>
<ul>
<li>Is this feature going to be difficult to implement?<br />
Yes -&gt; Say no (nicely) based on the difficulty. Wait for it to come up again.<br />
No -&gt; Next question.</li>
</ul>
<ul>
<li>Does the feature add value?<br />
Yes -&gt; consider it. Make sure it is given a low priority for now. Wait for more requests for that feature before moving it up.<br />
No -&gt; Say no (nicely) due to more important priorities.</li>
</ul>
<p>This my seem quite harsh, but it helps to reduce the amount of new features you are adding to a site or system, and lets you concentrate on fixing up any existing bugs.</p>
<p>Unfortunately this won&#8217;t always work if you work at a relatively large organisation where you generally have to do whatever is requested. However, you can still <em>try</em> to apply this approach. Remember every feature you add is something you will potentially have to support and maintain in the future &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.praj.com.au/thats-nice-but-we-never-use-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating vs Consuming</title>
		<link>http://www.praj.com.au/creating-vs-consuming/</link>
		<comments>http://www.praj.com.au/creating-vs-consuming/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 08:35:17 +0000</pubDate>
		<dc:creator>praj</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://blog.praj.com.au/?p=230</guid>
		<description><![CDATA[I read an really good article that mentioned having a balance between creating and consuming. Unfortunately I can&#8217;t seem to be able to find it any more. I think the reason is that the concept didn&#8217;t hit me straight away&#8230; I remember reading the article and then perhaps a day or two later I got [...]]]></description>
			<content:encoded><![CDATA[<p>I read an really good article that mentioned having a balance between creating and consuming. Unfortunately I can&#8217;t seem to be able to find it any more. I think the reason is that the concept didn&#8217;t hit me straight away&#8230; I remember reading the article and then perhaps a day or two later I <em>got it</em>. Basically (and this is all coming from memory now), it was about balancing the time you spend creating things with the time you spend consuming.</p>
<p>For example, in my context, I&#8217;m referring to web development. Specifically the time I spend developing, and updating web sites (creating content) versus the time I spend learning new skills and technology (consuming). The point is to move more towards creating, and allowing the time spent consuming to compliment what I&#8217;m creating.In other words, there&#8217;s no point learning everything I can about web development, if I don&#8217;t actually build or update any web sites. Pretty obvious stuff, but like many things, I never thought about it consciously. In fact, I know I sometimes procrastinate on something I <em>should</em> be doing with the excuse that I need to do a bit more research.</p>
<p>I&#8217;m not saying you should just dive right into things. I&#8217;m just saying, you should honestly ask yourself this question: what are you doing towards your goals right now, creating or consuming? And if you are consuming, do you need to be, or is there something you can create right now?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.praj.com.au/creating-vs-consuming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Embarrassment Index</title>
		<link>http://www.praj.com.au/embarrassment-index/</link>
		<comments>http://www.praj.com.au/embarrassment-index/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 02:29:42 +0000</pubDate>
		<dc:creator>praj</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://blog.praj.com.au/?p=283</guid>
		<description><![CDATA[I was pondering (always dangerous) the other day about being embarrassed in social situations which eventually led me to the idea of an embarrassment index: a number between 0 and 1 that essentially is the level of embarrassment you feel when in public. Further to this, I was thinking, what exactly flips the embarrassment switch. [...]]]></description>
			<content:encoded><![CDATA[<p>I was pondering (always dangerous) the other day about being embarrassed in social situations which eventually led me to the idea of an embarrassment index: a number between 0 and 1 that essentially is the level of embarrassment you feel when in public. Further to this, I was thinking, what exactly flips the embarrassment switch. The point where you hit less than 0.5 and the embarrassment doesn&#8217;t stop you from doing something considered a bit <em>out there</em>?</p>
<p>As a small child, you&#8217;re embarrassment index is very low (0?); you simply don&#8217;t feel it embarrassed by most things. Its probably around the time you start school that this changes, and you creep over the 0.5 mark for certain things, such as having your parents drop you off to school. I&#8217;m guessing that most people stay above 0.5 for a lot of things for most of their lives. However, as you get older, there are times where you do fall below 0.5. However, other people are quick to point out this fact and let you know that you are below the threshold &#8230;</p>
<p>I&#8217;m blaming society here for the high embarrassment index. Its not all bad, there are times when you should feel embarrassed. The point where it concerns me is when the <em>fear</em> of embarrassment stops you from achieving something. For example, being too embarrassed to go to the gym because of what people will think, even though you really do need to lose some weight.</p>
<p>I realise there are exceptions to the rule. There are people that have a naturally low embarrassment index and keep that way for their entire lives. So, I&#8217;m going to leave this thought with a link to an excellent book; <a href="http://www.amazon.com/What-Care-Other-People-Think/dp/0393320928/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1268619588&amp;sr=8-1" target="_blank">What do you care what other people think</a> by Richard P. Feynman who was definitely an exception.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.praj.com.au/embarrassment-index/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solve the problem at hand</title>
		<link>http://www.praj.com.au/solve-the-problem-at-hand/</link>
		<comments>http://www.praj.com.au/solve-the-problem-at-hand/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 03:38:36 +0000</pubDate>
		<dc:creator>praj</dc:creator>
				<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://blog.praj.com.au/?p=257</guid>
		<description><![CDATA[Recently, I&#8217;ve had a bit of a paradigm shift in the way I think about software development. Essentially, that shift is to only focus on solving the problem at hand and not to write additional code just in case it might be needed. Credit for this comes from the excellent RailsTips article, Just in Time, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I&#8217;ve had a bit of a paradigm shift in the way I think about software development. Essentially, that shift is to only focus on solving the problem at hand and <strong>not</strong> to write additional code <em>just in case it might be needed</em>. Credit for this comes from the excellent <a href="http://railstips.org/" target="_blank">RailsTips</a> article, <a href="http://railstips.org/blog/archives/2010/01/24/just-in-time-not-just-in-case/" target="_blank">Just in Time, Not Just in Case</a>. Now many developers are going to find this concept hard to accept. After all, you should be writing code that addresses any problems that may arise in the future. That is how you write robust code right? &#8230; right???</p>
<p>Well I had the same problem accepting this at first. I had already accepted that <a href="http://www.codinghorror.com/blog/2004/10/we-make-shitty-software-with-bugs.html" target="_blank">my code sucks</a>, and that I could be a <a href="http://www.codinghorror.com/blog/2007/01/how-to-become-a-better-programmer-by-not-programming.html" target="_blank">better programmer by not programming</a>. However, the concept of solving the problem at hand takes this one step further by making you catch yourself before you go writing code just in case it might be needed.</p>
<p>You end up asking yourself: &#8220;W<em>ait a minute, am I over-engineering this?</em>&#8221;</p>
<p>The main reason for not writing code <em>just in case</em> is that it rots. Code that isn&#8217;t used still requires maintenance, it still has bugs in it, and it still needs to be tested. The key is to accept that every line of code you write will potentially add more bugs. Reducing bugs means writing less code. Writing less code involves<a href="http://railstips.org/blog/archives/2009/06/08/what-is-the-simplest-thing-that-could-possibly-work/" target="_blank"> finding the simplest thing that could possibly work</a>. Remember as a software developer, <a href="http://www.codinghorror.com/blog/2007/05/the-best-code-is-no-code-at-all.html" target="_blank">you are you&#8217;re own worst enemy</a>. I believe that&#8217;s what makes this concept so hard to accept, particularly if you already think you&#8217;re a <a href="http://www.codinghorror.com/blog/2006/03/how-not-to-become-a-rockstar-programmer.html" target="_blank">rockstar</a> programmer.</p>
<p>Another problem, is that the simplest solution isn&#8217;t elegant enough for some people. For example, the simplest solution might be to just to skip the first line when looping through a file because it stores headings and not data. But then the questions start; what if the data changes and the first line isn&#8217;t a heading any more? What if we have headings across two lines? What if the data is encrypted in an alien cipher &#8230; and so on. Right now, the headings are on the first line, and the code passes the test of reading the data with the headings where they are. Problem solved, <a href="http://www.codinghorror.com/blog/2007/05/the-best-code-is-no-code-at-all.html" target="_blank">move on now</a>.</p>
<p>A good way to ensure you solve just the problem at hand is to take a test first strategy. Sure you can write unit tests and execute them in <em>xUnit</em> if all that is available to you. But really, this simply means:</p>
<ul>
<li>Write the test first;</li>
<li>Write enough code to make it fail second;</li>
<li>Write enough code to make it pass third;</li>
<li>Move on.</li>
</ul>
<p>Note that <em>writing the test</em> may simply mean writing the test out in English (or your preferred language). Automated <a href="http://www.codinghorror.com/blog/2006/07/i-pity-the-fool-who-doesnt-write-unit-tests.html" target="_blank">unit tests</a> are still a luxury<em>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.praj.com.au/solve-the-problem-at-hand/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
