<?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>Relative Sanity &#187; business</title>
	<atom:link href="http://relativesanity.com/category/business/feed/" rel="self" type="application/rss+xml" />
	<link>http://relativesanity.com</link>
	<description>Nerdery, curmudgeon, humanity and science</description>
	<lastBuildDate>Wed, 12 May 2010 07:59:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The year we make contact</title>
		<link>http://relativesanity.com/2010/01/05/the-year-we-make-contact/</link>
		<comments>http://relativesanity.com/2010/01/05/the-year-we-make-contact/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 12:58:01 +0000</pubDate>
		<dc:creator>relativesanity</dc:creator>
				<category><![CDATA[anecdotes]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[clients]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://relativesanity.com/?p=163</guid>
		<description><![CDATA[I’m going to look back on 2009 with fondness.
More than any year since 2000, this has been a year of intense growth for me, both personally and professionally. Its end brings with it a shift in what I’m doing with my life, and 2010 brings with it two big steps that frankly scare the shit [...]]]></description>
			<content:encoded><![CDATA[<p>I’m going to look back on 2009 with fondness.</p>
<p>More than any year since 2000, this has been a year of intense growth for me, both personally and professionally. Its end brings with it a shift in what I’m doing with my life, and 2010 brings with it two big steps that frankly scare the shit out of me, but in the best possible way.</p>
<p>And we’re still only in the first week of January.</p>
<p>So, big things. Those things have names.</p>
<h2 id="fresh_monkey">Fresh Monkey</h2>
<p>I’m a web construction worker. As <a href="http://twitter.com/jough/status/7207995836">Jough Dempsey</a> said recently, “I make the Internet. Not all of it.” I’ve been doing that in various ways since 1998, and it’s still fun. I still can’t imagine doing anything else.</p>
<p>A lot of projects that I’m proud of made it out the door this year. Has 2009 been my most successful year? I don’t know how I’d measure that. Financially, the year ain’t over yet, and there’s still 4 or 5 projects that should ship within the month, so let’s reserve judgement on that for now.</p>
<p>For me, though, it’s the year I’m happiest with since my son was born, and that’s worth something.</p>
<p>A big contributing factor to that was managing to haul my lazy, self employed ass out of the dressing gown and into a proper office. Those of you who have visited us at <a href="http://twitter.com/cmdcentral">cmdcentral</a> may dispute the use of “proper”, but hey, it’s not a box room in my flat, which means I can leave work at work and “go home” at the end of the day.</p>
<p>Also helping along my mental health had been my move away from using a combination of <a href="http://www.blinksale.com/">Blinksale</a> and <a href="http://www.billingsapp.com/">Billings</a> for invoicing. <a href="http://freeagentcentral.com/">FreeAgent</a> hasn’t saved my life yet (more on that in a moment), but it certainly meant I stopped waking up in a cold sweat wondering when the money was going to run out, and that’s a good thing when you’re self employed.</p>
<p>So what’s next for <a href="http://freshmonkey.org/">Fresh Monkey</a>? Big things. We just went limited, and Anisa’s stepping in as project manager and co-director. Frankly, there’s too much work for just me any more, and I’d rather bring in more people than hand the work away to dreamweaver pilots, so watch this space. If you’re interested in knowing what I’ve got in mind, you should <a href="http://twitter.com/direct_messages/create/relativesanity">drop me a line</a>.</p>
<p>So that’s big. What else?</p>
<h2 id="freeagent">FreeAgent</h2>
<p>I’m not sure there are enough superlatives. Where else do you see support tickets like <a href="http://community.freeagentcentral.com/freeagentcentral/topics/incredible_application_well_done">this one</a>? Seriously, if you’re self employed, go and <a href="http://freeagentcentral.com/">check it out</a>. Even better, go and try it out using my <a href="http://www.freeagentcentral.com/?referrer=31048b5i">kickback code</a> and get yourself 10% off for life!</p>
<p>If you’re at all like me, you’re going to put off moving your accounts system over to them. You spent a long time setting up those spreadsheets, and they’re working just the way you like them. Why abandon that?</p>
<p>If rolling year-in-progress tax calculations, bank statement uploads and automatic invoice reconciliation, automated overdue reminders, recurring invoices, estimates and basic project management functionality doesn’t persuade you to at least try it out, how about this: I don’t know a single convert who has moved back.</p>
<p>Since day one, Ed, Roan and co have been obsessed with making an app that people like me want to use, and it shows.</p>
<p>Of course, there’s always room for improvement, and a quick glance at their <a href="http://community.freeagentcentral.com/freeagentcentral">Get Satisfaction community</a> shows there’s no shortage of suggestions and requests from their rabidly enthusiastic users. So what’s a growing company to do?</p>
<p>Keep growing, seems to be their answer. They’ve got a new developer starting tomorrow, someone who I’m sure is going to be as fanatical about building a fantastic app as they are already, and will hopefully let them expand at an ever increasing rate.</p>
<p>I’ve been pestering them to let me help out for ages, as it’s been clear they needed and wanted more hands on the wheel, but they were adamant that they wanted to make a permanent hire, to have a senior developer on board 9-5, someone who would be in a position to really make a difference.</p>
<p>So when they said they wanted that developer to be me, I did what all gibbering fanboys do: I cried, and asked when they wanted me to start.</p>
<p>They said “How about the 6th of January?”.</p>
<p>Then they said “Oh, and if you want to keep your Fresh Monkey stuff running too, we don’t have a problem with that. Just try and get some sleep once in a while”.</p>
<p>Then I cried some more. Me, a respectable salaryman. Who’d have thought?</p>
<h2 id="2010">2010</h2>
<p>So 2009 was awesome. Let’s look at the list for 2010:</p>
<ul>
<li>Working for a company I respect, on a product I love</li>
<li>Growing a business I’m passionate about, working with more people I’m in awe of</li>
</ul>
<p>And let’s not forget all the <a href="http://twitter.com/roanlavery/status/7400970468">shiny new toys</a>.</p>
<p>Welcome to 2010. It’s looking like a fun one.</p>
]]></content:encoded>
			<wfw:commentRss>http://relativesanity.com/2010/01/05/the-year-we-make-contact/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>From the gut</title>
		<link>http://relativesanity.com/2009/11/03/from-the-gut/</link>
		<comments>http://relativesanity.com/2009/11/03/from-the-gut/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 07:13:29 +0000</pubDate>
		<dc:creator>relativesanity</dc:creator>
				<category><![CDATA[anecdotes]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[clients]]></category>

		<guid isPermaLink="false">http://relativesanity.com/?p=4</guid>
		<description><![CDATA[I&#8217;ve been producing client work now for over seven years, and I&#8217;m only just realising that my gut knows more about what I should be doing than I do.
I&#8217;m not sure I&#8217;ve ever known my gut to be wrong. In the past seven years, whenever anything has gone wrong, I can look back at a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been producing client work now for over seven years, and I&#8217;m only just realising that my gut knows more about what I should be doing than I do.</p>
<p>I&#8217;m not sure I&#8217;ve ever known my gut to be wrong. In the past seven years, whenever anything has gone wrong, I can look back at a comment made to a friend or colleague saying, in effect, &#8220;I have a bad feeling about this&#8221;.</p>
<p>And I&#8217;m not just a scattergun pessimist. I know when I&#8217;m naysaying for the sake of it, and that&#8217;s not what I&#8217;m talking about here. I&#8217;m talking about that moment when you walk into the first client meeting, and something about the client, or the project, or the atmosphere in the room creeps you out. Or the way you find yourself sitting, uncomfortable, fidgety, looking for an excuse to get out, to leave, or to kill the meeting dead as fast as possible so you can get your team in a room and say &#8220;guys, really? We think this has an end?&#8221;</p>
<p>We&#8217;ve all had those moments, but we ignore them. &#8220;Be professional&#8221;, we tell ourselves, and then what do we do? We throw professionalism out the window and ignore what it is we&#8217;re selling in the first place: our skills and talents.</p>
<p>My gut knows a lot. It can pick up a lot of undercurrents and misgivings, a lot of warning signals that I&#8217;m too polite to admit to. And you know what, in a lot of cases, those misgivings aren&#8217;t about the client, they&#8217;re about me. My gut isn&#8217;t saying &#8220;this is a bad situation&#8221;, it&#8217;s saying &#8220;this isn&#8217;t a good fit&#8221;. It&#8217;s warning me about overpromising myself, or about taking on more than I can handle.</p>
<p>And in every one of those cases, it&#8217;s been right.</p>
<p>These cases aren&#8217;t just about not being &#8220;good enough&#8221;, either. Most of the time, it&#8217;s much more subtle: my gut most often warns me when a client is outwardly asking me to do one job, but implicitly requires me to do another job, which is far from my pool of talents.</p>
<p>Abstract sucks, let&#8217;s get concrete with a simple example:</p>
<p>Client asks me to produce a shopping cart, my mind applies itself, examines the technical issues, and it seems simple enough to handle. No big deal. Complex, yes, but doable, technically. Still, my gut is nagging at me, telling me something&#8217;s wrong.</p>
<p>What&#8217;s wrong? I&#8217;m up to the project, I&#8217;ve built similar apps before, why is this one tripping my early warning system?</p>
<p>Turns out the client didn&#8217;t really understand WHY they wanted the cart they asked for, and that, really, their business model isn&#8217;t really up to online sales. Suddenly, I&#8217;m a sales and business development advisor, and friends, I suck at sales and business development. The client&#8217;s getting frustrated at my lack of &#8220;web development&#8221; talent (remember, they don&#8217;t actually realise they&#8217;re asking me to do the wrong job), and I&#8217;m getting frustrated that they keep changing spec.</p>
<p>Looking at that initial meeting, I can see all the assumptions being made on both sides of the table, and my gut was well aware of them.</p>
<p>Further down the line, I end up backing out of the project, scars on all sides, and everyone&#8217;s wondering what went wrong.</p>
<p>What went wrong? I ignored my gut.</p>
<p>You do that at your peril.</p>
]]></content:encoded>
			<wfw:commentRss>http://relativesanity.com/2009/11/03/from-the-gut/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Staying sane</title>
		<link>http://relativesanity.com/2009/01/06/staying-sane/</link>
		<comments>http://relativesanity.com/2009/01/06/staying-sane/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 09:30:33 +0000</pubDate>
		<dc:creator>relativesanity</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[curmudgeon]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[rambling]]></category>

		<guid isPermaLink="false">http://journal.relativesanity.com/?p=133</guid>
		<description><![CDATA[Staying sane is important. Keeping calm under pressure is always preferable to going totally ape, even if you feel the situation warrants it.
The first one to yell loses
There&#8217;s a reason that yelling is often called &#8220;losing it&#8221;. Yelling shows you&#8217;ve lost control, it shows that you&#8217;ve lost sight of what it is you&#8217;re talking about. [...]]]></description>
			<content:encoded><![CDATA[<p>Staying sane is important. Keeping calm under pressure is always preferable to going totally ape, even if you feel the situation warrants it.</p>
<h2>The first one to yell loses</h2>
<p>There&#8217;s a reason that yelling is often called &#8220;losing it&#8221;. Yelling shows you&#8217;ve lost control, it shows that you&#8217;ve lost sight of what it is you&#8217;re talking about. Yelling means that you&#8217;re trying to beat the other person, not win the argument or express your point.</p>
<p>If you start to feel yourself lose it, just:</p>
<ol>
<li>Smile</li>
<li>Breathe</li>
<li>Go slowly</li>
</ol>
<p>There&#8217;s something much more compelling about a whisper than a yell. <a href="http://www.flickr.com/photos/rsanity/3173652154/">This wallpaper</a> might help you remember.</p>
]]></content:encoded>
			<wfw:commentRss>http://relativesanity.com/2009/01/06/staying-sane/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How not to build an in-house CMS</title>
		<link>http://relativesanity.com/2008/11/17/how-not-to-build-an-in-house-cms/</link>
		<comments>http://relativesanity.com/2008/11/17/how-not-to-build-an-in-house-cms/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 13:32:02 +0000</pubDate>
		<dc:creator>relativesanity</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[curmudgeon]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://journal.relativesanity.com/?p=77</guid>
		<description><![CDATA[It&#8217;s so easy to create a content managed website these days that it&#8217;s often equally easy to be paralysed by choice. This journal runs on WordPress, and uses a modified version of a theme by MidMo Web Design. It took all of 20 minutes from download to test-posting into this theme.
Picking the engine itself, though, [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s so easy to create a content managed website these days that it&#8217;s often equally easy to be paralysed by choice. This journal runs on <a href="http://wordpress.org/">WordPress</a>, and uses a modified version of a theme by <a href="http://midmodesign.com/">MidMo Web Design</a>. It took all of 20 minutes from download to test-posting into this theme.</p>
<p>Picking the engine itself, though, has taken about 2 years, and was based on one thing: immediacy.</p>
<h2>Choices, choices</h2>
<p>Choice is good, right? Competition is even better. I&#8217;ve recently become jaded with my own erstwhile approach to site management systems. That approach could be boiled down to two simple statements:</p>
<ul>
<li>Content Management Systems are simple</li>
<li>Given enough projects, I can incrementally build my own while getting paid for it</li>
</ul>
<p>The implication being that &#8220;my own&#8221; will be inherently better than any of the off-the-shelf systems that are already out there, because I&#8217;ll understand it from the ground up.</p>
<p>What really happens can be summed up by these parallel statements:</p>
<ul>
<li>CMS is as &#8220;simple&#8221; as word processing: easy to describe, easy to prototype, hard to perfect</li>
<li>Clients are not software designers, and I&#8217;m a scorched-earth perfectionist</li>
</ul>
<p>All of which results in me, having idealised the first two statements, but followed the second two, writing this post two years later.</p>
<h2>Build it in increments -&gt; (step 2) -&gt; profit!</h2>
<p>If you are planning on building an in-house CMS, I&#8217;m assuming that you&#8217;ve already come up with all the rationalising arguments about why it will be &#8220;better&#8221; than off-the-shelf. It doesn&#8217;t matter whether you&#8217;ve convinced yourself that the client&#8217;s requirements are beyond the scope of any existing system, or whether you&#8217;re just full of &#8220;Not Invented Here&#8221; Kool-aid, the point is that you and your team are committed to delivering a CMS to fulfil your client&#8217;s spec.</p>
<p>Of course, what I&#8217;ve just described is a bespoke CMS for a single client. Everyone knows that&#8217;s not scalable to larger projects, so how do we get around that?</p>
<p>All together now:</p>
<blockquote><p>We write the core of the CMS for this client, and build it modularly so that we can just give them what they asked for, but <strong>reuse</strong> the core on the next project!</p></blockquote>
<p>Bingo. Sounds great, doesn&#8217;t it? You make a bit of a time loss on this project, but it&#8217;s an investment, because next time around you&#8217;ll be mainly writing modules for the next client&#8217;s functionality. If the next client has the same spec as this client, it&#8217;s <strong>instant profit</strong>! What can go wrong?</p>
<p>This is where reality creeps in. You build your CMS nice and modularly for the first two weeks. You then realise that you&#8217;re not quite finished the core yet, and you&#8217;ve only got two weeks left to implement the various bits of functionality as modules. You panic. You know what modules you need, so you start building the remainder of the core with those modules in mind. You maybe even start building some modules into the core, promising to refactor them out on the next project, because you finally remembered your <a href="http://www.pragprog.com/titles/tpp/the-pragmatic-programmer">Pragmatic Programmer</a>, and suddenly it&#8217;s all about &#8220;just get it working&#8221;.</p>
<p>You complete the project on time, and what do you have? A half-bespoke, half-modular monster that is going to require a serious refactoring job to make usable for the next project.</p>
<p>However, you&#8217;ve <strong>learned a lot</strong>. This is a key realisation, and often missed. You&#8217;ve learned a hell of a lot, and this is where the rot starts. You&#8217;ve learned so much that you convince yourself that, on the next project, it would be insanity to try to reuse any of what you&#8217;ve just coded. What you decide to do instead is to reuse the <strong>knowledge</strong>. Oh yeah, baby &#8211; we salvaged something after all!</p>
<p>So you start coding again from scratch. This time it will be better, you say, since you know how it all went wrong last time, and you&#8217;ve come up with five great new ways of modularising from the get-go. Then client number 2 rolls along.</p>
<h2>One of these kids is kinda different</h2>
<p>So with your newfound &#8220;I get it now!&#8221; knowledge, you start implementing The Plan again. Client 1 was a false start &#8211; client 2 is the real deal. Now you know how to make it modular, you&#8217;ll do it right this time.</p>
<p>Except the same thing happens. This time, because you&#8217;re having so much fun coding, and because you&#8217;ve convinced yourself that last time you caved and started coupling the core to the modules too early, you hold out to week three to produce the core CMS. But again, week three rolls around and you&#8217;re still not done. With only one week left to implement the functionality that took you two weeks last time, you start panicking and even more coupling happens. Worse, your project runs over time and is late.</p>
<p>So far, with two projects in the bag, you&#8217;ve overserviced both, pissed off one of the clients by being late, given each a rushed bespoke system (with all the attendant maintenance overheads), and have precisely zero reusable code. Not exactly the outcome you&#8217;d hoped for.</p>
<p>So what went wrong?</p>
<h2>Addiction is curable</h2>
<p>What went wrong is that you failed to notice that your stated goals were not really your goals. Worse, you actually got what you wanted all along.</p>
<p>Huh?</p>
<p>Your implicit goal in building an in-house CMS was to reduce the amount of work you do. You&#8217;ve noticed that servicing your clients is boring, because you&#8217;re constantly writing the same stuff. To fix that, you decide to consciously write that stuff in a way that you can reuse next time.</p>
<p>The logical next step of that is to write an entire <strong>system</strong> that you can reuse next time. This is where the logic breaks down, because there already <strong>are</strong> systems that you can reuse. Right now. You can download <a href="http://modxcms.com/">MODx</a> right now and be at precisely the point you say you want to be at in four weeks.</p>
<p>So why didn&#8217;t you? You didn&#8217;t because your goal isn&#8217;t to reduce the amount of work you do, it&#8217;s to increase it. What you secretly want to do is build a bespoke CMS for every one of your clients. You hope that maybe, one day, you might hit upon a pattern that you can reuse, but you don&#8217;t really care about that. You love coding, you love tweaking and refining and burning it down and starting again. You love it, and you got it.</p>
<h2>Step zero is realising you&#8217;re addicted</h2>
<p>So what are you addicted to? Coding? No &#8211; you&#8217;re addicted to the knowledge you&#8217;re learning, to the experience, to &#8220;figuring it out&#8221;. That&#8217;s why it&#8217;s so difficult to locate the source of the problem. When I said &#8220;you wanted to increase your workload&#8221;, you balked, because to you the work is becoming more and more painful.</p>
<p>The knowledge isn&#8217;t, though. You&#8217;re putting up with the pain for the rush of having refined your perfect plan for next time.</p>
<p>And the truth is that your CMS prototypes <em>are</em> getting better all the time. After 5 or 6 more clients, you might have a really solid platform.</p>
<p>Too bad for your first half-dozen alpha and beta testing clients, though.</p>
<h2>Where&#8217;s the exit?</h2>
<p>So how do you break this cycle? You decide which of these is more important to you right now. Do you want to:</p>
<ul>
<li>Build a CMS; or</li>
<li>Streamline your client servicing?</li>
</ul>
<p>You don&#8217;t get both, not right now. If you want to build an in-house CMS, you&#8217;re going to have to commit 6 to 9 months of development time to it, and the client has to be your company, not some real-world project you&#8217;re using to guinea-pig your sketches on. You need to take yourself (and perhaps another developer) off paid work and become software developers, with the attendant investment and payoff cycles that don&#8217;t exist in direct-to-client sales.</p>
<p>That&#8217;s the price. Once you have your CMS, you can start flogging it to people. At that point you can start to &#8220;Streamline your client servicing&#8221;.</p>
<p>Of course, by then, I&#8217;ll be in your sector, stealin&#8217; your clients, because I chose to &#8220;Streamline my client servicing&#8221; straight up using <a href="http://wordpress.org/">WordPress</a> and <a href="http://expressionengine.com/">Expression Engine</a>, with <a href="http://modxcms.com/">MODx</a> in there for the really tricky stuff, and have been having a whale of a time developing modules, plugins and extras for those mature platforms you&#8217;re only starting to catch up with.</p>
<p>Your CMS had better do something unique.</p>
]]></content:encoded>
			<wfw:commentRss>http://relativesanity.com/2008/11/17/how-not-to-build-an-in-house-cms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pricing a freelance web development job using OmniPlan</title>
		<link>http://relativesanity.com/2008/11/10/pricing-a-freelance-web-development-job-using-omniplan/</link>
		<comments>http://relativesanity.com/2008/11/10/pricing-a-freelance-web-development-job-using-omniplan/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 12:05:19 +0000</pubDate>
		<dc:creator>relativesanity</dc:creator>
				<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://journal.relativesanity.com/?p=35</guid>
		<description><![CDATA[I like my prices to make sense. This usually means justifying the cost of a particular job by being able to demonstrate to the client the effort involved in a particular area. It&#8217;s also useful to know what particular features are expensive because they are difficult, and what ones are expensive because they&#8217;re valuable.
To do [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://relativesanity.com/wp-content/uploads/2008/11/iconspicture-19.png" border="0" alt="Picture 19.png" width="78" height="59" align="left" />I like my prices to make sense. This usually means justifying the cost of a particular job by being able to demonstrate to the client the effort involved in a particular area. It&#8217;s also useful to know what particular features are expensive because they are difficult, and what ones are expensive because they&#8217;re <strong>valuable</strong>.</p>
<p>To do this, I use <a href="http://www.omnigroup.com/applications/omniplan/">OmniPlan</a> from The Omni Group. I love Omni&#8217;s software (<a href="http://www.omnigroup.com/applications/omnifocus/">OmniFocus</a> runs my life, and <a href="http://www.omnigroup.com/applications/omnioutliner/">OmniOutliner</a> stores most of my most important notes), and OmniPlan is built with the same attention to detail as the rest of their apps.</p>
<h2>Outlining the effort</h2>
<p>The key thing for me is the fact that it uses an outline view for building up your project. Just like OmniOutliner, you can happily drill down deeper and deeper into each &#8220;node&#8221; in the outline. Each node has a number of attributes, the key one being &#8220;Effort&#8221;. The amount of effort assigned to each node then translates into a bar on a Gantt chart, and also an addition to the project cost, once you&#8217;ve told OmniPlan who&#8217;s working on that node, and how much they cost per hour.</p>
<p>Over the couple of years I&#8217;ve been doing this, I&#8217;ve developed a standard &#8220;web development&#8221; template that stubs out most of the tasks I carry out during a project. Just like any good outliner, the nesting facility means that I can group the project into discrete blocks, which is great for being able to produce a &#8220;top line&#8221; summary of what each area of the project will cost.</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-8.png" border="0" alt="Picture 8.png" width="620" height="434" /></div>
<p>Where do all these top line numbers come from? Let&#8217;s expand out all the items in Core Development outline:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-6.png" border="0" alt="Picture 6.png" width="620" height="766" /></div>
<p>As you can see, the project timeline can now start to build itself from the bottom up. Every task starts out with one hour assigned to it. My first task at the start of a costing is to go through the default outline and prune what isn&#8217;t needed for this project, before adding in what *is* needed. I then go through and start to apply time estimates to each task based on previous experience and &#8220;best guess&#8221; work.</p>
<h2>Bubbling up the costs</h2>
<p>The great thing about OmniPlan is that it tends to remove the best guess factor from most tasks. Let&#8217;s say, for example, that in my first pass I reckon that I&#8217;ll need 4 wireframes:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-9.png" border="0" alt="Picture 9.png" width="479" height="143" /></div>
<p>I reckon each layout is going to take me half an hour to do, so in they go, and suddenly my Site Wireframes budget sits at 2 hours. If I realise I need more wireframes as I plan the project, in they go and bump up the cost in a fully justifiable way.</p>
<p>Let&#8217;s say, though, that I reckon one of those wireframes is particularly complex because there are lots of variations. I might not have a good handle on how long, say, a progressively enhanced &#8220;personal content aggregator&#8221; might take to wireframe. No worries &#8211; I can nest the various sub-tasks to come up with a proposal:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-10.png" border="0" alt="Picture 10.png" width="470" height="171" /></div>
<p>I now have a better feel for how easy or hard that&#8217;s going to be. This is all the kind of stuff you do when planning a project anyway, but the fact that you can make simple changes to subdivisions of tasks and have them percolate up your estimates automatically is a real boon for tracking complex projects.</p>
<h2>Show me the money</h2>
<p>Once I&#8217;ve gone through and assigned time estimates to each part of the project (practically writing the spec as I go, incidentally), I can then use OmniPlan to build timescale estimates and cost them up.</p>
<p>First I switch to the Resource view:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-11.png" border="0" alt="Picture 11.png" width="620" height="434" /></div>
<p>By selecting me (or creating a new resource) and viewing the inspector panel:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-12.png" border="0" alt="Picture 12.png" width="328" height="280" /></div>
<p>I can set hourly rates, and how &#8220;available&#8221; I am for the project. No, I don&#8217;t charge £100 per hour for development. I wish I did.</p>
<p>Back to the Task view, and I expand all tasks, select all, and choose Structure -&gt; Assign Resource -&gt; Jonathan. This hammers through all the hourly estimates and gives me a cost based on my hourly rate, as well as displaying a project total in the status bar at the bottom of the window. By selecting View -&gt; View Options then enabling &#8220;Total Cost&#8221; in the Outline Columns pane, I can now see how my top line works out:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-14.png" border="0" alt="Picture 14.png" width="620" height="434" /></div>
<p>Awesomeness!</p>
<h2>Time keeps on slippin&#8217;</h2>
<p>Next up is to get a timescale plan. To the right of the outline we get a Gantt chart. The Gantt chart is smart enough to build up a timing plan automatically based on how many people you have working on the project, how available they are, and what dependencies you build into the project.</p>
<p>Since we&#8217;ve only got one person working on this full time, we can&#8217;t have any concurrency, so it&#8217;s all about the dependencies. As you can see, there are some black arrowed lines running from the end of each task group to the beginning of another:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-15.png" border="0" alt="Picture 15.png" width="689" height="434" /></div>
<p>Each one of these arrows represents a dependency, and we set those up quite simply by selecting the task which depends on another one, opening the dependency inspector, and dragging in that task&#8217;s pre-requisite and dependent tasks:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-16.png" border="0" alt="Picture 16.png" width="328" height="280" /></div>
<p>This ensures that our Gantt chart never schedules anything before its pre-requisites are completed.</p>
<p>Once all THAT&#8217;s done, we select all the tasks and choose Project -&gt; Level Resources. This rebuilds the Gantt based on what we&#8217;ve said about the project, and gives us a good estimate of how long the project will take to complete.</p>
<h2>All you do is write code, right?</h2>
<p>The final super-smart thing about OmniPlan is the ability to restrict a Resource&#8217;s availability. Go into Calendar view, and select your resource. By default, that resource is made available to the project full time. Let&#8217;s say we only want to spend half of each day on this project, the rest of the time left for maintenance, admin, phone calls, email, and other freelance stuff. Simple &#8211; just make sure that the &#8220;Normal Work Week&#8221; for your resource is set from 8am to 12noon (just drag on the calendar like in iCal).</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-17.png" border="0" alt="Picture 17.png" width="715" height="436" /></div>
<p>Now if we go back to the Task view and run Project -&gt; Level Resources again, we&#8217;ll see that we now have a much longer looking Gantt chart:</p>
<div style="text-align:center;"><img src="http://relativesanity.com/wp-content/uploads/2008/11/screenshotspicture-18.png" border="0" alt="Picture 18.png" width="675" height="396" /></div>
<p>Even better, we can see that the Duration of the project (see the status bar, and click on that to cycle through the various bits of info this can display) is over 2 weeks, but the actual effort involved only spans 4 days.</p>
<p>Now all we need to do is write up our proposal document based on these timings and specs, send to the client, and wait for approval so we can bill them their deposit.</p>
<p>You do charge your clients deposits, don&#8217;t you?</p>
<h2>Downloads</h2>
<ul>
<li><a title="Web Development.omniplan.zip" href="http://relativesanity.com/wp-content/uploads/2008/11/downloadsweb-developmentomniplan.zip"> Web Development OmniPlan Template (zip)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://relativesanity.com/2008/11/10/pricing-a-freelance-web-development-job-using-omniplan/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
