How to calculate project timescales and costs
Wednesday, May 16, 2007 1:42:04 PM (GMT Standard Time, UTC+00:00)
We’ve gone around in circles at The Site Doctor trying to decide the best
method to calculate project costs and timings, historically I would look at the
project brief, have a think about how much I wanted to work for a client and then
I would –in effect- pluck a figure out of the air.
As your company grows however you will need to think about a more scalable, resilient
solution that reduces the chance of under quoting and I think we have a fairly nice
solution so I thought I would share it :)
Firstly, read up on how to set your base rate (see:
Pricing your work).
Once you have calculated your base rate, you will need to download
this spreadsheet when offering the client various options,
each option is given its own row on the summary table which is calculated off a
dedicated sheet of times.
The formatting is fairly simple and mainly for your own use but basically the main
areas of development (i.e. the front end, my account or admin areas) use a grey
background. The sub sections of these (i.e. Product management) use a yellow background
and all other items have a white background, the main reason for this was when you
have a large project it made it a lot easier to identify where you were. The top
columns are not set but they’re just what we most commonly use, you can alter these
as needed on the summary sheet.
How to use it
- Add all your site elements (usually based on your sitemap) into the first column,
separating each one out onto its own line.
- Go through each item, estimating the time required to complete the task. Remember
that the spreadsheet is using decimal hours:
- 0.02 = 1 minute
- 0.08 = 5 minutes
- 0.17 = 10 minutes
- 0.25 = 15 minutes
- 0.33 = 20 minutes
- 0.42 = 25 minutes
- 0.50 = 30 minutes
- 0.58 = 35 minutes
- 0.67 = 40 minutes
- 0.75 = 45 minutes
- 0.83 = 50 minutes
- 0.92 = 55 minutes
- 1.00 = 60 minutes (1 hour)
- Switch over to the summary page and update the hourly rates to your rates
- Et voila you have your project’s estimated cost :)
You’ll be surprised how quickly project costs mount up when you use this method
but it does ensure that you don’t get caught out, if it is still too costly for
the client, why not show them the breakdown as it quantifies your efforts nearly.
If that doesn’t work see how tweaking your hourly rate or removing the timings works
out but don’t be a busy fool ;)
Project time estimate spreadsheet
Time on the phone –wasted time?
Tuesday, May 08, 2007 5:13:32 AM (GMT Standard Time, UTC+00:00)
After a somewhat hectic week last week, with most of it being spent on the phone (which is becoming a more regular occurrence) I asked myself “has all this time on the phone been wasted time?” Well, I spent time talking to clients, developers, friends and family and this is important. Although it may cost you a little development time, talk is cheap (that’s what the telecom’s companies want to tell you isn’t it?)
Rather than looking at it negatively I think it’s best to look at it from another point of view, I could have spent developing some weird and wonderful new creation for a client however, this phone time was doing something else –it was promoting my business. Admittedly the business couldn’t survive if we all spent all the time with the phone glued to our ear, but once in a while I believe is a good thing.
Why am I looking at it like that? That’s simple, if you make time for your clients, friends and family in any context it shows that you care for them beyond a pay check and at the end of the day, if they need some development they’re more likely to think of you in a good light.
What do you think? Do you feel time spent on the phone is wasted time or a business investment?
Paddlathon 2007 -whassat then?
Friday, May 04, 2007 6:56:27 AM (GMT Standard Time, UTC+00:00)
Ok, I promise to post something technical and interesting shortly (yes I know, that’ll be a first yada yada…) but I want to get some information up here about Paddlathon 2007. I’ve written a very quick site which I will be adding more information to shortly but it already has a lot of information about our charity canoe race and more importantly a donation form so once you’re done reading this pop over to www.paddlathon.co.uk and have a look.
I wanted to compete in the Cheshire ring race 2007 for a few personal reasons but the initial motivation was that I missed out on taking part in the Transpennine race –this was stopped the first year I was old enough for my canoeing club to allow me to participate so ever since I’ve wanted to take part in a long race (preferably overnight etc) as I felt it would be fun so when I was handed a flyer for a 96 mile canoe race last season at Bristol I decided it was the perfect choice! There is another long race called Devizes to Westminster which is around 124miles at Easter –which didn’t leave enough time to train or find a partner.
The Cheshire ring race is a 96 mile canoe race but at the end of June which meant more time to train and as it was nearer to summer it would also be warmer. Until a couple of seasons ago, I paddled with my canoe coach –and long term friend Paul Rose but sadly he damaged his back (thanks to me) going over a weir. He’s getting back into canoeing, but having vowed to paddle together again I suggested the Cheshire ring race as a worthy race.
Paul was immediately up for it and once we had got chatting we thought it had enough of a “wow” factor to be worthy of sponsorship and so Paddlathon 2007 was conceived… a 96 mile canoe race is without a doubt a bloody long way and knowing he may still have issues with his back over that sort of distance we decided doing it as a relay race would be better so we decided to get my two brothers Sam and Pat on board as they’re both keen paddlers and are always up for a challenge.
Originally we were going to raise money for a single charity but decided as there were four of us, it would be better to pool our collection efforts and raise for four charities together. The charities we’ve chosen are:
-
Samantha Dickson Brain Tumour Trust
-
Multiple Sclerosis Society
-
CLIC Sargent
-
Mac Millan Nurses
To my knowledge, I’ve never asked for anything for the information I openly share on my blog –and I probably never will (beyond the Google AdSense that appears in the design that is) but I would very much appreciate it if you were generous enough to donate a couple of quid as there are some great charities who dearly need your help.
I’ll post more information on the charities, the team and the boat over the forthcoming weeks but the race is June 30th – July 1st, if you fancy coming and seeing us off –or having a pint with us after the race that would be awesome.
Read more or donate online at: www.paddlathon.co.uk
Joost invites for all...
Thursday, May 03, 2007 3:46:11 PM (GMT Standard Time, UTC+00:00)
I found out this morning that my Joost account has been credited with 999 invites (I kid you not) so feeling all summery I thought others might want to join in the Joost fun and I’d share them around a little.
I’ve only got 999 Joost invites so it’ll have to be strictly on a first come –first served basis (as if I’m ever going to get rid of them all haha).
I don’t want anything in return but if this offer is too generous or you feel I’ve helped you in the past and you’re debted to me, why not click some of the Google Adverts –or even better, make a donation to our 96 mile canoe race (the Cheshire ring race) in aid of the Samantha Dickson Brain Tumour Trust, Multiple Sclerosis Society, CLIC Sargent and Mac Millan Nurses, I like to think of it of a “You scratch my back, I’ll scratch your back” arrangement.
Regardless of whether you want to donate to our worth cause or not, drop me an email (or leave me a comment) and I’ll send an invite over ASAP.
For more information on our 96 mile canoe race (the Cheshire ring race) in aid of charity go to www.paddlathon.co.uk or read my blog posts about the Cheshire ring race.
Tim vs. a Swan
Wednesday, May 02, 2007 6:05:00 PM (GMT Standard Time, UTC+00:00)
Those of you who have me on MSN Messenger (and use a client that displays my little sub messages) may have noticed today’s caption reads “Tim vs. a Swan : Tim 1 - Swan 0”. A few of you have asked what it is all about so I thought I’d just post it here (shame on those of you who didn't!).
For those of you who are new to my life I’m rather into my canoeing* and what with the forthcoming Cheshire Ring Race drawing closer I’ve been getting out on the water as much as possible. My new routine is now gym one night, canoe the next and last night was a canoe night. Stacey’s also training atm so she came out for a run with me.
I’ve thrown this all into a little map (see below - thanks Google Earth!) so you can better understand what I’m talking about. I usually dock near a swans nest and although around this time of the year they get a little arsey (they’re brudy or have chicks so that’s ok) we have a fairly amicable relationship –I don’t like them, they don’t like me. Last night was something different, when I got onto the water I could only see one of the two swans, the male (who is the nasty one) was no-where to be seen so we carried on (he usually potters off up a side route etc).
No sooner than I had passed under the bridge but I saw the male at the end of the straight and he started flapping to take off. Now, I don’t know if you’ve even seen a swan taking off but they’re big gits and it takes them a while so I figured he would just fly over the top of me.
I kept thinking that until he was about 20ft away from me when he angled right for me and it was clear he was after me haha. Knowing that they can cause serious damage (though we’re still debating the “Can a swan break a man’s leg” rumour) I decide to get over to the bank and wait it out there –in the tiger (my very unstable racing kayak) I wouldn’t have stood a chance in the middle of the canal.
It was a close call to be fair, he was about 5ft in front of my boat by the time I got over to the side at which point he stopped flapping and swam past hissing at me something chronic. The funniest bit of it was that Stacey had taken my paddles off me and was poised over the stingers and spikey things ready to beat him if he came close –I just wanted them back in case I needed to use them!
I’ve had swans come for me before but never fly down 0.2miles to “get” me, that was quite something else! I’m still chuckling about the thought of “You know what, I don’t think he’s planning on flying over me…”.
*Some would say this is an understatement

A GREAT! New resource for freelancers and others starting out
Wednesday, May 02, 2007 6:24:54 AM (GMT Standard Time, UTC+00:00)
I can’t recall how I came across FreelanceSwitch because it was one of those links you see on a mailing list, open to read later and forget to read until a couple of days/weeks later, but nevertheless FreelanceSwitch is well worth a read as they have a tonne of massively useful advice and they seem to be adding stacks more!
Scott Wills also posted an interesting read on getting the price for your work right. This article on pricing your work, Scott briefly touches on how to set a base rate for your work but concentrates more on estimating your time etc so if you’re interested in calculating your price or calculating a base rate for your work, have a read of my article on pricing your work (see: Pricing Your Work) as I feel it covers calculating a base rate for your work in more detail. Scott's article can be found here: The Price is Right on FreelanceSwitch.
FreelanceSwitch also gave my article on business start up advice a shout the other day which was most flattering –I hope I’ve managed to pick up a few additional readers! Hello if you're new :). You can read the list of other useful links and see mine at: Linkswitch -a roundup of great links across the web 3.
The long and short of it is to keep an eye on the FreelanceSwitch website at: http://freelanceswitch.com/.
ASP.Net Membership SQL Roles access
Tuesday, May 01, 2007 7:41:48 AM (GMT Standard Time, UTC+00:00)
We have recently moved over to SQL Server 2005 and as part of this transfer I decided to aggregate two separate ASP.Net Membership databases that were created purely out of error.
For those of you who don’t already know, you can happily run more than application’s security from a single membership database as long as you correctly configure the web.config’s security settings –for more information on doing that see my post on having dual records in the ASP.Net authentication table (see: Dual Records In The ASPNet Authentication Table). The important attribute/value set to configure if you are planning on running more than one application from the same roles database is “applicationName”. If you do not set “applicationName” you will find that users can log in across all your applications, roles/access levels will get mixed up and a whole bunch of other hullabaloo!
Luckily for me, the only records stored in one of the membership databases were two users, both of which I knew the password to so I decided I would simply update the web.config with the new database connection string and add them manually.
The next thing I wanted to sort however was the specific SQL Login’s access to the membership database, previously I simply added the user to all the various aspnet_ roles that were in the database which worked fine. As I’m looking to use this database for other applications in the future and I don’t like sharing usernames/passwords across applications, adding the roles each time would become a real PITA so I decided to add a new role with all the access required for the database so I could simply add the user to this new role. I called the role IIS_User.
A number of our applications build on the foundation of the ASP.Net Membership database with application specific values and so I tend to have another table for the application’s users within the applications specific database to store these values. The user has the usual UserId (usually an int) and a uniqueidentifier which allows me to link the two database together. With this in mind, I need additional access to the ASP.Net Membership database –SELECT permission on the tables. I don’t like adding more permissions to a role than needed but I needed a method of doing this quickly –assigning EXECUTE and SELECT permissions to the new role on the various tables/stored procedures. In time I’ll revisit this and work out which are needed by the role and remove the permissions not needed but for now this’ll do :)
The quick and dirty T-SQL
DECLARE @SQL nvarchar(4000),
@Owner sysname,
@objName sysname,
@Return int,
@objType nvarchar(5),
@rolename nvarchar(255)
SET @rolename =
'IIS_User'
-- Cursor of all the stored procedures in the current database
DECLARE cursStoredProcedures
CURSOR FAST_FORWARD
FOR
SELECT
USER_NAME(uid
) Owner
,
[name
] StoredProcedure
, 
xtype
FROM
sysobjects
WHERE
( 
xtype =
'U'
OR 
xtype =
'P'
)
AND
LEFT([name
], 7) =
'aspnet_'
OPEN cursStoredProcedures
-- Get the first row
FETCH NEXT
FROM cursStoredProcedures
INTO @Owner, @objName, @objType
-- Set the return code to 0
SET @Return =
0
-- Encapsulate the permissions assignment within a transaction
BEGIN TRAN
-- Cycle through the rows of the cursor
-- And grant permissions
WHILE ((@@FETCH_STATUS =
0) AND (@Return =
0))
begin...end
-- Clean-up after the cursor
CLOSE cursStoredProcedures
DEALLOCATE cursStoredProcedures
-- Check to see if the WHILE loop exited with an error.
IF (@Return =
0)
begin...end
BEGIN
-- Exited fine, commit the permissions
COMMIT TRAN
END
ELSE
begin...end
GO
Getting more work done - Early Mornings vs. Late Nights
Thursday, April 19, 2007 5:25:11 AM (GMT Standard Time, UTC+00:00)
If you’ve ever been involved with running your own business or indeed any start-up you’ll know long hours are sometimes a necessary evil to meet the demand or even just getting things in order. Well for quite some time now I’ve been wanting to work out whether it’s better to work early in the morning or late at night –I’m quite happy at working either but is there a better option.
Recently I’ve needed to work long hours to get a couple of systems completed and get back on track with a couple of projects so decided there wouldn’t be a better time. I did want to do something clever like monitor the number of lines of code I write or something equally measurable but to be quite honest I didn’t have the time and I couldn’t be bothered to spend hours searching for a solution so it’s all finger in the wind stuff…
Late Nights
Firstly I tried late nights. As I mentioned in my business start-up guide (see: Business start-up advice) I’m very strict with getting up –I get up when Stacey does, see her off and then I’m in the office from around 7:30am/8am (please don’t call then –I like to have a little “quiet time” to sort things out ;)) and I work until she gets home –usually around 7pm now she’s in her new role. When doing the late nights I’d go in at around 7pm, have a drink and a chat, a bite to eat, perhaps all in all an hour or two’s rest before returning to the desk for a couple more hours.
What I found with working into the night was that by the time I got back into the office I was already fairly tired from the day that had preceded (which a lot of the time is unpredictable as far as clients are concerned!) so my productivity for these additional 5/6 hours was lower than during the “normal” working day, then when I got up the next morning I would be pretty shattered from having little sleep (I still had to get up at 6:30am) which meant the next day was somewhat of a write off. So although I managed an additional 5 or 6 hours of lower productivity work, I also lost time the next day so it was semi-even.
Early Mornings
After testing working late for a couple of weeks I decided to try getting up early –initially I would get up at 5:30am as that would give me an hour or so before Stacey was awake, then 10mins waking her/refilling my tea and then another hour or so before breakfast and seeing Stacey off. I tried the 5:30am start a couple of times and could see the productivity difference almost straight away. As I was starting after a good nights rest (I could finish earlier and even get to bed earlier if I wanted!) I was fresh and ready to go again so I decided to start getting up at 5am, that way I could have nearly 4 hours of uninterrupted time before clients started calling.
By getting up at 5am you avoid the jet lagged feeling at the end of the day, oddly enough this still comes at around the same sort of time so you don’t really lose out there and the 4 hours or so before other people make it into the office which means you get an additional 4 hours of uninterrupted time.
The other advantage was if you had a deadline to meet you also had the evening available to work into –again at a fairly similar productivity level to when you get up at 6:30am.
Conclusion
Although I’ve not done any productivity level testing I know for sure that getting up in the mornings is far better without a shadow of a doubt, having the uninterrupted time where you’re fresh and alert means the development is a lot faster, unlike in the evening/night, no-one is online just “chilling” which a lot of the time can be distracting in itself, you’ve also got the added advantage of having a full nights sleep if required or working late into the night if you need to hit a deadline.
Despite my findings I still know a lot of people that stay in the office late into the night thinking that it’s of benefit but one thing I found was not only was your productivity lower, your likelihood in making mistakes was higher –which you’d just have to correct the next day. A lot of the time they were simple things that had you been paying attention/been awake for you’d have sorted!
Another thing I would like to look into at some point is whether morning or afternoon coding is more efficient and whether you can use that to structure your day better as from this “investigation” I’m inclined to do more adminy type work in the afternoon as I tire and leave the development to the morning (that is my 8 hour morning… ;))
FWIW I really enjoy getting up before everyone else, watching the sun rise and then having an evening to go to the gym and have been getting up early now for a fair few weeks –and don’t see it changing anytime soon! I think any earlier than 5am however may well be detrimental.
SQL Server Delete all data
Tuesday, April 17, 2007 3:18:54 PM (GMT Standard Time, UTC+00:00)
I expect many people already know about this technique but I wanted to share it with those that don’t. The other day I needed to remove all data from a database before importing data from another database. I usually use DTS to copy the data across but knew that the database (one test) had conflicting ids so I decided deleting all the data out of the test database would be the best way to ensure all data’s up to date.
I found this useful little set of SQL at: http://sqljunkies.com/WebLog/roman/archive/2006/03/03/18386.aspx, there are two solutions propsed within the post and comments so here they both are:
Delete the data without resetting the identities
Delete the data and reset the identities
-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'
GO
-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO