<?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>Kleene Code</title>
	<atom:link href="http://www.kleenecode.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kleenecode.net</link>
	<description>A brave new Hello World</description>
	<lastBuildDate>Wed, 26 Sep 2012 11:59:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Estimation Series &#8211; Part 7: Estimating with Limited Time or Information</title>
		<link>http://www.kleenecode.net/2012/09/26/estimation-series-part-7-estimating-with-limited-time-or-information/</link>
		<comments>http://www.kleenecode.net/2012/09/26/estimation-series-part-7-estimating-with-limited-time-or-information/#comments</comments>
		<pubDate>Wed, 26 Sep 2012 11:52:04 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=327</guid>
		<description><![CDATA[If we look back at <a href="http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/">the first post in this estimation series</a>, we spoke about being provided with requirements for producing estimates within a specified <strong>time</strong>, at a required <strong>accuracy</strong>, based on provided <strong>information</strong>. It's rare you'll be given the perfect amount of time and information required to reach you accuracy target. It's likely that you won't have enough time or enough information. So what options do you have? What can you do?]]></description>
			<content:encoded><![CDATA[<p>If we look back at <a href="http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/">the first post in this estimation series</a>, we spoke about being provided with requirements for producing estimates within a specified <strong>time</strong>, at a required <strong>accuracy</strong>, based on provided <strong>information</strong>. It&#8217;s rare you&#8217;ll be given the perfect amount of time and information required to reach you accuracy target. It&#8217;s likely that you won&#8217;t have enough time or enough information. So what options do you have? What can you do?</p>

<p>The good news is: there are things you can do. In fact, the only wrong thing you can do is supply a half-finished or empty document.</p>

<h2>First, Ask For More Time or Info</h2>

<p>Your first port of call should always be your boss. The time limit may not be hard and getting more time may not be a problem &#8211; you won&#8217;t know unless you ask. If the time is not negotiable, your request should also flag to your boss that you may be producing a rushed or inaccurate document.</p>

<h2>Low Accuracy Required: Ranges</h2>

<p>Ranged estimates are a fantastic easy solution if low accuracy is required. They reflect uncertainty (and thus risk). The less clear you are about the required functionality or work for a section, the wider the range will be, and the higher the risk will be. As mentioned <a href="http://www.kleenecode.net/2012/09/19/estimation-series-part-6-the-numbers/">last week</a>, break down the functional areas first. Then start putting numbers to line items at the bottom and lastly tally up each section to achieve your final range.</p>

<h3>Be Accurate Where You Can</h3>

<p>If you still have time after you&#8217;ve defined rough ranges for everything, go back and see if you can confidently estimate fixed values for any sections. It&#8217;s totally OK to have some items fixed and some ranged. In fact, having some fixed and some ranged will help others identify which areas of the estimate are still unclear and need attention.</p>

<h2>High Accuracy required: Assumptions</h2>

<p>If you need to provide solid numbers but have little time or info, the only thing you can really do is make assumptions. The great thing about assumptions is that your client can clearly see what they can get for their dollar. They might be happy with section A, not need most of what you&#8217;ve listed in section B and want to add some functionality to section C but they have a starting point. That confident starting point is of value to any client.</p>

<p>If one of the items on your list is &#8220;ability to export data&#8221;, you may be able to comfortably provide an estimate if you assume the export is manually triggered by any user, is in CSV and will be for (say) 3 tables only. Your estimation strategy (minimalist or full-featured) will help you decide what assumptions you make</p>

<p>List your assumptions clearly and keep the assumptions near to the relevant section. The document will be read in order, and it makes sense that each set of assumptions is delivered to the reader while they are thinking on the functionality at hand. Because assumptions are likely to be discussed and amended, number them clearly.</p>

<h2>Questions</h2>

<p>If you&#8217;re unsure about the inclusion, exclusion or complexity of some areas, include a set of questions for the relevant section too. Remember the aim of this is to produce an estimate, so restrict your questions to those which may affect price, time or complexity. Asking whether your client would like their sidebar column on the left or right will probably not affect their estimate so much, but knowing if they already own licences for various required components might.</p>

<p>As with assumptions, keep them short, simple and numbered to help with identification and discussion.</p>

<h2>All Of The Above</h2>

<p>I&#8217;ve found a combination of ranges, assumptions and questions is usually suitable and quick to turn out. It&#8217;s best to check with your boss before you reach for these though, to make sure that you&#8217;re meeting their accuracy needs.</p>

<h2>Avoid Ambiguous Language</h2>

<p>When you&#8217;re writing assumptions or working quickly, it can be easy to write such phrases as &#8220;basic email functionality&#8221;, &#8220;modern browsers&#8221;, &#8220;flexible&#8221;, &#8220;all&#8221;, &#8220;a wide range&#8221;, &#8220;most&#8221;. Using this type of ambiguous wording will get you into trouble. With such powerful and rich free clients as GMail, expectations of &#8220;basic email functionality&#8221; could range from &#8220;send a plaintext email to a single email address with no attachments and no report of failure&#8221; to well, GMail. Contact lists, attachments, BCCs, filing, failure notifications, etc. </p>

<p>Saying the site will work in &#8220;modern browsers&#8221; or &#8220;all mobile devices and tables&#8221; will certainly backfire. Which version number is a modern browser? Do you want to be held to account when your site doesn&#8217;t work on the client&#8217;s nephew&#8217;s Kindle browser?</p>

<p>Be very clear about your assumptions.</p>

<h2>Here&#8217;s One I Prepared Earlier!</h2>

<p>Having a set of well maintained <a href="https://drive.google.com/a/getstarted.com.au/previewtemplate?id=1k4deu0_-EloDgq34FETXb18USEPasQga4PsaSlsn134&amp;mode=public#">templates</a> prepared can be a huge help if you need to belt out a quick estimate, particularly if your company or team specialises in similar types of projects. The more detailed the template, the better. You can drop sections and adjust some areas, but if done well, you should be able to save yourself some time by at least having those more-common parts estimated and ready to go.</p>

<h2>Don&#8217;t Forget Risk and Disclosure</h2>

<p>If you&#8217;re severely rushed for time or have practically no info, it&#8217;s possible your estimate and and solution are incorrect. This should be listed as a risk, and you should note your estimating approach in the document too. For example, something like &#8220;This estimate was produced from basic information and is intended as a starting point for discussions. It is not a fixed or final quote.&#8221;</p>

<p>Next week, we wrap up this series by looking at ways to convince your boss and your client that proper estimation is worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/09/26/estimation-series-part-7-estimating-with-limited-time-or-information/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 6: The Numbers</title>
		<link>http://www.kleenecode.net/2012/09/19/estimation-series-part-6-the-numbers/</link>
		<comments>http://www.kleenecode.net/2012/09/19/estimation-series-part-6-the-numbers/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 11:46:08 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=292</guid>
		<description><![CDATA[There are plenty of systems out there for estimating software development projects. Many of them seem geared towards large companies, massive projects, product-based teams or those in academia rather than our world of smaller, faster-moving web projects. 

I'm not going to give you another Solution. I'll share what's worked for me and touch on a few traps to be aware of, and I hope it will help.]]></description>
			<content:encoded><![CDATA[<p>There are <a href="http://en.wikipedia.org/wiki/Cost_estimation_in_software_engineering">plenty of systems</a> out there for estimating software development projects. Many of them seem geared towards large companies, massive projects, product-based teams or those in academia rather than our world of smaller, faster-moving web projects. The systems I was taught at university simply do not function without masses of historical data, measurable only on projects crafted specifically for estimating in the academic vacuum. Those techniques were either not possible or not feasible in the real world. </p>

<p>What I saw when I entered the real world was, by and large, experience-based estimation, top down. Bob had built something like that back in 2010 and he estimated about 20 hours, so this should take about 20 too. No thought for whether the technologies, team, or detailed functionality were the same, or if Bob&#8217;s 2010 estimate was accurate. No checking back to see if the past project had any problems that should be avoided in this one. No <a href="http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/">risk assessment</a> or description of the work.</p>

<p>And I saw them fail again and again.</p>

<p>I&#8217;m not going to give you another Solution. I&#8217;ll share what&#8217;s worked for me and touch on a few traps to be aware of, and I hope it will help.</p>

<h2>Breaking it Down First</h2>

<p>Break down your work from the top, before you think about time &#8211; first the broad sections, then down more as much as you can in the time you have for estimating. You can see <a href="http://www.kleenecode.net/2012/09/12/estimation-series-part-5-crafting-the-estimate/">examples of a breakdown in last week&#8217;s post</a>.</p>

<p>The single most beneficial and simple thing you can do to improve your estimates is to break them down. <em>That&#8217;s it.</em></p>

<p>By breaking it down you&#8217;re more likely to be estimating for work that you can get your head around &#8211; work you&#8217;ve probably done before. Even if you can&#8217;t estimate for everything, the smaller units will allow you to get some numbers out for those areas you <em>do</em> know about, or, if it&#8217;s all you need for a rough estimate, to at least take a stab at. You can then easily identify the problem areas.</p>

<blockquote>
  <p>Setting a 16-hour maximum forces you to design the damn feature. If you have a hand-wavy three week feature called “Ajax photo editor” without a detailed design, I’m sorry to be the one to break it to you but you are officially doomed. You never thought about the steps it’s going to take and you’re sure to be forgetting a lot of them. <cite>&#8211; <a href="http://www.joelonsoftware.com/items/2007/10/26.html">Joel Spolsky</a></cite></p>
</blockquote>

<h2>Seek a Consult</h2>

<p>If you&#8217;re completely in the dark, don&#8217;t be afraid to consult with someone who knows more about those areas. But rather than asking &#8220;how long did it take you&#8221;, target your questions to cover your bases. What technology and version did they use, and is it still appropriate? Who worked on it? How many people? All at once or in sequence? What went wrong and what did you learn? Is any code salvageable or reusable? Is it documented? Is it stable? Do they have any warnings or recommendations? Are there any risks you should know about?</p>

<h2>End to End</h2>

<p>When you do break down your items and get ready to put numbers against them, estimate each one from end to end. From sitting down and opening up a work ticket to packing up. There is no such thing as a ten minute job. If it takes you ten minutes it&#8217;s because you already know the work required, you already have your environments and apps open and pages loaded, you&#8217;ve already logged your time and committed your code and updated the ticket.</p>

<p>Generally, I don&#8217;t estimate any line item for less than one hour of time. If I <em>know</em> there are a small bunch of things that will absolutely take a few minutes each once I&#8217;m ready to work, I&#8217;ll group them together in a line item with the intention that they be done together.</p>

<h2>Who Are You Estimating For?</h2>

<p>When you say something will take about two hours, do you mean it will take <em>you</em> two hours? Will you be doing all of the work?</p>

<p>Many advocate that the developer doing the work is the one to produce the estimate. This is great as long as it comes with appropriate measures and feedback, and it&#8217;s an approach works best if you&#8217;re in product development. If you&#8217;re in project development like I am, you don&#8217;t know who&#8217;ll be coding the project until well after the estimate phase. </p>

<p>So let&#8217;s say you know you can implement this line item in about two hours, your hotshot developer who specialises in this area has done similar in under an hour, and if it falls to your junior, it could take them 2-3 hours and require some on-the-job training and possibly some additional QA time. What do you do?</p>

<p>Excellent question! It depends on your boss, your project and how your team works. You have a few choices. </p>

<h3>Estimate for a Junior</h3>

<p>You could attempt to estimate for a junior, and decide if a senior is allocated the work then any time gains are the company&#8217;s benefit (the cost may increase for a senior anyway, so there may be little cost different to the client). Estimating for a junior dev is a pretty safe bet, but it can bloat your estimate &#8211; particularly if you have low expectations of your junior team (I hope you don&#8217;t)!</p>

<h3>Estimate for the Top Guns</h3>

<p>The project may be time critical and your boss may decide up front that your super-ace-amazing developers will build the whole thing. You could then make assumptions about higher output and lower defect rates. If you know you&#8217;ll be developing, you can probably reduce time on items like briefing and familiarisation, because you&#8217;re already all over it.</p>

<h3>Estimate Sections for Different Skill Levels</h3>

<p>If you charge different rates for different developer levels, you might need to take that into account when you estimate each section. You might want to give the more complex, risky sections to seniors and the safer areas to juniors. </p>

<h3>Estimate for Average Joe</h3>

<p>Alternatively, your company could be happy for you to estimate &#8220;average&#8221; pace (not hotshot, not n00b) and cop the additional cost if a junior team member takes up the task.</p>

<p>Decide on your approach before you start putting numbers to anything and get your boss on board, and be flexible enough to adopt an alternative tactic if it&#8217;s appropriate for the project. </p>

<p>There are two important things to remember:</p>

<ol>
<li>declare your estimate calculation in the provided estimate, for each section if you need to. Make sure everyone&#8217;s on the same page.</li>
<li>when you do know who is doing what, have each developer confirm the estimate for the sections they&#8217;ll implement.</li>
</ol>

<p>If your estimates and assumptions are off, you&#8217;ll want to know as soon as possible, and no one will know better than the dev who needs to build it.</p>

<h2>The Zone: Interruptions and Your Estimates</h2>

<p>So you&#8217;ve estimated that the task will take 4 hours of effort to complete. I&#8217;m guessing you&#8217;ve probably assumed 4 hours uninterrupted. 4 hours of developer utopia where you don&#8217;t get tapped on the shoulder or answer phones or emails or help other team members. I don&#8217;t know about your world, but that doesn&#8217;t happen in mine. And as much as you might say &#8220;well that interruption time shouldn&#8217;t come out of my 4 hours&#8221; the fact is that the best developers I know maintain a particularly detailed mental model whilst developing. One which begins to decay the minute they&#8217;re interrupted. <a href="http://www.joelonsoftware.com/articles/fog0000000022.html">It takes time to regain that and get back into the zone</a>.</p>

<blockquote>
  <p>If the average incoming phone call takes five minutes and your reimmersion period is fifteen minutes, the total cost of that call in flow time (work time) lost is twenty minutes. <cite>&#8211; <a href="http://www.amazon.com/gp/product/0932633439/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633439&amp;linkCode=as2&amp;tag=kcblog-20">Peopleware: Productive Projects and Teams</a>, on &#8216;Flow&#8217;</cite></p>
</blockquote>

<p>Now the great Peopleware book uses this as an illustration of why developers should work in a quiet, interruption-free environment. I don&#8217;t know if you&#8217;ll do that, but what you do need to acknowledge is that interruptions affect your effort estimate, despite your initial feeling that it would only affect elapsed time. You know best how your company resources its development team. Are your developers likely to be able to work unhindered for a 4 hour block, or will they only get an hour here and there? You know best how long it might <em>really</em> take you to finish that 4 hour job. </p>

<p>Consider factoring some of that time into your estimate, or at least noting that your estimate was produced under the assumption that work is uninterrupted.</p>

<h2>Presenting the Totals</h2>

<p>Many of us lose our ability to grasp numbers over a certain size. I&#8217;m the worst for it. Tell me something will take a thousand hours and I&#8217;ll look at you blankly and think that sounds like a <em>lot</em> of work but not be sure how much. Tell me something will take about six months and I&#8217;ll immediately have a better idea of how much work you&#8217;re talking about. </p>

<p>This may also happen to our clients, but on top of that, the total numbers you present will encourage expectations. Interestingly enough, the units we use to describe our totals them can affect those expectations. Saying something will take &#8220;about 125 working days&#8221; creates an expectation of delivery at around the 125 days-of-effort mark, give or take a few days. Saying it will take 6 months can help to convey immediately the amount of work involved and may subtly create the expectation of 5-7 months of effort.</p>

<blockquote>
  <p>Accuracy of units can be an extremely useful tool when you&#8217;re working with a rough or hastily created estimate.</p>
</blockquote>

<p>I&#8217;m not saying you should estimate your line numbers in anything other than hours. But consider presenting your totals in broader units of measurement, particularly for estimates produced under time pressure where high accuracy is not required. </p>

<div id="attachment_310" class="wp-caption alignnone" style="width: 454px"><a href="http://www.amazon.com/gp/product/020161622X/ref=as_li_ss_tl?ie=UTF8&#038;camp=1789&#038;creative=390957&#038;creativeASIN=020161622X&#038;linkCode=as2&#038;tag=kcblog-20"><img src="http://www.kleenecode.net/wp-content/uploads/2012/09/Screen-Shot-2012-09-19-at-7.29.20-PM.png" alt="from the book 'Pragmatic Programmer', on estimation Units" title="Pragmatic Programmer on Estimation Units" width="444" height="147" class="size-full wp-image-310" /></a><p class="wp-caption-text">Pragmatic Programmer on Estimation Units</p></div>

<p>The famous software development book <a href="http://www.amazon.com/gp/product/020161622X/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X&amp;linkCode=as2&amp;tag=kcblog-20">Pragmatic Programmer</a> makes their recommendations above, which may help you as a guide when you&#8217;re starting out. Use what works for you. If you do find yourself with a project estimate over around 25 weeks (6 months) then consider breaking it down into separate phases and only fully estimating the first one. On such a large project, a lot could change as it progresses!</p>

<h2>Improving Your Estimates</h2>

<p>When your project is finished and live, go back and review the actual hours spent against your estimates. Don&#8217;t just look at the project total, but look at your breakdowns. How far off were you, and more importantly, why? Were you under because the hotshot was allocated to it, or because your rough estimate was just too roomy? Were you over because your junior got his training whilst working on your task, or because you missed some complexities? </p>

<p>As the one carrying out risk assessments and estimates, what can you learn from the completed project? What will you do differently next time?</p>

<h2>Templates are Useful! Don&#8217;t Neglect Them</h2>

<p>Have a <a href="https://drive.google.com/a/getstarted.com.au/previewtemplate?id=1k4deu0_-EloDgq34FETXb18USEPasQga4PsaSlsn134&amp;mode=public#">prepared template</a> or set of templates will help dramatically reduce the turnaround time for those urgent estimates. I&#8217;ve found that pre-populating them with starting numbers for the more common tasks is a great time saver and can help your sales team understand what&#8217;s involved in most projects too.</p>

<p>Remember to keep your templates up to date! Adjust your assumptions, numbers and notes as part of your post-completion project review. Even if they are just reminder notes to yourself or other estimators. You&#8217;ll be surprised at how much your estimates improve in a short period of time :-) </p>

<h2>Resources</h2>

<ol>
<li>Book: <a href="http://www.amazon.com/gp/product/020161622X/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X&amp;linkCode=as2&amp;tag=kcblog-20">Pragmatic Programmer: From Journeyman to Master</a> </li>
<li>Book: <a href="http://www.amazon.com/gp/product/0932633439/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633439&amp;linkCode=as2&amp;tag=kcblog-20">Peopleware: Productive Projects and Teams</a></li>
<li><a href="http://www.joelonsoftware.com/items/2007/10/26.html">Joel on Software: Evidence Based Scheduling</a></li>
<li><a href="http://www.joelonsoftware.com/articles/fog0000000022.html">Joel on Software: Human Task Switches Considered Harmful</a></li>
<li>Book: <a href="http://www.amazon.com/gp/product/147830054X/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=147830054X&amp;linkCode=as2&amp;tag=kcblog-20">Effective Programming, More Than Writing Code</a></li>
<li><a href="http://www.smashingmagazine.com/2009/06/11/effective-strategy-to-estimate-time-for-your-design-projects/">Smashing Mag: Effective Strategy to Estimate Time for your Design Projects</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/09/19/estimation-series-part-6-the-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 5: Crafting the Estimate</title>
		<link>http://www.kleenecode.net/2012/09/12/estimation-series-part-5-crafting-the-estimate/</link>
		<comments>http://www.kleenecode.net/2012/09/12/estimation-series-part-5-crafting-the-estimate/#comments</comments>
		<pubDate>Wed, 12 Sep 2012 12:48:57 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=288</guid>
		<description><![CDATA[You have your <a href="http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/">inputs and needs defined</a>, you know <a href="http://www.kleenecode.net/2012/08/15/estimation-series-part-2-choosing-the-right-strategy/">which estimation strategy</a> is best, you've carried out some <a href="http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/">preliminary risk assessment</a> and you're comfortable with your understanding of <a href="http://www.kleenecode.net/2012/08/29/estimation-series-part-4-effort-elapsed-time-and-cost/">effort, elapsed time and cost</a>. Well done!

Now how do you get started on the meaty business of actually producing the estimate? Let's take a look.]]></description>
			<content:encoded><![CDATA[<p>You have your <a href="http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/">inputs and needs defined</a>, you know <a href="http://www.kleenecode.net/2012/08/15/estimation-series-part-2-choosing-the-right-strategy/">which estimation strategy</a> is best, you&#8217;ve carried out some <a href="http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/">preliminary risk assessment</a> and you&#8217;re comfortable with your understanding of <a href="http://www.kleenecode.net/2012/08/29/estimation-series-part-4-effort-elapsed-time-and-cost/">effort, elapsed time and cost</a>. Well done!</p>

<p>Now how do you get started on the meaty business of actually producing the estimate? Let&#8217;s take a look.</p>

<h2>Break It All The Way Down</h2>

<p>Before you even think about numbers, focus on what needs to be done. Much like when you write an essay, start with the broad areas then break those down into smaller and smaller sections. Aim to get down to a point where no single line item is more than about 8-16 hours. I prefer the lower end of that scale (about a day&#8217;s work) and others in our industry like Joel Spolsky work very well with the <a href="http://www.joelonsoftware.com/items/2007/10/26.html">16 hour limit when estimating</a>.</p>

<p>This forces you to construct &#8211; even vaguely &#8211; a game plan, an architecture for the solution. It forces you to get your head around what&#8217;s involved and gets you past those first few minutes where the problem may seem too small (&#8220;That should only take an hour or so&#8221;) or too large (&#8220;That&#8217;s going to take weeks&#8221;). By taking the time to think more deeply on it and start describing the work involved, you may realise that your hour wasn&#8217;t enough, or that the weeks of pain can be reduced with a different approach.</p>

<p><img src="http://www.kleenecode.net/wp-content/uploads/2012/09/Screen-Shot-2012-09-12-at-9.37.24-PM-e1347449988435.png" alt="" title="An example of an partly-complete estimate for a newsletter module" width="500" height="424" class="alignnone size-full wp-image-290" />
<p class="caption">Above: An example of an partly-complete estimate for a newsletter module.</p></p>

<h2>Include All The Things</h2>

<p>Because you&#8217;re responsible for estimating the effort involved in the work (and not how much it will cost, or what to charge) ensure you include it all.
Meetings, planning, producing documents, briefing your team, status reports, internal testing&#8230; all of it. Based on reasonable expectations, allow effort for UAT phase(s), launch and some support after that for the inevitable tweaks and adjustments. Provide your boss and your client with the information of expected effort &#8212; they can deal with cost concerns, but at least the business understands the effort required to complete the project.</p>

<p>Also list any materials or fixed price elements that you know you&#8217;ll need &#8211; licences, hardware, training packages, permits etc that aren&#8217;t related to effort.</p>

<p>Some areas where effort can easily be forgotten:</p>

<ul>
<li>development environment</li>
<li>briefing team members</li>
<li>developer testing (testing their own work)</li>
<li>opening documents and tickets and reading them</li>
<li>communications &#8211; reading and responding to team and client comms</li>
<li>support during UAT</li>
<li>documentation (if none is needed for the client, the internal documentation is needed at least)</li>
<li>etc</li>
</ul>

<h2>Remember Your Time And Constraints</h2>

<p>If you&#8217;re under time pressure, working from the top down should help you skim over the entire project rather than only getting part way through. If you don&#8217;t get to that point where all your line items are under 8 hours, consider using broad ranges rather than providing numbers, to make it clear that there&#8217;s uncertainty there. Later in the series I&#8217;ll dive into strategies and options when you have little time or info.</p>

<h2>Don&#8217;t Forget Risk Management</h2>

<p>While you&#8217;re fleshing out your technical architecture and thinking about the work that needs to be done, you&#8217;ll begin to see more clearly where things could go wrong (and hopefully ways to avoid the risk). As you uncover these, add them to the risk assessment or remove any risks that are no longer an issue if you&#8217;ve changed your approach along the way.</p>

<h2>Save Time: Use Templates</h2>

<p>Templates for estimates can be amazing time savers, particularly when you&#8217;ve taken the time to populate them with your data. You can flesh them out with your rough estimates for common tasks, and drop in shells of sections which can act as prompts for effort commonly forgotten. The most important thing is to keep them maintained &#8211; keep your numbers up to date, if you have a project where something was missed or could&#8217;ve been done better, update your estimate document to reflect the lesson learnt so your next project doesn&#8217;t fall into the same trap.</p>

<p>To see what I mean, check out <a href="https://docs.google.com/a/getstarted.com.au/previewtemplate?id=1k4deu0_-EloDgq34FETXb18USEPasQga4PsaSlsn134&amp;mode=public">my preferred estimation template</a>, which I&#8217;ve shared as a free template on Google Docs under Creative Commons licence. Go crazy!</p>

<p>Next week we&#8217;ll look at how to come up with the numbers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/09/12/estimation-series-part-5-crafting-the-estimate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 4: Effort, Elapsed Time and Cost</title>
		<link>http://www.kleenecode.net/2012/08/29/estimation-series-part-4-effort-elapsed-time-and-cost/</link>
		<comments>http://www.kleenecode.net/2012/08/29/estimation-series-part-4-effort-elapsed-time-and-cost/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 12:41:22 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=259</guid>
		<description><![CDATA[When you estimate, what do you produce? Do you figure out how long things will take, or do you go straight to a dollar figure and a finish date?

Hopefully you produce an estimate for effort first, and the project cost and the delivery dates are worked out after that. Effort, elapsed time and project cost are valuable concepts and keeping them straight can help you and your project stay on the path to success.]]></description>
			<content:encoded><![CDATA[<p>When you estimate, what do you produce? Do you figure out how long things will take, or do you go straight to a dollar figure and a finish date?</p>

<p>Hopefully you produce an estimate for effort first, and the project cost and the delivery dates are worked out after that. Effort, elapsed time and project cost are valuable concepts and keeping them straight can help you and your project stay on the path to success.</p>

<p><strong>Effort</strong> relates to time that passes whilst doing work on your task, and directly influences the project cost (usually proportionally). On a small task you might say you&#8217;ll invest 4 hours of effort, meaning if you sit down and work for 4 hours it will be complete.</p>

<p><strong>Elapsed time</strong> tells how much time will pass before you complete the task. It influences your delivery date and doesn&#8217;t necessarily match up with the amount of effort you&#8217;ve estimated.</p>

<p>Let&#8217;s say that after 2 hours of work you need to wait on something &#8211; maybe if you submit your app to the app store. You know you&#8217;ll receive a response in around 48 hours and when you receive it, you can complete the other 2 hours of work. You&#8217;ve only invested 4 hours of effort all up, but from start to end of the project, 3 or 4 days may have elapsed. In contrast, you could have 4 tasks each of one hour which can all be completed in parallel. Still four hours of effort, but only an hour has elapsed from kick-off to delivery.</p>

<p>When you produce a project estimate, provide your numbers in terms of effort. If you know of any expected delays or sections that can or can&#8217;t be completed in parallel, communicate that to your project manager &#8212; particularly if they&#8217;re talking delivery dates with the client.</p>

<p>We&#8217;ll talk more about exactly what an hour of effort includes in my next post, for now we&#8217;ll focus on the differences between effort, elapsed time and cost.</p>

<h2>Cost or Price: Sometimes Words Matter</h2>

<p>When I say &#8216;cost&#8217; I mean the dollar value charged for the project. It&#8217;s usually the sum of your hours of effort, multiplied by your hourly rate, added to any fixed costs of licences and tools etc.</p>

<p><img src="http://www.kleenecode.net/wp-content/uploads/2012/08/ProjectCostEquation-e1346242130145.png" alt="" title="ProjectCostEquation" width="493" height="16" class="alignnone size-full wp-image-269" style="background-color:white;padding:15px;text-align:center;" /></p>

<p>If you spend more time in finance than I do, you&#8217;ll probably tell me &#8216;cost&#8217; is what is expended to do the work, &#8216;price&#8217; is what you charge the client, and budget is the amount of money you have available to cover the cost.</p>

<p>I don&#8217;t work in finance so I call it cost rather than price, and I use that term with clients as well because <em>cost just sounds better</em>. It implies a <strong>value</strong> which represents losses incurred by your company in order to carry out the work (though we all know better). It sounds planned, genuine, grounded in reality and therefore not open to negotiation. </p>

<p>&#8216;Price&#8217; on the other hand, is where <a href="http://www.ncsu.edu/project/calscommblogs/economic/archives/2008/06/price_versus_co.html">it seems the economists and I agree</a>: price is the sticker you put on it, it&#8217;s the amount someone is willing to pay. The implication here is that prices are arbitrary, likely to be inflated and can be haggled.</p>

<p>One covers costs, but pays a price. The two words carry with them whispers of implications and motive. Use them carefully.</p>

<p>I&#8217;d love to see the psychology or linguistics studies around it (I couldn&#8217;t find any when I hunted around) but in my experience it seems that referring to a project &#8216;cost&#8217; will be subtly better received than referring to the &#8216;price&#8217;. If you know of any studies on it, send them through!</p>

<h2>On Separating Cost and Effort</h2>

<p>Sometimes there are valid business reasons why your technical estimators don&#8217;t know how much you charge clients for their time (they might leave you and go work for them directly!). Sometimes clients have different rate cards under different business relationships and the estimator doesn&#8217;t (or shouldn&#8217;t) have to keep up to date with all the arrangements.</p>

<p>But there are some other big reasons worth considering.</p>

<h3>Project Discounts</h3>

<p>In reality, particularly at the smaller business you and I do (or have, or will) work in, there are times when it&#8217;s in the business&#8217; best interest to offer the project at a lower charge than usual. It could be to gain entry into a sought-after industry, or for an amazing portfolio project you don&#8217;t want to miss. </p>

<p>This is perfectly OK &#8212; good, even &#8212; as long as it&#8217;s handled correctly.</p>

<p>Bad companies will (if you&#8217;re even asked for an estimate) tally up the estimated effort into a total cost, reduce that cost, say 20%, to sweeten the deal to the client. They then translate that cost back into hours and expect your team to implement 100% of the project functionality in 80% of the time. It&#8217;s entirely likely that as the project progresses, they will completely forget your original estimate and hold you accountable for the project going &#8216;over budget&#8217;. Terrible companies will go one step further and commit to a delivery schedule based on those reduced hours, requiring you to turn out probably unachievable amounts of work in ridiculous timeframes.</p>

<p>This is not fiction. This is a sad, avoidable reality. Though on the flip side, projects can also be oversold and potential profits chewed up (or become a loss!) because &#8220;we have plenty of room in the budget, do whatever&#8221;.</p>

<p>Better companies will preserve your original effort estimate, lower the hourly rate charged (thereby reducing the cost of the project, but not the effort expected) and continue to plan their schedules according to the effort. If they&#8217;re smart they&#8217;ll be good at planning and allow slack time in the schedule to deal with issues so the expected elapsed time is achievable.</p>

<p>Even better companies will do this transparently. They&#8217;ll show the client how many hours are expected, show them the original hourly rate and show them the discount they&#8217;re receiving because they&#8217;re awesome. It can be advantageous to use the psychology of discounting and make the client feel as if they&#8217;re getting a good deal, which by choosing your fine self, they no doubt are.</p>

<blockquote>
  <blockquote>
    <p>It&#8217;s important that the choice to discount is an <strong>informed decision</strong>. Your sales team should offer a discount only once the true scope and weight of the project is known as well as the risks involved. They should never sell a project before knowing it, and certainly should never discount it without understanding what&#8217;s being given away for free and how risky the project is!</p>
  </blockquote>
</blockquote>

<p>One good tactic I&#8217;ve found is to ensure that other than the sales team, all project timing and budget discussions are in terms of effort rather than cost. Even between the PM to estimator. This helps keep the focus on the estimated hours and the plan, rather than the sales decision made to discount. At the end of the day, it also changes the vibe in the team &#8211; they&#8217;ll be working focused on time rather than feeling as though their skills are reduced to a dollar figure in a spreadsheet.</p>

<p>If you&#8217;ve seen these mistakes being made, as a technical estimator you have a great opportunity to educate your team on how to avoid them in future.</p>

<h3>Reusing Estimates Over Time</h3>

<p>If you estimates work with dollar figures per hour rather than hourly rates, it will be harder for you to re-use and adapt estimates and templates over time. It&#8217;s much easier to change your hourly rates calculation on a project total than to convert line-item dollar totals into hours and then back. And if your costs have been adjusted up or down, then you&#8217;ll no longer know how many hours of effort you expected to invest in a particular piece of work.</p>

<h3>Charging by Blocks of Time</h3>

<p>Some companies charge in minimum blocks of time, even if it&#8217;s not all used. If your company charges in blocks of 4 hours and your task should only take 2, it&#8217;s important those two pieces of information remain separate in your scheduling system so your developers can continue onto to other work. Transparent reporting on this can also encourage your client to bundle their requests better in future. Less profit for you, perhaps, but a much happier client and more efficient use of developer time.</p>

<h2>Key points</h2>

<ul>
<li>measure estimates in effort (more on that how to do that later)</li>
<li>inform your PM of areas affecting elapsed time if possible</li>
<li>always separate effort from cost</li>
<li>estimate effort before pricing or discounting the project </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/29/estimation-series-part-4-effort-elapsed-time-and-cost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Friday Roundup</title>
		<link>http://www.kleenecode.net/2012/08/24/friday-roundup-2/</link>
		<comments>http://www.kleenecode.net/2012/08/24/friday-roundup-2/#comments</comments>
		<pubDate>Fri, 24 Aug 2012 06:00:36 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Friday Roundup]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=186</guid>
		<description><![CDATA[Some great js tools in my Friday roundup]]></description>
			<content:encoded><![CDATA[<p>A small collection of a few cool and nerdy things I&#8217;ve found on the web recently. I hope you find them interesting or useful :-)</p>

<h3><a href="http://gridster.net/">Gridster</a></h3>

<p>A drag-and-drop multi-column grid. It&#8217;s so smooooooth!</p>

<hr />

<h3><a href="http://www.informit.com/promotions/promotion.aspx?promo=138930">The Best Programming Advice I Ever Got</a></h3>

<p><a href="http://www.informit.com">InformIT</a> brings us a great series of blog posts where experts share what has helped them become better programmers. </p>

<hr />

<h3><a href="http://jsonenglish.com/projects/flex/">Flex</a></h3>

<p>A fluid and asymmetrical grid plugin for jQuery.</p>

<hr />

<h3><a href="http://www.readwriteweb.com/archives/5-reasons-why-web-publishing-is-changing-again.php">5 Reasons Why Web Publishing is Changing (Again)</a></h3>

<p>Thanks to <a href="http://www.twitter.com/ricwrite">@ricwrite</a> for passing on this recommendation from <a href="http://www.twitter.com/rww">@rww</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/24/friday-roundup-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 3: Project Risk Management</title>
		<link>http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/</link>
		<comments>http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/#comments</comments>
		<pubDate>Wed, 22 Aug 2012 13:23:06 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=227</guid>
		<description><![CDATA[Projects fail every day and failure is often preventable. By taking a moment to identify possible problems and manage them, you're helping establish a foundation for project success and encourage realistic expectations of both your team and the client's.

Let's talk about risk management!]]></description>
			<content:encoded><![CDATA[<p>Projects fail every day and failure is often preventable. By taking a moment to identify possible problems and manage them, you&#8217;re helping establish a foundation for project success and encourage realistic expectations of both your team and the client&#8217;s.</p>

<blockquote>
  <p>This is about allowing your boss and the client to make <strong>informed decisions</strong>, and about heading off foreseeable problems before they actually happen.</p>
</blockquote>

<p>When everyone understands the potential hiccups and plans up front, a wonderful thing happens. When something &#8216;goes wrong&#8217; rather than hitting the panic button, the team can calmly proceed with the plans and alternatives put in place.</p>

<h3>The Legal Thing</h3>

<p>Another advantage of identifying risks up front is the protection it can afford in the project contract. In the aftermath of project failure, it can be difficult for a client to question your process and preparedness when you have documented and shared the risks and impacts up front. But don&#8217;t use that as the main reason you assess risk. Telling the client it was in the contract won&#8217;t help you get the project back on track ;-)</p>

<h2>What is Risk Management, anyway?</h2>

<p>A risk is any factor or event that can affect: cost, schedule, quality, or attainment of project goals. Attainment of goals doesn&#8217;t just include functional requirements but also things like potential legal issues for you or your client.</p>

<p>Risk management is the process of identifying the risks in your project, analysing them, and treating them by putting in place a plan to avoid, reduce or accept the consequences of each risk.</p>

<h2>Identifying Risks</h2>

<p>OK, I don&#8217;t say this often, but it&#8217;s time to put on your pessimistic hat! To get the ball rolling, ask yourself, in all seriousness:</p>

<blockquote>
  <p>What could possibly go wrong?</p>
</blockquote>

<p>Then list all the issues you can think of. As you flesh out your solution architecture and describe what you intend to build, you&#8217;ll uncover more risks by being aware of when you make assumptions and also by asking yourself &#8220;what happens when?&#8221;. When you know your project includes migration of content from an old system, you might make an assumption about the amount or format of data, or its quality. What happens when it&#8217;s more than you expect, or in a different format, or worse still, if there are problems extracting it for you in the first place? How will your project be affected?</p>

<p>Being aware when you&#8217;re making assumptions can be difficult, but it does get easier with practice! :-)</p>

<p>Risks aren&#8217;t limited to the development process only &#8211; if you can think of any problems in the broader scope of the project, include it. But don&#8217;t get too bogged down and spend too long documenting them all. Remember you&#8217;ll need to analyse each risk you list. If you&#8217;re struggling to think of what might go wrong, move on. After you&#8217;ve experienced hiccups on a few projects, potential points of failure become much easier to spot.</p>

<h3>Examples of Risks</h3>

<ul>
<li>Documents / data / content not supplied by the required dates</li>
<li>Availability or responsiveness of key personnel</li>
<li>Hard deadline</li>
<li>Reliance on third party (e.g. custom integration may required another party to develop custom code that you need)</li>
<li>Lack of confirmed requirements or input information into estimation process</li>
<li>Lack of time to produce estimate</li>
<li>Lack of resources / schedule clashes</li>
<li>Unfamiliar third party component (if you&#8217;ve never used it, it might take longer to use or there could be unexpected issues or limitations)</li>
<li>Designs produced by external party</li>
<li>Indirect access to decision makers</li>
<li>Junior personnel on the project</li>
<li>Permission withheld to use critical third party product, service or content</li>
<li>Loss of SEO ranking</li>
<li>Server capabilities are insufficient</li>
<li>etc</li>
</ul>

<h2>Analysing Risks: Likelihood and Impact</h2>

<p>If you&#8217;re familiar with formal project management methodologies, you may&#8217;ve heard these described these as probability and impact, or maybe probability and severity. Different systems use different names, but the two factors represented are always the same.</p>

<p><strong>Impact</strong> describes how affected the project will be if the risk event occurs. I usually rate impact as low, moderate or severe. &#8216;Low&#8217; is something fairly easily recovered from after the event, &#8216;moderate&#8217; requires a bit more work and may have knock-on effects and a &#8216;severe&#8217; impact implies project failure. </p>

<p><strong>Likelihood</strong> describes the probability of the event occurring. A risk is usually described as having a low, moderate or high likelihood.</p>

<p>You&#8217;ll notice that I&#8217;m not getting too specific here. Unless you want to take on massive project management methodologies and the overhead that goes with them, talking numbers and ratings and classifications seems to be a waste of time. Those calculation systems also have the disadvantage of being less understandable to the everyday Joe who could be your client reading your assessment. The ratings I&#8217;m describing are subjective, but in this realm of small-medium project-based commercial web development, I&#8217;ve found there is significant value to even a subjective analysis.</p>

<h3>Prioritising: The Matrix</h3>

<p>The point of analysis is to help prioritise the risks. High priority risks need attention, very low priority risks can be ignored. Prioritising risks helps the reader of your document can determine if the overal level of risk is <em>acceptable</em>. Once you have your likelihood and impact ratings, a matrix like the one below can help you prioritise.</p>

<div class="grad-wrapper">
    <div class="grad"><span style="display:none">This matrix displays likelihood (low to high) against impact (low to severe).</span></div>
    <span class="x-axis-head">Impact</span> 
    <span class="x-axis-low">Low</span> 
    <span class="x-axis-high">Severe</span> 
    <span class="y-axis-head">Likelihood</span> 
    <span class="y-axis-low">Low</span>
    <span class="y-axis-high">High</span>         
</div>

<p><p class="caption" style="text-align: center;font-style: italic;">Prioritisation matrix</p></p>

<p>Risks identified towards the top right need more of your attention than those in the bottom left, because they&#8217;re likely to happen and if they happen the impact will be severe. Too many risks in the red area could be an indicator of serious problems with the project and might ring alarm bells for you or the client.</p>

<p>If you&#8217;re not visual, a <a href="http://en.wikipedia.org/wiki/Risk_management#Composite_Risk_Index">composite risk index</a> is another way to evaluate the same thing.</p>

<h2>Treatment</h2>

<p>You have many options open to you as potential treatments for risks. Thinking outside the box can help a lot here. Most treatments fall into the following categories:</p>

<h3>Avoidance</h3>

<p>Is there a way to completely sidestep the issues up front? e.g. if there&#8217;s a problem with using a certain component, can you simply use an alternative component which doesn&#8217;t have that problem?</p>

<h3>Reduce Likelihood</h3>

<p>If you can&#8217;t completely avoid the risk, what can you do to make it less likely to happen? If you need to select a third party component that you&#8217;ve never used before, allowing additional time for proper research and selection will reduce the likelihood of finding problems later. If your rough schedule makes it look like you&#8217;ll zoom past a hard delivery date, perhaps it&#8217;s appropriate to recommend a phased approach which critical features delivered first. It&#8217;s less likely that come D-Day, your client will be without a system that meets their basic needs.</p>

<h3>Reduce Severity</h3>

<p>If it does happen, what steps can you take to reduce the impact? If your development server packs it in, ensuring there are frequent backups or source control and a well-known recovery procedure will reduce the impact of the setback. If content loading could be a problem, choosing to get started on content preparation and cleansing early could reduce the impact of any delays if it turns out to be time consuming.</p>

<h3>Contingency (Risk retention)</h3>

<p>Your final option is not to do anything up front, but acknowledge the risk by allowing enough time or budget to accommodate any impact. If it doesn&#8217;t happen, then the project isn&#8217;t any worse off. An example here is </p>

<p>This can be a hard one to use well, particularly if your quotes are fixed price as your client won&#8217;t want to pay for that component until it eventuates. When dealing with rough numbers, contingencies can create false hopes &#8211; saying &#8220;we may need up to another week if that happens&#8221; could leave you with a client optimistically expecting you to be done in a day or two. Use contingencies carefully, and make sure your project manager and your client understand what they mean.</p>

<h3>Gamble (Do nothing)</h3>

<p>You could choose to do absolutely nothing and cross the bridge if and when you come to it. For low risks (in our bottom left green quadrant) this is fine. In some projects and with some clients and for some risks, this is an appropriate course of (in)action for higher risks too, but not often. Even if you decide to do nothing, it&#8217;s a good habit to leave the risk assessment there as your acknowledgement so that others are aware of the possibility and of the decision.</p>

<h2>An example</h2>

<p>Here&#8217;s a formal, detailed example.</p>

<h3>Risk: Design produced by external party does not meet web or CMS requirements</h3>

<p>As (your company) specialises in web development and the CMS to be used for this project, we are able to ensure any designs proposed are workable and suitable for the project. Designs from any other source may not meet basic requirements of web or of working with the selected CMS. In addition there are specific accessibility requirements for this project with legal ramifications for (your client).</p>

<p><strong>Likelihood:</strong> High<br />
<strong>Impact:</strong> Severe</p>

<p><strong>Potential impact:</strong></p>

<ul>
<li>failure to meet legal accessibility requirements</li>
<li>inability to meet functional or presentational requirements if design is incompatible with web or CMS</li>
<li>budget overrun to accommodate changes, redesign or additional work</li>
<li>schedule overrun to accomodate changes, redesign or additional work</li>
<li>quality compromised if we need to force an incompatible design to work</li>
</ul>

<p><strong>Recommendations:</strong></p>

<p>To avoid the risk:</p>

<ol>
<li>Ideally, designs developed by (your company) if possible. </li>
</ol>

<p>Or, to reduce the risk:</p>

<ol>
<li>Designer to be supplied with accessibility requirements asap, and instructed to test against them prior to delivery of graphics</li>
<li>(Your company) to provide checklist of recommendations for web and CMS compatibility in designs</li>
<li>Project plan to be expanded to include time and budget for graphics testing phase. Testing to be carried out by (your company). Designer will be informed of this intention.</li>
<li>Inclusion of a critical acceptance checkpoint for graphic design. All feedback and requested changes must be actioned and delivered by that date in order for project delivery to remain on track. Designer is to be informed of this intention.</li>
<li>Budget and time increase of (X) hours to markup phase to accommodate expected issues or adjustments</li>
<li>Budget and time increase of (Y) hours to implementation of templates A,B,C to accommodate expected issues or adjustments</li>
</ol>

<h2>Risk Analysis Done, What Now?</h2>

<p>As an estimator, it&#8217;s usually not your job to decide if the risk is acceptable or not. That&#8217;s up to your boss and the client. Your client may be happy to take a gamble on the project, but your boss may decide the risk is too high to take it on. From experience, I recommend being transparent with your risk assessments in order to set realistic expectations of both your management team and the client. </p>

<p>Analysing risk at the start and then forgetting about them gets you nowhere. The recommendations made in your initial assessment need to be reviewed and actioned, and your project manager needs to regularly re-assess those risks as the project progresses.</p>

<h2>Learning and Improvement</h2>

<p>As with most things, learn from your mistakes. When a project fails unexpectedly, look at what happened and how you might be able to identify and manage that risk in future projects. Allow your team to benefit from your learnings by sharing your knowledge. You might also find it handy to keep a shortlist of risks to watch out for, as a reminder when you&#8217;re estimating your next project.</p>

<p>By acknowledging project risk and making an attempt to avoid problems before they happen, you&#8217;re already on the right track :-)</p>

<h3>Further reading</h3>

<ol>
<li><a href="http://www.techrepublic.com/article/managing-project-risk-is-easy-with-the-right-process/6180509">&#8220;Managing Project Risk is Easy with the Right Process&#8221; &#8211; Tech Republic</a></li>
<li><a href="http://ipma.ch/">International Project Management Association</a></li>
<li><a href="http://www.amazon.com/gp/product/1933890517/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1933890517&amp;linkCode=as2&amp;tag=kcblog-20">BOOK: A Guide to the Project Management Body of Knowledge (PMBOK 4e)</a></li>
<li><a href="http://www.apm.org.uk/">Association for Project Management (UK)</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/22/estimation-series-part-3-project-risk-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Friday Roundup</title>
		<link>http://www.kleenecode.net/2012/08/17/friday-roundup/</link>
		<comments>http://www.kleenecode.net/2012/08/17/friday-roundup/#comments</comments>
		<pubDate>Fri, 17 Aug 2012 05:00:10 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Friday Roundup]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=118</guid>
		<description><![CDATA[Friday roundup! 
Javascript gauges with Raphaeljs, content strategy, Webkit inspector, jquery functions, software development and scientific method]]></description>
			<content:encoded><![CDATA[<h3>No More Fake Jamaican Vacation?</h3>

<p>The <a href="http://www.youtube.com/user/RhettandLink">Rhett and Link</a>&#8216;s <a href="http://www.youtube.com/watch?v=23H8IdaS3tk">Fake Jamaican Vacation caption fail video</a> has been used (hilariously) to demonstrate to web developers the difficulty of <a href="http://www.w3.org/2008/06/video-notes">providing accessible rich media on the web</a>. But could we be drawing near the end of the CaptionFail era? In his two month internship at Google, Rio built an <a href="http://support.google.com/youtube/bin/answer.py?hl=en&amp;answer=100077">online caption editing tool for Youtube</a>, greatly reducing the effort and complexity of providing captioning on uploaded video. Nice work, Rio!
<a href="http://thenextweb.com/google/2012/08/14/google-intern-launches-inline-caption-editing-youtube/">Full Article &#8211; The Next Web</a></p>

<iframe width="535" height="300" src="http://www.youtube.com/embed/23H8IdaS3tk" frameborder="0" allowfullscreen></iframe>

<p>It never gets old.</p>

<hr />

<h3><a href="http://www.justgage.com">JustGage</a></h3>

<blockquote>
  <p><a href="http://www.justgage.com">JustGage</a> is a JavaScript plugin for generating and animating nice &amp; clean gauges. It is based on the <a href="http://raphaeljs.com">Raphaël</a> library for vector drawing, so it’s completely resolution independent and self-adjusting.</p>
  
  <p>&#8211; <cite>(via <a href="http://codevisually.com/justgage-a-javascript-plugin-for-generating-and-animating-nice-clean-gauges">codevisually</a>)</cite></p>
</blockquote>

<p>Now that we have more devices and resolutions to support than ever, retina displays and pinch-and-zoom, scalable graphics should be high on your list of must-have&#8217;s for your next project. I love <a href="http://raphaeljs.com">Raphaël</a> &#8211; if you haven&#8217;t seen it yet, check it out. And also <a href="http://g.raphaeljs.com/">gRaphaël</a> for presenting charts. And while you&#8217;re there, familiarise yourself with the other other options and how they compare: <a href="http://coding.smashingmagazine.com/2012/02/22/web-drawing-throwdown-paper-processing-raphael/">Web Drawing Throwdown: Paper.js vs Processing.js vs Raphaël</a></p>

<hr />

<h3>The way forward: what&#8217;s next for content strategy</h3>

<blockquote>
  <p>The Most Exciting 32 Minutes in Content Strategy with <a href="http://twitter.com/karenmcgrane">@karenmcgrane</a> <a href="http://www.cmsmyth.com/2012/08/the-most-exciting-32-minutes-in-content-strategy">http://www.cmsmyth.com/2012/08/the-most-exciting-32-minutes-in-content-strategy/</a></p>
  
  <p>&#8211; <cite><a href="http://twitter.com/jeffcram">@jeffcram</a></cite></p>
</blockquote>

<iframe src="http://player.vimeo.com/video/29050868" width="535" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<p>If you&#8217;re a web designer, web developer, web project manager or information architect and you haven&#8217;t heard of <a href="http://karenmcgrane.com/">Karen McGrane</a>, or if you&#8217;re not quite up on UX design or content strategy, take a moment to fix that now. You won&#8217;t regret it &#8211; Karen has a passion for her work and a wealth of knowledge and advice to offer.</p>

<hr />

<h3><a href="http://blog.joocode.com/browsers/12-things-about-the-webkit-inspector-i-didnt-know/">12 Things I Didn&#8217;t Know About the Webkit Inspector</a></h3>

<p>Flavio Copes shares a great list of little-known neat tips and tricks in the Webkit Inspector on his blog, <a href="http://blog.joocode.com">joocode</a>. It&#8217;s always fun to learn new things to do with one&#8217;s daily tools! :-D</p>

<hr />

<h3><a href="http://coding.smashingmagazine.com/2012/05/31/50-jquery-function-demos-for-aspiring-web-developers/">50 Useful jQuery Functions for Aspiring Web Developers</a></h3>

<blockquote>
  <p>Every aspiring Web developer should know about the power of JavaScript and how it can be used to enhance the ways in which people see and interact with Web pages. Fortunately, to help us be more productive, we can use the power of JavaScript libraries, and in this article we will take a good look at jQuery in action.</p>
</blockquote>

<p>For those still not completely comfortable with jQuery, Sam Deering of <a href="http://www.jquery4u.com/">jQuery4U</a> takes you through 50 of the handier functions in the library. While jQuery should certainly not be your answer to everything, knowing these functions and how they can be utilised will almost certainly come in handy for you.</p>

<hr />

<h3>What We Actually Know About Software Development, and Why We Believe It&#8217;s True</h3>

<iframe src="http://player.vimeo.com/video/9270320" width="535" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<p>Software developer, computer scientist, academic and author, <a href="http://third-bit.com/">Greg Wilson</a> was new to me when I stumbled onto his talk thanks to <a href="http://www.twitter.com/jeremybrown">@jeremybrown</a>. I enjoyed it so much, I&#8217;ve since marked several of <a href="http://www.amazon.com/Greg-Wilson/e/B001H6PNGM/?camp=1789&amp;creative=390957&amp;linkCode=ur2&amp;tag=kcblog-20">his books</a> for reading and have also set some time aside to have a closer look at the website of his project <a href="http://software-carpentry.org/">Software Carpentry</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/17/friday-roundup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic robots.txt with ASP.NET in IIS7</title>
		<link>http://www.kleenecode.net/2012/08/16/dynamic-robots-txt-with-asp-net-in-iis7/</link>
		<comments>http://www.kleenecode.net/2012/08/16/dynamic-robots-txt-with-asp-net-in-iis7/#comments</comments>
		<pubDate>Thu, 16 Aug 2012 11:34:01 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[IIS7]]></category>
		<category><![CDATA[robots.txt]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=188</guid>
		<description><![CDATA[This is an update to my original post  <a href="http://www.kleenecode.net/2007/11/17/dynamic-robotstxt-with-aspnet-20/">Dynamic Robots with ASP.NET 2.0</a>, which was written for IIS6. IIS7 makes this process even easier! 
Use this approach to deliver different robots.txt files depending on whether you site is being crawled in http or https (or just to present your robots.txt file programatically).

Let's take a look...]]></description>
			<content:encoded><![CDATA[<p>This is an update to my original post <a href="/2007/11/17/dynamic-robotstxt-with-aspnet-20/">Dynamic Robots with ASP.NET 2.0</a>, which was written for IIS6. IIS7 makes this process even easier! Let&#8217;s take a look&#8230;</p>

<h3>The Problem</h3>

<p>Scenario: You have an ASP.NET website in IIS 7.0 that receives both http and https requests. Some people might link to the https versions of the page, but you really want Google (and other search engines) to only crawl http versions. There are relative links in the site, so you know that as soon as Google crawls one https link it is going to pick up the whole site. So as well as https links in the Google search results, you may also now have to contend with lower rankings because Google thinks there is duplicate content on the site (it sees the page in both http and https format).</p>

<p>You can see that Google recommends that you have a different robots.txt file for http and https, so that it knows not to crawl the https version of your site. But how can you get IIS to serve up different versions of robots.txt?</p>

<h3>The Solution</h3>

<p>Lets make the robots.txt file dynamic. We&#8217;ll create an ASP.NET handler so we can have .NET code in it, and tell IIS to run our handler whenever robots.txt is requested. We&#8217;ll also ensure the site still serves up other text files as it would normally.</p>

<p>Pretty cool, huh? :-)</p>

<h3>The ASP.NET Pipeline</h3>

<p>I&#8217;m assuming you know what the <a href="http://msdn.microsoft.com/en-us/library/bb470252.aspx">ASP.NET HTTP Pipeline</a> is and vaguely how it works in IIS7.</p>

<p>If you don&#8217;t, here is a crash course in a few sentences. Based on file extension, when IIS receives a request it can either a) handle it by itself, or b) pass the request on to something other engine (e.g. ASP.NET) and then just hand back to the client whatever that engine responds with. In classic mode, IIS operates more or less as if it were IIS 6 &#8211; by default IIS will serve text files on its own without .NET knowing. In integrated pipeline mode IIS lets the .NET engine handle requests for all files and already has a static file handler in place to respond to text files. We&#8217;re going to tell IIS and ASP.NET to run our code when someone asks for robots.txt (in this case our code will be an HTTPHandler).</p>

<h3>Create your Handler</h3>

<p>In App_Code, create a class called RobotsHandler.cs, containing the code below. This example is provided in C#. There is no reason that a similar solution will not work in VB.NET but I prefer C#.</p>

<h4>RobotsHandler.cs</h4>

<pre><code class="csharp">using System;
using System.Web;

namespace MyNamespace {

    public class RobotsHandler: IHttpHandler {

        public void ProcessRequest (HttpContext context) {
 
            context.Response.ContentType = "text/plain";
            context.Response.Write("User-agent: *\n");
                
            if (context.Request.ServerVariables["Https"]=="off"){
                // HTTP
                context.Response.Write("Allow: /\n");
                context.Response.Write("Disallow: /MyDisallowedDirectory/\n");
            } else {
                // HTTPS
                context.Response.Write("Disallow: /");
            }
        }
    
        public bool IsReusable {
            get {return false;}
        }
    }
}
</code></pre>

<p>Check that your code compiles before you continue ;-)</p>

<h3>Getting IIS and .NET to Call our Handler</h3>

<p>Now we just need to tell IIS what to do!</p>

<h4>Classic Mode</h4>

<p>At the moment, IIS is still serving the txt files instead of letting .NET know about them &#8211; the request for a .txt file doesn&#8217;t even reach .NET. Let&#8217;s tell IIS to pass that request through to the handler we just built.</p>

<h5>Get the path to the ASPX engine</h5>

<p>First, you&#8217;ll need the path to the asp_isapi.dll for the version used by your app pool.</p>

<ol>
<li>Open IIS and list your application pools</li>
<li>Double click the application pool for your site </li>
<li>Copy the path in the &#8220;Isapi or CGI Field&#8221; and cancel out of that window. We don&#8217;t want to change anything there &#8211; we just want the path.</li>
</ol>

<p>Mine looks like this: <code>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll</code>.</p>

<h5>Update the Web.config</h5>

<p>OK. Web.config time! Add this to your web config in system.web:</p>

<pre><code class="html">&lt;configuration&gt;
  &lt;system.web&gt;
    &lt;httpHandlers&gt;
      &lt;add verb="*" path="/robots.txt" type="MyNamespace.RobotsHandler"/&gt;
    &lt;/httpHandlers&gt;
  &lt;/system.web&gt;
    &lt;system.webServer&gt;
        &lt;handlers&gt;
            &lt;add  verb="*" path="/robots.txt" name="RobotsHandler" 
               type="MyNamespace.RobotsHandler" modules="IsapiModule"
               ResourceType="Unspecified" 
               scriptProcessor="YOUR ASP_ISAPI DLL PATH HERE" 
        &lt;/handlers&gt;
    &lt;/system.webServer&gt;
&lt;/configuration&gt;</code></pre>

<p>Don&#8217;t forget to fill the scriptProcessor attribute with that path you copied earlier.</p>

<p>NOTE: If you have problems (still 404ing), check out this little gotchya. Go to IIS, and click on your server (the root node in the list on the right) and in the feature view, open &#8220;ISAPI and CGI restrictions&#8221;. My version of the asp_isapi.dll was not allowed, so my web config changes didn&#8217;t work! Once I set it to &#8216;allowed&#8217; here, everything all came through fine.</p>

<h4>Integrated Pipeline Mode</h4>

<p>In integrated pipeline mode, all requests are already being passed through to the .NET engine so we have to do even less! By default the site will be configured to use a <a href="http://msdn.microsoft.com/en-us/library/ms404287(v=vs.80).aspx">StaticFileHandler</a> so we&#8217;ll tell it to use ours, but only for /robots.txt.</p>

<p>Add the following to your web config under system.webserver:</p>

<pre><code class="html">&lt;handlers&gt;
    &lt;add name="RobotsHandler" path="/robots.txt" verb="GET" 
      type="MyNamespace.RobotsHandler" resourceType="Unspecified" /&gt;
&lt;/handlers&gt;</code></pre>

<p><strong>It&#8217;s that easy.</strong></p>

<p>To make sure it&#8217;s all dandy, just check that other text files in your site are still served correctly (they should be, we haven&#8217;t added anything here that would interfere with that).</p>

<h3>What It All Means</h3>

<p>Basically this is saying &#8220;When a GET request comes in for /robots.txt, just pass it to our RobotsHandler and it will take care of formulating a response&#8221;. The resourceType in this case has the same effect as &#8220;verify file exists&#8221; in IIS6. If we were to set this to &#8220;file&#8221; it would check if the file is in the file system first, and if not, would return a 404 (obviously not what we want in this case!). The extra bit of work in classic mode is to bridge that gap between IIS and the .NET engine &#8211; integrated pipeline mode doesn&#8217;t need us to do that (that&#8217;s why it&#8217;s called &#8216;integrated&#8217;, hehe).</p>

<h3>Conclusion</h3>

<p>This is one technique for a quick and easy dynamic robots.txt file. There are many others. You could apply this principle to almost any file extension if you needed to have other dynamic files in your site. I hope this was useful!</p>

<h3>Resources</h3>

<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/bb470252.aspx">MSDN &#8211; ASP.NET Lifecycle Overview in IIS7</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/46c5ddfy.aspx">MSDN &#8211; How to: Register HTTP Handlers</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms228090.aspx">MSDN &#8211; Walkthrough: Creating a Synchronous HTTP Handler</a></li>
<li><a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;answer=156449">Google &#8211; Block or remove pages using a robots.txt file</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/16/dynamic-robots-txt-with-asp-net-in-iis7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 2: Choosing the Right Strategy</title>
		<link>http://www.kleenecode.net/2012/08/15/estimation-series-part-2-choosing-the-right-strategy/</link>
		<comments>http://www.kleenecode.net/2012/08/15/estimation-series-part-2-choosing-the-right-strategy/#comments</comments>
		<pubDate>Wed, 15 Aug 2012 10:04:38 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=139</guid>
		<description><![CDATA[Without explicit requirements, how do you decide what features and functionality to put in and leave out of an estimate?]]></description>
			<content:encoded><![CDATA[<p>Without detailed requirements from a client, one of the most valuable ways a project manager can help an estimator is direction on what to include in (or exclude from) the solution. I&#8217;m talking about scope here, and your strategy during solution architecture and estimation is crucial. If your approach misses the target, your estimate will crash and burn and the project may never proceed &#8211; not with your company, anyway.</p>

<p>If you&#8217;re fortunate enough to have a detailed (and <em>cohesive</em>) project requirements document, your estimating approach may already be selected for you. You&#8217;ll simply describe the implementation of what is already listed. But even then project requirements aren&#8217;t always thorough, and you might find gaps where you&#8217;d normally expect functionality to exist.</p>

<p>So without detailed requirements, how do you decide what features and functionality to put in and leave out of an estimate?</p>

<h2>The Spectrum</h2>

<p>Tailored minimalism is at one end, custom fully-featured über solution is at the other. Most of the time your project is somewhere in the grey area between. Having some idea where you need to be will help you write an estimate both your PM and the client are happy with. (Which means less reworking!)</p>

<p>Technical estimators (that&#8217;s you!) are in a great position to identify potentially valuable features at low effort. Anticipating the needs of your client shows you’re trying to understand their business and dentifying low hanging fruit could set you apart from your competitors by providing added value, making your estimate (and your company) more attractive.</p>

<blockquote>
  <p>“They’re a bit more expensive, but we get all of these extra reports and an export. They were interested in us and even had a great idea of building this tool…”</p>
</blockquote>

<p>On the flip side, if you know your client is strapped for cash or has a hard delivery date and is highly flexible on functionality, you’d be wasting your time (and theirs) by including unrequested sections in the project. Including too much functionality could quickly put you out of their price range or make it seem like you&#8217;re not listening to their needs.</p>

<p>If it&#8217;s not clear what approach is required, sometimes it&#8217;s best to just ask your boss or the client. Explain that you aim to succeed and talk about the differences between the two extremes.</p>

<h3>Minimalism</h3>

<p>This mindset requires you to justify each piece of functionality included. Only the critical makes it through. Is it really needed? <em>Really?</em> Is there no alternative?</p>

<p>The best minimalist estimates are fed by a short list of clear and simple requirements and <strong>time or budget limitations are the key factors</strong>.</p>

<p>Think outside the box. Don&#8217;t get stuck mulling over details of implementation on the site but rather think about the client&#8217;s business and whether some processed could be done offline or utilising other services. Finding smart ways to cut out functionality can be fun :-)</p>

<p>Examples here are:</p>

<ul>
<li>Is a CMS really needed, or will a static website be sufficient?</li>
<li>Can payments be processed offline, maybe over the phone or on delivery?</li>
<li>Do they have web-savvy members of their team (or can they be trained)? Can content be prepped offline rather than resizing images and cleansing text on input?</li>
<li>Can pdfs of content be uploaded manually on the rare occasions that content changes, or do PDFs really need to be generated for each page?</li>
</ul>

<p>Remember your client might be happy doing some things manually that you&#8217;d turn up your nose at. They may also be happy to implement those features at a later time.</p>

<p>Minimalist projects don&#8217;t typically have much room for experimentation so proposing a technology or tool that is unproven may not be the best idea here. Keep your risks down in order to keep client satisfaction (and your profits) high.</p>

<h3>Anticipating Needs</h3>

<p>Anticipating needs can be difficult at first but becomes easier with experience and exposure to more projects. In contrast to the minimalist strategy above, here we think about what <em>isn&#8217;t</em> mentioned in the required functionality and might mean manual processes for the client. What are features &#8211; particularly features requiring little effort to implement &#8211; which may make life easier? Suggest these as possible inclusions, something which may help the client save time and money in the long run. Consider the longevity of the project and events that may happen over time.</p>

<p>The best full-featured projects come from clients with larger budgets and long-term goals who are intent on establishing a working relationship with you. They talk about meeting long and short term business needs. <strong>The main driver is pursuit of a solution benefiting the business</strong>.</p>

<p>It can be fun to come up with cool and helpful ways to save the client time and money. And they&#8217;ll love you for it.</p>

<p>Simple examples are:</p>

<ul>
<li>Reports and data extractions (a common one is exporting data for MYOB or other financial packages)</li>
<li>Maintenance of data published on the site but owned by other systems. Is a synchronisation tool required?</li>
<li>Smart contact forms, directing enquiries to specific people in various parts of the business</li>
<li>Search auto-completion and misspelling suggestions</li>
<li>SEO and social media strategies</li>
</ul>

<p>You may not include all of your ideas in detail, but listing them for discussion can be advantageous.</p>

<h2>Things to Watch Out For</h2>

<h3>Don&#8217;t Dump the Important Stuff</h3>

<p>The strategy you employ affects only features and functionality. It doesn&#8217;t extend all the other stuff that needs to happen in a project. If you&#8217;ve been told to be zen, don&#8217;t drop your testing phases. Your planning, processes, management, quality assurance and infrastructure work all still needs to happen.</p>

<blockquote>
  <p>Your estimating strategy is a strength. Don&#8217;t use it to undermine the quality and profitability of your project before it has begun.</p>
</blockquote>

<p>Sometimes there are forces within your team that for whatever reason push to keep the cost of the project down. It&#8217;s your job to stand your ground on  these important parts of your project and processes. Later in the series I&#8217;ll provide you with what I hope are some useful ways to do exactly this.</p>

<h3>Be Understanding</h3>

<p>To use either approach very well, you need to make an attempt to understand your client and how things work for them day to day. <strong>This is a great thing.</strong> Understanding your client will help you both during the course of the project and will produce a better result. But don&#8217;t get carried away. You don&#8217;t need to work as a clown for a month to estimate the construction of a circus website. For a ballpark estimate it can be enough to care a little and take a moment to think. If you&#8217;re not sure how parts of their business work, talk to them or include a few questions and suggestions with your estimate.</p>

<p>Regardless of whether it is minimalist or feature-rich, the solution you define should help them and their business.</p>

<h3>Watch Your Time</h3>

<p>Be mindful of the time you have to produce the esimate &#8211; if there are lots of things that could be added, you&#8217;re probably be better off listing a few quick questions and suggestions like &#8220;Are any reports needed?&#8221; rather than fleshing it all out in a detailed estimate first.</p>

<h2>Being Clear About It</h2>

<p>Your estimate document should state up front which estimating approach was used and why: a minimalist approach including only critical functionality to satisfy requirements for hard launch date. Or a full-featured solution to best meet the immediate and long term needs of the business.</p>

<p>If you&#8217;re including items not explictly requested then it&#8217;s a good idea to mark them as such, so the client and project manager can easily slice them out if they&#8217;re not needed. If you&#8217;re putting functionality into the &#8220;culled&#8221; list but aren&#8217;t sure, declare your assumptions so that your project manager and client know exactly what you&#8217;ve cut out in case it&#8217;s needed after all.</p>

<p>I&#8217;m a fan of transparency and I think cultivating a open communication with potential and current clients is a great habit to get into. Remove the mystery from the estimating, architecting and building processes and you&#8217;ll be educating your client on the value of your expertise while encouraging them to be engaged and adaptable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/15/estimation-series-part-2-choosing-the-right-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation Series &#8211; Part 1: Key Concepts in Estimation</title>
		<link>http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/</link>
		<comments>http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 12:34:35 +0000</pubDate>
		<dc:creator>Carly Lyddiard</dc:creator>
				<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://www.kleenecode.net/?p=81</guid>
		<description><![CDATA[This post kicks off my long overdue series on estimation techniques for developers. Each week I’ll be sharing something I’ve learnt over the last 12 years of estimation in small-medium private sector web development teams. Some  will be longer than others but hopefully you’ll find a few useful at least. This is "Part 1: Key Concepts in Estimation".]]></description>
			<content:encoded><![CDATA[<p>This post kicks off my long overdue series on estimation techniques for developers. Each week I’ll be sharing something I’ve learnt over the last 12 years of estimation in small-medium private sector web development teams. Some  will be longer than others but hopefully you’ll find a few useful at least.</p>

<p>I’ll be touching on topics like:</p>

<ul>
<li>scope of an estimate</li>
<li>risk assessment: AKA &#8220;how to help your project not fail&#8221;</li>
<li>approaching the estimate document: how to describe the work</li>
<li>understanding price, effort, elapsed time and velocity</li>
<li>strategies for lack of time or info: using assumptions, questions and exclusions</li>
<li>coming up with the numbers</li>
<li>cost: strategies for communicating cost with vague requirements</li>
<li>applying the DRY principle to estimation in the SDLC</li>
<li>the argument for technical estimation: convincing your boss and your clients</li>
<li>resources for further learning</li>
</ul>

<p>Let’s get into it!</p>

<h2>It&#8217;s About Needs</h2>

<p>When your boss or project manager taps you on the shoulder and asks you how long a project might take to build, what does he actually need? Whether he says it or not, he needs you to supply:</p>

<ul>
<li>a <strong>solution</strong></li>
<li>for a <strong>price</strong></li>
<li>at <strong>acceptable risk</strong> to your employer <em>and</em> your client </li>
</ul>

<p>and he wants this all provided:</p>

<ul>
<li>within a <strong>timeframe</strong></li>
<li>with a certain amount of <strong>accuracy</strong>.</li>
</ul>

<p>What he has for you is <strong>input information</strong> from:</p>

<ul>
<li>the client &#8211; requirements, ideas, maybe a budget limit or delivery date requirement</li>
<li>him (the boss) &#8211; his ideas on a possible solution</li>
<li>third parties &#8211; references to sites or documents for any third party products to be used</li>
</ul>

<p>All of this is communicated by &#8220;Hey, how long do you think it would take to build this site? It&#8217;s like eBay.&#8221; You need to understand what&#8217;s needed and endeavour to fulfil those needs.</p>

<p><a href="http://dilbert.com/strips/comic/2009-12-07/" Title="Dilbert comic strip 07-Dec-2009" style="border:none"><img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/70000/5000/900/75988/75988.strip.gif" alt="Dilbert comic strip - estimation" style="width:520px" /></a></p>

<p>Let’s take a closer look at these terms now. I’ll be expanding on these in later posts.</p>

<h3>Solution</h3>

<p>This is our technical architecture, defining what we’re talking about. Is this project to build a new website or an improvement to an old one? Is graphic design part of the project or not? Will you be loading content or is that the client’s responsibility? Can you log into the new site with Facebook or not? Will it need to work on an iPhone? The amount of detail you go into will be dictated by the required accuracy &#8211; this section could be anything from a few dot points for a rough ballpark, to a few hours of detailed reading for a formal quote.</p>

<p>This section is important for a variety of reasons. It’s likely to be the first sizeable written communication between your company and your client. It doesn’t mean you have to make it overly formal, but it will set up an opinion of your team and the way you work. Make it neat. Use correct spelling and grammar, even if it&#8217;s just a few lines. Now’s not the time to be shy! Harness the power of first impressions and make the most of it.</p>

<p>Make sure the document helps your client too &#8211; they may be comparing your response with estimates from other providers and it’s important to list what you have or haven&#8217;t included in scope so they can compare apples and apples and know you&#8217;re the best fit.</p>

<p>Most importantly, the solution architecture establishes expectations of functionality and defines scope of the project. The clearer you are in describing your solution, the easier it will be to detect scope creep and avoid (and at its worst) the decay of the business relationship and other horrible events later in the project.</p>

<p>If you’re smart about it, the solution architecture becomes your project specification when you get the ball rolling. But more on that later!</p>

<h3>Price (or Price Range)</h3>

<p>Depending on the accuracy required, you may need to produce a single number for a fixed quote, or a ballpark. The sorts of things you’ll cover are hours of work required by different experts in your team (or by contractors if needed), the cost of any graphics, licences, services or products needed for the project and depending on how your company works, overhead costs.</p>

<p>Most of us have the good fortune of not having to worry so much about the cost of a team member’s time, and can deal instead with simply giving our boss an estimate of hours required for each expert.</p>

<p>The most important point here (and one that many non-techs in our industry inexplicably seem to have trouble grasping) is:</p>

<blockquote>
  <p>You don’t know how long it’s going to take until you know what &#8220;it&#8221; is, so defining the solution must come first.</p>
</blockquote>

<p>Generally speaking, if your solution is a few vague dot points, then your numbers should be few and vague (if supplied at all).</p>

<h3>Acceptable Risk</h3>

<p>I use the word &#8216;acceptable&#8217; instead of &#8216;low&#8217; because at the end of the day, it&#8217;s up to your boss and your client to each decide whether they’re prepared to take the risk or not. All you can do is help them make informed decisions by identifying risks and their impacts and (if you can) make recommendations for avoidance or impact reduction.</p>

<h3>Time Frame, Accuracy and Input Information</h3>

<p>This isn&#8217;t the time frame for the project, it’s the amount of time you have to respond to your boss with your estimate and it is critical that you know how much time you have before you start. Timeframe and accuracy are opposite ends of a slider: less time usually means low detail and low accuracy (or not being able to confirm that something is possible at all!). High accuracy requires more time. Both of these are also affected by the amount of info provided: too little info could mean that either you need more time to research, or the accuracy of your estimate is low in the face of unknowns. On the flip side, too much information could mean you need a lot more time to digest it all and may not necessarily help you increase the accuracy of your price estimate or solution architecture.</p>

<h2>You Have Super Powers</h2>

<p>In my experience a non-technical project manager can rarely do all of the things listed above with sufficient accuracy or consistency. They may have worked with a similar style project before but even a seemingly minor difference in interaction, or browser compatibility, or content structure, or expected site load will need approach and estimation changes (and new risk assessments) that our non-tech team members may not be able to identify or estimate.</p>

<p>As we all know, uninformed project planning leads to easily avoided disaster.</p>

<p>Enter <strong>you</strong>, the technical specialist. You’re probably a developer. You may or may not have a cape (you should though, right?). You could be an old hand, nailing all of this every time, in which case I hope you can provide some feedback and suggestions! Or you may be starting out in a role where you’re called upon to estimate (we all were fresh faces at some point). </p>

<p>Regardless of where you are in your career, your technical knowledge and skills are invaluable here. In some ways, you could even be more valuable as a technical estimator or technical project manager than a programmer! A well estimated and planned project can completely avoid many of the problems and emergencies that a talented person like you is often called upon to resolve re-actively. You know what I’m talking about. </p>

<p>This is your chance. Get excited about your opportunity to help craft a project that will run smoothly and be a pleasure for all involved.</p>

<p>Are you excited? Good. Now hold on to that until next week’s post :-P</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kleenecode.net/2012/08/08/estimation-series-part-1-key-concepts-in-estimation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
