Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Programming Software

Overconfidence: Why You Suck At Making Development Time Estimates 297

Dan Milstein from Hut 8 Labs has written a lengthy post about why software developers often struggle to estimate the time required to implement their projects. Drawing on lessons from a book called Thinking Fast and Slow by Dan Kahneman, he explains how overconfidence frequently leads to underestimations of a project's complexity. Unfortunately, the nature of overconfidence makes it tough to compensate. Quoting: "Specifically, in many, many situations, the following three things hold true: 1- 'Expert' predictions about some future event are so completely unreliable as to be basically meaningless 2- Nonetheless, the experts in question are extremely confident about the accuracy of their predictions. 3- And, best of all: absolutely nothing seems to be able to diminish the confidence that experts feel. The last one is truly remarkable: even if experts try to honestly face evidence of their own past failures, even if they deeply understand this flaw in human cognition they will still feel a deep sense of confidence in the accuracy of their predictions. As Kahneman explains it, after telling an amazing story about his own failing on this front: 'The confidence you will experience in your future judgments will not be diminished by what you just read, even if you believe every word.'"
This discussion has been archived. No new comments can be posted.

Overconfidence: Why You Suck At Making Development Time Estimates

Comments Filter:
  • by Anonymous Coward on Tuesday April 23, 2013 @03:59PM (#43529631)

    'nuff said.

    We've all been under pressure to give our "best" estimates and then some.

    Give a realistic estimate? Off to India!

    • Experiment (Score:5, Interesting)

      by trout007 ( 975317 ) on Tuesday April 23, 2013 @06:47PM (#43531285)

      I would love to see an experiment. Take two groups and give them the same job. Group one would be based on a typical American corporate structure with a Boss, Scheduler, budget person, middle management, supervisor, and finally people doing the work.

      The other group would have the same number of people but only those that work. No schedule or budget just work until it's done. I wonder what the results would be?

    • Exactly. If someone asks me for an impossible prediction, I will give them what they asked for with unyielding confidence. When faced with the inaccuracy of my prediction, I will continue, with confidence, in giving equally inaccurate predictions in the future.

      My real algorithm is as follows:
      Is it fun/interesting to do? If yes, feel the room and give an estimate that will keep the project from being killed. Else, give a long enough estimate that can withstand cross examination that hopefully will kill the project. Regardless of what I answer, management will cross examine my estimate using their own equally inaccurate measurements and assessments, if I deliver with anything less than absolute confidence I will be smashed. You see, the bullshit is layered upon the bullshit, then convoluted by management bullshit, into spectral bullshit that makes for a great power-point.

      If you want an accurate assessment of how long something that has never been done will take, you're asking for the impossible. If you want an accurate assessment of how long something that has been done before many, many times will take, either a) you're not in technology in the US, we don't do "competition" here, or b) I'll tell you 75 years because I really don't want to do that anyway.

    • by hackula ( 2596247 ) on Tuesday April 23, 2013 @10:30PM (#43533053)
      management/sales: how fast can we get this done?

      dev: low 3 weeks, mid 5 weeks, high 9 weeks

      management/sales:Great! I was hoping you would say around 2 weeks, because this product is being launched next week, so if we push it, we should be able to get it out the door by tomorrow approval!
  • by mark-t ( 151149 ) <markt@ner[ ]at.com ['dfl' in gap]> on Tuesday April 23, 2013 @04:00PM (#43529655) Journal
    Points 2 and 3 don't seem to apply to me. I know I suck at doing development estimates. When asked for one, I've never been particularly confident about any estimate I give having a good chance of being accurate. I want to estimate conservatively, but project schedules don't allow for that.
    • I guess part of being an 'expert' is being dumb enough to buy your own crap. That's why they always seem so sure of everything. Meanwhile, folks like you and me hedge our bets, and people attribute that to not knowing enough, rather than knowing all too well what the real deal is.

      I suspect that prior to being an 'expert', that person makes one wild guess that they nail bang on. After that, they just point back to the ONE TIME they were right, and that carries them for the next few years.

      • by frosty_tsm ( 933163 ) on Tuesday April 23, 2013 @05:38PM (#43530687)

        I guess part of being an 'expert' is being dumb enough to buy your own crap. That's why they always seem so sure of everything. Meanwhile, folks like you and me hedge our bets, and people attribute that to not knowing enough, rather than knowing all too well what the real deal is.

        I suspect that prior to being an 'expert', that person makes one wild guess that they nail bang on. After that, they just point back to the ONE TIME they were right, and that carries them for the next few years.

        The other problem is that when you're regarded as being an expert and and 2 & 3 don't apply, giving an estimate that hedges for realities to happen doesn't satisfy management. You get accused of padding hours, being difficult, or playing favorites (if there are multiple approaches being evaluated). What's weird is that after this song and dance, they still expect you might run a week late...

    • by nine-times ( 778537 ) <nine.times@gmail.com> on Tuesday April 23, 2013 @04:57PM (#43530279) Homepage

      I wish people would understand that project schedules should *only* be considered guesses and estimates. Take the time you think it will take, and then take a step back and ask yourself, "No really, how long will it take?" When you get a number, take another step back and ask yourself, "No, *really*, when a bunch of things go wrong and it takes longer than I expect, how long will it take?" And then treat that time frame as a best-case scenario.

      Part of the problem is that many projects can not be set to a specific schedule. The real answer is usually "it depends". How long will it take to build a new website? Well it depends on what unexpected hurdles we run into. It depends on how many features you want to add after we begin. It depends on how many revisions we go through.

      When people ask me to set a firm deadline, I'm always tempted to ask them, vaguely, "When we don't meet that deadline, what do you want me to sacrifice?" Any deadline can be met if you sacrifice enough of the project requirements. So if we're coming up on a deadline, would you rather I miss the deadline or that I sacrifice some of the requirements? That is, let's say you want a website running with features X, Y, and Z, and we have a deadline of June 1st. The question isn't whether I can meet the deadline of June 1st. The question is, on May 31st, when feature Z isn't ready (there will be some feature set "Z" that isn't ready), do you want to go ahead and launch the site anyway? Or is Z worth holding up the launch?

      In other words: project managers should should focus on priorities rather than schedule. "Being on schedule" and "being within budget" are just two more features that need to be prioritized within the set of features that a project is trying to meet.

      • It doesn't matter whether or not a project "can" be set to a specific schedule... a client will still expect a deliverable on date X.... and if there isn't, well... the client will simply stop paying you (sometimes there are even penalties imposed for lateness), and you have to finish it for free. Given the choice between doing jobs for those kinds of clients or not having a job at all... I'll take the option that keeps my mortgage payments up.
        • by bondsbw ( 888959 ) on Tuesday April 23, 2013 @06:55PM (#43531341)

          This is a bit presumptive. Sometimes the deadline matters most to the client, and sometimes completeness/correctness matters most. When you perform an estimate (which should always be a range), and the client has specified a deadline (a specific date), ask them this question:

          "When the deadline comes, would you rather the project be incomplete but ready for delivery, or would you rather push back delivery in favor of complete and correct software?"

          Communication with the customer is essential, and continual communication is necessary. The customer will not be happy if the due date comes and suddenly finds out the software is not ready. They may have planned testing, rollout, server or client updates, and many other dependencies based on the agreed-upon deadline. And they may have legal ground to sue you for failure to disclose the status of the project on a regular basis.

      • by Kjella ( 173770 ) on Tuesday April 23, 2013 @05:34PM (#43530653) Homepage

        Take the time you think it will take, and then take a step back and ask yourself, "No really, how long will it take?" When you get a number, take another step back and ask yourself, "No, *really*, when a bunch of things go wrong and it takes longer than I expect, how long will it take?" And then treat that time frame as a best-case scenario.

        The thing is it's not *that*. First I take how long it should have taken and multiply it up to how long it's going to take. Then I factor in all the other things related to the project that I'm likely to get sucked into while working on it. Then I factor in all the other factors like staff meetings, client down, server down, network down, fire drill and whatnot. Try getting some experience data on how much time you get to spend doing what you're supposed to be doing, you might be surprised. Also if somebody asks you how long it'll take to put a roof on the house, always assume the walls and foundation will need work to not collapse unless you did it yourself. Mysteriously enough I never get to push my deadline despite it turning out to being a stick hut built on quick sand. Never assume that what you're told to do will be what you're doing, then most estimates will fail.

    • by Sponge Bath ( 413667 ) on Tuesday April 23, 2013 @05:16PM (#43530473)

      I know I suck at doing development estimates.

      A struggle is getting people to even agree on what a development estimate is:

      Me: "That will take 2 months of development work."
      [two months of interruptions, putting out fires and "prioritization" later]
      Other: "Why is this not done? You suck at development estimates."

      • by el cisne ( 135112 ) on Tuesday April 23, 2013 @05:26PM (#43530571) Journal
        This. Had a boss one time ask me for an estimate. I was intimately familiar with the C++ code and said 3 months. He didn't believe it, so he asked someone else who told him 6 months. Yet another told him a year. Who did he go with? His buddy that told him two weeks. FML
      • The first thing you did wrong is that you estimated 2 months, without taking any time to break down how you were going to spend each and every day of that two months. If you had done that, you would have realized you were falling behind schedule within the first week.

        In my experience, any estimate that's longer than 1 day, and often even as little as half a day, generally should require breaking down, so that it is clear exactly what needs to be complete. You break the programming tasks down almost to an atomic level, so that every discrete function of the software is described, along with how long it will take to implement each one. Sometimes you don't know how long something will really take, but that's okay... the time it takes to estimate a project should be factored into the time it will take to complete it. Breaking things down at this level also gives you a clearer idea of the technical requirements to complete the job in the first place, which helps you design technical solutions as you make headway in the project. Further, it gives you a metric once you are partway through a project to determine based on how much of the project you've actually completed within a given time, whether you are even going to complete the project within budget, and if not, institute measures to minimize losses. In practice, you're not going to be right every time, or even necessarily close to being right, but when broken down to this level, the overestimates and underestimates should balance out reasonably well, with perhaps a tolerance of up to about 10 or 20%. If they don't, then there's something else fundamentally wrong with the project, and as a first guess, I'd suggest that it may be on account of unclear program requirements,

        • by Sponge Bath ( 413667 ) on Tuesday April 23, 2013 @06:28PM (#43531129)

          Sometimes you don't know how long something will really take, but that's okay...

          I agree with everything you said, but the point I was trying to make (poorly worded), is that time spent doing something other than development does not advance development. I always pad for the unexpected, but if you pull me off a project to do something else, then that project is not progressing. It sounds like a basic concept, but it escapes those who are not responsible for the actual development.

      • by dkleinsc ( 563838 ) on Tuesday April 23, 2013 @07:38PM (#43531741) Homepage

        That's why I always say "That will take approximately 270 hours of development work" rather than "That will take 2 months". Then you write down how your time is actually spent, and can document that after 2 months you've actually only had 20 hours to devote to whatever it was, so it's no surprise that you're a long way from finished.

      • by Blue23 ( 197186 ) on Tuesday April 23, 2013 @11:16PM (#43533335) Homepage

        I know I suck at doing development estimates.

        A struggle is getting people to even agree on what a development estimate is:

        Me: "That will take 2 months of development work."

        [two months of interruptions, putting out fires and "prioritization" later]

        Other: "Why is this not done? You suck at development estimates."

        Then make sure you're not surprising them at the end of 2 months. If at the end of week 1 you go to them with "I go two days against the project this calendar week, we still have 38 more to go", they are in the groove for project time and calendar time isn't the same. And if they want them to be, they need to stop you from getting interrupted.

        Communication. Verrrrrrry important.

    • I've never been particularly confident about any estimate I give having a good chance of being accurate

      I tell IT folk and non-IT folk the same thing: an IT estimate is the first point in time having a non-zero probability of being true.

      They both appreciate the truth of the adage. Like somebody else said, multiply by pi. That takes into account the 'problem surface' around the vector.

  • by Bigby ( 659157 ) on Tuesday April 23, 2013 @04:01PM (#43529659)

    Predictions on the time it takes for me to do something can be off, but not by much. Most good predictions have contingency plans, etc...

    In my experience, the biggest variability in estimates is the reliance on external dependencies. If I were the only person needed to work on something and I estimated 40 hrs of work, I would probably get it done in 30-45 hrs. But when that works requires someone else to do something at a critical point, even if it only takes 1 hr, the ability to acquire that resource in a timely manner ALWAYS messes with the time. Instead, the 30-45 hrs turns into 40-60 hrs. Amazingly, the "wait time" makes my time spent worse as well. I have to go through "ramp up" time again.

    You can even schedule out that you will have the person for 1 hr a whole week ahead of time. But I have found it rare that you are able to acquire that resource remotely close to the time you scheduled.

  • by rwa2 ( 4391 ) * on Tuesday April 23, 2013 @04:01PM (#43529663) Homepage Journal

    Well, I at least have my wife trained to treat my time estimates as "no sooner than", and I don't have any trouble sticking to those commitments. Can't be that much harder to train your boss to have the same expectations.

    Anyway, isn't most of Agile centered around coming up with time estimates formed from a consensus of team members who know you well?

  • by Capt.DrumkenBum ( 1173011 ) on Tuesday April 23, 2013 @04:02PM (#43529683)
    Always tripple all estimates. That way you always look like a miracle worker.
    • by Anonymous Coward on Tuesday April 23, 2013 @04:10PM (#43529759)

      I have a PM who actually does this. He takes everyones estimate by 'pi'. He says it works and has theories why it works. But just knows it does. In my exp he is right. Someone says 'it will take me 2 hours', it will take them about 6-8 hours.

      Only with the dead easy tasks are people spot on. Anything else they are usually wildly guessing. Unless they have done it before (and even then...).

    • No, actually, you look like a crappy estimator. In game development especially, projects don't typically have enough of a development budget to afford to overestimate by a factor of 3, so when you tell somebody it's going to take 3 days to do a task you think you can actually finish in one, the producer's only going to ask for a detailed breakdown and justification about why it's going to take so long... and when you end up describing how it will take several hours to implement something you should be able to do in a couple of hours, you're going to come across as incompetent, and possibly even out of a job altogether.
      • Actually, doubling or tripling the estimate is USUALLY correct, the problem is that it's not correct if you apply it all at once. I've known managers that take any estimate and double it, but crucially, you don't allocate the effort all in one block.

        If you need to code a widget, and it'll take you 3 days, realistically, that's just for the initial implementation. You can debug it, but that's no guarantee that it'll work as intended all the way until the end of the project. You probably have another 3 days of work to KEEP it working.

        Overestimating is almost always the right thing to do, if you can get the people writing the schedule to understand that when you say six days, you mean three now and three later.

    • by steelfood ( 895457 ) on Tuesday April 23, 2013 @04:39PM (#43530091)

      So you're saying that the real date of the events in Star Trek was actually the year 6795?

    • by FuzzNugget ( 2840687 ) on Tuesday April 23, 2013 @05:08PM (#43530391)

      In not sure why anyone thinks this funny, because it's absolutely true.

      No matter how much experience you have, there will *always* be that huge feature you initially thought would be a minor thing, there will *always* be those impossible-to-predict functionality hangups that take forever to solve and the client will *always* have "oh, yeah, and..." types of changes to the project requirements that completely alter the scope.

  • by Kenja ( 541830 ) on Tuesday April 23, 2013 @04:03PM (#43529703)
    If you think it will take an hour, say it will that three, then when it takes two you're a genius for getting it done so fast.
  • by invid ( 163714 ) on Tuesday April 23, 2013 @04:05PM (#43529717)
    It took me a few years for me to discipline myself to including testing and bug fixes in any estimate I made to managers. When ever I would say, "I'll finish coding by X," they would always assume that it would be in release condition by then.
  • by Anonymous Coward on Tuesday April 23, 2013 @04:05PM (#43529723)

    I often find another problem is management's refusal to accept the estimate of the developer. I am usually pretty good at estimation. Here is what usually transpires for me:

    Manager: "How long will it take you?"
    Developer: "2 months."
    Manager: "You don't have 2 months. You only have 1 month. Redo your estimate. How long now?"
    Developer: "2 months."
    Manager: "You don't have 2 months. You only have 1 month. Redo your estimate. How long now?"

    At this point I feel like saying:
    Developer: "Why are you asking for my input? Just write down 1 month. And do you want me to tell you I will be 1 month late right now or in 1 month from now?"

  • by PhrostyMcByte ( 589271 ) <phrosty@gmail.com> on Tuesday April 23, 2013 @04:07PM (#43529729) Homepage

    That it'll take 2x-3x longer than it takes in my head. If there are no spec changes (i can dream, right?) or other surprises, maybe put that down to 1.5x.

    When given a project, I'm sure most people will have a macro-level architecture thought up within minutes. It all seems so easy at that point! If you're lucky you get to spend a little more time in thought before being asked for a time estimate. If you're unlucky, well... in those cases I just multiply by 3. Underpromise, overdeliver and all that.

  • by RichMan ( 8097 ) on Tuesday April 23, 2013 @04:12PM (#43529775)

    My team seems to do ok on the estimates. Then we get beaten into 1/2 that by management. Then in the end it takes twice as long as management expected. So the original estimate was good.

    So we would be fine if only management did not try and squeeze it.

    Management never accepts the "debug", "refactor" and "new feature" timelines, those are generally considered as "not needed". It just supposed to work perfectly and on the timeline they negotiated before consulting the people who would actually deliver it.
    *sigh*

    • by Frobnicator ( 565869 ) on Tuesday April 23, 2013 @06:21PM (#43531073) Journal

      I agree. Fortunately for me at least, I happen to be in the happy world where management supports us in realistic timelines and realistic scoping.

      Spanning almost seven years now and well over a hundred assorted projects we have been overdue on projects two times total. One of those was during the exceptional case of a co-worker getting in a car accident and breaking 13 ribs, the other was an exceptional case where very serious external forces caused the design to shift mid-development. In no case has it been due to poor estimation.

      We have come to learn the development cycle for our small teams:

      • Before the project begins, we spend about 10% of the previous project time scoping and prototyping the next project. The usually three developers are each individually required to build the estimates for their parts of the project, and to collectively work out the details of how all the pieces come together. Accurate time estimates and prototypes are required from each developer.
      • Now the project is officially started. This 30% initial development is where we implement the features required. Everything in the project is scoped during estimates so that this 30% of the schedule will meet our understanding of the product. The design is locked and developers are held accountable for meeting these deadlines. Since there are only about three developers on each project and each one is accountable for a specific subset of the work, we can lay accountability directly on the shoulders of that one individual. We also make a point of celebrating each developer's success of hitting their individual milestones, and the even bigger success of hitting a milestone early.
      • The product owners are given a chance to review the implementation and also modify their design. The changes are estimated and must not exceed 10% of the total development time. Usually we limit them to about 5% of the total development time. The features are prioritized and work on until we hit 35-40% of the schedule (depending on if we limited them to 5% or 10% of the development time). This would likely be called alpha. Again the individual developers are held accountable for their estimates.
      • The next 20-25% is bug fixes where new features are not added but product owners can submit bugs where existing features may be adjusted. We bring in our QA team and start testing. This is the tail end of main development. Many people would call this beta. This brings us to 60% of the development time.
      • For the next 20%, no existing features may be adjusted. Individual bugs are still handled and occasionally a product owner may manage sneak in a design-by-bug change for an absolute critical change, but otherwise this is the final cleanup cycle. At this point we should be comfortable shipping the code. That brings us to 80%.
      • For the final 20% almost no changes are made. Changes are reviewed by all of the developers, and must have sign-off by the developers AND by management before submitting to version control. Most of the development team moves on to prototyping the next project. (This is the 10% mentioned up top.)

      When I hear about other groups hitting 60% or later in their development cycles and still not getting feature complete, I pity them. They have made the mistakes the original article warned about, and were probably driven to that madness by the poor management you mention.

  • by Anonymous Coward on Tuesday April 23, 2013 @04:14PM (#43529795)

    Blah, blah, blah. Bad estimates.

    Blah, blah, blah. Oh noes! Waterfall!

    Blah, blah, blah. Fixed by Agile!

    • by uncqual ( 836337 ) on Tuesday April 23, 2013 @05:36PM (#43530669)

      Pretty good summary.

      The solution seems to be "don't commit to a schedule longer than a sprint (even if that's only a week) and you won't be far off on the average".

      Of course, this doesn't work so well with customers. A giant customer who is considering kicking your product out the door and replacing it with a competitor "if you don't get feature X in" wants to know when he can expect feature X. This is often easy for seemingly small projects (add a new style sheet), but not so much for "hard" (many tens of person years of development or more) which are relatively indivisible (a distributed system that only corrupts data in 20% of the cases for which code hasn't yet been written is about as useless as one that does so 100% of the time). In the hard projects, if you tell them:

      Oh, we really have no idea, but I can confidently state that we will have these three small work items done a week from now and eventually expect we will have something done -- we will let you know the delivery date a week before we're ready to send you the software.

      their answer will be simple - "Thanks for the information, we are cancelling our maintenance contract and won't be using your system anymore. Please give me your vendor badge which we have just deactivated anyway."

  • by Maxo-Texas ( 864189 ) on Tuesday April 23, 2013 @04:16PM (#43529825)

    But it's not really that hard to predict estimates where predictable and predict a reasonable time to determine if an area is predictable.

    The RUP methodology is excellent for this.

    1) You gather the feature set and identify the risk vs non risk portions of a project.
    a) New technology.
    b) Relying on develop of technology which doesn't even exist yet.
    c) Performance.
    2) You work on the risky items first. You do not start on the non-risk portions until the risks are mitigated.
    3) Work in a time-boxed fashion. The time box can be 3 weeks or 5 weeks but deliver a working build each release. Note which features are not on track and drop them, adjust estimates, or even cancel the project.

    And there is also baselining your coders. Over time, some will consistently be over cautious, under cautious, or on target. And by a consistent amount.

    Let me put it this way...

    How long would it take you to develop a sorting algorithm for a screen element?
    How long would it take you to develop an import mechanism?

    OTH, how long would it take to integrate your web site with an app using a new poorly documented library delivered last year?

    I agree with the author that some things can't be estimated. But many things can.

    The biggest problems I've seen are

    1) Business decides the delivery date, features, and sometimes even the budget without consulting IT.
    2) If a couple 70 hour weeks work to deliver in a crunch then always working 70 hours must be even better, right?
    3) Business firing anyone that says a project is risky ("not drinking the koolaid").
    4) This is a funny one.. They come and say, "How long will this take" and one person says 4 weeks and the other person says 2 weeks. So they consistently give it to the person who said 2 weeks. And then it takes them 4 weeks (sometimes longer).

  • by Hentes ( 2461350 ) on Tuesday April 23, 2013 @04:17PM (#43529837)

    It's easy to manage time if you keep this simple law in mind:
    The first 90% of the work will take up the first 90% of time, and the remaining 10% will take up the other 90% of time.

  • Scotty knows (Score:5, Informative)

    by u64 ( 1450711 ) on Tuesday April 23, 2013 @04:18PM (#43529853) Homepage

    La Forge: The Captain wants this spectrographic analysis done by 1300 hours.
    Scotty: Starfleet captains are like children. They want everything right now and they want it their way.
    But the secret is to give them only what they need, not what they want.
    La Forge: Yeah, well, I told the Captain I'd have this analysis done in an hour.
    Scotty: How long will it really take?
    La Forge: An hour!
    Scotty: Oh, you didn't tell him how long it would *really* take, did ya?
    La Forge: Well, of course I did.
    Scotty: Oh, laddie. You've got a lot to learn if you want people to think of you as a miracle worker.

    - TNG 6x04

  • by houbou ( 1097327 ) on Tuesday April 23, 2013 @04:19PM (#43529873) Journal
    Use a OUIJA board, or, do some decent project management planning and know thy tasks, thy players and thy resources at your disposal.
    For the most part, double your estimates and then adjust where it gets too costly and you know your players can perform fast than expected.
  • by Culture20 ( 968837 ) on Tuesday April 23, 2013 @04:19PM (#43529875)

    Lt. Commander Geordi La Forge: Look, Mr. Scott, I'd love to explain everything to you, but the Captain wants this spectrographic analysis done by 1300 hours.
    [La Forge goes back to work; Scotty follows slowly]
    Scotty: Do you mind a little advice? Starfleet captains are like children. They want everything right now and they want it their way. But the secret is to give them only what they need, not what they want.
    Lt. Commander Geordi La Forge: Yeah, well, I told the Captain I'd have this analysis done in an hour.
    Scotty: How long will it really take?
    Lt. Commander Geordi La Forge: An hour!
    Scotty: Oh, you didn't tell him how long it would *really* take, did ya?
    Lt. Commander Geordi La Forge: Well, of course I did.
    Scotty: Oh, laddie. You've got a lot to learn if you want people to think of you as a miracle worker.

    It also helps you plan time for unforeseen setbacks.

  • So true (Score:5, Insightful)

    by Dixie_Flatline ( 5077 ) <vincent.jan.goh@g[ ]l.com ['mai' in gap]> on Tuesday April 23, 2013 @04:20PM (#43529887) Homepage

    I hate making estimates. I'm always, ALWAYS wrong. I always know I'm GOING to be wrong.

    I've been trying to fix this for 12 years. I thought it was just inexperience talking, but I'm a grown-up programmer now. 'Senior', by some estimates. And yet I still have a hard time estimating the time of getting things up and running. I write one thing, and four things that I couldn't have anticipated crop up. This is particularly true in my industry (video games) where you're often working with an engine that's a few years old, and other people are in the middle of working on it, and specs are changing under everyone all the time. Things that look straightforward end up taking bad detours through networking components that nobody else understands because that part was written years ago and those programmers aren't around anymore.

    Man, this story makes me feel a lot better about myself.

    • by fl!ptop ( 902193 ) on Tuesday April 23, 2013 @05:13PM (#43530445) Journal

      I thought it was just inexperience talking, but I'm a grown-up programmer now. 'Senior', by some estimates. And yet I still have a hard time estimating the time of getting things up and running

      You need a "rule of thumb." I had the same problem until I decided that the minimum a project would take for basic functionality is 4 hours for each table in the database. If they need fancy ajax stuff or any eye-candy, then it goes up from there.

      It's worked pretty well for the past few projects. I've even come in under on a couple.

    • I know, insert prelim apology for sounding "arrogant" etc. Then let's thrash out a theory.

      "I've been trying to fix this for 12 years." When something takes 12 years to get better at, there's hidden factors at play.

      Suppose you try a thought experiment. Imagine one of your recent projects. So you get to the stage of the "estimate" (really some kind of pre-pre-pre estimate!) and imagine what you were thinking when you worked it out.

      Then try to pin down at least a couple of the "oh my gawd" moments when the whole thing exploded. Clarify a little why that particular moment didn't work.

      So as part of the thought experiment, the next time you get a project, make THREE estimates. (Feel free to add a couple of bonus ones). The first is private and not told to anyone. *Because you just throw an "insane" chunk of time on top of it*. Go wild! Three month project? Whee! Let's pretend it takes two years! And lo and behold, it came in at 10 months. Yay! You were "under your estimate!" That's your first private estimate - throwing so much time that it's designed to *not go over, with NO penalties*.

      So then the second one should perhaps also be private - the one that made you *think* (wish?) it was three months. But that one will be too short, for all the reasons you said you've struggled in 12 years.

      Then your third one is to build in contingencies for "nightmares" - "I don't know what it is yet but something awful will go wrong here."

  • by MasseKid ( 1294554 ) on Tuesday April 23, 2013 @04:24PM (#43529917)
    I started to get offended at this broad generalization that experts can't make accurate estimates. And then I realized that no where in the summary does it say anything as to the absolute value of anything. It uses phrases like "extremely accurate" or "extremely confident". If someone takes a 1,000 hour project, and predicts it will take 1002 hours +/- 1 hour, is that a failure? Or does the OP mean the expert says 1,000 hour project is predicted to take 10 hours +/-1 hour is a failure. What is this confidence? Is this 99.99%? Is this 51%? An adverb and a verb without a point of reference is useless. But man, does it sure sound good!
    • by ZombieBraintrust ( 1685608 ) on Tuesday April 23, 2013 @04:44PM (#43530159)
      I think the article is saying most people are not experts but rather confident proffesionals. They know how to do their job. They can program the thing your asking them to do. But this doesn't make them expert estimators. To estimate properly you need to be collecting data on yourself. You need to be basing your predictions on that recorded record. You need to be looking at the acuracy of your previous predictions and providing a margin of error based on data. To be a true expert that margin of error needs to be consistantly low.
  • Hofstadter's Law (Score:5, Insightful)

    by cant_get_a_good_nick ( 172131 ) on Tuesday April 23, 2013 @04:25PM (#43529925)

    Hofstadter's Law [wikipedia.org]:

    It always takes longer than you expect, even when you take into account Hofstadter's Law.

  • In my previous life as a software architect for a small rural software development shop, I would try to give estimates and my bosses (all salesmen) would come back with, "I can't sell the client that!" Then when I missed the deadline or had to work weekends they were quick to blame me for giving an unrealistic deadline. My favorite line was always, "Give me an estimate, I won't hold you to it." Yeah. freakin. right.

    Even better is when I would attempt to show them what other SUCCESSFUL development shops were doing. They would then give the excuse, "That's because their developers just sit and do nothing all day. Big shops have money to blow." Wrong. Big shops grow big because they know what they are doing. Eventually when they figured out my patience had run out, they dismissed this constructed advice as me just dissing the company.

    I'm not sure why I stuck around with them for so long. I guess it was a sense of loyalty. Yet they tried destroying my marriage with their unrealistic estimates (and contracts that allowed clients to call me at home when-freakin-ever they freakin wanted. Guess as long as it didn't bother them or their time with their family, who cares, right?) Perhaps I just had a form of "stockholm syndrome".

  • by ADRA ( 37398 ) on Tuesday April 23, 2013 @04:29PM (#43529969)

    People estimate based on how much time they think it -should- take, but you almost never estimate:
    1. External factors which grow time
    2. Feature/function clarification takes time
    3. Outside resource turnaround takes time
    4. QA may never be satisfied
    5. We're moral and WE make a lot of mistakes along the way
    6. Most likely, you don't know all the caveats of developing the piece of work until AFTER the development is over
    7. General personal time spent elsewhere (meetings, consulting with co-workers)

    Sadly, the best estimate for completion ends up being 1.5-2x longer than my original gut check, so as long as you pad out your estimates, you should be fine.

  • by roman_mir ( 125474 ) on Tuesday April 23, 2013 @04:31PM (#43529983) Homepage Journal

    The so called 'experts' are just as much experts at estimating requirements and timing as they are 'expert architects'.

    Here is a thread [slashdot.org] where I argue that J2EE is a crutch given to people labelled as 'architects', turning them into typists while removing any real architectural thought from their activities. If you read through the thread you'll see some AC objecting to that notion and he does not realise that he is arguing my points there when he talks about architects.

    He is mistaking what 'enterprise' means, he believes it has to do with some technology, with some instrument, a tool or a set of tools. He does not realise that 'enterprise' really means an approach, a process, set of processes and standards that a company forces itself to adhere to, be it in implementation details or documentation process (all of which are important of-course), but enterprise does not mean just some solution provided by some vendor even if it has the word "enterprise" in its name!

    So with that in mind, realise that what we actually have for architects are most of the time not architects at all, they are copy pastors, they are typists, they are managers probably, but they are not actually designers.

    Those are the same people that would be considered 'experts', who managers turn to for time estimates. I don't remember myself underestimating projects at all or overestimating by more than a factor of 2, because I have the entire process of what it takes to build a project in mind and I break it down into all the little pieces, put a number that comes from past experience in front of that little piece, then the numbers are added up and there is some adjustment based on the team, the people that are going to be working on this.

    AFAIC overestimating is not as a big problem as underestimating but if you are bidding on a job, then it does present a challenge. In case of bidding you are actually not truly estimating a project, you are just trying to get it before the other guys get it, and I think that's where the real problem comes in. Managing client expectations is a serious matter, you better be able to do that and I think the more you way overestimate or way underestimate the less likely the clients are to trust you in the future, so be true to yourself.

    But again, how can somebody be true to themselves, when they don't even understand themselves what it is they are doing in the first place?

  • Level of Detail (Score:4, Interesting)

    by cant_get_a_good_nick ( 172131 ) on Tuesday April 23, 2013 @04:31PM (#43529985)

    Back when Joel spent time on writing, Joel Spolsky of Joel on software had an interesting method for doing time estimates [joelonsoftware.com]. His point was to go into a deep level of detail. Instead of handwavy "code the GUI" the only way to really get anything remotely close to a real time is to estimate everything down to at least half day, if not lower granularity. It's not the "oh you feel the time better" as much as to think of EVERYthing you need. If you go to a lower level, you may remember that dialog box that you didn't think of at the 25,000 foot level.

    It would be interesting to see if anyone ever used it to improve their estimates. Even he "disavows" it now, preferring the method in his software tool. But I like the "the world is a big place, are you sure you're thinking of everything" that the older method pushed you to.

    • by ZombieBraintrust ( 1685608 ) on Tuesday April 23, 2013 @05:32PM (#43530631)
      I estimate that my estimate will take 40 hours for small projects and 3 months for long projects. It will only take me 40 hours after my estimate is done on the three month estimate to finish the program. It will take me 8 hours to finish the project after my 40 hour estimate. Multiply what I give you by 3.
  • by pkinetics ( 549289 ) on Tuesday April 23, 2013 @04:36PM (#43530037)

    Something my boss has us do when we estimating projects. She has a certainty factor that we set for each task, simple terms, which equate to a percentage in her calculations. The higher our certainty, the less risk that the task is underestimated. The lower the certainty, the larger the margin that the estimate needs to be factored.

    Makes a huge difference in ballparking our estimates.

  • As per my blog post a couple of years ago at http://use-cases.org/2011/06/04/getting-good-estimates/ [use-cases.org] [use-cases.org] and http://use-cases.org/2011/06/22/updates-on-getting-good-estimates/ [use-cases.org] [use-cases.org]

    Most good estimates have a range - and not a number, or a number with a confidence (both are interchangeable).

    If an engineer says it will take two weeks - I push for a range or a confidence. If the range is weird (2-8 weeks), I push for the engineer to tighten their estimate through discussing or raising and discovering the unknowns or the risks that they are aware off. That sort of estimate would usually end up around 3-5 weeks which is a reasonable margin - and a lot better than than underestimating by 50%.

    Same with estimates that are too narrow. "2 weeks +/- day". That implies a full level of understanding, no risk and no dependencies. Almost never happens. Work through the same risks/unknowns and the estimates usually become really bad - typically at least double of the "high confidence" estimate - similar to TFA.

    There is a lot of reasonably applicable theory behind this (confidence intervals, cone of uncertainty, etc). But we don't necessary focus on mastery of our art...

  • by Roachie ( 2180772 ) on Tuesday April 23, 2013 @04:38PM (#43530061)

    3 days for bitching, pissing and moaning.
    3 days for dicking around on the interwebz
    1 day lunch overages.
    2 days for "zoning out"
    3 days for witty banter.

  • by Ol Olsoc ( 1175323 ) on Tuesday April 23, 2013 @04:40PM (#43530101)
    People setting around the meeting table.

    Suit: "How long do you estimate development will take on this project?"

    You: "My best estimate is 2 years, 3 months, as long as specs don't change."

    Suit: "But the customer would like the product in a year"

    Bean counter: We'll need 6 months to determine the task flow".

    You: Then you'll need to add six months to the scehdule."

    Suit: Okay, it's settled. We'll start tommorrow, the accountants will take the first six months to determine the charge numbers, and the programmers will have the job finished six months later.

    Two days later.....

    Suit drops by....p> Suit: "Hey, I just got off the line with the customer, and they changed all the specs. Don't worry though, I told them there wouln'd be any impact on the schedule. Oh, by the way, the accountants say they need another month. But I every confidence in you.

    a year and a day later.........

    Annoyed suits and accountants sitting around the meeting table...

    Suit: Okay, now what the hell is the problem here?

    You: We only had five months to complete the task, and specs and accounting time were all changed..

    Suit interrupts: You told us you could have it finished, you aren't going to make it very far here - we need better estimates on your part!"

    You: Sigh... Well, I think if we work everyone double shifts, we can get it out the door in anotther two months"

    Bean Counter: We'll need a month to redistrubute gharges and funds."

    You: "Wait! umm.."

    Suit interrupting: Okay, that settles it. A month and a half out the door, just like you promised. And don't let me down, again. Just what to you programmers do with all your time anyway?

  • by ADRA ( 37398 ) on Tuesday April 23, 2013 @04:41PM (#43530113)

    During my last project, one component was estimated (by others) at 2 man months, and it ended up taking 6 full time developers a year to implement. The estimates were absolutely horrible. As much as it was the fault of the original estimate, management constantly rode the development team to get it done asap, which probably in the end did more harm than good.

  • by linuxguy ( 98493 ) on Tuesday April 23, 2013 @04:44PM (#43530161) Homepage

    When my customer comes to me and asks me to provide an estimate for a job, if I give them a conservative estimate, some of them may think that I am milking them with the extra hours. Specially if they get a competing estimate from an overly aggressive Indian company who is eager to sign the contract but has no clue on how to deliver.

    I usually do not fret too much about customer feelings in a case like this. But during slow times I have little choice. Bottom line is, most of us would love to provide conservative estimates, but often times it is not as simple as that.

  • ... to be developed for them in 3 months. I estimated 10 months. So they decided to look around for another developer. A couple years later they came back and asked if I could do it in 6 months. I told them it would take 12 months, now.

  • by Todd Knarr ( 15451 ) on Tuesday April 23, 2013 @04:56PM (#43530277) Homepage

    You can have confidence in your estimates and still be aware that that confidence is misplaced. One of the common things I keep saying to my manager is "Yes, I'm pretty sure we can finish this in 3 weeks. But I want to schedule it for 6 because always, always we spend half our time getting pulled off onto other things and I want to account for that now before we get in a bind.". I have confidence in my estimates, but I also have confidence in the statistical evidence of how reality varies from my estimates and I'm not prepared to ignore the latter.

    As others have said, I also end up in arguments where people "up the chain" have already decided when they want something delivered and are pressuring me to make my estimates conform to the schedule they've already set. I don't consider this a problem with my estimates or my planning/scheduling, because I have no input into this or ability to control it. The problem lies with the people who're making promises without making sure those promises can be made good on, who then expect someone else to pull their chestnuts out of the fire. I can't do anything about that, because I can't order them to ask for estimates before setting delivery dates.

  • Uh no... (Score:5, Insightful)

    by Charliemopps ( 1157495 ) on Tuesday April 23, 2013 @04:59PM (#43530303)

    My estimates suck because:

    Project leader: Ok, so we need to know how long it will take for you to do X
    Me: I'm not sure, that's an entirely new API, proprietary to the vendor, there's almost no documentation and their website has a support forum filled with questions and basically no replys to any of them.
    Project leader: Well, we need a number.
    Me: Why?
    Project leader: I have to fill in this box here... see?
    Me: Ok fine, 800 hrs
    Project leader: Now hold on a minute, this wont take 800hrs
    Me: It could, I have no idea. It's already taken the majority of at least one hour and I don't even know what language it's in.
    Project leader: Fine, I'll put down 800hrs, but you're the one that's going to look silly.

    POST PROJECT REVIEW
    Project leader: I can see here your original estimate was 800hrs, and your actual billed time was 1265hrs. What causes led to you missing your estimate, and how can we avoid those in the future.
    Me: Don't make estimates.
    Project leader: Come on now, I need a real answer.
    Me: Why?
    Project leader: I have to fill in this box here... see?
    Me: ....

  • by Ryanrule ( 1657199 ) on Tuesday April 23, 2013 @05:00PM (#43530321)

    Anyone who calls themselves an expert isn't qualified to call themselves an expert.

  • by peter303 ( 12292 ) on Tuesday April 23, 2013 @05:13PM (#43530435)
    We did that in the college research game. A prototype was already done before we applied for a grant. We used the money to perfect the old project and start a new secret project. Nothing succeeds like existing success.
  • by idontgno ( 624372 ) on Tuesday April 23, 2013 @05:14PM (#43530453) Journal

    Think about it.

    Time is, for all practical purposes, linear. Your task will take a specific quantity of time to complete. You don't know that quantity of time in advance, because you don't control all factors, so you're guessing.

    Now, what is the environment of your guess? You are trying to pick out a specific point in the future at which your task will be done.

    Balance that against the infinite number of points of time in the unbounded future in which your task could actually be completed in.

    1 estimated point against an infinite number of possible points. That's your odds of picking the CORRECT point in the future. 1 divided by infinity. Although it's not necessarily mathematically correct, it's a useful convention to reduce that expression to "0". And that is your precise odds of estimating the completion time correctly. Zero.

  • by gnasher719 ( 869701 ) on Tuesday April 23, 2013 @05:15PM (#43530463)
    Here's how you do it: You split your development task up into small parts that should take 1 to 5 days. For each task, you write down your best estimate. Now of course you know you are bad at making good estimates, but that doesn't matter: You do the first part, then write down what you estimated, and when you actually finished. From that you extrapolate when you will finish - if you estimated two days and it took three, you estimate that the whole task will take 50% longer than estimated. After the second part is finished, you get an improved estimate, and so on.
  • Break the problem down into parts. Carefully consider contingencies. Get creative - sleep on it. Think about it in the shower. What bullshit will crop up as I work on this project?

    Using all your experience as to how long similar components took to implement in the past, plus how much longer it would have taken if worst case nuclear godzilla attack had occurred, compute time estimates for each component.

    Add all the time estimates together.

    Multiply by the Planck constant in Joule seconds / (pi^3 / e^2) * 10^34... approximately 1.58. It has something to do with brane theory and the double slit experiment. Trust me.

  • by bug1 ( 96678 ) on Tuesday April 23, 2013 @05:32PM (#43530625)

    "The hardest part of solving a problem is understanding it" - ?

    The reason its hard to estimate development time is because programming involves design, design is a creative task.

    Nobody can predict how long it takes to be creative, its a universal unknown. Creative workers (such as graphic artists) often estimate the design phase by giving themselves a hard limit and then just choosing the best idea they could come up with.

    Most programmers dont even acknowledge their work is a creative expression, so they are bad at estimating what a reasonable "hard limit" might be. But even so, im not sure the same method of 'choosing the best idea within a given time limit' is suitable to programming. Some things just have to meet certain objective benchmarks or there is no point continuing.

    Best idea i can come up with is to allocate your self "design time" first, which wont be long enough. Then you should be able to get a reasonable estimate of implementation time.

  • Because by the time anyone who could come up with accurate estimate is asked for their opinion, the product has already been sold and the contracts signed.

    Prioritise the order of development and get on with it. It'll be done when it's done, you'll get paid or you won't. Wasting time producing imaginary numbers has never fulfilled a contract, ever.

  • by turp182 ( 1020263 ) on Tuesday April 23, 2013 @05:40PM (#43530701) Journal

    Start by prototyping before the project is funded. This helps the business parties see what is possible and also gives the developers a much better understanding of functional requirements than any document ever could. Do UX testing sessions (test using your best developers - they find cool hacks, and business people, and anyone). Evolve the prototype, if even over a couple of weeks (I'm pretty good at rapid prototyping, two weeks is usually enough for 2-3 revisions resulting in a reasonably functional prototype for 5-10 screens). Prototyping and UX testing take experience, try them on a pilot project. Note, estimating hasn't begun yet. But do these things first, it's very important.

    Then, once funded, start estimating. If the project is large (>1 person year), break it into logical functional components with a goal of at most 1 person year of "high" level estimated time (better estimates come next). Treat each of the functional components as a separate project. Large projects fail a lot, small projects are surprisingly successful (I don't have the article links handy at the moment, my anecdotal experience supports this as well).

    Then, for each logical component, estimate. Estimating sucks, but I have seen the value in it, as has management where I work. It means sitting in a meeting room for multiple days per component. You will need at least one business representative, the development team, and a DBA, at minimum. Use the prototype to explore the functionality and system requirements. Start namespace/class definitions (helps a lot to categorize/define functionality boundaries). For each namespace/class, estimate the number and complexity of methods. Same for database stuff. Again, the prototype is a useful tool (never DB connected, generate data manually, Excel is a great code generator for such purposes).

    Then put some time estimates on all of the tasks (think of it is as backlog, but for the project, not a sprint).

    Continue estimating for each functional component (don't forget integration time between components, I pad these, it's always harder than you expect).

    If you can't do this level of estimating then you do not understand software at a level required to make the project a success.

    Then decide if the project should move forward. I've been involved in two hard estimating efforts (2-3 weeks each, huge projects, one that wasn't considered that big until we did detailed estimation) that resulted in management deciding against moving forward, it was obvious to us that this would be the result given the results of the estimation. Millions of dollars probably saved, large projects fail a lot.

    As for daily work, we do two-week sprints, spending the first Monday doing nothing but backlog grooming (the crappiest day, but again, valuable). We strive to breakdown tasks to less than 8 hours, with 2-4 hours being the target (.5 hour tasks as very common, such as create Widget.Cache and Widget.Cache.Test projects). The sprint tasks are sacrosanct, they are the focus. If production support rears it head remove sprint tasks. We only schedule 50 hours of work time per 2 week sprint.

    We do UX testing at the end of each sprint, enables us to be reactive to the results during the next sprint.

    Yes, we are targeting agile methods and I'm not sure if they would scale too far. But, if a project is broken into functional components I don't see why it wouldn't scale, a large team would simply be composed of several smaller teams. Remember integration! It's usually a big part of the 20% of my 80/20 rule (where 80% of development takes 20% of the time, and the remaining 20% takes 80% of the time). Enhancement/support situations are something we haven't worked with much yet.

    When starting a project, focus on "project killers" first. This includes things that are unknown, known to be hard or particularly complicated, or external integrations. Project killers are the things most likely to kill a project or directly impact the delivery date/budget. Do them first. Yes, it's usually plumbing, but one doesn't hang drywall before installing water pipes. If you fail at these the project can be ended somewhat gracefully.

    For our 2 week sprints we usually land with under 10% of tasks unfinished (they get pushed to the next sprint). Overall we have generally been within 15% of our original high level estimates.

    Management trusts us. Invaluable.

  • by SplashMyBandit ( 1543257 ) on Tuesday April 23, 2013 @05:45PM (#43530753)

    I too partially suck at estimates. Aside from the "unknown unknowns" which you can budget for but never predict I have found several rules of thumb have got my estimates from "fairyland guesses" to "accurate with withing a factor of 2". These are:

    • * If you have done the exact same task before using the exact same technology then your estimate is probably good to within around 20%
    • * If you are using new technology, a new technique then you have no real estimate. Have to be super conservative with estimates of these parts of the project
    • * If you are debugging the time is also undefined. It could be short, it could be long. Your time is in freefall while you debug.
    • * If you have done a detailed design then your time estimates are more accurate, because you have thought through many problems
    • * If you have prototype code for core areas your time estimate is even more accurate, because you have solved many problems.
    • * Joel Spolsky was right. If you haven't thought about all the steps you need to do, down to a granularity of an hour, then you are not thinking about your estimate hard enough and your estimates will miss things (which makes them inaccurate).
    • * No matter what project you take the customer and yourself will always thinks of ways to make it better as you go along. This is the area where project blowouts occur. Learn to identify and mitigate this risk (I often add enhancements at the end, and resist temptation to do them before the core stuff is done and tested)
    • * Developing new algorithms takes significant time (which is hard to predict ahead of time)
    • * Unit testing saves a huge amount of debugging time. Despite lots of unit/integration/system test code getting written, the time to do this is lower than debugging code that doesn't have automated tests. Also, time estimates need to take into account writing, running and maintaining tests.
    • * User Interface layout takes quite a while to make look really nice. Even worse, every user thinks they are UI experts so you get a lot of suggested tweaks to the UI that you may not be able to push back on.
    • * If there is a fault with the specification (and there will be, it is very hard for BAs to get specs right) then the time to fix it (and the flow-on effects) have to be taken out of your time budget and put into theirs. Doesn't help the overall wall-clock time to complete the project though, so this has to be factored in
    • * I also find that I can usually only solve one or two really hard design or algorithmic problems per day. The rest of the day is dealing with less hard stuff. Factor this in to your estimates.
    • * Factor in lots of time to be distracted by meetings and design sessions. Usually coding is around 50-80% of a week.
    • * Documentation is easy and the time to do it can be predicted easily. Don't forget to add time to do the edits from feedback. Unfortunately, documentation is usually done at the end, when little time remains (time was 'stolen' for development slippages).

    Thanks to all the other posters for their lists and suggestions. Time estimates are much much harder than development.

Successful and fortunate crime is called virtue. - Seneca

Working...