Why I don't give fixed price. Software developer story.

December 24, 2007 – 01:49

Recently I’ve chatted with a potential customer.

He seeks developers to create a simple social network application. He spent some time doing this. Actually, a considerable time and a sizable budget: one year and a half and undisclosed amount of money.

Now he’s got three different implementations of his idea. All three partially working. All three not ready for a production use. Two out of three developers broke their (extended) deadlines and he stopped to work with them. The leader of third group is not returning calls as deadline approaches.

It smelled like a typical deathmarch project for me from the very first words exchanges with current developer. Being there, done that, know what to do to get out of the deathmarch hell.

Despite I’m charging considerably more that his current developers, he seemed interested in me: I have project management experience, I speak like I know what to do, I can start right soon and can get more developers into the team.

Nevertheless we’ve not contracted.

The show stopped when I was asked to provide an estimate for the project.

My opinion is that asking for an estimate at the engagement to the software contract is suboptimal, at least. I can’t provide a project “estimate” if I’ve not spent time reformatting the specs to my standard, read the code, tried it and documented the defects, outlined the plan, estimated it, experimentally verified the first step estimate and corrected it. Just because “the estimate” in the software development is what other people call “the bid”.

What I can provide at start is a guesstimate – here we have N functions, M screens, so it should take kM + lM days.

But just when I append the usual disclaimer that this number should not be relied upon in any kind of financial and time planning, the understanding breaks.

Actually, what customer desires is just a fixed price bid, so he can get rid of financial risk.

Game of bidding

The bid selection on software project is too much influenced by the bid bottom line.

It would be a good thing, if it would include any kind of total cost analysis with some model attached. But what bid on a small software project does this?

At most, it includes a detailed analysis of cost drivers and a total development budget. And in most cases it just states the amount of money paid to developer upon project completion.

Nevertheless, the development budget is the easiest thing to understand in the bid. It’s just a number.

No wonder the bid is mostly selected by the budget. No wonder developers learn the game very fast – underbid and get the project. Whatever happens next.

Parameter space of the software project

It is an established custom to treat a software project within 3d parameter space:

  • budget,
  • delivery time,
  • quality.

If the project has fixed complexity the volume, occupied by the project in that space, presumably, stays constant.

But…

Where’s the project complexity is fixed? There’s no such thing like a perfect information transfer between two persons. There are always errors in understanding. The project requirements, unless specified in a strict semantics (like programming language ;) ) are always subject to an interpretation.

Therefore the actual best estimate of the volume, project occupies in the parameter space, will always change with time.

That’s the reason why any project plan should allow room for errors and resources to fix them.

Logically, next question from a customer would be: why I can’t pay an insurance against such errors? Finally, it’s the developer who’s the specialist? Why can’t he include that in the price?

Simple probabilistic model of a feature development.

Of course, a developer can do that. If he has the level of discipline, comparable to the traders of financial products (e.g. options).

Most developers don’t.

The pricing of options, err.. feature estimation is counterintuitive. And even the best financial models tend to underestimate the effect of the “long tail”, the effect of events with little probability.

Let’s build a simple probabilistic model of single feature development.

Let the complexity of feature would be 8 points. That means, it would require 8 hours of constant attention of the qualified and prepared developer, without any interruptions or problems.

Of course, that won’t translate into 8 billable hours. It could be anything from zero to infinity with a peak near 8. Good developers will have sharp peak, mediocre – wide one.

Also, say, it would take about a clock day to complete. With the same probability distribution.

Next, someone had to review the feature. Name it code review, acceptance testing, anything. Let it require 1 point of complexity and require another a day of clock time to complete.

The review has 4 chances to accept the feature to production and 1 chance to return it to development.

(Gamma distribution on all values, alpha = 2, beta = number of complexity points or number of days)

What would be 95%-level certainty estimate for the implementation of this feature to take?

41 billable hours and about 9 days to complete!

What would be 50%-level certainty estimate? 16 billable hours, 4 days to complete.

How that compares to blind estimation of 8 + 1 hours? Where is the intuition there?

