<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Thody</title>
	<atom:link href="http://www.adamthody.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adamthody.com</link>
	<description>Toronto Web Developer</description>
	<lastBuildDate>Wed, 01 Jul 2009 18:06:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Better Estimates: Leveraging Past Performance</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/uWHP2_YUccU/</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>

		<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 of [...]]]></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>
<img src="http://feeds.feedburner.com/~r/Thody/~4/uWHP2_YUccU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/07/better-estimates-leveraging-past-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/07/better-estimates-leveraging-past-performance/</feedburner:origLink></item>
		<item>
		<title>Why To-do Lists Suck</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/9wfHa6HySrA/</link>
		<comments>http://www.adamthody.com/2009/06/why-to-do-lists-suck/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 20:05:11 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[lists]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[tasks]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=127</guid>
		<description><![CDATA[Ok, they don&#8217;t suck. But they don&#8217;t tell the whole story, because items on a to-do list rarely provide context.
For example, take a simple task, which can likely be found on many of your to-do lists, such as &#8220;Take out the garbage&#8221;. At face value, this seems like a very obvious request. But let&#8217;s assume [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, they don&#8217;t <em>suck</em>. But they don&#8217;t tell the whole story, because items on a to-do list rarely provide context.</p>
<p>For example, take a simple task, which can likely be found on many of your to-do lists, such as &#8220;Take out the garbage&#8221;. At face value, this seems like a very obvious request. But let&#8217;s assume someone is visiting, sees your list on the fridge and wants to lend a hand. Suddenly this seemingly simple task becomes more difficult to execute. Where is the garbage can? Is there more than one? Where does it need to be taken? What day is the garbage collected? What if the bag isn&#8217;t full? What about the raccoons?!</p>
<p>The difficulty with most items on to-do lists is that they&#8217;re really only meaningful to the person who wrote them. This is because they can fill in the gaps by looking at the task from their perspective, with their experience, and their past knowledge of the situation. As you&#8217;ve no doubt experienced, this causes problems when to-do lists are shared within a team, when revisiting an old list of your own, or worse of all, when a list is generated by an outside body, such as a client.<span id="more-127"></span>This is not to say to-lists can&#8217;t serve a purpose — they just need a little help.</p>
<p>Firstly, you must look at a task as a step to completing a grander objective rather than being an objective itself. Secondly, you need to realize that to fully understand and satisfy an objective you both the steps to completion (tasks) and the context surrounding the objective. The task list provides one component of the objective — the What. The context provides additional components, such as the When, Where, Why and Who. Given the five W&#8217;s, the How can often have many answers and can be decided upon by whoever is working on the objective.</p>
<p>In a future post, I&#8217;ll discuss an all-inclusive way to specify objectives for easy interpretation and execution with a greatly diminished need for prior knowledge of the situation.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/9wfHa6HySrA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/why-to-do-lists-suck/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/06/why-to-do-lists-suck/</feedburner:origLink></item>
		<item>
		<title>Creating Accurate Estimates Quickly</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/z2NOyiJuEqw/</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[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 the [...]]]></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>
<img src="http://feeds.feedburner.com/~r/Thody/~4/z2NOyiJuEqw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/creating-accurate-estimates-quickly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/06/creating-accurate-estimates-quickly/</feedburner:origLink></item>
		<item>
		<title>Finding a Better Way</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/6sphv3AneZc/</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[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>
<img src="http://feeds.feedburner.com/~r/Thody/~4/6sphv3AneZc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/process-finding-a-better-way/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/06/process-finding-a-better-way/</feedburner:origLink></item>
		<item>
		<title>Our Process is Broken.</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/WpHWQzge-Co/</link>
		<comments>http://www.adamthody.com/2009/06/our-process-is-broken/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 16:50:51 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[overhead]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.adamthody.com/?p=57</guid>
		<description><![CDATA[I&#8217;m about to enter my 11th year in the business of web design, development and strategy. It boggles my mind to think about it. What is even more perplexing, is that with the exception of the last 2-3 months, the process I (and most of the industry) have employed is in need of dramatic overhaul. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m about to enter my 11th year in the business of web design, development and strategy. It boggles my mind to think about it. What is even more perplexing, is that with the exception of the last 2-3 months, the process I (and most of the industry) have employed is in need of dramatic overhaul. In the last few months I&#8217;ve been introduced to Agile, which has lessened the suck to a degree.</p>
<p>The Agile movement has some dedicated supporters. Hell, they even have a <a title="Agile Manifesto" href="http://agilemanifesto.org/">manifesto</a>. So, I&#8217;m likely to get some opposition over this next statement: Agile doesn&#8217;t work for small creative agencies.</p>
<p><span id="more-57"></span></p>
<p>It&#8217;s not Agile&#8217;s fault either. Agile is a great concept. There are some fundamental principles, which I love. However, my perception is that it&#8217;s best suited for a select set of working environments, chiefly software development. I&#8217;m generalizing, but in software companies, release dates tend to be several months apart, team members often have the benefit of focusing on one project at a time, and the role of the client is often played by an internal body. Agile is a perfect fit for that scenario.</p>
<p>Life in a web development studio is a little different — it is in ours anyway.</p>
<ul>
<li>We do lots of small projects, we do some medium-sized projects and every once in a while we land a big project. Size is relative of course, so let&#8217;s say anywhere from a couple weeks for a little project, all the way up to several months for a big project.</li>
<li>A smaller project typically means a short term client engagement.</li>
<li>The varying sizes of these projects means that we&#8217;re prone to overlap to some degree, which means at any given time our team has several projects in motion.</li>
<li>Our clients live all around the world. We&#8217;re often separated by geography, culture, time zones and expectations.</li>
<li>We work predominantly with small businesses, often directly with the owner. People who are involved in most, if not all aspects of their business. They tend to be working over capacity and have little room for additional concerns outside of executing their day-to-day business activities.</li>
</ul>
<p>Agile really struggles in this environment. It simply isn&#8217;t designed for it.</p>
<p>At <a href="http://www.theblogstudio.com">The Blog Studio</a>, we have found that Agile introduces a non-trivial degree of process overhead to each project. This overhead is most easily recognized as client education and meetings, meetings, meetings.  On large projects, this overhead is amortized over a long period of time. However, on short term projects it&#8217;s very hard to justify the upfront process costs. I&#8217;ll go into more detail on this overhead in a future post.</p>
<p>So, we need something new. We need to borrow several of the key benefits of Agile, such as transparency, client participation and the capacity for rapid course correction, and we need to minimize the perceived stumbling points it introduces in our small agency scenario.</p>
<p>This will be a learning process. I don&#8217;t believe there is a universal solution. But I do think we can do better, and I&#8217;ll be sharing more of my thoughts on the subject over the next few weeks.</p>
<p>In the meantime, I leave you with a question: What hurts most about your process?</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/WpHWQzge-Co" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/06/our-process-is-broken/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/06/our-process-is-broken/</feedburner:origLink></item>
		<item>
		<title>My Year In Cities 2008</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/lYwcNpBnn4s/</link>
		<comments>http://www.adamthody.com/2009/01/my-year-in-cities-2008/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 11:06:17 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://adamthody/?p=11</guid>
		<description><![CDATA[I&#8217;ve seen a few of these floating around, and thought it looked fun, so here are the cities I&#8217;ve spent at least one day in last year:



Toronto, ON
Guelph, ON
Stratford, ON
London, ON
San Francisco, CA
San Diego, CA
Stockton, CA
Burlingame, CA




Richmond, CA
Dixon, CA
Chicago, IL
McHenry, IL
Victoria, BC
Vancouver, BC
Port Browning, BC
New York, NY




I&#8217;m sure I&#8217;m forgetting a bunch, but I think [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen a few of these floating around, and thought it looked fun, so here are the cities I&#8217;ve spent at least one day in last year:</p>
<div class="grid_6 alpha">
<div class="grid_3 alpha">
<ul>
<li>Toronto, ON</li>
<li>Guelph, ON</li>
<li>Stratford, ON</li>
<li>London, ON</li>
<li>San Francisco, CA</li>
<li>San Diego, CA</li>
<li>Stockton, CA</li>
<li>Burlingame, CA</li>
</ul>
</div>
<div class="grid_3 omega">
<ul>
<li>Richmond, CA</li>
<li>Dixon, CA</li>
<li>Chicago, IL</li>
<li>McHenry, IL</li>
<li>Victoria, BC</li>
<li>Vancouver, BC</li>
<li>Port Browning, BC</li>
<li>New York, NY</li>
</ul>
</div>
</div>
<p><br clear="both" /></p>
<p>I&#8217;m sure I&#8217;m forgetting a bunch, but I think these are the main ones. That was tough ? it&#8217;s crazy how some of thes trips are starting to blend together in my mind, and I can&#8217;t remember if they were last year, or the year before&#8230;getting old.</p>
<p><strong>Update:</strong> Oops&#8230;umm&#8230;forgot our honeymoon&#8230;NYC.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/lYwcNpBnn4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2009/01/my-year-in-cities-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2009/01/my-year-in-cities-2008/</feedburner:origLink></item>
		<item>
		<title>BestBuy.ca Rant</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/Z8VAJeYXeHY/</link>
		<comments>http://www.adamthody.com/2008/12/bestbuyca-rant/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 01:20:47 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[consumerism]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://adamthody/?p=7</guid>
		<description><![CDATA[I&#8217;m not, and never will be a big Boxing Day/Week shopper. I don&#8217;t like crowds, standing in line, or driving around the Yorkdale parking lot for an hour looking for a space.
However, this year I did find it hard to resist some of the online bargains that were available. For a few weeks now, I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not, and never will be a big Boxing Day/Week shopper. I don&#8217;t like crowds, standing in line, or driving around the Yorkdale parking lot for an hour looking for a space.</p>
<p>However, this year I did find it hard to resist some of the online bargains that were available. For a few weeks now, I&#8217;ve been meaning to upgrade the RAM in my MacBook (especially since upgrading to Adobe CS4), and BestBuy had 2GB chips on sale for $29.99.</p>
<p>I&#8217;m sold. I add 2 of the chips to my cart, and click checkout. I&#8217;m then prompted to login. Now I face the perplexing question, which I face on a near daily basis: &#8220;Have I already registered here?&#8221;. I&#8217;m fairly certain I have, so I begin to work my way through attempting to login with one of my 5 email accounts, and 4-5 standard passwords I use. If your finite math isn&#8217;t so hot, that&#8217;s a lot of permutations. So far, this poor experience is all my fault, and an issue I really need to figure out how to deal with.</p>
<p>When I finally login it starts to get interesting. I&#8217;m notified that for my privacy and security my order history has been temporarily deleted. Ok, I find this a little odd, but I don&#8217;t really care about my order history, I just want to order new RAM, so once again I click on my cart, and then checkout. I&#8217;m now returned to the security notice. When they said they had temporarily deleted my order history, what they really meant was they had disabled the whole account. My options are 1) enter a past order number to recover my history (if I had a record of my past orders why would I care about being able to recover it here?), or 2) create a new account. Create a new account?! I just signed into my account. For my &#8220;privacy&#8221; they want me to re-enter all my account, billing, and shipping information?</p>
<p>Wanting to avoid option two, I open up gmail and search for a past order. Astonishingly, I find a thread of emails from Best Buy detailing my last experience with ordering through their website. I had forgotten about this. In short, the last experience, I had ordered an item on sale and opted to use the Pick Up option, instead of having it shipped. Despite selecting a pick up location where they supposedly had ample supply, I received another email several days later saying they couldn&#8217;t honour the order, and that I could no longer get the sale price.</p>
<p>At this point, fuming over the past incident, I&#8217;m starting to think this is less and less a great deal. But sadly, my distaste for standing in line prevails, I enter the order number, recover my account, and order the RAM. Let&#8217;s hope it shows up this time.</p>
<p>Have you ever given your business to a company begrudgingly? Seems like it&#8217;s happening to me a lot lately&#8230;Rogers comes to mind.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/Z8VAJeYXeHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2008/12/bestbuyca-rant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2008/12/bestbuyca-rant/</feedburner:origLink></item>
		<item>
		<title>Not Alone Afterall</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/ssbF5xXhZKU/</link>
		<comments>http://www.adamthody.com/2008/12/not-alone-afterall/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 03:09:26 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[geeks]]></category>
		<category><![CDATA[Toronto]]></category>

		<guid isPermaLink="false">http://adamthody/?p=17</guid>
		<description><![CDATA[Wow. Since I started my little Geekout.ca initiative my perception of the Toronto web community has been radically altered. In short, there are a lot of us! Events like #hohoto brought a lot of web industry people out of the woodwork, and if you&#8217;ve been following any Toronto webbies on Twitter in the last week [...]]]></description>
			<content:encoded><![CDATA[<p>Wow. Since I started my little <a href="http://www.geekout.ca/">Geekout.ca</a> initiative my perception of the Toronto web community has been radically altered. In short, there are a lot of us! Events like <a href="http://www.hohoto.ca/">#hohoto</a> brought a lot of web industry people out of the woodwork, and if you&#8217;ve been following any Toronto webbies on Twitter in the last week or so you know that there&#8217;s a movement afoot to establish an open community of like-minded web industry folk.</p>
<p>In my opinion, this emphasizes the need for an online place for all of us to network and collaborate. The fact that all these people live and work within a few kilometres of me, and that I, someone who tries to put a lot of effort into staying tuned in, didn&#8217;t know anything about them, is a pretty strong indication that we all need to start communicating.</p>
<p>If you&#8217;re on Twitter, start paying attention to #tsTO, I think this may be the beginning of something great.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/ssbF5xXhZKU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2008/12/not-alone-afterall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2008/12/not-alone-afterall/</feedburner:origLink></item>
		<item>
		<title>Canadian Web Professionals Community</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/0Ht2UqkaAiM/</link>
		<comments>http://www.adamthody.com/2008/12/canadian-web-professionals-community/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 03:10:29 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Canada]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[geeks]]></category>
		<category><![CDATA[Toronto]]></category>

		<guid isPermaLink="false">http://adamthody/?p=19</guid>
		<description><![CDATA[For some time now I&#8217;ve wanted to get to know more people in the web industry in Canada. Well, today&#8217;s the day I stop wanting and start doing. Checkout GeekOut.ca and let&#8217;s get the ball rolling.
]]></description>
			<content:encoded><![CDATA[<p>For some time now I&#8217;ve wanted to get to know more people in the web industry in Canada. Well, today&#8217;s the day I stop wanting and start doing. Checkout <a href="http://www.geekout.ca/">GeekOut.ca</a> and let&#8217;s get the ball rolling.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/0Ht2UqkaAiM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2008/12/canadian-web-professionals-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2008/12/canadian-web-professionals-community/</feedburner:origLink></item>
		<item>
		<title>Counting Comments: Why I didn’t use COUNT(*)</title>
		<link>http://feedproxy.google.com/~r/Thody/~3/7DlEySyMwKk/</link>
		<comments>http://www.adamthody.com/2008/10/counting-comments-why-i-didnt-use-count/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 03:12:54 +0000</pubDate>
		<dc:creator>Thody</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://adamthody/?p=23</guid>
		<description><![CDATA[When developing this blog, one decision I had to make was how I wanted to retrieve the number of comments per post to be displayed on the blog index page. This is a specific example, but this is an issue that is raised in many web applications, whenever you need to display how many sub-elements [...]]]></description>
			<content:encoded><![CDATA[<p>When developing this blog, one decision I had to make was how I wanted to retrieve the number of comments per post to be displayed on the blog index page. This is a specific example, but this is an issue that is raised in many web applications, whenever you need to display how many sub-elements there are per item (eg. threads per forum, replies per message, posts per category, etc.). It&#8217;s also an example where conventional wisdom is wrong.</p>
<p>For the sake of this article, let&#8217;s say our tables look like this:</p>
<pre><code>
posts
---------------
id INT
title VARCHAR
body TEXT

comments
---------------
id INT
post_id INT
comment TEXT
</code></pre>
<p>The obvious answer is to query the posts table for the post data, join the comments table and count the comments where the <code class="inline">post_id</code> matches. Well, that will get you your answer&#8230;eventually. Aggregate functions in MySQL, especially <code class="inline">COUNT(*)</code> work very well when you&#8217;re only returning the <code class="inline">COUNT(*)</code> value, and when you&#8217;re only querying one MyISAM table. If you&#8217;re querying multiple tables, or using InnoDB tables then you will run into some pretty nasty performance issues. So, in this case, it&#8217;s not the best approach.</p>
<p>&#8220;Well then,&#8221; you say, &#8220;why don&#8217;t we just query for post data, then run our results through a loop to query for the comment counts?&#8221; Well, you could do that, but it&#8217;s not a solution that scales well. Let&#8217;s pretend for the moment that we&#8217;re not using caching in anyway, and let&#8217;s assume there are ten posts per page. That means in order to get the comment count for each post we would have to run one query to get our post data, and 10 subsequent <code class="inline">COUNT(*)</code> queries on the comments table to get the comment counts for each post. That&#8217;s 11 queries in total, which is hardly an efficient use of our resources. It means that each time the page loads we&#8217;re making 11 queries just for our post results ? on a high traffic site that&#8217;s a huge drain on our MySQL server.</p>
<p>In an ideal world, we&#8217;d like to make one query, on one table, and get our results. No complicated joins, aggregate functions, or excessive querying. This can be achieved very simply by setting up our data in a way that makes sense for us to retrieve it. What if our posts table looked like this:</p>
<pre><code>
posts
---------------
id INT
title VARCHAR
body TEXT
comment_count INT
</code></pre>
<p>Well, if the comment count was part of the posts table then a simple query to the posts table would get us all the information we need wouldn&#8217;t it? How can this be achieved? When comments are stored to the database all we need to do, in addition to inserting our comment data is to simply increment the value in the <code class="inline">comment_count</code> column in the posts table. This means an extra query is involved in adding a comment, but MySQL handles <code class="inline">SET column_name = column_name + 1</code> very quickly and efficiently, and we make this additional query just once when the comment is written, but we reap the savings on every page load.</p>
<p>So, yes, we are storing a little extra data, and making an extra query, but storage space is cheap, and the savings on the reads are greater than the costs on the writes.</p>
<p>Next time you&#8217;re faced with a similar scenario, look at how you can structure your tables to make your reads easier because in the real world while writing the a the fanciest query conceivable may be gratifying, but it just doesn&#8217;t scale.</p>
<img src="http://feeds.feedburner.com/~r/Thody/~4/7DlEySyMwKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.adamthody.com/2008/10/counting-comments-why-i-didnt-use-count/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.adamthody.com/2008/10/counting-comments-why-i-didnt-use-count/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.321 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-07-01 14:18:34 -->
