<?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>Thody &#187; Development</title>
	<atom:link href="http://www.adamthody.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adamthody.com</link>
	<description>Toronto Web Developer</description>
	<lastBuildDate>Thu, 11 Mar 2010 15:11:04 +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>Speaking at Refresh&#160;Events</title>
		<link>http://www.adamthody.com/2010/01/speaking-at-refresh-events/</link>
		<comments>http://www.adamthody.com/2010/01/speaking-at-refresh-events/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:57:27 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[refresh-events]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[talk]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=283</guid>
		<description><![CDATA[On March 15th, I&#8217;ll be speaking at Refresh Events at The Drake Hotel in Toronto to discuss the benefits of Grails. Here is the talk outline: Programming Java applications is often viewed as less than pleasurable. This perception is exacerbated when enterprise Java frameworks are stacked up next to all the wonderful new web frameworks [...]]]></description>
			<content:encoded><![CDATA[<p>On March 15th, I&#8217;ll be speaking at Refresh Events at The Drake Hotel in Toronto to discuss the benefits of <a href="http://www.grails.org">Grails</a>.</p>
<p>Here is the talk outline:</p>
<p>Programming Java applications is often viewed as less than pleasurable. This perception is exacerbated when enterprise Java frameworks are stacked up next to all the wonderful new web frameworks and methodologies available to developers today. Grails, a Java-based, agile web development MVC framework, may change all that.</p>
<p>In this talk, learn from a one-time skeptic how your team can use Grails to speed up project delivery, streamline maintenance and support, increase functionality and performance, allowing you to spend more time focused on business objectives in your next web project.</p>
<p>If this sounds like something that might interest you, <a href="http://bit.ly/boygC2">register here</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2010/01/speaking-at-refresh-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building DataTO.org &#8211; An&#160;Overview</title>
		<link>http://www.adamthody.com/2009/11/building-datato-org-an-overview/</link>
		<comments>http://www.adamthody.com/2009/11/building-datato-org-an-overview/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 03:35:29 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[dataTO]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[media temple]]></category>
		<category><![CDATA[open data]]></category>
		<category><![CDATA[Toronto]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=256</guid>
		<description><![CDATA[DataTO.org is a community website, built as a venue for the users of Toronto&#8217;s open data to request and discuss open datasets. On top of enabling conversation, the site also helps users garner support for their request so as to establish a democratic prioritization of requests. I first became interested in the open data dialogue [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.datato.org">DataTO.org</a> is a community website, built as a venue for the users of <a href="http://www.toronto.ca/open">Toronto&#8217;s open data</a> to request and discuss open datasets. On top of enabling conversation, the site also helps users garner support for their request so as to establish a democratic prioritization of requests.</p>
<p>I first became interested in the open data dialogue back in early 2009 at <a href="http://www.changecamp.ca">ChangeCamp</a> in Toronto, which was an event aimed at re-imagining government and citizenship in the age of participation. ChangeCamp spawned ChangeEngine, a project where a group of citizens (including myself), imagined a geo-aware issue tracking system, aimed at bringing 		communities together to solve problems and to provoke systemic change.</p>
<p>As the launch of Toronto&#8217;s open data site approached, some of my colleagues at <a href="http://www.architech.ca/">Architech Solutions</a> and I, met with <a href="http://www.remarkk.com">Mark Kuznicki</a> (organizer of ChangeCamp) to discuss the possibility of building a community companion site to the city&#8217;s site. We all felt there was a need, and so DataTO was born.<span id="more-256"></span></p>
<p>The Monday following our Friday lunch marked one week to go until the city&#8217;s launch date and Mark and I met for our first planning session at the Centre for Social Innovation in Toronto. At this meeting we focused on nailing down our user roles, scoped out the feature set for the initial release and roughed out some layout concepts.</p>
<p>Having had a full-day meeting crop up for later in the week, I was now down to 3 days of build time. Time to get going. Given the time constraint, I decided that building the app with PHP/CodeIgniter simply wasn&#8217;t feasible, so I decided to go with <a href="http://www.grails.org">Grails</a>, a Java-powered web application framework, which I had been tinkering with for a couple weeks at the time. This decision was not taken lightly, as I would not classify myself as a Java developer, but the fact that Grails utilizes <a href="http://groovy.codehaus.org/">Groovy</a>, an agile dynamic programming language for the Java platform, and that Grails is so well suited for agile development, I felt that it was the way to go.</p>
<p>For those of you who are not familiar with Grails, think of it as the Java equivalent to Ruby on Rails. I won&#8217;t get into Grails vs. Rails in this post, so suffice it to say they are comparable, each with pros and cons. While Grails is relatively unknown at the moment, I suspect it will gain in popularity very quickly due to it&#8217;s power, flexibility and ease of use.</p>
<p>Having decided on a framework, I quickly spec&#8217;ed out the app, and started the build. Since Grails makes it so easy to build object models and generate scaffolding, I had more or less completed a working wireframe by the end of the first build day. The biggest benefit to having such an easy build process is that more time is left for UI, which is clearly very important to me.</p>
<p>In fact, the second build day was spent largely on UI. It was clear to me at this point that some of the features we had planned on being in the initial release were not going to be ready in time. So I decided to pare back, and focus on making a select few features as solid as possible, rather than diluting my efforts, and producing a greater number of mediocre components.</p>
<p>Day 3 of the build came and went very quickly, and was focused on skinning the application and debugging. The week had come and gone, and one daunting task remained — deployment.</p>
<p>Not being a Java developer, I wasn&#8217;t familiar with the various containers, but decided to go with Tomcat based on reputation and available documentation. I installed Tomcat 6 on a MediaTemple Dedicated Virtual server behind Apache and deployed the application the night before launch. This is somewhat of a &#8220;budget&#8221; setup, but it has held up well for this proof of concept. Ideally, I&#8217;d like to migrate to Amazon AWS for the infrastructure, but that will require funding (hint, hint).</p>
<p>Since launch, the site has received thousands of visitors from all over the world. It currently has over 200 members, and is approaching 100 requests for datasets. It has been mentioned in numerous major publications, and was profiled on The Discovery Channel&#8217;s Daily Planet.</p>
<p>I was extremely reluctant to put the site out there in it&#8217;s incomplete state, as I&#8217;m somewhat of a perfectionist, and I was worried that it might be a poor reflection of what I do, but I really couldn&#8217;t be more pleased. I&#8217;ve really enjoyed this as a learning opportunity, and a chance to do something good for the community. The site still has a long way to go, but I am continuing to work on it and can&#8217;t wait to see where it goes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/11/building-datato-org-an-overview/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>jQuery Zip/Postal Code Validation&#160;Method</title>
		<link>http://www.adamthody.com/2009/09/jquery-zippostal-code-validation-method/</link>
		<comments>http://www.adamthody.com/2009/09/jquery-zippostal-code-validation-method/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 17:22:27 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=229</guid>
		<description><![CDATA[For those of you who may be familiar with Jörn Zaefferer&#8217;s jQuery Validation plugin, I&#8217;ve written a method for validating zip/postal code fields, which was not included in the plugin. To start validating zip/postal code fields, include this code somewhere after you&#8217;ve included the plugin: jQuery.validator.addMethod("postalcode", function(postalcode, element) { return this.optional(element) &#124;&#124; postalcode.match(/(^\d{5}(-\d{4})?$)&#124;(^[ABCEGHJKLMNPRSTVXYabceghjklmnpstvxy]{1}\d{1}[A-Za-z]{1} ?\d{1}[A-Za-z]{1}\d{1})$/); }, [...]]]></description>
			<content:encoded><![CDATA[<p>For those of you who may be familiar with <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">Jörn Zaefferer&#8217;s jQuery Validation plugin</a>, I&#8217;ve written a method for validating zip/postal code fields, which was not included in the plugin.</p>
<p>To start validating zip/postal code fields, include this code somewhere after you&#8217;ve included the plugin:</p>
<pre>
<code class="js">
jQuery.validator.addMethod("postalcode", function(postalcode, element) {
	return this.optional(element) || postalcode.match(/(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXYabceghjklmnpstvxy]{1}\d{1}[A-Za-z]{1} ?\d{1}[A-Za-z]{1}\d{1})$/);
}, "Please specify a valid postal/zip code");
</code>
</pre>
<p>Now you can add postalcode to your validation rules like so:</p>
<pre>
<code class="js">
$("#myform").validate({
	rules: {
		postalcode: {
			postalcode: true
		}
	}
});
</code>
</pre>
<p><em>Note:</em> this will accept both Canadian postal codes (with or without a space) and U.S. zip codes. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/09/jquery-zippostal-code-validation-method/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>User Library for&#160;CodeIgniter</title>
		<link>http://www.adamthody.com/2009/08/user-library-for-codeigniter/</link>
		<comments>http://www.adamthody.com/2009/08/user-library-for-codeigniter/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 23:17:25 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[kitolab]]></category>
		<category><![CDATA[user library]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=212</guid>
		<description><![CDATA[Rather than using one of the pre-existing authentication libraries in kitolab, which I find bloated and generally so-so, I&#8217;ve decided to write my own. I&#8217;ve also decided to share the core of the library for all to use. It&#8217;s intentially minimalist, and provides only the bare essentials so you can use it as a starting [...]]]></description>
			<content:encoded><![CDATA[<p>Rather than using one of the pre-existing authentication libraries in <a href="http://www.kitolab.com">kitolab</a>, which I find bloated and generally so-so, I&#8217;ve decided to write my own. I&#8217;ve also decided to share the core of the library for all to use. It&#8217;s intentially minimalist, and provides only the bare essentials so you can use it as a starting point to build out our application specific user library needs.</p>
<p>To download and get more information, check out the <a href="http://www.adamthody.com/a-codeigniter-user-library/">user library project page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/08/user-library-for-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Connect for&#160;Comments</title>
		<link>http://www.adamthody.com/2009/08/facebook-connect-for-comments/</link>
		<comments>http://www.adamthody.com/2009/08/facebook-connect-for-comments/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 00:10:36 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[experiment]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=179</guid>
		<description><![CDATA[Although I&#8217;m not completely sold on the usefulness of Facebook Connect, it seems I can&#8217;t go a day without somebody asking me about it. Hence, as a little experiment, I&#8217;ve implemented the API here to allow you to make comments on this site with your Facebook account. What can I say, I can&#8217;t help myself. [...]]]></description>
			<content:encoded><![CDATA[<p>Although I&#8217;m not completely sold on the usefulness of Facebook Connect, it seems I can&#8217;t go a day without somebody asking me about it. Hence, as a little experiment, I&#8217;ve implemented the API here to allow you to make comments on this site with your Facebook account. What can I say, I can&#8217;t help myself.</p>
<p>Let me know what you think about Facebook Connect, and its many appications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/08/facebook-connect-for-comments/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Saving Time By Automating Simple&#160;Procedures</title>
		<link>http://www.adamthody.com/2009/08/saving-time-by-automating-simple-procedures/</link>
		<comments>http://www.adamthody.com/2009/08/saving-time-by-automating-simple-procedures/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 14:36:34 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[efficiency]]></category>
		<category><![CDATA[kitolab]]></category>
		<category><![CDATA[procedures]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=175</guid>
		<description><![CDATA[This post is slightly geekier, and more hands on than most of my recent posts, but it follows the same theme: efficiency. The life of a developer is fraught with repetition. Minimizing said repetition makes me very happy. The other day I noticed that whenever I start working on a project I start with the [...]]]></description>
			<content:encoded><![CDATA[<p>This post is slightly geekier, and more hands on than most of my recent posts, but it follows the same theme: efficiency.</p>
<p>The life of a developer is fraught with repetition. Minimizing said repetition makes me very happy. The other day I noticed that whenever I start working on a project I start with the following routine:</p>
<ol>
<li>Open Terminal</li>
<li>cd to the working folder for the project so I can pull the latest files from the Git repository</li>
<li>Open the working files in TextMate.</li>
</ol>
<p>After these steps, the process diverges, but those first three steps are constant. I keep my project files well organized so I have a hope in hell of remembering where things are, so even changing directories to my working files follows a pattern (cd projects/projectname.com/working).<span id="more-175"></span></p>
<p>Having followed these steps half a billion times, I decided it was time to streamline, so I wrote this very basic little script:</p>
<pre><code>
#!/bin/sh

mate ~/projects/$1/working

osascript&lt;&lt;END
try
    tell application "Terminal"
        do script with command "cd ~/projects/$1/working;echo \"You're now working on $1\""
    end tell
end try
END
</code></pre>
<p>By typing that code into blank text file, saving it as proj, chmodding it to 755, and moving it to /usr/bin I got a little shortcut for starting projects. Now I just open terminal, and type &#8220;proj projectname.com&#8221;, and I get a terminal window cd&#8217;ed to the working files, and TextMate opened up to my project files.</p>
<p>Of course, this is a very simplistic implementation, I may add additional steps, such as automatically pulling the latest files from the repository, or opening up the log of most recent changes. Anything is possible. While this particular script may not be useful to you, I urge you to examine the tasks you perform regularly and experiment with what can be automated to save you time. Simple scripts like these, or those generated by Apple&#8217;s Automator are easy to make and save tons of time in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/08/saving-time-by-automating-simple-procedures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASCII to HTML&#160;Translator</title>
		<link>http://www.adamthody.com/2009/07/ascii-to-html-translator/</link>
		<comments>http://www.adamthody.com/2009/07/ascii-to-html-translator/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 15:59:39 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[translator]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=158</guid>
		<description><![CDATA[A multi-lingual project I&#8217;m currently working on requires a lot of converting foreign language characters into their HTML entities. After half an hour of doing this manually, I got fed up and created this little utility to do it automatically. Hopefully it comes in handy for someone else too. ASCII Characters to HTML Entities Translator]]></description>
			<content:encoded><![CDATA[<p>A multi-lingual project I&#8217;m currently working on requires a lot of converting foreign language characters into their HTML entities. After half an hour of doing this manually, I got fed up and created this little utility to do it automatically. Hopefully it comes in handy for someone else too.</p>
<p><a title="ASCII to HTML Translator" href="http://www.adamthody.com/asciitohtml">ASCII Characters to HTML Entities Translator</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/07/ascii-to-html-translator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Better Estimates: Leveraging Past&#160;Performance</title>
		<link>http://www.adamthody.com/2009/07/better-estimates-leveraging-past-performance/</link>
		<comments>http://www.adamthody.com/2009/07/better-estimates-leveraging-past-performance/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 17:54:35 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[estimates]]></category>
		<category><![CDATA[kitolab]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=135</guid>
		<description><![CDATA[Everything we do, day in and day out, can generate data, which can be leveraged to create better estimates. In fact, the more &#8220;stuff&#8221; we do, the more data we generate and the more useful it becomes. Each and every one of us estimates poorly in our own unique way. Some of us over-estimate, some [...]]]></description>
			<content:encoded><![CDATA[<p>Everything we do, day in and day out, can generate data, which can be leveraged to create better estimates. In fact, the more &#8220;stuff&#8221; we do, the more data we generate and the more useful it becomes.</p>
<p>Each and every one of us estimates poorly in our own unique way. Some of us over-estimate, some of us under-estimate, and some of us couldn&#8217;t hit the broad side of a barn. However, we <em>usually</em> follow a pattern of some kind. The degree to which our estimates are off generally conforms to roughly the same proportions. If we were to examine a particular worker&#8217;s estimated task completion time to the actual completion time over the course of many tasks, we can determine the approximate factor to apply to his estimates to find the actual completion time.<span id="more-135"></span></p>
<p>The root cause of this predictability is the simple fact that humans are better at being precise than we are at being accurate when it comes to estimates. In other words, we&#8217;re quite good at approximating the relative size of a task, but we fail at determining the appropriate scale.</p>
<p style="text-align: left;">Take the chart below. Here we see an intentionally simplistic view of a worker&#8217;s estimated completion time versus their actual completion time.</p>
<p><img class="size-full wp-image-136 aligncenter" title="fig1" src="http://www.adamthody.com/wp-content/uploads/2009/07/fig1.png" alt="fig1" width="300" height="277" /></p>
<p>At a glance, our worker appears to be a poor estimator, as he has underestimated each task. However, if we look at the data a little closer, we can see that on average, he was of by a factor of approximately 1.8. If we were to apply this factor to his estimates in advance we&#8217;d see a slightly different picture.</p>
<p><img class="aligncenter size-full wp-image-137" title="fig2" src="http://www.adamthody.com/wp-content/uploads/2009/07/fig2.png" alt="fig2" width="300" height="277" /></p>
<p>As you can see, by applying his average estimation scale factor to the figures we can calculate a much more accurate set of estimates. Of course, in practice, five data points will not provide a very accurate estimation scale factor, but by collecting this data over the course of several projects we can get a pretty good sense of this worker&#8217;s estimating characteristics.</p>
<p>Tracking this data manually would be cumbersome to say the least, but it&#8217;s something that a computer does very well. Given the proper tool, this data could be collected behind the scenes with little to no impact on workflow.</p>
<p>It just so happens that I am in the midst of building such a tool. For now, let me say that this will be a web-based, hosted, project management tool. I will be applying my many rants on the subject to creating not only a better tool, but a better process for project management. This will not be another to-do list manager, I promise you that.</p>
<p>Now that the cat is out of the bag, I will be posting regularly throughout the development of this tool and I will be <strong><em>craving</em></strong> your feedback. Many, many more details to come. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/07/better-estimates-leveraging-past-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Accurate Estimates&#160;Quickly</title>
		<link>http://www.adamthody.com/2009/06/creating-accurate-estimates-quickly/</link>
		<comments>http://www.adamthody.com/2009/06/creating-accurate-estimates-quickly/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 11:48:20 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[estimates]]></category>
		<category><![CDATA[kitolab]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[tasks]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=113</guid>
		<description><![CDATA[No one likes to generate estimates. They trigger anxiety, frustration, boredom and are usually inaccurate anyway. At some point in human history, estimates evolved into something more than what they&#8217;re intended to be. Perhaps we have shady contractors, auto garages, and wedding planners to thank for the modern perception that billing a client more than [...]]]></description>
			<content:encoded><![CDATA[<p>No one likes to generate estimates. They trigger anxiety, frustration, boredom and are usually inaccurate anyway.</p>
<p>At some point in human history, estimates evolved into something more than what they&#8217;re intended to be. Perhaps we have shady contractors, auto garages, and wedding planners to thank for the modern perception that billing a client more than the estimated value means someone has been mislead, or taken advantage of. Or, perhaps it&#8217;s the fact that generating an accurate estimate is genuinely, extremely difficult — especially given that many estimates are expected to be delivered while there are still many unsolved variables on the slate. Somewhere along the way, we&#8217;ve lost sight of the fact that an estimate is really just your best guess, based on a combination of the information available at the time and your experience.<span id="more-113"></span></p>
<p>Setting expectations is a crucial aspect of delivering your estimate. Your client must be reminded that an estimate is your best guess and <em>not</em> a draft copy of the final invoice.</p>
<p>Now, setting expectations makes the discrepencies between the estimate and the final invoice easier to swallow, but it doesn&#8217;t make you a better estimator. Traditional estimates often focus on deliverables. Deliverable A will be X dollars, and Deliverable B will be Y dollars. This is a format is easily understood by the client, but makes the poor soul creating the estimate sweat. Deciding on a time or dollar value based on a mental image of a loosely defined deliverable is asking for trouble.</p>
<p>To become a better estimator you need to keep in mind that even the most complex projects can be broken down into a series of small tasks. It&#8217;s practically impossible to accurately estimate how long it will take to complete a complex project. It&#8217;s far more reasonable to guess how quickly you can perform individual tasks.</p>
<p>My process of task generation follows a few basic guidelines:</p>
<ol>
<li><strong>Tasks should be small. </strong>The smaller the task, the more accurate the estimate will be. Additionally, smaller tasks give a psychological edge as they&#8217;re are inherently better defined, and less daunting than large tasks.</li>
<li><strong>Tasks should all be approximately the same size. </strong>It&#8217;s human nature to put off doing larger, less defined tasks. This is rarely a good thing and can easily be circumvented by making all tasks the same size.</li>
<li><strong>Tasks should be detailed. </strong>Within reason, tasks should include as much detail as possible.  If you&#8217;re working on a team, you may not be the person executing the task, so provide detail that others would understand so the task need not be outlined twice. If you find yourself writing paragraphs here, you probably need to split the task into a series of smaller ones.</li>
</ol>
<p>Now, we have a big list, of managable, equally-sized tasks. Since the tasks are small, it&#8217;s easy to take three or four of them and make fairly accurate estimates on them. Since the tasks are all approximately the same size, the average estimate for those three or four tasks multiplied by the number of tasks will leave you with a reasonably accurate overall estimate, saving you having to estimate each step of the project directly. We can also group tasks back into our deliverables and provide more accurate deliverable by deliverable estimates for easy client consumption.</p>
<p>Aside from generating more accurate estimates, we&#8217;re also left with a valuable outline of the project, which can be used to execute the development of the project. Additionally, going through this process will often bring issues and questions to the surface, which will improve your perception of the project, ultimately making your estimates all the more precise.</p>
<p>In a future post, I will go into how this method of generating estimates fits into the new project management framework I&#8217;ve been hinting at.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/creating-accurate-estimates-quickly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Finding a Better&#160;Way</title>
		<link>http://www.adamthody.com/2009/06/process-finding-a-better-way/</link>
		<comments>http://www.adamthody.com/2009/06/process-finding-a-better-way/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 13:00:53 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kitolab]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=89</guid>
		<description><![CDATA[In my last post, I touched on the fact that Agile introduces a certain process overhead to the equation. This overhead is an investment. Given time to mature, it reaps great rewards. But what happens when it doesn&#8217;t get to reach a state maturity? What happens when the project&#8217;s lifespan was never destined to reach [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post, I touched on the fact that Agile introduces a certain process overhead to the equation. This overhead is an investment. Given time to mature, it reaps great rewards. But what happens when it doesn&#8217;t get to reach a state maturity? What happens when the project&#8217;s lifespan was never destined to reach that tipping point?</p>
<p>Let&#8217;s first assume we&#8217;re dealing with a client who is open to stepping outside their comfort zone and adopting a new engagement framework with you. Let&#8217;s assume they&#8217;re willing to make themselves available for regular planning sessions and demo/review periods. Let us also assume that they&#8217;re willing to be held accountable for their role in the project&#8217;s completion. Let&#8217;s assume our client meets all these requirements, what do you do when the cost of educating the client on the methodologies, the processes, and the language of Agile is greater than the reward of putting those tools to work?<span id="more-89"></span></p>
<p>To make matters worse, I have found that the majority of the organizations I&#8217;ve dealt with in my career were not willing, or in some cases even capable, of meeting the afore mentioned requirements, nor did their projects posses what I deem to be the characteristics of a project, which would benefit from Agile.</p>
<p>I am by no means an expert on Agile, in fact my working experience with Agile is minimal — largely due to these substaintial stumbling blocks. Agile gurus, here&#8217;s your cue to jump in and tell me why I&#8217;m wrong. <em>Please</em> demonstrate how Agile addresses the issues I&#8217;ve raised. I&#8217;d love to be way off base on this, it&#8217;d sure make my life a lot easier.</p>
<p>In the meantime, enough about why Agile doesn&#8217;t work in these scenarios. Let&#8217;s get to the fun part: What <em>does</em> work?</p>
<p>Setting out to design a better way of managing small to mid-sized projects, I believe there are several criteria which must be met, on top of several of Agile&#8217;s parameters:</p>
<ol>
<li><strong>It must be easily, and quickly adoptable.</strong> When I say quickly, I mean pick up and go with no prior knowledge.</li>
<li><strong>It must utilize familiar language.</strong> Part of easy adoptability means we must avoid new terms wherever possible. Terms, processes and tools must totally self-explanatory because no one wants to go back to school for the pleasure of working with you.</li>
<li><strong>It must cater to different levels of client involvement.</strong> No company is the same and trying to force a client to do something that is dramatically different than what they do routinely <em>does not work</em> in the course of short term engagements. We can&#8217;t always have dream clients who can provide continuous, and timely feedback so we need a system that minimized the expense of less than timely interactions.</li>
<li><strong>It must come with a tool.</strong> I truly admire the spirit of Agile&#8217;s &#8220;individuals and interactions over tools&#8221; notion, but let&#8217;s face it, even the most skilled carpenter isn&#8217;t very useful without his tools. The tool must be flexible and capable of adapting to meet the needs of variable of usage, but the tool must exist.</li>
</ol>
<p>In my next post, I will begin to isolate the bottlenecks I see in the Agile process, discuss how they adversely affect small projects and start to explore alternatives. Until then, aside from the four criteria I mentioned here today, which characteristics must a process posses to work for your business?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/process-finding-a-better-way/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->