The fallacy of risk minimization

A rational developer, equipped with such model, would give estimated 41 billable hour and ask for a 9 business days timeframe to complete the task.

So what the “rational” customer desiring to minimize his budget risk would pay? He has quite good changes (45%) to pay 25 hours less (41h – 16h) and get his result sooner by a work week.

Then why the hell I’d advise my customer to overpay me? Why would I put myself in ridicule position of explaining how “a day worth work” translated into more than a work-week fixed price bid? Or why I would underbid and increase my own risks?

I would welcome any analysis of the simple model above to show that I’m wrong.

The recursive nature of estimation of software project.

See how the development of a simple “day-worth” feature translated to complex “inflated” estimation?

But the actual software project is much more complex than a set of such features. Features get dumped, added, misunderstood and, finally, even some bugs slip review and (OMG!) go onto production. This all adds another loop of confusion and complexity and inflates a reliable bid even more.

Yet customers require fixed price bid even before the detailed planning is done. What a developer ought to do? Refuse to bid a fixed price, bear the risks or play “this time will be different” game?

The way out.

The software development is a superposition of several complex probabilistic processes. An attempt to put a fixed price tag onto it would be similar to put a fixed price on an financial instrument. An attempt to establish a “fair” price on goods based on careful analysis. History teaches that no one learns their lesson latest huge attempt to do this failed miserably.

Financial market has its own solution – the trading, which establishes what is believed a fair price.

And it’s time to recall that the goal of a software development is not to establish a “fair” price for a project. The goal is to develop a product.

An attempt to minimize risks by obvious means finally costs much more for a customer than the risk itself. The obvious means are not rational.

An attempt to minimize risk in a software project is similar to an attempt to calculate an outcome of tennis match from the names of players and the brand of rackets. Do really any rational tennis player try to set the game plan ahead?

No, of course. They do the work in tight iterations. Watch-move-swing-hit-watch-move… etc They minimize risk by close coupling of facts observed (moving ball) and their own movements.

In software development the analogy would be tight development iterations. Promote enhanced versions to production weekly. Release on staging daily. Do a continuous integration builds to watch the code integrity after each build.

And if you are overbudget, make a business decision to stop or to allocate more funds. That’s not a development problem.

Cease overplanning. Get a life.

PS

Ah, yes, my customer, I’ve started with…

