I’m trying something new with this post: a short video presentation of approximately the same content.
Here is an area of confusion that has come up both at Oasis Digital, and at every other firm I’ve worked:
estimate ≠ promise
Around half of my software development and leadership experience has been in enterprise/internal software development, and that is the world I am thinking of as I write this.
Software development, like other endeavors with a significant creative component, is inherently unpredictable. With a good, deep understanding of the development process, you can build a model of the probability distribution of the cost, effort, and elapsed time for software development work. In the large, on average this can be made to work: small and large projects can succeed, within some broad range of predictability.
But notice also how common it is for large complex projects (in software and elsewhere) to be farcically over budget and late. This is not (usually) due to incompetence or fraud. It is because of the inherent unpredictability of the work.
If someone claims that they (or you) can exactly predict software development work, they are:
- mistaken, or
- lying, or
- padding their estimates very substantially, stating a date or cost much later/higher than a neutral median estimate would suggest
As a customer of software development services, and as a provider of such services, I don’t want any of those things.
Blame the Service Trades
I place some of the blame for the confusion of these two wildly different things, on the service trades: it is common for auto repair shops, roof installers, landscapers, and the like to offer something they call an estimate, but which is actually a fixed price quote (a promise).
Sadly, while there are plenty of common good synonyms for promise, there aren’t many for estimate. We’re stuck with using the word estimate, and explaining that we really mean it as defined. Perhaps in a few more decades we will lose the word entirely, much like the word “literally” has come to mean its antonym, “figuratively”, which renders it mostly useless.
An estimate is an approximation of an unknown quantity. Typically in the world of software development, it is a prediction of the cost, working hours, or delivery date of a project or milestone. It is not in any sense a commitment, any more than estimating the temperature outside this afternoon is a commitment.
As the word implies, a customer reasonably expects the actual value to vary somewhat, in either direction, from the estimate. In fact, if an estimate turns out exactly match the actual result, there is a good chance the books have been cooked. Moreover, if the work is completed at-or-before the estimate most of the time, this means the estimates (on average) are too high.
An estimate “costs” nothing, other than the time/effort required to create it, which consists of analyzing the work at hand, decomposing it in to parts, and comparing those parts to past work.
A promise, also called a commitment, deadline, quote, fixed price, etc. is a different beast entirely.
With a promise in hand, a customer should expect with high confidence that the actual value (for cost, hours of work, delivery date) will be less than (before), or equal to, the promised value/date.
Be wary of a promise easily made and freely given: it probably doesn’t mean anything at all. A wise customer (and I aim to count myself in this category) should expect that a casually made commitment will probably be broken; not because the maker is morally defective, but simply because meeting a commitment for complex work requires considerable effort and thought. Without evidence that happens, it would be mere wishful thinking to expect the results delivered as promised.
Likewise, keeping promises often has a cost. If the work underway gets behind the schedule needed to meet the promise, something will have to give:
- Other work may fall behind, as time and effort are diverted to meet the promise.
- Weekends, evenings, and overtime work may be needed. These might appear free, but are not.
- Staff may need to be reassigned, or added
- Additional hardware and software may be needed.
These risks cost real money; thus a wise promise-maker will find that, on average, it costs more to promise feature X by date D, than to delivery feature X by date D without such a promise.
Estimates are Cheaper, so Prefer Estimates
At Oasis Digital, we provide many estimates, but few promises. Most of the time, an estimate is what our customers need; and we can provide at estimate with very little cost. Typically we estimate reasonably well:
- small features usually arrive with a day or two (plus or minus) of the estimated delivery date (and likewise for cost)
- medium items within a week or two of the estimate, likewise
- large items (major new features or subsystems with complex interdependencoes) within a month or so, likewise
The key here is is that with good estimate, commitments (promises) aren’t needed very often, and therefore the cost of promises can be avoided.
But Learn How to Promise Well, Also
Yet occasionally, a customer needs a commitment, most often because a software version needs to be available to match an important business event with a fixed date, such as a presentation, a legal filing, etc. I’ll follow up later (no promise or estimate, as to when) with thoughts on:
- how to credibly make promises (as a service provider)
- how to evaluate promises (as a customer)