-
Website
http://squeejee.com/blog -
Original page
http://squeejee.com/blog/2008/08/26/why-we-bill-by-the-hour.html -
Subscribe
All Comments -
Community
-
Top Commenters
-
Jesse Newland
1 comment · 1 points
-
mebigfatguy
1 comment · 1 points
-
luigimontanez
1 comment · 1 points
-
papyromancer
1 comment · 7 points
-
Jonas Lejon
1 comment · 1 points
-
-
Popular Threads
You're completely right about this. You either have to overprice yourself in case of extra work or unforeseen consequences (taking the client to the cleaners), or pricing fairly but again unforeseen consequences occur (and YOU get taken to the cleaners). It's happened to me previously where I've drawn a spec out with a client, and hammered down exact content and sections, then received a phone call a few days later saying they forgot something critical, and would I be able to "sort it out"!
Best Wishes,
Anthony
The client simply multiplies your hourly rate by the expected time to determine the expected price, which becomes your defacto fixed bid and you're right back where you started. Go over your time estimate and you have to deal with all the same issues you would have to otherwise, go under and you're losing money with respect to a fixed price.
The heart of the matter is this type of work is for fools. Developers aren't happy because they can't afford to do a good job, and are at the mercy of the irrational dictates of the client. The client might occassionally be happy, but only because they're ignorant of the pile of shit that's been delivered to them.
In other words: consulting work is bullshit, build products and sell them instead. But that might require learning something of economics and re-evaluating your attitude to open source.
A fixed bid job that spans anything more than a single agile iteration runs into the problems of rigidity, working against agility, lack of mobility wrt "critical" change requirements. It's not, in my experience, workable to fix a bid for anything past a single iteration.
On the other hand, customers do want to contain risk (basically ALWAYS), and uncontained price growth is one of the most significant risks.
One further issue that's not been mentioned is efficiency. If developers are working at an hourly rate the incentive is present to take as much time as possible in order to maximize pay. This runs counter to what one would want as a professional, as a craftsman: an incentive to learn one's craft so well that one becomes increasingly more efficient at it.
I would counter that the contention that a fixed bid ends up with clients getting taken to the cleaners is actually worse with the hourly rate: hourly developers, unless they continually practice discipline, tend to bill clients for time spent doing mundane things that would be automated away under a fixed-price structure.
I recommend a middle ground that addresses most of the risks:
* Jobs are estimated on a per-iteration basis, documented with a Statement of Work. An iteration is something like 1 or 2 weeks of work on a well-defined list of stories.
* The work for the iteration is estimated and given a fixed cost.
* Work that is "emergency" work, changes to scope, unforeseen but critical, etc., is billed at an hourly rate high enough to justify doing it, high enough to discourage thoughtlessness, but low enough that the client can see paying it.
In my personal experience, some deviations apply:
* If the work is on a system (and/or with other developers) that is such a mess that even single-iteration estimation is not possible, then the work is to be done hourly, at a high rate. But it becomes our responsibility to show the client why this is so. The majority of our clients don't have this problem, but the few who do are pretty aware of the mess they're already in.
* Some clients want a long-range estimate (say 6+ months). In that case we do more story work with them, do very rough estimates, explain to them why Agile works, and give them an estimate on the high side and provide documentation to the effect that this is in no way accurate, binding, or even in the realm of reality. If they insist on pinning down some effort/cost structure for a pie in the sky project we either multiply the estimate by a non-trivial factor, or we refer the client to someone else.
The short-term fixed bid has a number of advantages:
* it actually limits some of the client-side risk by fixing price
* it limits some developer-side risk by fixing the scope being tackled, and forces developer-client communication as developers are shouldering the risk of implementation
* it limits longer-term risk by refusing to include risks that can't be studied or addressed in the current iteration
* it forces developers to produce deliverable software on a per-iteration basis, as the customer can (and should be able to) go somewhere else for the next phase of the project
* it forces developers to become more efficient at their jobs, as inefficient developers end up with a low effective hourly rate
* it allows developers to potentially raise their effective hourly rates if they deliver valuable work to the client in a short time frame
If a client is willing to pay (say) $8K for a two-week iteration of working software that covers the 20 stories that end up in the iteration, and there's noone else in the market who can beat that price, I would contend that the iteration is worth $8K. If the developers end up spending $10K worth of time to deliver it they're not doing well, but have an incentive to improve. If they end up spending $6K worth of time implementing then they're doing better than the market average. Are they ripping off the customer? I would say no: they're shouldering the risk, charging what the market will bear, and being paid for becoming efficient at what they do. If they do shoddy work or if the market won't bear the price then their price must come down, otherwise I see this as a fair market transaction.
All that said, I've seen this in personal practice. My company has been the "back-end" (or "guest stars" in the client's parlance) for a couple of HashRocket "3-2-1 Launch" releases. Basically this means that for a fixed bid we come in and produce a working application *in 3 days*. We have been comfortable with doing that, everyone has found the results (both software and money) great, and it's single-iteration fixed bid work that requires us to be highly efficient at what we do.
Best,
Rick
As to the argument that clients will just multiply rate by hours to derive a de-facto fixed bid - it's your job to clarify the nature of the beast: it's at least partially a subjective endeavor, and since changes have a cost to you, they have a cost to them.
Truthfully, there's a bit of a Catch-22 baked in: it's much easier to convince clients that you won't go wildly over the estimate if you have a body of existing work (and satisfied customers) to point to, but of course you need to land some contracts first. But that's common to starting out in general, and not endemic to the issue of how to price your work.
the other way around is simply the way cheap companies deal with shitty programmers.
If you're writing code and getting paid for it exactly once, you're either a chump, or that's all you're worth.
What software do you use to track your time?
So you say you can still work with a company who has a budget for your project, but in reality you would use up there money, have half the project done, and therefore nothing to show for the money they have spent. They would either have to write of the money they have spend, or get money to finish the project. Rather than have a guarantee of deliverables. Once again, this is ridiculous.
I can't believe you are proud of the fact, and seem to brag about the fact that you can't estimate a projects time. If you can't estimate how long a project is going to take, how can you estimate how many resources to throw at it, or even if it can be done?
Otherwise I bill by the day, where the day as a fixed amount of hours, for the reasons you gave.
@cak -
We all have experience estimating how long it will take to complete a project. Remember, this is an _estimate_. The accuracy of the estimate depends on a number of things including the level of detail at requirements gathering and how much things change before the final delivery.
Just because you are Agile doesn't mean you do not estimate. From a long-term planning perspective you can still provide the customer with a time estimate. However, it is generally recommended to broaden the estimate the larger a project becomes. If it is a one year project, estimate that it will be completed Q3 2009. As you get closer to the end of the project, you can refine the target, like Sept 2009 or as you get even closer, a real date like Sept 26, 2009.
With a high-level time estimate, the customer can still budget for the project. You can give the customer a rate and a time estimate. Let them do the math. They will see that the project will cost them between $150,000 and $200,000.
One of the purposes of Agile is to give the customer what he wants, not what he wanted. A waterfall approach without communication with the customer during development will lead to delivering a product the customer will not use. With Agile, because you are in constant contact with the customer, providing regular updates on the product, you will be able to adapt to the customers changing needs.
The beauty of an Agile project is that the customer is able to provide feedback continuously. Many times this means delivering a better product in less time. The customer gets exactly what he wants and saves money at the same time.
All that said, if you are a company without a lot of credibility (like a start-up), many times you don't get to call all of the shots. If the customer demands a fixed bid, perhaps you take it because you need the revenue. However, you can still apply Agile principles within a fixed bid project. Change management just becomes harder with a fixed bid.