Yes, you know his story already. He was blinded by estimations he was given and his desire to minimize the risk. His product is in the development from early 2006 and is not yet complete. What he tries now is to get “more reliable estimates”, preferably from “more experienced developers”. Let the force be with him.

  • http://www.pbell.com Peter Bell

    I’ve been through this process innumerable times. Firstly I think you have to classify types of projects. Projects with existing code are a minefield and inestimable (in my opinion). Also projects with “rocket science” (truly novel functional requirements) or “lab experiments” (challenging non-functional requirements that need to be verified and met) will cost what they cost. You don’t even know if you can deliver until you deliver.

    However, for relatively well defined user stories (with screens and actions scoped out for primary, branch and exception flows), I think a programmer with experience in developing such stories can provide a fixed bid for creating something that meets the documented spec.

    That doesn’t seem unreasonable to me as the developer knows better the likely effort required and it’s reasonable for a fixed bid to be provided for the story point.

    Then of course, the client will typically want some tweaks – sometimes trivial, sometimes never ending. In this phase, the client is in primary control of the amount of work required and hence I think should pay the developer by the hour.

    With this blended approach both the client and the develoepr are incented to provide an application as cost effectively as possible. I wrote up a quick posting on this the other week: http://www.pbell.com/index.cfm/2007/12/13/Managing-Risk-in-Website-Development

    Thoughts?

  • http://onwebapps.com/ Shanti Braford

    I just jumped into contracting part-time (making twice as much per hour, this can afford to work half the time) and can sympathize with you re: this kind of client.

    The potential clients that I come across who I have most faith in succeeding are focused on getting 1/10th of the features done, as compared to the ‘deathmarch’ clients.

    Much like the 37 Signals philosophy. Do 1/10th the work (or features), but do them right, make it look nice, clean, functional, etc.

    Then there are other clients who want: a) Section A to be a MySpace clone b) Section B to be an eBay clone c) Section C to be a WordPress.com clone … all on the same website/app.

    And don’t even realize it’s totally unrealistic to have all these features in a 1.0 of one app, let alone the X that they want to pursue.

  • http://www.farnz.org.uk/ Simon Farnsworth

    Does it help you feel OK about the (potentially massive) overcharging in a fixed price bid if you accept that you’re charging for two different services:

    1) Your development time, at normal price. 2) Assuming the development risk, in the event it takes more time than estimated.

    The second of these items is usually very expensive in comparison to the likely cost, not least because customers may not offer good specs (so you want to budget for 2-3 times as many hours as you think you’ll need).

    By all means, try and persuade a customer onto your hourly rate instead of a fixed-price bid; if nothing else, the price difference should help convince them. Just bear in mind that a fixed-price bid has two parts to it; the cost of you doing the work, and a hefty insurance premium to cover overruns.

  • http://www.redmoutainsw.com/wordpress/ Chui Tey

    The 95% confidence estimate is not useful, if you are in a hypercompetitive environment.

    I realize programmers aren’t gamblers. Sometimes, one has to accept that one is not going to make money in every project that one wins. As long as 90% of the projects make a decent profit and covers the 10% that don’t, you are probably running optimally.

  • Andrey Khavryuchenko

    Peter,

    Fixed priced feature is good enough alternative. The problem is that when the client wants fixed price bid, he doesn’t want to pay hourly for the analysis, necessary to prepare such detailed documentation. And the clients, ready to pay hourly for the analysis are pretty ready to pay hourly for the development.

  • Andrey Khavryuchenko

    Shanti,

    This particular client is already ready to accept iterative development with 10% of features done initially. I guess two years of contracting out the development taught him a lesson.

    The real problem is that even a risk-free premium charge worth much more than a work itself.

    See the example with the simple feature above. There are quite good chances to get it done in 2 days and be charged about 9 hours. 50% of time a customer would be charged 16 hours or less. But as soon as he wants a risk-free (say, I’m ready to eat 5% of risk) – he’ll have to pay 32h extra of the probability density peak or 25h extra of 50% of cumulative distribution mark.

    Perhaps, the question of this post should be articulated more harshly: how ethically is to bill such extra premium to customers that do not want to understand the statistics?

  • Andrey Khavryuchenko

    Chui,

    Do you really thing there would be much difference between 95% and 90% level of certainty?

    Ok, I’m rerunning the model just to get…

    That 90% level for the simple 8-pt feature above is 34 billable hours and around 8 business days to deliver.

    Therefore, talking about hypercompetitive environment, it’s still much more useful to charge your customer by hours actually worked and steer the process by tight iterations.

  • raveman

    I think its possible, but with fixed price you should agree on the begining on user stories and stick with it(thats what he wants). If he wants some changes he should be able to get them and pay for them extra (even small onces to teach him not to waist your time and not to slow down project). You might even be brave and tell him that all the changes will be added in version 1.1. Even if he cant afford changes he will get at least working version of what he wanted and not half-working version with cool features.

    If there is not legacy code base than I think it should not be a problem.

    You should also be able to understand customer, he might be getting fixed budget for the project and hes scared that someone might not be honest in hour system.

  • BlogReader

    What about giving them a cost per hour with bonus for milestones reached at a certain time? That way he can semi-protect himself from a project that drags on and on and you get a bump in pay if you deliver early. Road construction contractors do this all the time.

  • Stephen

    I think 95% is excessive, and would lead to uncompetitive rates. Instead I suggest 60-70% – in the long run (ie over several projects), the developer should still be making more money than they would have been if they were paid by the hour, and the occasional project which overruns is more than offset than the others which come in under budget (from the developers point of view).

  • http://runlevel2.com mitry

    I recently saw a Craigslist posting, someone was seeking a developer to build a video-sharing website, with a total combined budget of $3000 and a timeframe of 2 months. I emailed just out of curiosity, asking the guy if he really expected to get a youtube clone for this kind of money. Well, he promptly replied that he already has found someone willing to do the job. Simply amazing!

  • Andrey Khavryuchenko

    @raveman

    To my experience (and I’ve done a lot of fixed price projects), the bidding itself is an expensive process. And it’s way too easy for both parties to start argue about next milestone price, instead of doing development.

    Re customer got fixed budget.. All he has to do is to say that. Developers are rational people mostly and may structure iterative process in a fashion that maximizes the chances to get a working product within the budget.

    Agreeing upfront on both fixed functionality and budget also frequently leads to feature squeeze, even if it is directly prohibited by a signed agreement.

    There games are way too familiar :(

  • Andrey Khavryuchenko

    @BlogReader

    Yes, milestone bonus is an interesting project setup. I’ll try to suggest it to my client :)

    @Stephen

    I’d be happy to lower the bar, but the model presented is far too crude. I’m developing a more elaborated one that would be useful in a business planning now.

    I’m still concerned that these models underestimate the magnitude of low-probability big failures. Just like most financial models do.

  • Andrey Khavryuchenko

    @mitry

    Exactly.

    And know what such customer does next after his project fails? He toughens conditions even more: micromanaging, full payment only after completion, more upfront developer screening. And, as a result, only young, brave and inexperienced decide to risk working on such conditions.

  • Jorge Diaz Tambley

    The sad part of the story: We, readers all around the world face exactly the same problems…

    I’ve found the book ‘Software Estimation’ by Steve Mc Connell to be of great help.

    Best regards from Santiago, Chile

  • http://blog.ceesaxp.org Andrei

    I agree with some and disagree with some in the post and in the comments. The dangers of overzealous fixed-price bidding with little substance behind is known to me as a client. The flip side of “you’ve committed — do it” in fixed situation I know as a solution provider. And the case of lazy hog hired on T&M basis I also seen.

    The truth is always somewhere in between, it is never ultimate. And best case approach has always been to keep client aware of the 3D money/time/quality model. There are times when client would agree for quality to be reduced (usually dropping features, not getting a buggy release) — normally when time is more important for him. And there are cases when they would reneg money or have some flexibility in time.

    As a client, I would never give a free hand (T&M) to a vendor I have not tried in FPC case. I’ve seen where T&M projects may go. A combination of T&M analysis and FPC development project may be the better compromise, at least from my experience.

  • Andrey Khavryuchenko

    @Andrei

    First of all, dropping features is not a quality reduction, it’s a change in the amount of work. And is pretty valid to me, actually this is exactly what’s done during iterative development.

    Next, the issue of inadequate performance is solved by tight iterations. If you, as customer, see the product improvement at least weekly and at the end of the week don’t see the expected progress – just stop collaborating with such developer. That’s simple. All you risk is weekly budget and never more.

    And the last, but not the least. What legal protection I have if I’ve agreed to a fixed price and spec interpretation is twisted by a customer? I see very little negotiation tools for a developer in a fixed price contract, especially if whole payment is done at the end and the budget is not that big to afford to go to court.

    Yes, the combination of T&M and fixed price is good. But the best one I can think of is a weekly plans with fixed price per feature. And then the math above becomes actual: should I advise my customer to overpay for the insurance or play a roulette with my own expenses?

  • Shorel

    how ethically is to bill such extra premium to customers that do not want to understand the statistics?

    Totally and perfectly ethical. Even necessary.

    You have to learn that you ultimately are not billing by working hours. You are billing for features. How long you take to build them means nothing. How well they work in the end and satisfy the user’s requirements means everything.

    Otherwise, a superb programmer that codes everything in 1/5 the time of a standard market programmer will make 1/5 of the money of the standard one. Totally unfair. If any, the superb programmer should earn even more.

    And always tell the client: Fast, Cheap, Good, pick any two.

  • Name

    gd