A while ago, Steve hired a programmer, who then contacted me about the job. See, it was his first freelance gig, and he didn’t know how to estimate the time to complete. Here’s what I sent him, minus the specifics of the job:
If you’ve never done an estimate of hours before, think in terms of HOW you work. For example, if you work 4 hours / night, and this will take 3 full nights to do, then it’s 12 hours. Most things are at least 1 hr; nothing is under 1/2 hour. Then double that number, and that’s what you should estimate. This will also double your time to complete the project, but never miss a deadline that you set. Spell out exactly what’s included – anything not written down is not included. Make this a bullet-list.
Then track your time and what you’re doing; again, anything beyond what you quoted is additional. When you bill, however, bill actual time, as long as it’s not over your quote. So if you quote 24 hours, but you do it in 14, bill 14. You’ll have happy clients that way.
I’d estimate this project like (everything within ()’s has been replaced with generic terms):
Research (some web 2.0 service) API – 1 hr
Research (another service) API – 1 hr
Database design – 1 hr
Import (set of data) & (other data) – 2 hr
(Data reader) – 1 hr
Cron to (do work) via (service) – 3 hr
(Output page) – 1 hr
Admin tool to manage (some data in the database) – 1.5 hr
Admin tool to manage (more data in the database) – 2 hr
This totals 13.5 hours, so my estimate would be 27 hours. When you’re asked to do something that’s above this estimate, tell the client you can do that, but its beyond the original estimate and would be an additional x hours. Even if it’s small (1/2 hr), bill them extra for it. They’ll respect you and won’t take advantage of asking for free things.
Depending on the size of the project, get 1/2 up front and 1/2 upon delivery. Some projects I do 1/3 1/3 and 1/3.
I used this method for years and always have more than enough work to do; if you’re good at what you do, and you’re fair about it, people will come back to you.
So if you’re just starting to take on freelance programming jobs, I hope this post helps you accurately quote your jobs, retain your current clients, and earn more from the referrals that’ll come in.