Contract Programmers – How Do You Bill?

For the last few years I’ve done contract programming work. Sometimes on the side, and sometimes as my full time job. Lately I’ve had some projects that I feel I’ve gotten… lets just say the short end of the stick. This seems to happen when I’m the subcontractor and put in an hourly quote, and the people I’m working for are doing work on a project basis.

Part of the issue is that I have a tendancy to completely under-estimate the hours to do a project. Either that or the hours are correct and the clients add features and things in that they figure should be in there, but I never thought about when I went through the requirements in my head.

It also happens because I don’t have the balls to say “no, you can’t have that included”.

I’m looking for the best way to make sure that both myself and my clients win, so I’m wondering how other people who do contact work (programming in particular) go about it.

  • How do you estimate?
  • Do you put in a quote and then bill that quote exactly?
  • What about ballooning of features (ie: not things that are outside the scope, but things that are just outside what you envisioned)?
  • What do you send to clients? Is it a full func spec and task list, or a brief description of the final result? If it’s a full func spec, how do you ensure that the clients follow it and realize that when they say “but I thought a preview feature would be in there?” that it wasn’t in the spec?
  • How complex a proposal do you put in? I’ve been caught more than once quoting a project very loosly because I get very strong>un-detailed specs to quote off of. Part of the market advantage I have (I think) is that I can move fast. Spending a week hashing out a detailed spec loses clients when you can put in a quote in a day and get started the next. Of course, thinking about it, putting in four times the time that you get paid for on a project isn’t a lot better…
  • How hard-assed are you as far as specs? If it’s not in the spec and they want it added what happens? What if it’s a small but time consuming thing? What about big features? How much time is taken doing this?
  • Any pointers to spec sheets, contracts, etc that are out there to see and use as examples?

Any other tips to share on how not to get the short end?