
We’ve been talking with a potential client about a project, and this morning, he updated his estimate asking for a fixed-price contract. His exact words were:
I also would like a quote that is based on delivering the site bug free vs time. I will not keep a clock, so all I need a system that does what’s in the doc for a locked price we agree on. I don’t want an open end agreement. Thanks.
A little background – we had written out initial user stories with some acceptance criteria, so more fleshing out of the requirements was needed. We did have an initial estimate in place based on the list of user stories and a few conversations and emails. In addition, I know for a fact that he had spent a lot of money on a software project previously, and ended up throwing out the result, hence his request for a fixed-price contract for a bug-free application.
After telling him that we don’t do fixed-price (in the traditional fixed price/scope sense – which he was asking for), I realized that more explanation was necessary. What follows is the email that I sent to him, with names removed for privacy.
Hi [NAME REMOVED],
I wanted to explain a bit more on why we don’t do fixed-price contracts. This is based on the experience that we and others have had with developing software applications.
When approaching a software project, people want to ensure a few things:
- They get the features that want
- The software is working as expected
- Their risk (i.e. the amount of money spent on the project) is a low as possible
In response to this, people typically want fixed-price contracts, especially when the numbers on the amount of failures of software projects are typically high.
Traditionally, the way this was handled was:
- There was a large up-front requirements gathering process that explicitly defines each requirement. This was either done for a fee by the company producing the software, or by the customer.
- The application was developed in it’s entirety and then delivered to the customer
There were one of few possible outcomes:
- The customer got exactly what he wanted
- The project was not completed on time due to unforeseen circumstances (people got sick, estimates were incorrect, etc.)
- The project was delivered on time but due to incorrect estimates and unforeseen circumstances, was either not fully functional or was full of bugs
- The customer got what he asked for, however it was no longer what he wanted or needed
Unless the first occurred, which was rare, the relationship between the customer and the software company soured.
This is where the method we employ – Agile – comes into play.
We are operating under a few assumptions:
- The customer has not explicitly defined the requirements up front
- The customer might and will most likely change his mind
To address the concerns of risk (spending more than expected) and getting the desired features, we develop incrementally, and bill a fixed-fee on a weekly basis. This does a few things for us:
- If any issues arise they appear sooner rather than later
- Our customers have the ability to update the requirements on a weekly basis, or completely stop the project
- As we have more information on the project, we can update our estimates accordingly, and as that is communicated to the customer, he can make a decision on how to proceed
To address the concern of the application working as expected (bug free and per-spec), we:
- Write user stories with acceptance criteria (listing the expected behavior of the application)
- Use a test driven approach (TDD) – we write the tests first to match the behavior outlined in the requirements, and then write the code
In our experience, this produces much better results for customers, and is why we do not do fixed-price contracts with fixed-scope.
—
Some additional thoughts.
What this comes down to is trust. For this customer, because he got screwed over before, he is trying to reduce his risk. As a business person I can understand this 100%. And it is for this exact reason that we do Agile development – so that neither he nor we get screwed again.
Transparency, communication, and continuous delivery rule, and in my experience is currently the best way I know to build trust with customers.
Other Posts That Might Interest You