Software estimation considered harmful? (2011)
gigamonkeys.wordpress.com
gigamonkeys.wordpress.com
It's rare that a development organisation has run out of things to build. There's almost always going to be several ideas competing to be the next thing to start, and there's got to be some way of deciding which you should go for. One obvious way is weighing up the likely cost v benefit of each idea, both of which require you to make some form of estimate.
Of course those estimates will almost certainly be wrong, but at least starting with a view of whether you think it's going to take a week or 9 months to add a mobile optimised version of your website, or whatever feature you're considering next, is going to be more helpful in making that call than starting with absolutely no idea at all of the effort it's likely to take.
(From http://www.computer.org/cms/Computer.org/ComputingNow/homepa... )
For managing cost and resource the estimating process acts as a way of discovering the complexity in the problem. Yes, it will probably be wrong to some degree, but there are ways of handling that (ie probability) on the effort analysis side. The other thing that helps is to identify the edge of what you can see, if something truly is totally unknown then breaking the work into blocks or discovery stages makes sense.
At a practical level time-line is the one that's the least useful to estimate up front, and seems the least amenable to assessment.
Without the ability to make some sort of estimate you cannot assess whether the work is likely to be worth the investment.
I completely agree. But I'll add that without some notion of risk, the estimate is itself risky. In other words, when building a business plan around software estimates, getting a one number as an estimate (30 days) is a bit crazy. It would be much more useful to attach a range or confidence to the estimate
What happens now is that Project Manager asks Team Lead for an estimate. Team Lead pads the estimate a little and says 40 days. If Project Manager expects a 20% ROI, there's a significant risk that the project will still end up in the red. Or the team ends up crunching like crazy to "catch up", which is basically the same thing since your spending other things (quality, employee health and goodwill, etc.) instead of budget. Whatever the exposure, there is significant risk that is not clear in the business plan, which is a failure of management.
In contrast, maybe Team Lead could give a 50% chance that Project Jabberwocky will be done in 30 days and a 95% chance we'll be done in 120 days.
Wait, Project Manager says, that's a wide range of values to plan around! He's right, but the emotional reaction is due to him being educated about risk, not due to the Team Lead dragging his feet or something.
So what is a Project Manager to do with that estimate? Take the risk into account. Plan around 95% estimates (keeping in mind that 1 in 20 projects will still miss the mark) or make sure the risk is mitigated in other ways: lots of little projects, relatively low cost projects, projects with huge expected ROI, etc.
In case of a product, estimating the development time will be the least of your problems. How do you estimate the revenue of a new feature? Your estimate can easily be off with a factor or 10 or even 100. So in such a case, even with perfect implementation estimates, it's impossible to calculate the profitability of a feature.
But you've got to have some form of figure, both of cost and revenue - even if it's just back of a beermat guesswork based on a vague hunch - to make any form of sensible trade-off judgement.
I do a fair amount of work around business cases for new projects, and simply forcing the proposer to go through an exercise of answering "how do you think this project will increase revenue/reduce costs/whatever, and by how much?" helps weed out ideas that don't really have legs or haven't been properly thought through, as does having a first stab at "What's involved in delivering this? Is this a 2 week project or a 6 month one?"
Oddly, just having a deadline is nowhere near as destructive. So, coordinating with folks is a lot easier if they tell me when they'll need something, rather than asking when I can have it for them.
A product however, can be released "when it's done", so there is no real need to estimate. The additional benefit is also that it can be released when the developers feel that the product is ready for release, unlike a project, where there is a lot of pressure to deliver things.
My personal view (and experience) is that developing without estimates saves time and creates a higher quality product. But other (smart) developers that I know like to work within estimates because they think it pushes everyone to deliver things.
We probably are both right, because there is yet another factor that comes into play when choosing to estimate or not: motivation of the developers. Highly motivated developers who love their job, rather work in their code instead of goofing off on the internet. But when the project/product is not that special, and not everyone feels passionate about it, estimating and follow-up is probably preferred to put a little pressure on getting things done.
With products, estimating the value of a feature is even harder than estimating the implementation time/cost. And calculating the future revenue of your product is also harder than calculating the future implementation cost.
You might argue that your product must be finished before you run out of money (which you can calculate with estimates), but MVP's don't rely on estimates that much and you can test your product/market fit at the same time.
In theory, product profitability and selecting features seems highly depend on estimates, but in practice I always saw that gut feeling was good enough, for both features and how long a development will take. You can't drop the must-have features, and nice to haves can be implemented after your first release.
And this is why there is actually no difference between a product and a project. But value doesn't depend on estimates at all, as there may be many different ways to implement. Calculating value is therefore more important than estimating net value for any specific implementation - it tells you what your direction of travel should be.
This view probably depends on your definition of "estimate", whether it's being done at an individual developers level or whether it's being done at a team/product level.
For team/product level (as another commentator mentioned) if you don't have a cost/benefit analysis then you don't know if the work being done is worth doing, and you may run out of money before your product is "done".
Additionally, (the article mentions this but it's worth expanding on) other bits of the organisation need to co-ordinate and depend on knowing status and when the product will be ready. To take an extreme example an enterprise software company might need to know with more than six months notice in order to start planning and preparing sales, marketing and PR teams for the coming release.
If you cannot read the mind of our CEO who changes the direction of the company every two weeks, you are fired?
If you cannot read the mind of our CEO who changes the
direction of the company every two weeks, you are fired?
I've experienced this.Pretty much. Whats even worse is if it's some guy between you and the CEO, who can then pretty much travel back in time and paint you in whatever picture he sees fit to put his interests above yours as a lower level developer.
I also think projects don't often work well as a way of building software. There's often uncertain deliverable a long way off into the future, and a guess at whether it will actually generate any value.
I don't just think that estimating the cost of features along a project is a bad idea, I think trying to come up with features a long way into the future is a bad idea. Things you learn along the way are likely to require you to scrap them or make significant changes, unless you're ether prescient or learning nothing.
Without projects estimates become more useful again. Focus on the most valuable things you can be building in the next couple of weeks. Estimating the top n that seem the most valuable will tell you a) if it's achievable to complete them in 2 weeks, b) give you an idea of the value:cost ratio to help prioritisation.
That sounds more like lousy planning than anything else.
In that scenario estimating things becomes very tedious and not particularly useful.
I prefer to take a strangler application approach http://martinfowler.com/bliki/StranglerApplication.html Start replacing small parts of the legacy system in production as rapidly as possible. Then move across bits of functionality bit by bit until enough functionality has been moved to turn the old system off. This also allows you to rapidly get benefit from new functionality that the old system did not have, or improved performance for the most critical parts of the system, without getting bogged down in implementing lots of rarely used features.
I would constantly be looking for the highest value features to add or replace from the old system and use estimation as a tool to aid prioritisation of those.
Now, this phenomenon isn't always deleterious imo. I've noticed in myself that my work 'expands' in two ways: if I'm working on something dreadfully boring, then it expands through time wasted on hacker news or time spent on side projects. If on the other hand I'm doing meaningful work, then it's quite often that the work expands when I take on refactorings and minor additions that will benefit long-term productivity.
If the work is indeed expanding in a meaningful way, then even though the measured productivity might not seem 'optimal' it doesn't necessarily indicate a big problem either.
- If you don't know what you are doing or you are doing for the first time, there's no point in estimate as your estimations will be off anyway.
- If you know what you are doing and already did it before, there's no point in estimate as you already know how much time it'll take.
So you've estimated it then?
If the argument is that we spend too much time producing detailed estimates that don't actually reflect reality, then I agree.
If you're suggesting that a sensible way to run a business is to say "I have absolutely no idea how long this will take, and how much it will cost, but let's do it anyway" then that's crazy.
Even the team as Wesabe (in the article) are estimating - He does encourage his developers to spend most of their time working on things that they can finish quickly and When they need to, Wesabe developers will tackle bigger projects. You can't distinguish "finish quickly" from "bigger projects" without estimating. It may be the quickest easiest form of estimating "big or small", but it's still an estimate.
The reality of the argument is that a lot of organisations can make do with a lot less formality and rigour in the estimation process. Moving from "vaguely approximate" to "slightly more accurate" is an expensive process with all sorts of cultural side effects that too many people assume is "worth it" without any real justification.
But we all estimate, because it's pretty rare that you can justify starting a piece of work that might take a day, or might take 10 years - I'll let you know when it's done.
It's not the informed prediction of the value of some unobservable variable that upsets us. It's the larger picture around it.
As I see it, you don't estimate for yourself, you estimate for transparency, so that other team members can plan accordingly.
In your first point, you might not be able to estimate, but others might be able to do so and give you hints. Your final estimation might still be off, but that's how you learn.
In your second point, you estimate so that others can see how long it will take and plan their work better.
A
B
C
D
---- week marker ----
Then we perform a quick estimate for each of the stories. We can talk them over quickly, ask clarifying questions and so on. Because of research on the unpacking effect, I like to make sure to say aloud the sort of subtasks I think will be involved, but sometimes we don't.We quickly do a "shoot out" and then simultaneously reveal our point estimates for the story we're estimating. On divergence we explain our reasoning. Sometimes it takes a few rounds to reach a consensus.
So after this process, it might look like this:
A 4 points
---- week marker ----
B 2 points
C 1 point
D 1 point
Because we've got velocity of 4 points.At this point the customer can change the order of stories. They might decide that having stories B, C and D is actually better than having story A by itself.
Just trading purely on value or on estimated effort/complexity doesn't give you the full picture. It's the ratio of the two per-story and between stories that helps a customer make the best-informed decision.
I agree that allowing change is important. Reduce the cost and risk of changes, and you will make changes as and when required. You'll also become less preoccupied with perfect planning, because it won't be necessary to manage risk.
There's two loops here. One leads to small, light, manoeuvrable projects. The other leads to building bigger plans because the risk is higher, which means that a bigger plan is needed, which raises the risk, so the plan is more detailed so that ...
The other way is emergently. Build a pile of things you want to do, put them in rough order of value, then estimate a few things at a time. Then start working. Only after a few weeks will you be able to begin to predict outcomes.
This is old news. I'm talking about velocity. Which is actually the perfect word, because summative estimations are about a total distance travelled; velocity is about the speed and direction you're currently moving in. Velocity is the differential of the project's outcomes.
Velocity is a more powerful metric because it includes its own mechanism for updating estimates. A classic "estimate smell" is that the first estimate made is the last estimate ever made. The closely related smell is "estimates that fit the plan", aka "estimation by fiat".
Velocity, however, emerges from observation. No additional action is required to update summative estimates. And what comes for free is typically, in software methodology, all that gets done.
Another way in which moving to velocity as your estimating technique is that you change what is fixed and what is fluid in discussions with clients. Traditional project management takes the work breakdown as a fixed outcome and then looks to optimise around that. Time, schedule and quality are then the variables. Velocity allows you to vary scope and work as well. You can then hold quality, time and schedule constant instead.
It's hard to convey how big of a deal this is in practice. It seems like a minor alteration. But taking seriously that the speed of light in a vacuum is fixed (per Maxwell's equations) means that spacetime varies. Which makes ... a big difference to physics.
I have seen this change in thinking bring high-risk projects to a successful conclusion under tight deadlines, with high friction, with high technical demands, in short timeframes. We had the data to show where the project was going, and that allowed us to focus on ensuring we were delivering in order of value. It also allowed us to discuss with the client what was possible and what was not possible.
Under traditional schemes we'd have had a fixed pile of features and the project would've been a "failure". Yet it did everything that was needed on a particular day, with very generous margins of safety.
Just have to register my frustration with the cliched "[x] considered harmful" headline in the IT world. It devalues the proposition instead of lending it authority.
EDIT: "Betteridge's law of headlines" also applies here (Any headline which ends in a question mark can be answered by the word no.) Since it's an opinion piece, state your opinion in the headline, and stick with it. The question mark suggests even the author's not sure he agrees with the premise, which makes me think the article is not worth reading.
It makes you reconsider what went wrong like The Mythical Man's Month (tools considered harmful aka silver bullets) by F Brooks the project manager that nearly killed IBM and OS360 is such an example.
Coding is about creativity and innovation. Not about respecting the authority. It is a hard mix of conservatism (standing on the giants' shoulders) and like the other giants ... to rant.
At one point the best developers new ideas are rants ex robe pike vs Unix (plan9, Go) (all his rants against unix (see cat) are a very good source of knowledge for unix devs)
And rants are always instructive when done by great person.
* http://harmful.cat-v.org/software/ (I learned a lot with http://harmful.cat-v.org/software/symlinks http://harmful.cat-v.org/software/dynamic-linking/ ) * computer for cynics on youtube (a rant against computer industry in general)
“It’s a curious thing about our industry: not only do we not learn from our mistakes, we also don’t learn from our successes.” — Keith Braithwaite
I have no problem with the article itself (I didn't even read it), nor the right of anybody to rant about anything. It's the cliched headline on which I was commenting.