Love this analogy because you can extrapolate it even further.<p>I'm the kind of guy that travels the first 80% on the highway, reaches the traffic-bloated city, and actually makes a U-turn to head towards a totally new city, thinking "I'll visit that city later".<p>Or, quite often, halfway towards my destination (let's say 40%), I'll see a board saying "Next exit: even better city", and take that exit. After taking a few of these exits, I will have spent hours or even days on the highway, without having reached <i>any</i> city, or even coming close to one.
The analogy is nice, but I'd enhance it a little bit to emphasize the responsibility of, ahem, driver and make all of this more useful.
Unless it isn't his first trip to the city, the driver needs to reduce his optimism about the arrival time. Especially at the beginning when he has a lot of time, he needs to avoid all those tempting things like: playing with his new GPS to design the best route; exploring the new and/or intriguing parts of suburbia, changing the cars for fun and so long ...
Great Analogy, the basic idea is similar to this quora post (linked below) both in the travel metaphor and the fact that both deal with software development effort estimation:<p><a href="http://www.quora.com/Engineering-Management/Why-are-software-development-task-estimations-regularly-off-by-a-factor-of-2-3" rel="nofollow">http://www.quora.com/Engineering-Management/Why-are-software...</a>
I think it is because people are terrible at considering hidden complexity and the odds of something unexpected happening.<p>My biz partner has a philosophy of "there is no such thing as a simple app." Hidden complexity is everywhere.<p>Consider user login. A form with username and password right?<p>Do you show the password as they type it or obfuscate it? What if the user forgets username or password? How do you handle password reset? Did you make sure you are sending over https? What about captcha? Do you use one at all? Do you have password strength requirements? How do you want to store the password data? What about security questions? What about error handling? Do you support oauth like facebook login? Will this work for login via api? How are you going to test login? Will you write feature specs, unit tests, etc?<p>Now, how often do people think through features in that kind of detail when estimating? Look at the above questions. All of a sudden the last 20% starts to look like 80%.
In case the site isn't loading for you (wasn't for me):<p><a href="http://webcache.googleusercontent.com/search?q=cache:www.matvoz.com/blog/2013/10/let-me-tell-you-why-the-last-20-od-work-takes-the-same-amount-of-time-as-the-first-80/" rel="nofollow">http://webcache.googleusercontent.com/search?q=cache:www.mat...</a>
The saying is something like: once you're 90% done, you're halfway done.<p>For code, it's because you've solved all the easy stuff and can finally see a product. It's the unexpected UX problems along with the dumb-but-hard-to-solve bugs you're now handling.
While doing some research for an article[1] I read a paper[2] in which the main causes of underestimating are given as:<p>1. "Frequent requests for changes".<p>2. "Overlooked tasks".<p>Agile methodologies are good at placing #1 front and centre. But importing that fusty old concept, the checklist, might help a lot with #2.<p>[1] <a href="http://confidest.com/articles/how-accurate-was-that-estimate/" rel="nofollow">http://confidest.com/articles/how-accurate-was-that-estimate...</a><p>[2] Albert L. Lederer and Jayesh Prasad. "Nine Management Guidelines for Better Cost Estimating". Transactions of the ACM. February 1992.
My Math teacher in College used to tell me it takes 5 times the effort to go from 70 to 100 marks, than it took to go from 0 to 70 marks. Finishing well is hard and often takes more than just raw application of hard work.<p>To get it really ~100% percent right, you need to not only work hard, or work more but you need to develop a strange obsession for quality. And that only comes from continual reading, and upgrading your skills. To constantly learn from experience and other people's wisdom and apply it to your daily craft.<p>Getting to the 80% done part, if you note you will be often working on stuff which is largely solved and rewritten many times. Things like working with DB or a file, or parsing an XML- Basically stuff like that is what constitutes first 80% of the project. The remaining 20% is what your actual project is, its functional requirements, its quality and other stuff like that.<p>This is not just with software, building a home is very similar. It takes very little time to build the frame structure(walls, foundation, roof etc)- A lot more time to actually finish the home which is livable.<p>For that you can only do it right if you go slow but steady.<p>Remember you either go far or fast, never both. You will have the stamina or strength to only do one of them.
Home building also follows the same analogy. Our house was one of the first completed in our neighborhood, and we moved in before most of the others began construction. The foundation, framing, roofing, and siding all go up pretty quickly. As the house nears (visual) completion, the detail work and coordinating the subcontractors and inspectors stretches out the timeline.
The last 20% takes time because you're in the realm of the last inch.<p><i>Now listen to the rule of the last inch. The realm of the last inch. The job is almost finished, the goal almost attained, everything possible seems to have been achieved, every difficulty overcome — and yet the quality is just not there. The work needs more finish, perhaps further research. In that moment of weariness and self-satisfaction, the temptation is greatest to give up, not to strive for the peak of quality. That’s the realm of the last inch — here, the work is very, very complex, but it’s also particularly valuable because it’s done with the most perfect means. The rule of the last inch is simply this — not to leave it undone. And not to put it off — because otherwise your mind loses touch with that realm. And not to mind how much time you spend on it, because the aim is not to finish the job quickly, but to reach perfection.</i><p>From Aleksandr Solzhenitsyn's book "In the First Circle".
How is driving similar enough to coding? You can take 2 coding projects and the times for a team to complete them and their estimates will differ wildly. Commuting on the 280 to Palo Alto from San Francisco is 45 minutes on average. There is nothing mysterious about this or complicated. Coding is much harder and the OP is guilty of a bad analogy fallacy.
I knew a manager whose favorite saying was that we just needed to do the 20% of the work that got us 80% of the way there.<p>Well, needless to say, he never got a minimal viable product out there.<p>It definitely makes sense to be "lean" and not do anything that doesn't need to be done, but if you're lean you still need to complete 100% of the MVP.
This kind of fractal complexity is true per batch. The problem being described here is quite simply large batch sizes, with many projects treated even as just a single batch. The smaller your batch size, the more constant your overall project velocity is.<p>80/20 is therefore a sign of a poorly managed project (since visibility of true velocity is hidden, planning is impossible at best or based on false data at worst, and overruns are collected and unpacked only at the end).<p>Unfortunately very few managers involved in planning get this, and as a result don't recognise their responsibility is for delivering the whole at a predictable rate by managing this process. (Instead we often see a sick project management culture of not giving the client what they need and whipping the delivery horses harder, under the illusion that this is just how projects get delivered - always painfully and late, if at all.)
I think this is a great analogy. The reason why it works is that we tend to relate progress in one intuitive metric (distance travelled) to a less intuitive one: time. Why shouldn't 80% of the trip be done when 80% of the distance is covered? Likewise, a merely sketched-out project can look dangerously complete.<p>In both cases you get caught by complexity. It's easy enough to drive in a straight line for a while, and your app's login system will likely work the same as most others'. But the devil, in both the city and in your code, is in the details.
I agree to some extent. My hypothesis is that during a project you take a lot of shortcuts, because solving that last part of a task sometimes involves a lot of work to get everything perfect and working for every user. It could be making a responsive website work in legacy browsers, or it could be a script I know works in my dev environment but I haven't yet tested in production,. Even so I close my eyes, mark these task as done and move along.<p>So the last 20% is actually a bunch of 0.5 percenters pushed to the end of a project. At least for me.
The obligatory quote:<p>"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time." — Tom Cargill, Bell Labs<p>[<a href="http://en.wikipedia.org/wiki/Ninety-ninety_rule" rel="nofollow">http://en.wikipedia.org/wiki/Ninety-ninety_rule</a>]
I believe you need to include arriving at your location and finding your directions were wrong/GPS was out of date/were given the wrong address, and need to re-do most of that last 20% drive again.
Great analogy.<p>I think next time if we try to guess the amount of time we need to complete a project, we will just ask how long would it take to complete up to Stage 80%. And just times it by two.
Wow I totally agree. And it's probably why I don't finish anything, because I am conditioned to expect it to be same work as earlier.<p>Not just for this, but almost everything.<p>The Paredo Time Principle?