Note: This essay is not always applicable while some projects definitely demand a straight work schedule, reporting and collaboration between the team members. However it reflects the majority of projects and clients out there in the wild.
As an employer I prefer to charge on a project basis. It's easier to plan my budgets and the costs of the final results.
As a contractor I prefer hourly payments. It helps dropping the pressure from incorrect specifications and further negotiations after the project and the budget have already been set.
However I am well acquainted with the pros and cons of both methods. But there are three terms that I believe most clients use in an inappropriate context without gaining the maximum productivity and optimal costs for their projects. We're speaking about the hourly rates, the amount of work and availability.
As I said I got tired of arguing with clients with dummy specifications and clonings of the "Clients from Hell" samples. I don't expect all of them to be technicians. But usually the time dedicated for meetings, specifications and other meetings during the process exceeds the actual development time. And also the initial meetings and negotiations are still 'Awaiting' and projects are not actually accepted so there is a serious risk of "This price doesn't fit to my budget, I cancel" so... yeah.
So I prefer the hourly rates. I estimate single tasks and modules based on what I know. In case of any misunderstanding we have a short chat/call with detailed data what is the extra work all about, what else needs to be done and how will this reflect the previous estimate. On approval we work, on rejection - I don't waste my time. Simple as that.
What annoys me most is that clients are looking for specific hour rates. For instance: "I am able to pay $10 per hour" while I am estimating some projects on $20/h. And I get rejected because of my _hourly rate_ without even being able to estimate the amount of work to be done.
This is completely wrong for one simple and basic reason. A task to be solved is based on the following formula:
Solution = amount of time * hourly cost * quality coefficient
Lets start backwards.
- Quality coefficient - a decimal variable between 0 and 1 that values the final quality of the solution. For instance, talking about a website creation, a QC of 0 would be completely useless end product. A coef of 1 would be a multilingual website (if needed) which is W3C valid, cross-browser compatible, reusable and well documented source code, stable and secure.
- Hourly cost - simply the price for working for 60 minutes.
- Amount of time - here is the tricky moment. This is the time that an expert needs to complete a given task. You know what? My $5-coders I work with are pretty slow and their end work quality often needs refactoring. While they solve a simple problem in 4+ hours with a coefficient of 0.7, my core developers for $20/h complete their assignment in less than an hour with 0.95+ quality. And asking for more.
So, what I am about to tell is: don't judge the coder by the hourly rate. It's irrelevant until you know the end estimate and the quality of the work.
Amount of work
This is another standard requirement which is particularly based on the hourly rate.
In my experience there are 2 types of projects - maximum work for a short term or flowing work which is long term. Most employers require long-term non-stop working. This usually affects the productivity of the worker and his/her motivation as well.
If you work with an experienced coder or designer, or whatever who could do proficient and high quality work for a short time, you need to give him/her the freedom of the 9-5 working office schedule. Sometimes this is not possible due to some company requirements about the availability and meetings and so on, especially when people do work in different time zones. So here it is step 3 - the availability.
The availability is the time range while the worker is available to contact the project responsible person. However most clients expect that the person is available only during the time of the actual work and also, that he/she is working all the time during the availability period. Which is completely not mandatory.
For projects that need some quick reaction and support the contractor must guarantee availability hours and _not_ work hours. Its just like the support positions - 2 people should be _available_ 12h for any possible exceptional situation. But it doesn't necessary mean that they need to do actual work during this period.
My practice is working on 2 or 3 projects a week, as the projects vary in their specifications I dedicate 40-50 hours a week at total. I am available 70+ hours a week for a client if needed to get some consulting or just status updates and I do quick and clean work for the 15-25 hours that I have agreed on working for the given project. This usually leads to best results at a minimal cost.
What I could have done for the conservative clients?
I don't like cheating and I usually cancel projects and reject client invitations for people that wouldn't understand this article. But, you know what? If I am confident in my skills (as I am in few technologies I've been polishing my skills in during the last 7 years) I could have done the following:
- estimate projects completion time multiplied by three or four
- giving half of my availability
As a result I would charge for 4 times slower work and 2 times the price I would charge normally with a flexible client. I would mark in my work diary 120 hours of work (3 projects * 40 hours) while it is hardly possible while I actually work on my normal rates and schedule. No one would even doubt if I am a fast and clean worker. But why should I cheat if we could agree on my preferred rate and a flexible working time?