Slashdot Mirror


How can a Developer Estimate Times?

SubliminalVortex wonders: "Many times in the past, I have been asked on 'how long' it would take to implement a certain features/fixes in a product. What's interesting is that many times, certain 'fixes' is adjusting the wording/placement of the items in question; in other cases, users want the product to do everything they ever imagined, since it already started by following their line of thought. From there, the problem continues. From the user interface, people 'imagine' and think that 'oh, it would be easy if...' and scenarios occur, not only internally from the company using the product, but the clients themselves. Usually, several good ideas are there, but estimating times is a pain in the arse if you have a platform you're writing code for which has no documentation. How do coders estimate times to their bosses? If I know the answer outright, I'll give it, but in some cases, I don't how much time I'll take from other developers *because of the lack of documentation*. I'm going to have to bring in my D&D dice next week just to start."

227 comments

  1. Design the feature out by AuMatar · · Score: 4, Insightful

    The only way to tell is to design the feature, then guesstimate how long each part of the process will take (by comparing it to how long similar problems have taken). If there's a step you're unsure of, you need to be sure of it to give a reliable estimate. Then double it- something will go wrong, and its better to deliver early than late.

    --
    I still have more fans than freaks. WTF is wrong with you people?
    1. Re:Design the feature out by TLouden · · Score: 2, Insightful

      This is really an excellent method. I've been asked to estimate the time it will take to develope a system that is likely to take about 500 hours and is completly new and customized to the client. The only way to do this is to get a detailed feature list from the client (or boss) and break this down into known units which you have experience in building. This allows the most accurate possible estimate as it reduces unexpected parts (you've defined everything already) and allows you to incorperate this new data into your next quote in order to improve accuracy.
      As a bonus, this way you can write a contract with detailed information on services to be performed and avoid costly feature creep.

      --
      -Tim Louden
    2. Re:Design the feature out by Alpha27 · · Score: 2, Insightful

      I agree with parent post. I'm asked this all the time because I'm a lead developer at the company I work for. If I can't provide an estimate on the spot, I tell them I will have to get back to them about an estimate. I try to buffer for time for bugs and QA. Bugs are things you just can't account for. You may have none, you might haave tons. You have that one bug that takes forever to diagnose, or you might have 20 bugs that you can knock out each in minutes.

      Just try to be fair in your estimate; fair for you and fair for the business unit. If your estimate is something that the business side can't understand why it may take so long, tell them in detail what goes into it. The Business side is the one who wants the product and the estimate, so you have to communicate to them clearly why the time is what it is.

    3. Re:Design the feature out by ASCIIMan · · Score: 1

      To add to this, you should also schedule work on the riskiest parts (time- and resource-wise) of the project first (at least where this makes sense). That way if something comes up that might affect the release, you and the client will know sooner rather than later and be able to deal with it more effectively.

    4. Re:Design the feature out by hackwrench · · Score: 2, Interesting

      I have a serious limitation in the ability to predict such things. How can you design something without doing most of the work to have it completely done? If there were similar problems, how can they be so similar that code reuse doesn't factor seriously into the would be estimate, and yet be so different as for the new code to take a significant amount of time?

      I have a sentence for this: I can't remember the future.

    5. Re:Design the feature out by AuMatar · · Score: 3, Insightful

      Design it on paper. When you design something, do you jump up and code it? If so, thats a problem to begin with. Design it out on paper- any new major (external facing) methods, objects, etc. Major algorithms have to be identified, but not coded especially if it requires something totally unique. Design is a skill in and of itself, and takes practice. For the purpose of an estimate, you should have it done to the point where you could sit down and code with only minor decisions made at code time (until the point where you find the thing you didn't account for- nobodys perfect), but no code actually written.

      As for comparing time- first, you have prior experience. Having done something similar on another project can give you a good idea as to time. Then there's similar things to another part of the program. Finally, just because something is similar doesn't mean the code can be shared. But it does give you a yardstick for time.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    6. Re:Design the feature out by hackwrench · · Score: 1

      That doesn't exactly tell me what to do on the paper now does it?

      I don't have much of a sense of how much time anything in my life takes. I also can't convert visual distances to meaningful values. When I need a yardstick, I need an actual yardstick.

    7. Re:Design the feature out by AuMatar · · Score: 2, Interesting

      Class diagrams. Types and algorithms needed to implement the new functionality, the interactions between these objects. If I was to ask you right now to write a web browser, what would you do? Just jump into coding (if this is the case, you really need to learn to design- jumping into coding leads to hard to maintain, hard to write, buggy code)? Or would you sit down and think about what you need to write- think about how you would translate HTML into an internal object, what the interface between the networking layer, parser, and UI should be, etc. Keep adding more detail until you get to a point where you can give an estimate for each part.

      If you can't reach that point without actually writing code or lots of pseudocode- either your designing skills need work (they aren't detailed enough) or you need to get a feel on how long it takes you to do simple things. If its the later, one way of fixing that is writing down when you start and stop tasks and seeing how long it actually takes you.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    8. Re:Design the feature out by Xugumad · · Score: 1

      The "Then double it" rule has always worked well for me. Actual time taken tends to be somewhere between what I originally thought, and the estimate I give, so it looks like I've done the work faster than expected, which is good. Also, if I'm told to rush something, I can generally get it done in well under my original estimate, which makes people happy. Sure, the boss learns fairly quickly that you're giving worst case estimates, but I think that's a lot better than giving best case estimates.

    9. Re:Design the feature out by anonymous+cowherd+(m · · Score: 1
      I've never been a developer, but I've been a tester, and this is the way we used to estimate how long a testing job would take. Basically, we would estimate how long it would take us to do the job if everyone left us the hell alone and we were able to concentrate entirely on that job. Then, we'd quadruple it because, inevitably, something would come up and we'd have to deal with some other random thing on some completely different application.

      Of course, that's for apps we're already somewhat familiar with. If we have to also get familiar with the app, we'd factor in some "read the docs and play with the app to see how it REALLY works" time as well. That'd add oh, about 25% to the base estimate (before quadrupling).

      We generally got things done within our stated timeframes. Those few times we finished way ahead of schedule made us look like miracle workers. ;) But, really, it all comes down to the psychology of dealing with management/customers. You want to underpromise and overdeliver.

      --
      http://neokosmos.blogsome.com
    10. Re:Design the feature out by TopShelf · · Score: 1

      Really, this question only covers half the issue. Along with any estimate of development time comes a degree of confidence, which a manager can use in coordinating tasks. For instance, for a given task, you could say:

      1) Best case, 20 hours (25% certainty)
      2) More likely, 40 hours (50% certainty)
      3) Most likely, 60 hours (75%)
      4) Worst case, 80 hours (95%)

      In other words, any estimate should be given along with that degree of confidence. That way, if the manager requires something more certain, you have the reasoning in place to support the higher number.

      --
      Stop by my site where I write about ERP systems & more
    11. Re:Design the feature out by Glonoinha · · Score: 4, Insightful

      Actually 'then double it' is only for experienced developers.

      Newbie : 8x as long as estimated.
      Seasoned Developer : 3x as long.
      Elite Veteran : 2x as long.

      Here's the rule I use when dealing with developer estimates (copied from a post almost a year ago) :

      Time estimage guidelines:

      New programmer fresh out of college: Take his estimate and multiply by 8x. Yes he could get it done in 1 day, assuming he got so cranked up on caffeine his eyes stopped blinking and he worked on that (and nothing else) for 24 hours straight. In the real world a newbie can dedicate about 2 real hours doing a particular task each day, the rest is spent coming up to speed on corporate coding standards and libraries, email, breaks, and not 'in the groove'. Also, you are expecting him to document it but he didn't account for that in his estimate - his estimate was only for time to code the actual lines of code.

      Veteran programmer of average skill, single person project : multiply his estimate by 3x. A third of his day is spent hand-holding the newbie, and another third is spent hand-holding management. The other third is spent programming, but luckily he knows to pad the schedule some (not enough, but some.)

      Veteran programmer of uber skill, single person project : multiply his estimate by 2x. This is as good as it gets. A uber veteran programmer knows to leave his email client closed and his door closed so he can stay in the zone. He knows to pad the schedule more than he really thinks he should. And it still takes him twice as long as he expected.

      Multiple people working on the same project : increase the timeline by a factor of 1.2 per additional person. If two people ought to be able to do it in 10 days it will take 12. If 11 people (10 additional) ought to be able to do it in 10 days it will take ... 1.2^10 = about 6, so 10 x (1.2^10) = roughly 60 days = 12 weeks = 3 months.

      --
      Glonoinha the MebiByte Slayer
    12. Re:Design the feature out by Wolfkin · · Score: 3, Insightful

      "Also, you are expecting him to document it but he didn't account for that in his estimate - his estimate was only for time to code the actual lines of code."

      Ah, yes. Stealth requirements. The seasoned developer will be familiar with the practice of requirements which you didn't mention, and when asked about them, will say, "Well, that goes without saying!". And it's true, it *did* go without your saying it... ;)

      --
      Property law should use #'EQ, not #'EQUAL.
    13. Re:Design the feature out by RicRoc · · Score: 1

      I second this method, which is a standard method that lends itself well to mathematical analysis: using several numbers based on degree of confidence, otherwise known as risk-based assessment. I use 3 numbers that management and other developers seem to understand:

      A) Best case (25% certainty / 75% risk)
      B) Likely case (50% certainty / 50% risk)
      C) Worst case (95% certainty / 5% risk)

      If there is a large discrepancy between A and C, that means that the task is not well understood, and should be divided into more, better-understood parts. If the numbers are large, and the discrepancy persists, it should be possible to argue that a sub-project has to be defined to determine estimates and minimize risks (or maximize certainty, if you will)

      This method has worked well for me, looks good and makes sense when presenting the numbers to the customer and other stakeholders.

      --
      Who?
    14. Re:Design the feature out by Bill+Dog · · Score: 1

      My manager and I do a simplified variation of that. I give a time estimate, and then a Risk value of either low, medium, or high, where the risk indicates my level of confidence that I can even do it. He then uses that as a gauge of the potential variability of the time estimate.

      He had mentioned to me early in starting to work for him that he believes he's found that there are fudge factors for each of his developers, and he's learned what they are. He said so-and-so always estimates by 50%, so I double it, this person always specifies 3 times too much, so I always third his estimates, etc. This is like saying you've identified the scientific principles of astrology! It's bad enough he believes that you can estimate software, but the idea that people as well can be simplified down to predictable, widget-like terms gave me the creeps. And I didn't want him thinking of this developer that way.

      --
      Attention zealots and haters: 00100 00100
    15. Re:Design the feature out by SanityInAnarchy · · Score: 1

      Comment by Anonymous Coward in the room with me:

      Double it, then change the unit. If you think it'll take an hour, say "two days". If you think it will take two days, tell them "four weeks". If you think it'll take a week, say "two months".

      --
      Don't thank God, thank a doctor!
    16. Re:Design the feature out by Blue23 · · Score: 1

      Sure, the boss learns fairly quickly that you're giving worst case estimates, but I think that's a lot better than giving best case estimates.

      As a boss who's come up the technical ranks, I want worst case estimates. I had one DBA who only gave me best case estimates and my team would consistantly be burned when he couldn't deliver. Everyone wants "realistic" estimates, but that's not, pardon the pun, realistic. Especially if different people/groups are trying to schedule resources, you push everything back when any part fo the chain gets delayed. I'd rather have a timeframe we consistantly make, and often enough beat. I didn't understand that until I was managing.

      Cheers,
      =Blue(23)

      --
      LITTLE GIRL: But which cookie will you eat FIRST? C. MONSTER: Me think you have misconception of cookie-eating process.
    17. Re:Design the feature out by Anonymous Coward · · Score: 0

      60 days = 12 weeks = 3 months

      Dude, in the rest of the world, sixty days is about two months, not three.

    18. Re:Design the feature out by WarForge · · Score: 1

      Not when you are talking about the 5-day work week, which I assume the GP was referring to... but otherwise, you are technically correct.

    19. Re:Design the feature out by Schraegstrichpunkt · · Score: 1
      As a boss who's come up the technical ranks, I want worst case estimates.

      No you don't. You want 90%-95% confidence interval estimates. Worse-case estimates tend to be ridiculous.

      I applaud you for recognizing the problems with "realistic estimates" (which are sometimes just an excuse for inexperienced management to refuse to accept the estimates given).

    20. Re:Design the feature out by Anonymous Coward · · Score: 0

      Estimation is a complex problem. You need to understand the impact of change. A requirement (Change request) can be linked other requirements, design elements, test cases and other artifacts. If you are able to find relationship by traceability analysis tools, then you can estimate correctly. You may try tools like Analyst Pro at http://www.analysttool.com/ . The tool provides powerful and robust traceability matrix.

    21. Re:Design the feature out by Blue23 · · Score: 1

      No you don't. You want 90%-95% confidence interval estimates. Worse-case estimates tend to be ridiculous.

      I stand corrected. And as the one who raises a stink whenever senior mgmt wants "no bugs" or "100% server up time", I feel doubly idiotic for going forth with a end-of-spectrum absolute.

      I applaud you for recognizing the problems with "realistic estimates" (which are sometimes just an excuse for inexperienced management to refuse to accept the estimates given).

      *nod* Thanks.

      =Blue(23)

      --
      LITTLE GIRL: But which cookie will you eat FIRST? C. MONSTER: Me think you have misconception of cookie-eating process.
    22. Re:Design the feature out by tarason · · Score: 1

      I once had a discussion about programming and estimates - basically - If you've done it before - then you can clone the old answer and you have your trivial solution to the problem. Any other situation is RESEARCH. - Its (you've) never done this before, so wild estimates and multipliers come into play

  2. Dilbert always has the answer by MagicDude · · Score: 1

    Nature disguises weak products as Beta

    http://lazybastard.ehuna.org/archives/000032.html

  3. I wish this weren't my serious answer by heinousjay · · Score: 0

    I take guesses, try to schedule a bunch of things sequentially, multiply everything by 2.5, and then wheedle the features out of the release in a series of drawn-out arguments with the users. I tend to miss individual goals, but overall everything works out.

    Also, I stopped worrying about being right. By the time people worry about it, it's typically too late to do anything useful to fix it anyway.

    With your situation, all I can figure is that it'll get better over time, as you gain familiarity with the system. Estimating is always largely guesswork, and only information leads to good guesses.

    --
    Slashdot - where whining about luck is the new way to make the world you want.
    1. Re:I wish this weren't my serious answer by __aaclcg7560 · · Score: 1

      I take guesses, try to schedule a bunch of things sequentially, multiply everything by 2.5, and then wheedle the features out of the release in a series of drawn-out arguments with the users. I tend to miss individual goals, but overall everything works out.

      When I was a lead tester at Atari, I would take the producer/developer's schedule, multiple by 2.5 and subtract 10%. My schedule estimates was always right on the money. I had more than a few producers pissed off at me that my schedule estimates was two to four weeks beyond when they promised the game would be done since their bonus was based on the original schedule, and some even accused me of deliberately ruining their bonuses.

    2. Re:I wish this weren't my serious answer by Anonymous Coward · · Score: 0

      Hmmm, use a Silver Bullet. If you ain't got one, ask someone at your nearest IT consulting firm.

  4. Use the Estimator's Rule by sakusha · · Score: 4, Insightful

    The Estimator's Rule:

    It always takes longer than estimated, even after accounting for the Estimator's Rule.

    1. Re:Use the Estimator's Rule by springbox · · Score: 1

      When someone asks me I usually guess high then multiply by 10 or somewhere around there. There just always seems to be something that I run into while working on something that always costs me a bit of time. This is even after I carefully plan what I'm going to be doing before I start. Unless you're writing a "Hello world" type program, it almost seems like it's nearly impossible to give a reasonable estimate.

    2. Re:Use the Estimator's Rule by try_anything · · Score: 1

      The recursion bottoms out if you don't tell the implementor about the doubling. If the implementor estimates two weeks, you can secretly plan on four. If the implementor finds out the working estimate is four weeks, however, it will take eight.

  5. Scrum Development Process by Eustace+Tilley · · Score: 1

    With the Scrum development process, the requesting parties are able to get feedback every 24 hours. The development team's does not commit to delivering more than they believe can be achieved in thirty days. See if you can get your bosses to buy in. Here's a website: http://www.controlchaos.com/about/

    1. Re:Scrum Development Process by Anonymous Coward · · Score: 0

      Everytime I sat down to take a serious look at a development process, I just can't stomach it. So a few smart guys decided to engineer a process that makes software development work better. So they generalize and make something that doesn't quite fit any team of developers. So the developers spend way too much time trying to shoehorn the whole process onto themselves, and, while they were looking the other way, no work got done.

      It all comes back to good ol' Fred Brooks. In any given project, there is a certain amount of parallelism, which defines how many developers you need for that project. Add more developers and you don't save any time at all, because all the individual sequential tasks have been already doled out. Remove developers and the project can take twice as long. Pretty simple, really. Give those developers a few whiteboards, the occasional meeting, and *coherent* and *consistent* goals--boom, a good chance for a successful project.

      All this hinges on having a manager who doesn't have I.O.U. notes for brains. No process, no matter how fancy, can make up for a lousy manager. Oh, and hire a secretary for cripes sakes...I can't stand it when I am left to do my own travel arrangements and expense reports and dealing with payroll, etc., when I have to do the work I'm supposedly getting paid for.

    2. Re:Scrum Development Process by SirSlud · · Score: 1

      We're using this at work at the moment, just as we start up a 10 month project development cycle. I'm skeptical, because for the same reason 30 days of development estimted, might really be 60, 2 days of development might really be 4.

      From what I've seen so far, they just wanna know how far along we are, not how long we think it might take.

      --
      "Old man yells at systemd"
    3. Re:Scrum Development Process by mdfst13 · · Score: 2, Interesting

      "I'm skeptical, because for the same reason 30 days of development estimted, might really be 60, 2 days of development might really be 4."

      Yes, but it's better to know in two days that your estimate is wrong than wait thirty days. Also, a lot of SCRUM is breaking things down to an understandable level. I.e. down to problems like, "Design the initial schema for the main database table" rather than problems like "Define the database schema for the project." It's much easier to determine how long it will take you to write up a practical first draft for a single table than it is to do all of

      1. Determine all the data your project will need.
      2. Break the data into normalized chunks.
      3. Select indexes to optimize query performance.
      4. Denormalize to optimize query performance.

      Note that the first step is completely open ended. Does your project need one table? Ten? A hundred? Waterfall development processes try to guess this ahead of time. E.g. if most projects average about thirty tables, then that's what this will need. If you only need ten, then you have too much time allocated and over examine the database schema. If you need a hundred, you allocated too little time and miss your date.

      The third and fourth steps should actually be done *after* you've started working with sample data. SCRUM allows you to push out problems like this. Waterfall forces you to guess. This leads to duplicate work. Further, every step after the first is dependent on the first. Thus, if you misquote the first, you misquote every step after it. With SCRUM, you openly admit that the first step is not all you need to do and then stop worrying about the rest.

      Another advantage of SCRUM is that if you put too much into the current iteration, you can drop stuff. Then, when you do the next iteration, you can pick some or all of that back up with revised estimation. In Waterfall development, you're forced to rewrite the whole estimate every time you do that. With SCRUM, it's just part of the work you would do anyway (you already knew that you were going to plan out the next iteration).

    4. Re:Scrum Development Process by Eustace+Tilley · · Score: 1

      In general, the more, and the more often, you do something, the better you get at doing it. Finding out that it took you four days to accompish the task you thought would take two days is a signal to re-examine how you estimate. Breaking things into two-day tasks instead of thirty-day tasks means that at the end of a year, you will have performed 125 estimates instead of twelve. You think your 126th estimate might be better than your 13th?

    5. Re:Scrum Development Process by Eustace+Tilley · · Score: 1

      Take an antacid pill and stomach Scrum. You'll discover that the Scrum process would require you to surface the lack of secretarial support every single day it held you back. A process can't fix a lousy manager, but it can make the manager's failings manifest.

    6. Re:Scrum Development Process by Mr.+Slippery · · Score: 1
      With the Scrum development process, the requesting parties are able to get feedback every 24 hours.

      Hmm, so every 24 hours you can tell them "don't know how long it will be"..."still don't know"..."nope, still don't know"...

      The development team's does not commit to delivering more than they believe can be achieved in thirty days.

      Some tasks take months, or even years, just to get a handle on.

      I swear some software projects I've worked on have been like this: "We need a highway built through this unexplored jungle. We don't know the siz or shape of the jungle. Somewhere in there is probably at least on large river that you'll have to bridge, we don't know where, how deep, how wide. Might be some mountains too. There might be geographic fault lines, we're not sure. Might be quicksand. And did I mention the rodents of unusual size? Just a rumor. Maybe.

      "Ok, so, before we get started, send out any explorers or anything, we need you to tell us exactly how long this highway will take to build."

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    7. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Hmm, so every 24 hours you can tell them "don't know how long it will be"..."still don't know"..."nope, still don't know"...


      Every 24 hours you will tell them what it was, exactly, you were doing the previous 24 hours, what you plan to do the next 24 hours, and anything you have identified that is preventing you from making progress. Are the software projects you have worked on so hapless that day after day the developers have nothing to report except "we sat in our work areas shuddering at how vague things are, daring not to put fingers to keyboard lest we make things worse"?

      "Ok, so, before we get started, send out any explorers or anything, we need you to tell us exactly how long this highway will take to build."


      "We will commit only to delivering that portion of the highway project that we expect to be able to accomplish in thirty days. Precise full-task estimates are applicable to known repeatable undertakings; the highway project you have described fails to qualify. A different process is required for projects with many unknowns, which will give you, the highway-desirers, the best way to manage your investment and gauge progress. If working together we cannot identify something we can accomplish in thirty days that will have sufficient value to you, then the project should not be undertaken at all."
    8. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Hmm, so every 24 hours you can tell them "don't know how long it will be"..."still don't know"..."nope, still don't know"...


      Actually, although you can tell them "don't know how long it will be" every 24 hours, you will have to arrange your own time to do so. At a Scrum meeting, the only questions that may be asked are "What did you do yesterday," "What are you going to do today," and "Is there anything that is impeding you?" The Scrum master is responsible for logging the impediments raised, and to do so in such a way that all those with an interest in the outcome can see what is holding things up the moment it is known.

      "My impediment is that the task is so ill-defined that I do not know what I am supposed to be doing today" is something stakeholders should here within 24 hours of it becoming apparent.

      A stakeholder who wants to ask "How long do you think the whole project will take?" can do so at a working meeting; and "an impediment to my accomplishing what I have committed to accomplish during this sprint is the surfeit of working meetings where questions unrelated to the goals are bruited about" can be stated at the next day's scrum.
    9. Re:Scrum Development Process by Mr.+Slippery · · Score: 1
      Precise full-task estimates are applicable to known repeatable undertakings; the highway project you have described fails to qualify.

      In other, more simple words: we don't know.

      A different process is required for projects with many unknowns, which will give you, the highway-desirers, the best way to manage your investment and gauge progress.

      Any nontrivial software project has many unknowns. The whole point of this thread is what sort of process is appropriate for such projects. If you're admiting that the "scrum" is inadequate for complex projects, what do you recommend instead?

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    10. Re:Scrum Development Process by Mr.+Slippery · · Score: 1
      Breaking things into two-day tasks instead of thirty-day tasks means that at the end of a year, you will have performed 125 estimates instead of twelve. You think your 126th estimate might be better than your 13th?

      Not necessarily. I can eyeball distances to the nearest meter much more accurately than I can estimate them to the nearest millimeter, no matter how often I make such estimations.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    11. Re:Scrum Development Process by Eustace+Tilley · · Score: 2, Insightful
      If you're admiting that the "scrum" is inadequate for complex projects, what do you recommend instead?


      Do not confuse complexity with unknowability. A sulfuric acid manufacturing plant is complex, but every part of the process is known, and is known to be repeatable; and thus it is reasonable to ask how long it will take to build a proposed sulfuric acid manufacturing plant and how much it will cost.

      Scrum is a development method for nontrivial software projects with many unknowns and little repeatability. Such projects cannot be estimated as if they were complex-but-known, no matter how strongly the project sponsors wish they could. The best that can be achieved is to control risk with short timeframe subprojects (no more than thirty days) and daily formal sessions (no more than 15 minutes) where the developers (seven plus or minus two) address only what they did yesterday, what they plan to do today, and any impediments. The best the requesters can do is to know that the developers are following a procedure that will surface problems early, tend to build the most useful parts of the system early, and provide frequent opportunities for continue / discontinue decisions during the process.
    12. Re:Scrum Development Process by Mr.+Slippery · · Score: 1
      At a Scrum meeting, the only questions that may be asked are "What did you do yesterday," "What are you going to do today," and "Is there anything that is impeding you?"

      Is "Daily meetings are impeding me, wasting my time, breaking my concentration, and sapping my morale, indeed my very will to live" an allowed answer?

      And did you not say that "the requesting parties are able to get feedback every 24 hours"? Or are you counting the minutiae of developer's day-to-day actions as "feedback"?

      "My impediment is that the task is so ill-defined that I do not know what I am supposed to be doing today" is something stakeholders should here within 24 hours of it becoming apparent.

      24 hours, hell, you can tell management that as soon as they ask for an estimate on how long it's going to take to build the road through the unexplored jungle. So, great, they hear it. Then what? They can't define it any further, and neither can anyone else at this time, because we don't even know the borders of the jungle.

      We could make a 30-day plan for preliminary planning on how to develop a plan to explore the jungle, but that's not what's being requested; management wants to know how long it's going to take to get that road built.

      A stakeholder who wants to ask "How long do you think the whole project will take?" can do so at a working meeting; and "an impediment to my accomplishing what I have committed to accomplish during this sprint is the surfeit of working meetings where questions unrelated to the goals are bruited about"

      "Unrelated to the goals?" From management's perspective - the perspective of the people paying for all this - at the moment knowing how long it's all going to take is the goal.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    13. Re:Scrum Development Process by Mr.+Slippery · · Score: 1
      Do not confuse complexity with unknowability. A sulfuric acid manufacturing plant is complex, but every part of the process is known

      Fair enough, I was sloppy in my usage there. Yes, complexity is not the same as unknowability.

      Such projects cannot be estimated as if they were complex-but-known, no matter how strongly the project sponsors wish they could.

      Bing! On that we're in agreement. Now, if only we could convince The Mgmt. about that.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    14. Re:Scrum Development Process by try_anything · · Score: 1

      The 24-hour cycle reminds me of several hellish experiences I've had, especially of a certain project that required developers to make daily reports of progress to a non-technical manager. Here's the problem: What if you can't accomplish anything meaningful to the stakeholders in 24 hours?

      For my current project, a really good day would be, "Today, Bob and I designed a tool that dumps the state of module X to text, and Bob wrote a script to parse that state and verify its correctness. I stubbed out a subset of module X and created a small set of test cases that exercise the stubs. Bob and I will implement the state-dumper tomorrow and integrate it with the test cases, giving us an initial test suite that will allow us to begin implemention. Mary investigated a suspicious behavior of the Y module, discovered that it is non-deterministic, and created a test that exercises the module until the bug is triggered. This program occasionally crashes, so we should consider the product unstable until this is resolved. Mary suspects a library bug and hopes to have it identified and reported to the vendor this week, giving us an excellent chance of working around it and/or receiving a bugfix by our release date."

      This is an excellent day's work for all involved, but the stakeholders don't give a damn about any of it. This kind of stuff makes nontechnical users' eyes glaze over. Reporting it to them isn't a business activity; it's a social faux pas that results in the development department being made fun of around the water cooler. "Then he started talking about 'loadable modules' and I was like, 'Oh lord, make it stop.'"

      In other words, if the daily progress report is supposed to be given to non-technical people, then the work I described above simply can't be done. It can't be reported, and we'll get yelled at if we work a whole day without having anything to report, so when are Bob and Mary and I going to do that stuff? Well, not on any day when we don't want to be yelled at, which turns out to be every day, despite our occasional fantasies of doing the right thing and righteously braving the storm of anger from management.

      Here's what happens instead: Bob and I implement module X and, having enough integrity not to report completely untested work, run a couple of jerry-rigged tests and spot-check them by hand. We report that we implemented module X, ran tests, and found no problems. Afterwards we realize to our horror that module X is now officially done and bug-free, and we can never officially work on it again without looking like we falsely reporting our work, which in a sense we did. We know there must be bugs, so we secretly resolve to develop decent test tools for module X on nights and weekend, but all we end up doing is running a few more tests. Mary notices the suspicious behavior in module Y and briefly investigates it, but as a result she doesn't "accomplish" anything all morning. Afraid of having nothing to report, or worse, reporting something that isn't on the development plan, she drops the bug and spends the rest of the day implementing new features. She makes a mental note to return to the suspicious behavior someday, but guess what? Every day requires more reportable progress, and it's better for her career to see the product crash in production than to look lazy or disorganized in front of management.

      The problem with reporting to nontechnical people is that they only understand certain kinds of accomplishments, such as "done" on a feature or use case. It means nothing to them that at 8am this morning we had no idea how to test module X and by 5pm this afternoon we had a detailed plan and a few working tools. Every day, you have three options:

      1. Slap something together and report it as done.
      2. Do a good day's work and try to explain your technical progress to the non-techies. Best case scenario: They decide (correctly) that you suck at communicating with non-techies and assume something has actually been accomplished, even though they don

    15. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Not necessarily. I can eyeball distances to the nearest meter much more accurately than I can estimate them to the nearest millimeter, no matter how often I make such estimations.

      Perhaps after 125 attempts at estimating a distance to the nearest millimeter, you would use something to augment your bare eyeballs?
    16. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Is "Daily meetings are impeding me, wasting my time, breaking my concentration, and sapping my morale, indeed my very will to live" an allowed answer?
      Of course it's allowed. If a fifteen minute daily meeting where you are required to report what you did yesterday, articulate what you plan to do today, and raise anything that is standing in your way is having such a deleterious effect, it is an obvious management concern.

      "Unrelated to the goals?" From management's perspective - the perspective of the people paying for all this - at the moment knowing how long it's all going to take is the goal.


      If that is goal, then the task is "develop an estimation process that gives correct answers in domains which lack repeatability." This task is better known as "the halting problem," and is known to be insoluable. It is poor form to solicit payment from people whose goal you know to have been proven insoluable.

      In domains lacking repeatability, "How long is it going to take" does not have a bonafide answer. There is nothing mischievous about management wanting to know. There is nothing mischievous about wanting a cure for cancer or to have a highway in a remote location, but until the last unknown is resolved, a definite answer about how long it will take is show business, not engineering.
    17. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Bing! On that we're in agreement. Now, if only we could convince The Mgmt. about that.


      Here is the project. I want you to achive mastery of the arguments in Ken Schwaber's "Agile Project Management with Scrum" to the degree that you could lead (for pay) a discussion on
      • defined process control
      • empirical process control
      • visibility, inspection, and adaptation
      The audience members' exact IQ and education are unknown, but they may be presumed to be literate and sufficiently familiar with the larger world to know that goods such as automobiles and wooden tables are manufactured.

      Before we begin, though, I have three questions. How long will this take you? Is the book in your local library? What is the local library's lending policy?

      Note: the publishers have enabled Amazon's Search Inside This Book feature.
    18. Re:Scrum Development Process by Eustace+Tilley · · Score: 2, Informative

      What if you can't accomplish anything meaningful to the stakeholders in 24 hours?
      [...]
      If I reported anything else, I heard, "Why the hell are you reporting something to me that I don't understand?"
      [...]
      Alternatively, how do you persuade [nontechnical stakeholders] to show up every day just to hear Bob and Mary and I say "Important stuff, but nothing you'd understand" when they ask what we've accomplished?

      The Scrum process requires meaningful-to-stakeholder progress every 30 days, not every 24 hours. The 30-day period is called a "sprint." What the stakeholders consider meaningful is completely up to them, so differences in the perceived value of fixing an awkward API in a library do not arise. Sounds like magic, but it's just process. The stakeholders and the development team agree before each sprint on what the increment of value (as measured by stakeholders) will be. For example, "we will achieve end to end throughput beginning with a 50 line dummy data input file and ending with three ugly but functional developer-specified reports. We will also meet with these end-users and prepare the first draft of their report requirements."

      At the daily scrum, "why the hell are you reporting something to me that I don't understand" is out of order. The manager may ask only "What did you do, what are you going to do, and are there any impediments." These questions are to be addressed in concrete terms.

      Dramatic simulation

      Developer 1: "I reduced the argument count in the core library API and conformed the argument order and checked it into the mainline."

      Manager: "From the looks on their faces, I believe other developers may have questions about that, so please have a work meeting after this scrum. Also, yesterday you said you were going to review the API, not change it. Please use these meetings to give advanced warning. Also, after the work meeting, will you please tell me what an API is?

      Developer 2: "I created a warpo input file with known-bad items, including obsoletes, wrong currencies, randomly-scattered minus signs, a few 75,000 character fields and everything else my demented brain could come up with in an hour. By the way, the system now responds to negative zipcodes by rejecting them rather than freezing."

      Manager: "Could you put that last sentence in correct form? We're trying to make the process visible, not just list benefits."

      Developer: "Whoops, old habits die hard. 'I fed the warpo file to the system and observed the consequences, then changed the hyphen-parser logic in the zipcode field.' Today I will investigate why the system stopped compiling in my workspace after I integrated the latest changes from the mainline, starting with Mr. Speedy's core library changes. My impediment is that the security patch applied to the database server yesterday afternoon invalidated all the test passwords, and the system administrator is swamped with update requests."

      Manager: "I will contact him and try to get you bumped to the head of the queue."

      Finally, the only people permitted to speak at the daily meeting are the people who have committed to delivering. Others may attend, but must remain silent. The nontechnical stakeholders can satisfy themselves that their technical people are on speaking terms and possibly assist in removing impediments.

      He was just misled by the conviction that developers should be able to report concrete (i.e., understandable to a non-techie) progress every day.

      What you can report every day is your actions and your intended actions. "We drove 325 miles yesterday, 150 in the wrong direction, 150 back, then 25 ahead" is an action. Reporting that as "We progressed 25 miles yesterday," though less embarrassing, hides far too much. Checklist management - "what did you accomplish" - is appropriate for "defined control processes" such as taking inventory in a warehouse or assembling several floors fu

    19. Re:Scrum Development Process by try_anything · · Score: 2, Interesting

      I read a bit about Scrum and realized I misunderstood the role of stakeholders at daily meetings, specifically that the meetings are optional for stakeholders and that stakeholders attend primarily to gauge the team's morale, check for dysfunctionality, and discover ways to help. (I see now that you mentioned that, but it slipped by me.) That makes much more sense to me.

      I'm still leery of the distorting effect of reporting, though. If a manager's credibility or ability to act is negatively affected by his developers' daily reports, you can be sure there will be pressure to stop hindering his work. As a developer, I appreciate whatever gives me the widest scope to tackle a problem directly and honestly, and having day-to-day results disseminated beyond technical personnel has always had the opposite effect.

      One advantage of traditional project management is that it gives techies a layer of insulation from management politics; they can be completely honest with their manager and trust him to suppress any information that could be used to sabotage the project. Many developers fail to demonstrate the most basic level of political competence even when they spend all day thinking about it. I include myself in that bunch. If it comes up, I tell my managers that any plan requiring me to be politically sensitive is a bad plan.

      Perhaps Scrum is just poorly suited to my particular strengths and weaknesses, but I consider myself a pretty typical developer. I value my career over any company's success, I prefer complete honesty because I have never succeeded with any other strategy, and when management turns on bully mode, I just do what they want and call it their loss. That isn't to say I don't value my integrity, merely that I protect my integrity by choosing my working environments very carefully, not by martyring myself if I end up in a bad situation. Putting guys like me out there in front of assorted stakeholders with many people's credibility dependent on our statements is liable to bring all kinds of pressure on us to account for political consequences when we do technical work, and we will not stand up to it very well. I imagine Scrum being of value only in businesses that can depend on esprit de corps to trump politics.

    20. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      I'm still leery of the distorting effect of reporting, though.
      I would appreciate an example of how saying what you did yesterday and how you plan to spend your time today has a distorting effect. Where do politics enter "yesterday I showed Merlin how to load and unload the fungMetric library and wrote test cases for the un-queue subsystem"?

      You needn't fear a question like "how does the fungMetric library have anything to do with the new agent-based billing system I thought you guys were billing" because such a question will be ruled out of order (for the meeting) by the Scrum master, someone with political skills. During a sprint, the developers decide what to work on, in what sequence, and for what reasons, in order to achieve the functionality they committed to deliver for that sprint. If an urgent new functionality appears, the sprint is formally aborted and a new one, incorporating deliverables for the new functionality is begun.
    21. Re:Scrum Development Process by try_anything · · Score: 1

      In huge do-or-die software projects, politics is less of a problem, since the stakeholders will be hurt just as much by failure as the development team. However, such situations are rare, because competent management avoids them. In a stable company, stakeholders are able to survive failed projects, and they allocate their time and resources to different endeavors according to the expected payoff. That means that stakeholders' impressions of the project determine how much help the development team gets.

      For example, a troubling series of delays on my current project recently resulted in our primary client contact (our "champion," who has also been doing excellent sales/support engineering work for us) taking on another project and significantly cutting the time he devotes to us. With stakes that high, management tightly controls the communication between developers and customers.

      Suppose we had a problem with the fungMetric system last Monday, grossly misjudged how serious it was, and spent the whole week solving it. Everyone was quite relieved when the problem was declared fixed. If I mention that we're still working on the fungMetric system, the stakeholders might believe the problem has resurfaced and poses an ongoing threat to the project. Therefore, maybe we should put off that work until next week and give the fungMetric issue time to die.

      At the very least, in the best possible scenario, developers would be burdened with an impossible obligation to talk about their development in terms that don't sound unduly scary or rosy to non-tech people. Do I really want to spend my time thinking about whether "refine the logging policy" or "missing compiler flag" send chills down the spine of a salesman? Do I want my manager to be embarrassed in a meeting because a developer said the AccountReport class is done, and a stakeholder told a VP that the account reporting feature will be in the next release? Most likely we would become masters of a few safe phrases and move our real communications to another channel.

    22. Re:Scrum Development Process by pnewhook · · Score: 1

      I fail to understand why software developers insist on creating ridiculous names (Agile, Scrum) for existing engineering best practices? There is no real difference between that stuff and the methods other engineering disciplines use every day, and have been using for decades, to accomplish their work.

      The only explanation I can think of is that the 'authors' of these processes simply ripped them off of the existing accepted engineering practices, published them as their own in the hope that they would be adopted (and they probably would as the standard sit down and code approach is doomed to fail) and then make money of of the books.

      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
    23. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Do I really want to spend my time thinking about whether "refine the logging policy" or "missing compiler flag" send chills down the spine of a salesman?
      The salesman's can warm his spine in the sprint's deliverables, which are expressed at a level of abstraction suitable to his needs.
      Most likely we would become masters of a few safe phrases and move our real communications to another channel.
      You will always have another channel, because the Scrum not a work meeting. It's purpose is not to facilitate "real communications" between developers, it's purpose is to make an unpredictable process visible, inspectable, and adaptable.

      That visibility includes surfacing the fact that the fungMetric system is still being worked on and that the declaration that it was fixed was premature. Management is made up of imperfect human beings working with limited information under competitive pressure. Concealing information from management usually does not improve the quality of decisions management makes.
    24. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      ... the 'authors' of these processes simply ripped them off of the existing accepted engineering practices, published them as their own ...


      That seems a grossly unfair characterization of what Ken Schwaber has done. I have not seen him pretend to be anything but a popularizer. He leads off by writing about his asking industrial process engineers to review the way software practitioners have been going about managing complex processes, and their derisory laughter upon doing so. The "Resources" sections of his books direct the curious to the "real stuff."

      Software practitioners have resisted the sort of discipline - licensing, state certification, personal liability - which give teeth to best practices. Perhaps, unlike medicine or law or bridge building, software practitioners will come to find a way to follow best practice rather than fashion without licensing, state certification, and personal liability. Until that halcyon day, expect there to be lots of buzzwords.
    25. Re:Scrum Development Process by pnewhook · · Score: 1
      Software practitioners have resisted the sort of discipline - licensing, state certification, personal liability - which give teeth to best practices. Perhaps, unlike medicine or law or bridge building, software practitioners will come to find a way to follow best practice rather than fashion without licensing, state certification, and personal liability. Until that halcyon day, expect there to be lots of buzzwords.

      But why does there have to be buzzwords? why can't they admit that the best way to do things is how everyone else has been doing them for years?

      And until software developers accept personal liability, there's going to continue to be a lot of bad, and sometimes dangerous, software out there. At some point this has to change.

      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
    26. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      But why does there have to be buzzwords?


      It doesn't have to be, it just turns out that way. Buzz is a natural-selection winner. Ideas linked with romantic terms are more fun to talk about than ideas linked with prosaic terms in every occuupation. People who talk about "Scrum" will get more attention than people who talk about "Empiric process control." Talk becomes more buzzy as people start repeating the words prior to having mastered the concepts. People can parrot "empiric process control," too, so it becomes a buzzword, just a more pompous one.

      why can't they admit that the best way to do things is how everyone else has been doing them for years?
      You can't admit what you don't know. Software developers have a lot of new material to master so time for examining the practices of the more established disciplines is limited. Most developers are skilled craftspeople building what the customer wants built in accordance with the workrules laid down by the general contractor. It's the contractor - the development manager - who has primary responsibility and commensurate authority to distinguish the routine from the unrepeatable processes and control them appropriately, but what institutions offer degrees in software management?
    27. Re:Scrum Development Process by pnewhook · · Score: 1
      Buzz is a natural-selection winner. Ideas linked with romantic terms are more fun to talk about than ideas linked with prosaic terms in every occuupation.

      Of course, that's understandable. But why does software have to have their own terminology when the concepts are identical to existing engineering practices (with well known buzzwords). Then the developers complain that non-software managers don't understand them. Duh.

      It's the contractor - the development manager - who has primary responsibility and commensurate authority to distinguish the routine from the unrepeatable processes and control them appropriately, but what institutions offer degrees in software management?
      In normal engineering the manager provides the customer interface and manages cost and schedule. He decides what has to be done at a high level, not how to do it. How is dictated by the project engineer (or project leader, technical leader or whatever name you'd like to use). This person also derives the requirements and creates the architecture. In the case of software, these skills are learned as part of a degree in software engineering.
      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
    28. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      In the case of software, these skills are learned as part of a degree in software engineering.


      Here's the model curriculum for software engineering at Rensselaer:

      CSCI-1100 Computer Science I
      CSCI-2300 Data Structures and Algorithms
      ECSE-2610 Computer Components and Operations

      ECSE-4500 Probability for Engineering Applications
      CSCI-4210 Operating Systems
      ECSE-4670 Computer Communications Networks
      ECSE-6620 Digital Signal Processing
      ECSE-6770 Software Engineering I
      ECSE-6780 Software Engineering II
      CISH-6050 Software Engineering Management
      CISH-6010 Object Oriented Programming and Design
      CISH-6320 GUI Building
      OR CISH-6510 Web Application Design and Development
      ECSE-6980 Engineering Project

      That's only one semester of Software Engineering Management, and it's an elective: you can skip it altogether for, say, ECSE-7100 Real-Time Programming and Applications. There's no accounting, no small-group psychology.

      Texas Tech offers a masters degree in systems and engineering management. Look at it's curriculum:

      IE 5311 Principles of Optimization
      IE 5316 Simulation Models for Operations Analysis
      IE 5320 Systems Theory
      IE 5321 Decision Theory and Management Science
      IE 5323 The Engineering Management Environment
      IE 5325 Productivity and Performance Improvement in Organizations
      IE 5346 Total Quality Systems

      Quite a contrast!

      Obviously, time spent on Productivity and Performance Improvement in Organizations is time taken away from Parsing and Grammar, and all our compilers will get slower if we don't continue to have skilled people pushing the envelope of ambiguity-free expressions. Among the consequences is that conscientious practitioners sincerely believe that they dare not speak where stakeholders can hear them, lest the blunt, ambiguity-free expression necessary for success in programming, threaten their manager's career.

      We're going to be stuck at the buzzword level as long as practitioners believe that all of a development management process can be effectively summarized in a single paragraph and detailed in a three-page appendix. Scrum represents an effort to get practitioners to devote two days to the topic, which is a huge percentage increase over skimming the abstract of an article while waiting for a rebuild to complete.
    29. Re:Scrum Development Process by pnewhook · · Score: 1

      Well that makes sense. No undergrad curriculum should be teaching management because no undergrad should be getting a job in management or project leading.

      The undergrad curriculum is where you learn your coding skills. Your become a project leader when you demonstrate an aptitude for team management (soft skills), and can accurately estimate time and effort of development projects for not only yourself, but others as well. Thats not something you can learn without having experienced it first hand, hence the management courses being post-grad.

      Scrum represents an effort to get practitioners to devote two days to the topic, which is a huge percentage increase over skimming the abstract of an article while waiting for a rebuild to complete.
      If they want to be project leaders, maybe they should get a relevant degree. Otherwise they should stick to the processes given to then by their project leader or manager.
      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
    30. Re:Scrum Development Process by try_anything · · Score: 1
      That visibility includes surfacing the fact that the fungMetric system is still being worked on and that the declaration that it was fixed was premature. Management is made up of imperfect human beings working with limited information under competitive pressure. Concealing information from management usually does not improve the quality of decisions management makes.

      This is an excellent illustration of the problem. I said that we had a problem with the fungMetric system last week and it was declared fixed. I then said that we're continuing to work on the fungMetric system. To me those statements do not seem contradictory. After all, there's all kinds of work that can be done -- planned enhancements, documentation cleanup, performance testing, etc. However, it is possible to fill in some missing information, read between the lines, and conclude that the problem last week was not fixed. Not only do we have a problem that resists fixing, we can't even tell when it's fixed! Yikes!

      That is misinformation, and that is why communication that leaves the development group has to be carefully prepared for external consumption. Developers are not good at this, as my failure here conveniently illustrates. Like a typical developer, I spoke precisely and expected people to ask questions if they wanted to know something I left out, rather than expecting them to fill in the missing pieces by reading between the lines. I made this mistake while self-consciously talking about how people like me tend to make this kind of mistake, yet I was still caught off-guard (honest!) A good manager would know better, because that's part of the job description (and one of the primary requirements that keeps good developers out of management.)

    31. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      I spoke precisely and expected people to ask questions if they wanted to know something I left out, rather than expecting them to fill in the missing pieces by reading between the lines.
      It is good to have reasonable expectations. The Scrum process provides an explicit time and place every day where developers will speak precisely of what they did yesterday, what they plan to do today, and anything that is preventing them from getting their work done. Team members do not expect people to ask questions if they want to know something, because:
      • Team members respond to three questions only:
        • What have you done since the last Daily Scrum regarding this project?
        • What will you do between now and the next Daily Scrum meeting regarding this project?
        • What impedes you from performing your work as effectively as possible?
      • Team members should not digress beyond answering these three questions into issues, designs, discussion of problems, or gossip.
      • [Non-developers] are not allowed to talk with team members after the meeting for clarification or to provide advice or instructions.


      Under these constraints, it is not reasonable to expect people to ask questions. A different style of precise speech is called for, where one says not "I fixed the fungMetric library" but "I completed the work on the fungMetric library specified in task #9."

      The team commits to delivering the specified functionality. Those not on the team are permitted to see what the team is doing, and the team is required to maintain a public list of its self-assigned tasks visible to all. The reason this delivery is being controlled with as an empirical process rather than a defined process is that it is unpredictable. It is natural to think that the statement "All work on the fungMetric library is finished" would allow one to predict that no more work on the fungMetric library will be done, but it is not logical to make predictions for an unpredictable process, except perhaps stochastic ones: It would be logical, but unkind, for non-team-members to use the task list as an object upon which to place bets.
    32. Re:Scrum Development Process by Eustace+Tilley · · Score: 1
      Maybe they should get a relevant degree.
      Do you know of any institutions offering degrees in managing software development?
    33. Re:Scrum Development Process by pnewhook · · Score: 1
      Do you know of any institutions offering degrees in managing software development?
      Well first you get a degree in software development - one that also teaches architecture. Then you get several years of experience. Then you get a degree/courses in management if you want to actually manage the team rather then the technical aspects..
      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  6. how to estimate development times... by Phantasiere · · Score: 2, Funny

    ...use a random number generator? :)

    More seriously, I've found from past exeperience you should always take whatever time you think the project will take and multiply that number by 2 or 3. If you are lucky (and the customer requirements don't change to much) you should make it.

    1. Re:how to estimate development times... by tomhudson · · Score: 1

      dartboard.

      Take whatever time you think it will take and multiply by the number you throw. Cahnces are, you'll still be too low ...

    2. Re:how to estimate development times... by jomegat · · Score: 1
      I found that I literally could throw the dice, and then choose the units:

      6... weeks
      3... hundred lines of code
      2... man months

      --

      In theory, practice and theory are the same. In practice, they're not.

    3. Re:how to estimate development times... by Bill+Dog · · Score: 1

      It's only fair, if managers get to use Magic Eightballs, that we should get to use D&D dice.

      --
      Attention zealots and haters: 00100 00100
  7. Experience by fitten · · Score: 5, Insightful

    Two things really... you have to break your tasks down into small tasks with known dependencies to the point you *can* estimate times to do things. Once you get that far, experience (gut feeling) will contribute. After that, you give an optimistic and pessimisitic times to your boss. Example: If all these assumptions hold and these other three things happen on time, then the time estimate is one week. If this, this, or this doesn't pan out as expected, then the time estimate is three weeks.

    1. Re:Experience by tomhudson · · Score: 1

      To break it down sufficiently will mean you'll be doing all the developing except the actual code and testing.

      Who's paying for that?

    2. Re:Experience by tashanna · · Score: 1

      My experience is that, even after going through all that, it ain't right until you include the "I may break something else" fudge factor. It gets picked based on how much (seemingly unrelated) stuff needs a tweak to make the new feature work. I guess I've been lucky that I've had bosses who've accepted ranges of time (i.e. 5-7 days) instead of one number.

      - Tash
      Vrooom....

    3. Re:Experience by collar · · Score: 1

      It's generally a good idea to not give your boss the optimistic time, if you are going to give your boss an optimistic time, at least fudge it up a bit. If you are really unlucky and have shoddy management, your boss may tell the optimistic time to a client, or even if they don't do that they will have that time in the back of their mind. You are better off beating a fudged optimistic time than equaling a real optimistic time.

    4. Re:Experience by LionKimbro · · Score: 1

      Nah- you can usually give some sort of estimate.

      "Let's see; To implement that, I'll need to write & test X, Y, and Z. I've done things like those before; It'll be.. hour for X, two for Y, two for Z; That's five hours..."

      "So, if nothing unexpected happens and if nothing goes wrong, I think I could do that in about 5 or 6 hours."

      Now, it may well happen that you finish in 3, or that you finish in 20. You may have forgotten to factor something in. Regardless, it's just important that your client (or boss,) has some understanding of what the problem space is like, and roughly how long it will take to complete. The client needs to know it'll be on the order of hours, rather than days, or days, rather than weeks, or whatever.

      Such estimates and expectations are reasonable and regular.

    5. Re:Experience by QuestorTapes · · Score: 1

      > ...you have to break your tasks down into small tasks with known dependencies to
      > the point you *can* estimate times to do things.

      Also, Cliff, don't forget to account for the fact that some of these tasks are also interdependent, and count time to integrate the components created and test them.

      > Once you get that far, experience (gut feeling) will contribute. After that, you
      > give an optimistic and pessimisitic times to your boss. Example: If all these
      > assumptions hold and these other three things happen on time, then the time estimate
      > is one week. If this, this, or this doesn't pan out as expected, then the time
      > estimate is three weeks.

      Good example; Cliff, note that the pessimistic estimate is *3 times* the optimistic one in the example. That's pretty typical. A lot of people use a pessimistic estimate of (optimistic * 1.25) or 1.5, but your pessimistic estimates really should be significantly larger for many tasks. Think about the things that might go wrong. Sometimes, they don't go a little bit wrong, like "it was harder to integrate with product XYZ". Sometimes they go really wrong, as in "it -can't- integrate with product XYZ; this feature of XYZ is broken and won't be fixed in the future."

  8. Well.. by netkid91 · · Score: 1, Insightful

    I'm more of a web developer, so I don't have to mess with the annoyances of C++, C#, VB.NET, java, etc. 'Fixes' to me, are usually adding yet another CSS and/or JavaScript hack to make IE view a site correctly. And since I primarily use Ruby on Rails or PHP for my coding, the most annoying part is the god damned SQL code! So usually, I base the time 'fixes' take on how much JScript I have to write(CSS is easy, JScript, not so much), and additional 'features', etc. are based on how many DB tables and SQL code I have to write. I don't have a magic equation or anything, I just figure out how much work it will take and how hard it will be to do it. Use your best judgement, but always err on the side of caution.

    YEAH, I posted my first 'good' comment in a while. hehe, karma went from terrible to bad :)
    Anyways, enjoy!

    --
    NO~, I read Slashdot because I think it's stupid.....
    1. Re:Well.. by Mad+Merlin · · Score: 1
      And since I primarily use Ruby on Rails or PHP for my coding, the most annoying part is the god damned SQL code!

      You have problems with SQL? SQL is, by far, the simplest part of any application. Pushing work into the database tends to eliminate the vast majority of the work. If you don't find that, then you're not using them correctly.

  9. I have to ask... by gwyrdd+benyw · · Score: 1

    Why are you writing for a platform with no documentation? Either the platform was developed in-house, in which case the respective team should be shot, or you're licensing it from some company that should have written documentation already (otherwise you're paying too much for it, even if it's free).

    --

    I adblock all animated gifs.
    Blessed be the prime numbered slashdotters
    1. Re:I have to ask... by DarkGreenNight · · Score: 1
      was developed in-house, in which case the respective team should be shot
      Well, in my actual job we don't have time to document. You'd be lucky to find a nice comment. When more and more is demanded from less people that is what happens.

      Meanwhile a boss, who needed to give concrete times, asked a coworker how long certain "feature" would take:
        - How long?
        - But we don't even know what they want, just this vage description.
        - How long?
        - ...
        - Let's say two months?
        - ... ok.
    2. Re:I have to ask... by Mr.+Slippery · · Score: 1
      Either the platform was developed in-house, in which case the respective team should be shot

      It seems that out in the "real world", there are many development teams who should have been put up against the wall ages ago. I've worked on a fair number of projects, and useful documentation has been the exception rather than the rule.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
  10. Good 'ol Scotty by Steamhead · · Score: 4, Funny

    To take a leaf from Star Trek just do what he always did. Say it will take 3 times as long as you think it will, and you will always get half that time to complete it. And if you get it done early you will be rewarded.

    Win-win.

    1. Re:Good 'ol Scotty by netkid91 · · Score: 0

      Beam me up scotty. (had to)

      --
      NO~, I read Slashdot because I think it's stupid.....
    2. Re:Good 'ol Scotty by Osty · · Score: 3, Insightful

      To take a leaf from Star Trek just do what he always did. Say it will take 3 times as long as you think it will, and you will always get half that time to complete it. And if you get it done early you will be rewarded.

      I think you left something off at the end. "And if you get it done early, you will be rewarded with even less time for the next project."

    3. Re:Good 'ol Scotty by Dadoo · · Score: 1

      Actually, at my former employer, we just pulled numbers out of our asses - seriously. Sometimes the estimate would get a serious adjustment, usually downward, if the customer thought it was too much. I don't think we ever exceeded our estimates by less than 50%. Usually, we exceeded them by 3 or even 4 times.

      At one point, I got tired of hearing customers complain, and made a serious effort to make good estimates. Our CEO would come down and complain they were too high and force me to lower them, even though he didn't really have a clue what he was talking about. That's one of the reasons they're my former employer.

      --
      Sit, Ubuntu, sit. Good dog.
  11. Manager theory by RedOregon · · Score: 4, Funny

    Count how many dumbshit managers with no technical knowledge you have over you.

    Double your realistic estimate for each DM.

    --
    Skivvy Niner? Email me!
    HEY! Look left just ONE MORE TIME!
    1. Re:Manager theory by Duhavid · · Score: 0, Troll

      Wow! I love it. Wish I had mod points.

      --
      emt 377 emt 4
    2. Re:Manager theory by francium+de+neobie · · Score: 2, Funny

      Then you'll get a time estimate greater than the expected lifetime of Earth...

    3. Re:Manager theory by Duhavid · · Score: 1

      I think there is a DM out there with mod points.

      --
      emt 377 emt 4
    4. Re:Manager theory by computational+super · · Score: 1

      Dude, I know numbers are theoretically infinite, but I don't think they really go that high...

      --
      Proud neuron in the Slashdot hivemind since 2002.
  12. Experience Required by Anonymous Coward · · Score: 0

    Seasoned developers look back at their experience for similar things, pull a number out of their ass, and then double that number. Just like stock market analysts and economists can't predict the future, neither can you.

    1. Re:Experience Required by Anonymous Coward · · Score: 0

      Quite right!

      It's really most unfair to burden you with such an estimation, if there are components to the project for which you have no experience, or if the project is vague in some of the specification of its components. You really have to disclaimer your estimate up the wazoo; but to demonstrate that you are not full of it, you provide exact sub-accountings for some of the subcomponents for which you have experience.

      I can offer piece-rate estimating when a customer is new and not familiar with my capabilities; but once you have a proven track record with the customer (which might take months or years to establish), they have to "lighten up" and understand that ultimately they are often estimates and not guarantees. Nobody can give a guarantee for code that they have never done before; so it's a bet that we as developers might take when a customer is new (and it's understandle that a customer might initially demand that, if they really don't know your capabilities well at first), but after you have proven yourself to the customer, it really isn't worth taking that risk anymore (and if the customer continues to insist that you shoulder it all, then you have to push back and ask what's in it for you; either the piece-rate estimation price has to go WAY up, or they have to allow you to miss your estimates; it's permissible in development so long as you can account for WHY your estimate was off, and it was something that was not easily forseeable...)

  13. No Easy Answers by Dunx · · Score: 2, Interesting

    I've been developing as a job for almost twenty years, and I still don't know the answer to this question.

    The best approach I've found is to decompose the problem into chunks that are small enough to give a reasonable estimate of, but I've hit two snags with this:

    1. it may take time I don't have to do the decomposition

    2. managers don't like big numbers

    Good luck!

    --
    Dunx
    Converting caffeine into code since 1982
    1. Re:No Easy Answers by Duhavid · · Score: 3, Insightful

      Absolutely.

      I would add, dont let them sucker you into making
      an estimate without doing the decomposition, if there
      are items that are risky because it is something
      newish, allow time ( up front is best ) to do some
      empirical development to figure out how it all works,
      and if you normally pad estimates with a x 2 factor,
      pad this part with a x10 factor.

      *Dont* succumb to the temptation to cut back any
      estimates once you see what the totals come out
      to. Do your estimation at the "leaf nodes" only, and
      let the numbers come out as they come out.

      And even if the managers dont like the big numbers,
      at least *you* will know. They may well tell you you
      have less time than you asked for. Dont agree when
      they come out with the "it wont *really* take that
      long, will it?" stuff. Stand your ground, but realize
      you may not get the time. Then you can pre-prioritize
      how you execute on the project, so that the most important
      stuff is done ( hopefully ) when their stupid deadline
      comes up. Now, that does not mean that you should be
      disagreeable in your disagreement. But when they
      throw on the pressure to bring forward the deadline,
      find a way to remind them that you are working toward
      that deadline, but you dont think it achievable. Course,
      then they will try the "we cant have you lead unless you
      buy into our stupidity" kind of stuff. Dont have
      an answer to that.

      --
      emt 377 emt 4
    2. Re:No Easy Answers by computational+super · · Score: 1
      Dont agree when they come out with the "it wont *really* take that long, will it?" stuff. Stand your ground, but realize you may not get the time.

      Actually, the game I always end up playing here goes something like this:

      • M: "Ok, how long will it take to implement X?"
      • Programmer takes some time, gives realistic answer.
      • M: "Yikes, that's too long - our deadline is next month."
      • Programmer wonders why he asked in the first place, then ...
      • M: "What if we cut unit testing? Could it be done faster then?"
      • Programmer stands ground.
      • M: "Ok, ok. What about documentation? Can you do that after the project?"
      • Programmer stands ground.
      • M: "Alright, alright. Well, then, let me see if I can get approval to cut feature Y.
      • Programmer didn't know feature Y was expected... but has to revise estimate down since somethings been removed anyway.
      • Repeat until estimate is one month.
      • ... one month passes ...
      • M: "What happened to feature Y (and Z, and alpha, and beta, and everything else that was cut to make the schedule match the deadline)? It was in the original data sheet! You incompetent programmer! You people never see the big picture! Don't you understand we have to sell a product to make a profit? Your boss will hear about this! You're working nights and weekends until this project is finished!
      ... until you get so cynical you answer every request for a schedule with "how long do you want me to say?"
      --
      Proud neuron in the Slashdot hivemind since 2002.
    3. Re:No Easy Answers by Duhavid · · Score: 1

      Yeah, I've a bit seen that. Salesmen will try
      to get you every time. Document what you agreed
      to in an email copied to your boss. If that doenst
      work ( and it wont at first ), key their BMW. ( jk ).

      --
      emt 377 emt 4
    4. Re:No Easy Answers by Burb · · Score: 1

      If you have all the "leaf nodes" done to your satisfaction, you can go the boss and say "OK boss, which of these numbers that I have added is wrong?". Make him/her responsible for changing the numbers... not you.

      --

    5. Re:No Easy Answers by Duhavid · · Score: 1

      And, sometimes, you can add "and what makes you qualified to judge them"? :-)

      Not that I recommend this approach....

      --
      emt 377 emt 4
  14. It just takes experience by DaFork · · Score: 2, Informative

    Just Google "software estimation" and you get a variety of ways of doing it (the most popular formal model is COCOMO). In the real world, most people don't have the luxury of doing estimates the right way. In my experience, the stakeholders want a good guess at first (aka SWAG, OOM, VROOM, LOE). They treat that initial guess at the high watermark and then expect you to either finish early if all went well or finish on time if there were problems.

    How I go about making this initial guess is by breaking the project up into sub-projects and then creating a baseline estimate by determining how long it would take me to do each piece myself. I then determine which person on my team will be working on which piece and then adjust from the baseline for that component based on the engineer's performance level compared to mine.

    Once I have all those man-hours calculated, I double it. This is now my code and unit test estimate. Finally, add 10% for project management and another 25-50% more for quality assurance.

    It seems kind of loose, but it works for me.

    1. Re:It just takes experience by Knuckles · · Score: 1

      adjust from the baseline for that component based on the engineer's performance level compared to mine

      Another, similar method I have seen mentioned, I forgot where:
      Everytime something is coded, ask the coder for his estimate, and compare that to the actual time it took when the job is done. With this method you can over time develop a multiplier (on average, and for each individual coder) for the estimates given. You can even assess the accuracy of an estimate based on the variance of the estimates.

      --
      "When I first heard Daydream Nation it quite frankly scared the living shit out of me." -- Matthew Stearns
  15. Experience, solid requirements by Osty · · Score: 5, Insightful

    For the most part, your ability to give an estimate on a change is a matter of experience. General experience will give you a rough idea of how long it would take to implement some random feature. Specific experience with the system in question will give you a much more refined ability to make an estimate. If you can't make an estimate, or you can only make a rough estimate, be upfront about it. Tell your manager or the customer (if you're the one working directly with the customer) that your estimate is very rough, and try to add as much buffer time as possible. Also, don't get into granular estimates when you can only give a rough SWAG (Some Wild-Ass Guess). If you think it'll take you an hour, say a day. If you think it'll take you a day, say three. If you think it'll take you three days, say a week (experience will tell you how much buffer to add). If you don't have enough experience with the system to make a good estimate, ask your co-workers for help. It's always better to under-promise and over-deliver than the other way around. Besides, while you may end up over-estimating some feature, chances are you also underestimated another one and the extra buffer time you don't need for feature A will be invaluable to finishing feature B.

    To help you make better estimates, you should make sure you get a solid set of requirements from your customers. Time should be spent with the customer to determine exactly what it is they want (they may not be able to articulate it clearly), and whether or not there's already a solution they could use if they're only willing to change their process. Avoid telling the customer at that point whether something is "easy" or "hard" (and definitely ignore them when they suggest something will be easy -- they don't know the inner workings of the code, so how will they know if it's hard or easy? Changing a piece of text may look trivial, but may involve a number of external factors such as localization or legal that would turn a 5 minute fix into a two month battle). Take what you've learned, distill it down into a solid set of requirements, and take that back to the customer for sign-off. Once they've signed off, they don't get to change their mind any more for this cycle (however long that may be -- days, weeks, months, or even years, though hopefully not nearly as long as that). Then you get rough estimates from the developers based on their gut feelings and knowledge of the code base, and have them investigate deeper to solidify those estimates. At that point, you have enough to build a schedule, but allow for buffer time! A developer's 8 hour day may not be 8 full hours of coding. It may be 4 hours of coding, two hours of meetings, an hour for lunch, and an hour of "filler" for the cost of task-switching depending on how the coding hours and meeting hours overlap. Based on your experience with past projects, you should have a good idea of how much time per day a dev actually gets to spend on coding and use that to build your schedule. For example, developer estimates are all in 8 hour day increments, but you know from experience that developers average 6 hours per day of productive work. That means a 5 estimated days will actually take 6.7 real days, so use that as your buffering criteria. (BTW, six hours of productive work is actually high. In most cases, it's really closer to 4 or 5.)

    Finally, don't forget QA. Just because a developer has confidence that he can implement a specific feature in one hour doesn't mean it won't take QA a week to verify all of the ramifications of that change. You really need to have your QA team working in lock-step with your dev team. Your dev team should write technical specs on the features, and your QA team should estimate impact off of those. The "agile" disciplines that are en vogue lately try to incorporate testing directly into the development process, which is good. However, that means that developers will be in charge of including QA costs on their estimates, which developers are usually bad about doing

    1. Re:Experience, solid requirements by anomalous+cohort · · Score: 1

      Once you gain sufficient experience estimating development work in a particular platform, architecture, language, library, domain and seeing how close actual delivery is to the estimate, you will be able to satisfactorily predict when you can deliver on a particular specification but only if the specification is non-ambiguous, non-contradictory, and complete enough such that you will not need any further clarification.

      You will be able to answer the "how long will it take to implement this feature as spec'd?" questions. What you will not be able to answer is the "how long until we can release the software to its users?" questions. It is the latter question that is of most interest, yet no amount of technical expertise can address it.

    2. Re:Experience, solid requirements by surfinbox · · Score: 1

      I love this post, it actually reflects the problem from a project management perspective.
      If you do not have detailed requirements, estimating becomes an estimate-of-an-estimate!
      If you cannot break down the task, you really don't know what you're doing - irrespective of level of personal experience.
      If you are going to use a RAD methodology that speaks to rapid prototyping, you still need detailed requirements to get something started.
      THE REAL problem a wise customer should recognize, and a deliberate methodology will likely raise, is WHAT'S the REAL TIME to GATHER REQUIREMENTS going to be? Development time becomes a more precise estimate based upon requirements definition time.

  16. Two words by dunedan · · Score: 0, Offtopic

    Wideband Delphi These words added to get past the time filter on slashdot

  17. My one-time mentor taught me well by davidwr · · Score: 2, Interesting

    He said "double it then raise it to the next unit of time."

    One hour becomes two days. A week is two months. A month is two years.

    P.H.: If you are reading this I'm still in the business.

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
    1. Re:My one-time mentor taught me well by Anonymous Coward · · Score: 0

      Looks like he didn't teach you as well as you think because your examples are examples of "raise it to the next unit of time and double it".

    2. Re:My one-time mentor taught me well by DrJimbo · · Score: 1
      The operations "raise it to the next unit of time" and "double it" commute, Mr. Smarty Pants.

      Besides, I think this is the most accurate estimator posted so far.

      --
      We don't see the world as it is, we see it as we are.
      -- Anais Nin
    3. Re:My one-time mentor taught me well by tehcyder · · Score: 1
      He said "double it then raise it to the next unit of time."
      Do something similar with the budget and you've got a good approximation of the definition of a UK government IT contract.
      --
      To have a right to do a thing is not at all the same as to be right in doing it
  18. Be Honest by bhmit1 · · Score: 4, Informative

    As others have said, you should estimate based on similar tasks, and then overestimate before giving that number to management. But there's also something to be said for being honest. Most management types I've dealt with are just fine when you say "I don't know if the application allows us to make that change quickly, so let me do some research and get back to you tomorrow with an educated guess." It helps if every so often you come back to them before the end of the day and say that it was an easy change and you've already finished it. Finally, when working on more than a few things at once, I make sure there's a prioritized list that I'm working from that management is aware of (so they understand why the latest request will take more time) Also, I make sure there's regular progress on one or more high priority items. Management and customers always sleep better when they see forward momentum even if the deadlines slip a little. Spending a week with nothing to show makes them nervous even when things are on time.

  19. Qualify Your Answer by Marillion · · Score: 1

    Giving an estimate is really giving an expectation. I try to answer the estimate and share my confidence level of that estimate. Plus I try list any caveats that might impact the estimate. If I tell a boss something will take about a week, but I don't have much confidence in that estimate because I don't understand what the user is looking for, that much better than guessing two weeks and finishing in one. I find bosses to be far more understanding of missed deadlines if they have a reasonable expection of missing a deadline.

    --
    This is a boring sig
    1. Re:Qualify Your Answer by Jeff+Molby · · Score: 1
      I try to answer the estimate and share my confidence level of that estimate. Plus I try list any caveats that might impact the estimate...I find bosses to be far more understanding of missed deadlines if they have a reasonable expection of missing a deadline.
      Exactly. In fact, at that point it's more of a goal or projection than a deadline. It only becomes a deadline if you, your boss, or the customer make it firm. You can't control your boss or the customer, but if you imply that it's firm when your confidence is low, you're a fool and you deserve the long nights.
  20. How to arrive at your estimate by kimvette · · Score: 1

    Come up with your estimate as usual (I'm talking your REAL time estimate, coordinating with your team members, not using the schedule handed down from on high PHBs)
    Multiply by 250%

    Add at LEAST two weeks on top of that.

    Tell your (un)friendly PHB "the schedule is NOT negotiable (for acceptable quality) unless they start cutting back features, oh and as a friendly reminder, PHB, throwing more programmers into the mix this late in the game will NOT speed things up, and outsourcing it whole or in part to India can guarantee that the schedule we just handed you will double or triple. Now, does this schedule look good for our shareholders or do we start scaling back features?"

    --
    The Christian Right is Neither (Christian nor right). See: Matthew 23, Matthew 25, Ezekiel 16:48-50
    1. Re:How to arrive at your estimate by Anonymous Coward · · Score: 0

      As a practicing PHB, I can say with certainty that if someone came to me with this BS answer they would be fired on the spot.
      Offsihroing to India is so very temprting preciesly because we don't have to deal with dickheads like you.

    2. Re:How to arrive at your estimate by tsanth · · Score: 1

      If you choose to fire on the spot someone who makes such a claim but can actually deliver on quality, that's your call. Ultimately, you get what you pay for. After all, you are the PHB.

      Now if you got that line from someone who couldn't deliver but chose to fire them anyway... well. You get what you pay for.

    3. Re:How to arrive at your estimate by Anonymous Coward · · Score: 0

      Yes, because arrogant blowhards are so useful in a team environment. I wouldn't hire anyone with that kind of attitude, because in my experience anyone who goes on that much about how wonderful they are never lives up to the hype. Oh, and incidentally, the parent poster can't even get the permissions right on their personal website - "warning: rename(/tmp/75ca48991ea3903b48e59624f4c5042cBG28JR ,/srv/www/kim/gallery2/photos/sessions/75ca48991ea 3903b48e59624f4c5042c) [function.rename]: Permission denied in /srv/www/kim/gallery2/modules/core/classes/Gallery Platform.class on line 455."

    4. Re:How to arrive at your estimate by Anonymous Coward · · Score: 0

      As a practicing PHB, I can say with certainty that if someone came to me with this BS answer they would be fired on the spot.
      Offsihroing to India is so very temprting preciesly because we don't have to deal with dickheads like you.


      Obviously the Peter Principle is in full effect at your company.

      I suggest you quit the PHB job and go do something you're actually qualified to do, like working at Quick-E-Lube changing oil.

    5. Re:How to arrive at your estimate by kimvette · · Score: 1

      *shrug* I haven't bothered with my web site in months, and it's moved to another box. It doesn't earn me any money so I haven't checked on it since the move. Web sites that matter have been checked. However, thank you for the meta-sniping and attacking me rather than discussing the issue. Very, er, "admirable" of you to change the subject.

      --
      The Christian Right is Neither (Christian nor right). See: Matthew 23, Matthew 25, Ezekiel 16:48-50
    6. Re:How to arrive at your estimate by kimvette · · Score: 1

      Well, how do you account for unknowns in your schedule? Here's a hint: listing all the unknowns is not possible because you don't know what you don't know. You also NEED to pad it for the inevitable feature creep (e.g., the GUI in the actual implementation doesn't work so well when put in front of x type of user, even THOUGH the PHB absolutely insisted that a deep tree control was a requirement against all advice from EVERYONE else). How do you account for a Microsoft class not working as documented, requiring you to spend weeks writing your own library to do the same thing CORRECTLY, or having to wrestle with Microsoft's memory manager eating up CPU time by context switching too much, and depending on other third-party libraries is unacceptable per PHB requirements, so you need to write your own?

      A schedule is arrived at by putting on rose-coloured glasses saying "Oh sure, this will take me 12 hours, that will take me two, and that will take me about 80" when in reality that is pending:
        - NOT spending all your time in meetings
        - NOT having to mentor others
        - NOT having to wait days for Microsoft support to come back and say "oh yeah, that's definitely a bug in the class, and there is no redistributable hotfix. However we will reverse the charge for this incident."
        - NOT having to wait weeks for customer input
        - performance will be stellar when you load test it
        - NOT being told "Oh and by the way, client X needs Windows 98 support, and because they promised us $7.1mil we need to give it to them."

      Multiplying your schedule by 2.5 is perfectly reasonable because as they say "shit happens." Welcome to the real world. The choices are to either allow for a reasonable schedule, scale back features, or ship a shoddy product. Unfortunately too many companies do the latter lately. Microsoft is doing it right this time around with Vista, as an example: rather than repeat past mistakes (WinMe anyone?) they are delaying it and delaying it until they get it right, AND have yanked features that everyone wants in favor of releasing a (hopefully) stable and secure product. Yes it's painful, and yes it takes longer, but if you deliver a quality product your customers will remain your customers down the road.

      Oh, and the reason for multiplying by 2.5x up front is to (hopefully) avoid delay after delay after delay, pushing back the date even though clients have already paid for the product and the PHB committed to releasing it on Fooday, Septober 22 at 25:91, in the year fe88. Why? There WILL be delays if the schedule is based on perfection, 100% utilization of engineering time, but meetings, bugs, and interoperability issues DO crop up, and throwing more people into the mix usually does NOT alleviate any of those issues.

      --
      The Christian Right is Neither (Christian nor right). See: Matthew 23, Matthew 25, Ezekiel 16:48-50
  21. Confidence Intervals by CTalkobt · · Score: 1

    This is my method : I list out all the steps necessary for the task to be completed. I then make an initial estimate on how long each task should take. I then go back over the list and add a confidence interval which is a percentage certainty that I am on how long each task should take. I then create a min/max time for each task based upon the confidence interval.

    Draw a line through the min column. Min column is just for amusement. Total the max column and then double it.

    If you feel like you need more fudge factor create a confidence interval for your confidence interval and then double that resulting max. Repeat until comfortable. :-)

    --
    There's a gorilla from Manilla whose a fella that stinks of vanilla and has salmonella.
  22. I'll get back to you on that by kenneth_martens · · Score: 1

    If you can't give a reliable estimate, say "I'll get back to you with a time estimate." If they press you, give an estimate on how long it will take you to give an estimate. E.g., "It will take me two days to research the request and give you a reasonable estimate."

    The worst thing you can do is to just guess. If you guess too low, you look incompetent when you don't finish on time. If you guess too high, you create the expectation that all your estimates in the future will also be too high.

    So my advice is, politely avoid giving estimates until you can research the request. Most people will understand that it takes a little research to come up with a good estimate.

  23. The Mr. Scott approach by goofyheadedpunk · · Score: 1, Redundant

    Why not take the Mr. Scott approach to software engineering? When your asks you how long something will take figure out the time you're going to quote him, multiply that by four and then tell him that. If you get it done in the time you'd thought originally you'll look like a mircle worker, if not you've got lots of extra time to finish the project.

    --

    What if the entire Universe were a chrooted environment with everything symlinked from the host?
  24. I'm a fan of the WAG method by code+shady · · Score: 1, Informative

    You know, Wild Ass Guess.

    --
    Look out honey cause I'm usin' technology
    Ain't got time to make no apologies
  25. yer gonna have to spec it out... by bitbucketeer · · Score: 3, Insightful

    If a client insists on an accurate estimate of "how long it will take" for a non-trivial project, then you pretty much have to get them to provide you with or pay you to generate a requirements spec, a functional spec, and then an implementation spec. From the implementation spec, you can then ballpark how long each part will take to code and test. If the client balks at putting exactly what they want on paper, then you should balk at providing any kind of estimate; because there is only one truth in that situation: it will take as long as it takes.

  26. The Joel on Software series by moranar · · Score: 0, Redundant

    This might help:
    Painless Software Schedules.

    --
    "I think it would be a good idea!"
    Gandhi, about Internet Security
    1. Re:The Joel on Software series by moranar · · Score: 1

      Argh. "Plain old text" just doesn't work like it oughta. Why does it interpret as HTML but not ?

      Nevermind, I already posted a message with a working link.

      --
      "I think it would be a good idea!"
      Gandhi, about Internet Security
  27. A nice article by Joel Spolsky by moranar · · Score: 2, Interesting

    This might help: Painless Software Schedules.

    --
    "I think it would be a good idea!"
    Gandhi, about Internet Security
  28. I Use Analogue Computing by craznar · · Score: 1

    Use the analogue computing method.

    1. Assume you know the development time T of the project
    2. Realise the actual time is actually 1.87*T
    3. Press the start button
    4. Wait for the system to reach steady state
    5. You now have the value of T
    6. If the system never reaches steady state, you know realise that wasting time estimating how long this will take, is what makes them take longer.

    --
    EMail: 0110001101100010010000000110001101110010 0110000101111010011011100110000101110010 0010111001100011011011110110
  29. for web projects, it's all based on the buzzwords by Tumbleweed · · Score: 1

    Okay, so here's how I do it:

    First start with one day: this is for a single page of static HTML with graphics.

    For every buzzword the client uses, multiply by ten:

    Can we have some Flash? (ten days)
    And AJAX, too? (100 days)
    etc.

    Am I serious? You decide.

  30. Estimated time plus fudge factor. by atomic-penguin · · Score: 1

    Estimate the time you think it will take and multiply by 1.5 to 2.0. You need a fudge factor for unforeseen problems, scope changes and so on.

    It is better to overestimate than underestimate. For example, let's say you get a big fat contract with an open checkbook. Now if you go over the estimated time you or your employer may have to eat the difference. The person signing the check may call bullshit on the over budget project, and refuse to pay the difference.

    Finish the scope of the work early and your boss may notice how hardworking you are. Hell you might even get a big fat raise for getting the job done under budget.

    --
    /^([Ss]ame [Bb]at (time, |channel.)){2}$/
  31. That depends... by Baldrson · · Score: 1
    If you're developing an application where there are a bunch of forms and workflow spec'ed out then you take a statistical sample of the forms and get them running with the development tools you are using.

    At the other extreme, if you're developing a "platform" you're in the realm of philosophy or mathematics where it matters more how well you conceptualize the system and you should probably just forget about estimates and go for quality. Yes, that means you can't go to VC's for financing deep system software.

  32. Steps that help by Beryllium+Sphere(tm) · · Score: 2, Insightful

    Don't expect anything on this list to solve your problems.

    o Break the problem down into small pieces. If you have an item on your schedule that says "Do X" and the estimate is "two weeks", you do not understand what X is. Keep splitting it into X.1, then X.1a, then X.1a.ii, until the pieces are all less than three days, preferably much less.
    o Clock time != development time. You will spend half your time going to meetings, preparing TPS reports, and making phone calls to find out why your test server is down. To convert development hours to schedule hours, use a factor of two.
    o Keep an estimator's handbook. Ever noticed these in a technical bookstore? You can look up how long it takes to plumb a bathroom, build a wood frame wall, etc. Keep your own list of how long it takes to build a credit card form or a bulletin board. Look up the phrase "function point" in ancient literature and see if you get any useful ideas.

  33. Experience, detail and 2.5 by eipipuz · · Score: 1
    Maybe is too simple, but it works for me.
    • Get the requirement in as much detail as possible. Having items sliced such that they are actions/changes that I think I could do alone in a 2-3 hours or less.
    • Then I gather PMs (count the number of activities) and multiply by 2.5
      Most of the time I get a number which sounds huge, but I tell myself you ain't be doing just that, and emergencies happen. So even if I think it could be inflated I stay with the number. My changes are "critical" so most of the time others understand that I won't rush.
    • Then talk with some co-workers, ask them how much they calculate. Most of my coworkers get their numbers by feeling, so only if their guts ask for more time I re-check my number.
    • Profit!
    As you do it over and over you'll become more adept at detailing your activities. Experience helps you add more activities that are more realistic. (Of course you should be improving your skills so things once took more time should lower) In the end I could rephrase, get your optimistic time and multiply by 2.5
    I'm still new to estimates but this method had worked for me in at least 3 big projects. If you have to work with others, you need to find their factor, in this case 2.5 is my "weight". When I said activities I'm refering to such things as doing each and every use case, coding each function, doing UT, peer reviewing, and so on. All that's required, even talking with the guy next cube so he can't configure some bizarre environment that I will test. Everything counts. Hope it helps.
  34. Estimation: Voodoo by Centurix · · Score: 1

    I have several methods of estimation which are used in accordance to the type of job, and timeframe required in order to get the estimation. Sometimes I have small jobs which can be almost estimated on the spot providing I'm confident with the level of technical risk involved. Sometimes I have long term jobs which require a decent breakdown of tasks. That's a fairly broad description of what happens, and of course these estimates can be affected by deadlines (which are always negotiable, never let anyone tell you otherwise)

    What I look for when performing development work, is what constitutes an item of work, a small package which has *roughly* the same development period everytime. For example, you may find that when developing a web based application it takes an hour to code a page, including testing, that's your quick estimate tool, calculate how many pages and there's your *rough* hours. On top of that, add your contingency. Or use the manufacturing rule of "double it and add it again" (after all, you are, as a developer, a manufacturer. I just wish I could claim the same tax breaks). Of course, some pages may take less, some may take more and it is a rough science, I don't suggest you sit in front of your computer with a stopwatch and time a page write, but if you've done enough of any task you should know how long it takes you to perform it.

    The other problem associated with estimates is your own confidence in what you've calculated. You mock up something on paper, work out the units, do the math and come up with what seems to be an arbitrary number. Is that enough? - Well, you can go over your figures multiple times, throw in what-ifs, work everything out backwards if you like. I can almost guarantee you that your first figure is the correct one (unless you've forgotten something major from the first calculation) So I tend to stick with that nearly all the time.

    Then there's the choice between Time and Materials and Fixed Cost estimates. If your job requires the actual quoting based on either of these, choose T&M (if you *can* get away with it, if your client feel flexible that day then T&M can help with your contengency planning a great deal). If your technical risk is 0%, then go ahead and fix that cost. If your political risk is high, say you've done the same kind of work for three companies who are in competition with each other, T&M is a tool for at least getting *some* kind of payment in case the situation completely explodes, like they find out you do the same work for their arch rival, you haven't signed an NDA, debtors fall into 120 days, or they turn up with baseball bats and offers of one way fishing trips (here's some advice, try to avoid working with fisheries, sometimes you see more than you want to)

    OK, to tie the above off, estimation was never meant to be fun and uh, don't undercut me. Thanks.

    --
    Task Mangler
  35. Benchmark by owlman17 · · Score: 1

    I use my previous projects as benchmarks. If, say a certain old function/project's difficulty was x, and it took me n days, and the new function/project needed was twice as hard, I'd quote 2n days. That's an oversimplification but it worked for me. Steve McConnell's books helped me a lot. Like this one: http://www.edv-buchversand.de/mspress/product.asp? cnt=product&id=mp-0535

    And I always gave 100% padding. If I know it will take me a week to do it, I usually say I can do it in two. (Duke 4ever comes to mind but that's another story.)

  36. Benchmark by owlman17 · · Score: 1

    I use my old projects as benchmarks. If say an old function/project had a difficulty rating of x, and it took me n days to finish it, and the new function/project needed was twice as hard, I'd quote 2n days. (Plus an additional 100% for padding.) I have found Steve McConnell's books to be helpful, like this one Software Estimation: Demystifying the Black Art http://www.edv-buchversand.de/mspress/product.asp? cnt=product&id=mp-0535

    That's an oversimplification, since there are many factors, but it works. There's really no cut and dried way of estimating, but you can come close.

  37. Ah, time estimation by stienman · · Score: 4, Insightful


    Time estimation is part of project managment. A good course in project management will give you the tools to effectively deal with these situations.

    Short and sweet, when asked to give an estimate (any estimate) ask them if they want the quick and dirty estimate now (which may be off by 1,000% or more) or if they would like a more accurate estimate. If they want the quick and dirty then use whatever method you use now to give them the estimate. If they want an accurate estimate then tell them you'll research the current state of the project, the development effort required for functions x, y, and z, and the resources required to accomplish the effort.

    Then follow a good estimating process - there are many available in many books about this subject. In my case generally new projects are very similar to older projects, and are all built on the same foundations so it's easy to start with a list of tasks to get from point A to B, and list the resources and dependencies for each task. Link them all together, and then go to the boss and say, "Assuming that we have these people and these reources, the project will be completed x weeks from kick-off."

    When (not if) the boss says, "Well it needs to be done by this date!" Calmy reply with, "We can meet that goal by either scaling the work back, or increasing manpower. Which is more suitable for this situation?" and so on.

    The one thing you don't want to do (that all too many software engineers do on a regular basis) is over estimate or underestimate the work required. In either case the customer (generally your boss) learns not to trust your estimates. This is bad on so many levels, and is the main reason that so many software engineers work more than 40 hours per week on a regular basis - especially those that overestimate the time required trying to combat this (paradoxically).

    A more accurate estimation process will include a frank discussion of risk and risk management. "This schedule is good as long as we assume the code base is well documented and follows reasonable coding practises." Then find out what the customer wants you to do if you find this assumption to be false. Give them the whole scenario - the risk may be low, but if the assumption proves wrong then perhaps the project schedule or resources just tripled. That may be too great a risk to take even if it's unlikely - so how do we mitigate that risk?

    I could go on, but really this is a basic question that millions of people have asked for thousands of years. There are much better and more thorough resources to answer it. Visit your local library if your company isn't willing to send you to a simple three day project management seminar. They won't teach you much that's new, but they'll tie it all together and give you the tools you need to communicate effectively with others - most of the important stuff is being able to say, "I'll get back to you on that by thursday."

    -Adam

    1. Re:Ah, time estimation by Mr.+Slippery · · Score: 2, Interesting
      Time estimation is part of project managment. A good course in project management will give you the tools to effectively deal with these situations.

      Hmm. Then why, depspite years spend working under PMs who'd taken all sorts of courses, have I encountered so few who could deal?

      In my case generally new projects are very similar to older projects, and are all built on the same foundations

      Then the problem is trivial. What about the general case?

      I could go on, but really this is a basic question that millions of people have asked for thousands of years.

      And it seems that no one has yet come up with a good answer outside the trivial case.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    2. Re:Ah, time estimation by stienman · · Score: 1

      Hmm. Then why, depspite years spend working under PMs who'd taken all sorts of courses, have I encountered so few who could deal?

      If a few students fail in a class, one would presume it's the student's fault. If the majority of the students fail, then one would presume that the teacher is at fault. (or it's an engineering 'weeder' class :). Project managers who do not have expertise in the project cannot do the time estimate. They can only go to the experts and help them break the tasks up and estimate them. Afterwards they are simply a means of communication and tracking - they never make a decision or estimation - they facilitate decisions, and go to the decision makers when the project goes off track. If they have some expertise in the field then they may be more involved in the estimation and decisions. It could be that you've seen so few good PMs because your company hires poorly, or because they are very rare. Or it could be that you don't understand their function and use them appropiately.

      Then the problem is trivial. What about the general case? ... And it seems that no one has yet come up with a good answer outside the trivial case.

      Every case is trivial when broken down far enough. Have you written a DB before? No? Have you written a random access file module? No? Have you read/written from a file? No? Have you sorted a data list? No? Have you written a module/function/class? No? Have you written a single line of code? Yes! Ok, Let's break this project up into tasks that each emit a single line of code. That seems hard - planning the project will take longer than developing it. Let's get someone who has experience at the higher level. If no one does, or we don't have the resources to get them or the tools that enable us to do it, then we're stuck. Here we go, one line at a time.

      In the case where even that's not possible (You are not expert enough to break a given task up any further, or redefine it so that it you are able to break it up), then the correct estimate is, "We do not have the skills to properly estimate this project." There are a few paths you could take - hire someone who can, do a test project, perform a fact-finding study, outsource the work and let someone else do the estimating (write penalty clauses into the contract for poor estimates), etc. Most companies instead guesstimate wildly and then plow ahead. The majority of these projects fail, but they are not necessarily useless - generally a lot is learned during the process. But usually what has been learned could have been learned more efficiently/effectively with a test project.

      Does this adequately cover the general case? If not, where does it fail?

      -Adam

    3. Re:Ah, time estimation by Mr.+Slippery · · Score: 2, Interesting
      In the case where even that's not possible (You are not expert enough to break a given task up any further, or redefine it so that it you are able to break it up), then the correct estimate is, "We do not have the skills to properly estimate this project."...Does this adequately cover the general case? If not, where does it fail?

      The problem you're ignoring is when the lack is not in skills or expertese, but in information about the problem.

      You can't break a problem down until you throughly understand it. Gaining that understanding is problem in itself. How long will it take you to learn to grebnesk? You can't make any sort of guess until you've started to understand grebnesking.

      It's like digging a well - you dig until you hit water. How deep will you have to dig? If the area is geologically unknown, you simply can't make a prediction. Maybe feet, maybe 600. Now, once you first hit water, then you can give an estimate on how long it will take to complete the well.

      Any interesting software project is digging in unknown ground - if the ground is known, we just re-use or adapt someone else's implementation(s), and the task is fairly trivial. That's what makes software different than building a bridge.

      Asking how long an interesting software project will take is often more like asking "how long will it take to find a cure for this disease?" or "how long will it take to write a novel?" than "how long will it take to build a bridge across this river?"

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
  38. DON'T DO IT! by MarkusQ · · Score: 4, Insightful

    Don't do it!

    I'm serious. If we've learned anything over the past forty years, it's that trying to estimate software development time is a waste of time. Why? Well, for one things, bugs. To know how long it would take to find and fix them, you'd have to know what the problem was, which means the hard part's done. For another thing, specification flux. Most reasonable project specifications for non-trivial projects don't provide enough information to accurately predict how long it will take to code. And producing such specs, and using them, will take longer than the development would have taken in the first place. And, if that's not enough, think of Dilbert. Specifically, the one where his boss asks him "Will there be any unforeseen problems?"

    I once told a client (a dot com) "I'll tell you how long this will take if you can tell me what you stock will be worth six months from now, four months after you IPO. And I'll be more accurate than you will. If you'd rather, you can tell me when the next two-day rainstorm will be." He hemmed and hawed, and basically refused to give any sort of number whatsoever. I said "Good, it looks like we've got a nice honest relationship going here. Neither of us is willing to lie to the other, or claim to know something we don't. So let's start prioritizing these features for the mock up."

    Let me say it again: Don't even attempt to estimate development times.

    So what should you do instead? Incremental development with frequent opportunities for feedback. Ideally, the users should be able to play with a nightly-build prototype whenever they want from the first week or so on. If they ask for a time estimate, tell them it will be done when they're happy with the result, and don't want anything more, or they're unhappy with the rate of progress, and call the whole thing off.

    But don't lie to them, no matter how hard they push.

    --MarkusQ

    1. Re:DON'T DO IT! by jnik · · Score: 1

      Y'know, I was about to post "put your head between your legs and kiss your ass goodbye," but you were far more comprehensive. It seems the main thing time estimates do is determine at which point you'll enter panic mode and 100 hour work weeks.

      Aren't programming positions usually overtime-exempt due to the difficulty of assigning hours to a creative task?

    2. Re:DON'T DO IT! by SavvyPlayer · · Score: 1

      To some extent this may apply to the R&D market, but, enlightened as this may sound, don't expect to win any production contracts without estimates. Remember, a software application represents nothing more than an automated part of a larger process (the notaable exception being entertainment software).

      Once business identifies the need to implement a particular process, it generally does so in recognition of a strategic goal. By definition, any cohesive strategy requires coordination at the organizational level (of which IT represents only one of several components) -- coordnation that simply cannot be achieved without detailed planning. If you find yourself a member of an organization whose leadership is willing to accept this notion that the software development process may unfold absent any sort of planning, there are two logical conclusions:

      1. Your project is simply not important. You may find discretionary projects interesting, but they are generally not good for career develoment as such projects are easily outsourced.

      2. Your project is critical to the growth of your organization, and leadership lacks the sense of urgency needed to properly manage risk. In short, your project is unlikely meet its stated objectives, leaving your organization vulnerable to loss of profitability, marketshare or both.

    3. Re:DON'T DO IT! by MarkusQ · · Score: 4, Insightful

      You are completely missing the point here. It is precisely because it is important that you should not fall into the trap of lying to people. Instead, you should do what any other responsible R&D team would do--decouple the processes of R, D, and whatever comes after.

      Here's how it works:

      • You don't give timelines, ever.
      • At any given moment you provide your customers/management with a set of "current best versions," (all this can be automated) tagged with
        • A unique identifier
        • Everything needed to reproduce that version (e.g. an SVN #, or equivalent)
        • Everything needed to take that version and make it a release
        • A complete, up to date, prioritized, searchable list of the known bugs, features, missing features, etc. of that version, along with the consequences and information about other versions in which those are fixed
        • Tools to upgrade/downgrade from other versions
      • You have your team focus on addressing the highest priority open issues at each moment
      • You work with the customer/management to help them make informed decisions about which version to use whenever they need to ship/install something.

      The point is, because it's important, don't let it become an all or nothing proposition. Make sure that, on whatever date they need to, they have something to run with, and it is as close as you can come to the best possible version that could be produced by that date.

      And it will likely be better than it otherwise would have been, because you can apply all the time you would have wasted defining and defending schedules to actually keep the project moving forwards.

      --MarkusQ

    4. Re:DON'T DO IT! by Anonymous Coward · · Score: 1, Insightful

      Such arrogance---as if every programmer is a prima donna, working on the bleeding edge, innovating, exploring where no programmer or software engineer has treaded before. Don't ask me how long it will take? How long does it take to catch a fish? It will be done when it's done?

      Get real.

      Software development increasingly a commodity. Competition is increasing; prices are normalizing; development tools are improving, making basic programming more accessible / less mysterious; and, more and more, the work can be done from anywhere. Big companies have figured it out (out-sourcing), and I even see trends that local, smaller businesses are figuring it out as well.

      Yes, there are people out there innovating on the edge. There are people creating new algorithms, developing new protocols, developing new technologies, even reverse-engineering systems and software, and so forth. Probabilistically speaking, you're not likely one of them; rather, (1) you've been tasked with creating something new similar to things that have been done hundreds of times before ("Build me a website"), (2) you've been assigned a module or a subroutine with specified interface and performance requirements, or (3) you have been selected for the more dubious honor of maintaining or changing someone else's work.

      If you're in case (1) and you can't estimate, then you're probably either inexperienced or you're using this opportunity to learn and try out the latest and greatest new technology on your client's dime.

      If you're in case (2), you're probably on a big project and as a programmer, estimating isn't your responsibility. If it was in your responsibilities, you may have had "PMP" stamped on your head and may have been trained in your company's CMM-approved process---then you wouldn't be asking. Rather, you may be bitching about your program manager or project lead asking you to estimate. Be grateful that you've been asked for your input at all.

      Case (3) is probably the worst. Neither an individual programmer nor a company of engineers has strong incentive to make it easy for some other programmer or company to get paid for follow-up work. But guess what? You have an upper bound on any estimate: It's the time it would take you to rewrite, and you should be able to estimate that.

      So, play it up while you can. Are you really so special that I shouldn't hire or contract with the person or company that *can* estimate and can provide a track record of on-time / on-budget work instead of you?

      -JM

    5. Re:DON'T DO IT! by SavvyPlayer · · Score: 1

      To say "You have your team focus on addressing the highest priority open issues at each moment" is to focus on baseline enhancements to the exclusion of strategic application development.

      Now, I thought the OP had a question of project estimation theory. If baseline enhancements are really the topic of discussion here, then you are right, I am missing the point completely. Somehow, I suspect SubliminalVortex's question is larger than that however.

    6. Re:DON'T DO IT! by dubl-u · · Score: 1
      If they ask for a time estimate, tell them it will be done when they're happy with the result, and don't want anything more, or they're unhappy with the rate of progress, and call the whole thing off.

      I agree that incremental development is the right approach, but you can marry incremental estimation with that.

      It turns out that programmers are good at relative estimation of small features, although they're very bad at absolute estimation of big features. The solution is to
      1. break the project down into very small features,
      2. estimate their relative complexity on a simple scale (e.g., 1/2, 1, 2, 4),
      3. start building, measuring how many points the team completes each week.
      Once that number stabilizes, you can give reasonably useful answers, like "assuming no changes to the plan, the project will be done on date X".

      An even more useful feature of this incremental, measured approach is that you can stay out of fights about when the project should be done. If they want to bring the date in, they can drop features, or negotiate with the devs on way to reduce scope for individual features to bring the estimates down. It turns unfocused schedule pressure into helpful pressure to reduce scope. And since both schedule and scope are business concerns rather than technical ones, the suits can have meetings all the live-long day while we devs happily continue to code.
    7. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      A load of rubbish. What if you're estimating number of days for a small-to-medium business' project (charging a man-day rate)?

      And nightly builds? How about well-defined phases. Give the client what they want before it's finished and half the time they'll be complaining about incomplete features or bugs in the nightly builds. How can you expect to get all the bugs and issues fixed if they're submitting new ones every night?

      That idea sucks. Of course you need to estimate.

    8. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      Dude, what would Donald Trump say if he asked you to build his next skyscraper and wanted a time estimate and you gave that bullshit answer? You need to start learning how to estimate based on previous projects, or at least previous work you have done that could be used in part of this system. Why do you have to act like you are developing brand new cutting edge software systems for every project or code fix you have to estimate? Sounds like a lazy washed up old programmer crying about his pension and why he deserves to make 100k a year when he accomplishes less then new guy a few years out of school...

    9. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      What you're saying makes sense if you consider the problem of unknown requirements. The "release it then fix it" solution works reasonably well when neither you nor your client have a firm grasp of exactly what it is the end product should do. You essentially use your client to help you design the feature set. However, the major downside to this approach is that you never actually design your product but merely evolve it. This leaves holes in the product with some major functionality produced with high quality, but all the other things that could have done to make the product, excellent, left by the wayside or hacked in at a later date. In other words, it works extremely well for your one or two clients, but is inapplicable to the rest of the market at large.

      However, as has been stated already, this process is less then optimal when you're working on something less creative and with less unknowns upfront and/or for a large audience. In that case, what you want to do is to spend your time finding out what, exactly, it is that you need to do, then figuring out how you're going to do it reasonably precisely, THEN figuring out how long it will take you to implement it, then adding extra time for quality improvement.

      The best approach I've seen is to:

      1) put a time limit on each major stage with frequent re-evaluations of the estimates as they come due. If you blow a major date then you need to re-evaluate all your assumptions and get it right the next time.

      2) Implement vertical elements of the software in testable, demoable, re-usable chunks and get them out in front of real testers/users as quickly as possible (as you recommend).

      3) Spend your design energy on interfaces (external, internal and user) and not on specific code level artifacts (object-level UML, for example, is fairly useless, I've found).

      4) Make sure that you spend ALL of a specific task's allocated time working on that task as an effort in quality improvement. We can always refactor and redesign our code until it is as high quality as we can get it after it's working.

      5) Estimate everything (including how long it will take you to estimate) and put a percentage confidence on that estimate (I think it will take me 10 days and I'm about 90% confident in that).

      6) Give yourself very short deadlines (this feature must be ready by tomorrow).

      Hope this helps.

    10. Re:DON'T DO IT! by Chirs · · Score: 1


      I disagree. You need to be able to estimate project times for certain projects. It is simply unreasonable to allocate hundreds of people to something with no clue whatsoever as to when it will be complete.

      Suppose we have clients asking for two different features, each willing to contribute a certain amount of money. We only have staff to handle one new feature. If feature A is going to take 10 times as long as feature B, then from a budgetary standpoint we'd be better off doing feature B.

      Alternately, if you have problem Z with possible solutions A and B, the implementation time for each should feed into the decision between the two solutions.

      You said, "Most reasonable project specifications for non-trivial projects don't provide enough information to accurately predict how long it will take to code. And producing such specs, and using them, will take longer than the development would have taken in the first place."

      This is by no means guaranteed. I work on multi=hundred person projects which take over a year to create, and are maintained and upgraded for multiple years. We have different groups working on different aspects, which means we *need* to document the APIs, their behaviour, overall system design, etc. Once you have that level of detail, then you can (with practice) come up with reasonably accurate estimates. Of course you can't be perfect, so you allow some buffer space. If it looks like you won't be able to meed the estimate, then you rework the estimate and the project manager feeds the new numbers into the plan. Sometimes features get dropped, or slipped to the next release.

      I agree that there are classes of problems where you really can't come up with estimates--if you're working on blue-sky research then it's simply not feasable. But there is a large class of software that is large enough in scale to require estimates, but "normal" enough in nature to allow for a reasonable estimate to be made.

    11. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      Wow, you know absolutely fucking NOTHING about software development. Without being able to estimate time, and could not manage cost, etc. You think your company pays you out of some magical bucket of money?

    12. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      And here is where I would say your ass is fired!

    13. Re:DON'T DO IT! by Anonymous Coward · · Score: 0

      If it has been done before, and that code is available (that someone in Redmond did the same thing last year doesn't help me any way whatsoever, I'll still be reinventing the wheel), I'll give you an estimate. Just let me start the copy, and we'll see the estimate of when it will be done.

      My point is, that if has been done before, there's no reason to do it again, we should just re-use the code. If the code is secret, it won't help us, we'll still have to start from scratch. A programmer should never be doing repetitive work, if he does, there is something seriously wrong with the re-use policy.

  39. change the units by cof · · Score: 1

    A fellow developer taught me an approach that's been especially useful to me. Certainly you get as much detail as possible about what you are expected to do. Certainly you break that down into as detailed a set of tasks as possible. But don't estimate in hours or days, estimate in lines of code (yeah, yeah, lines of code don't mean squat, tough it's all you've got). Do all the estimates in lines of code. When that's done convert to time (say 500 lines per month, maybe you even know you net lines of code per unit time - remember from start to finish - designed, coded, tested, and deployed).

    The biggest advantage of this technique is that you change the way you think about the problem. Instead of thinking "how long should this take", you are force to think "what do I have to do". You can look at blocks features and say ... "they're 10 of them, and they look like about 200 lines each ... 2000 lines".

    The change in point of view is crucial. Need to know your (or your teams) "lines of code": go back to a previous (preferably similar) project and measure it. How many lines of code were there at the end, how long did it take (elapsed time, don't take out the garbage it'll be there next time), and there you have it.

  40. You don't have to kiss it, you can save it by MarkusQ · · Score: 1

    While you might get some grief for refusing to estimate time, it will be far less than you'll get for being wrong. And since, in the long run, that's your only alternative, you are far better off simply refusing to estimate at all.

    Besides, it's pretty easy to push it back on them. Since you clearly can not know how long it will take, or even estimate it with any confidence (again, for a non trivial project) they are in effect asking you to lie to them. So if they insist on an estimate, just insist that they agree (in writing) that you'd be lying to tell them something that you can not, even in principle, know, and that that is Ok with them.

    --MarkusQ

  41. estimate by 'breaking it down' by 1iar_parad0x · · Score: 1

    In order to give a proper estimate, you need to be able to sit down with a piece of paper and break a 'job' down into it's atomic parts. While I'm being very vague about the word atomic, I'm doing it for a reason. It means different things in different contexts. In a year-long project, it may be an entire module, feature, or class. However, if you're breaking down your day's work, an atomic piece might be a particular method. Only when you've created a blueprint of your work and a priority list, can you effectively determine how long something will take. Oh, and multiply that number by 2 or 3.

    Frankly, that's what your managers should be doing. Of course, they figure they can just slop an assignment in front of someone and ask how long it can take. Scotty says it will take a year, and he just can't 'give any more, cap'n'. When managers ask dumb questions, they get dumb answers.

    See, there's really a much deeper political problem here. It looks like you customizing your existing app out the @$$ for your client and your boss is riding your behind to maintain undocumented code. This will deteriorate the code base! I'm guessing refactoring isn't a priority here. There's nothing wrong with doing this, provided you realize your code base will need to be thrown away if this trend continues. This practice has the additional effect of burning out your developers as well. Frankly, when you have little documentation low turnover is crucial. It also looks like there's a lot of bad software engineering going on here too. You're being asked to give estimates because managers can't give estimates. How can you even begin to follow the process I described above if you've got no requirement or design to begin with. My advice to you is guesstimate and CYOB. Also, it sounds like you're having to reword (or atleast clearify) a client's requirements. Once again, this sounds like a project manager's job. Sure, they can come to you for advice, but there's a point to where a manager needs to be taking some inititiative. Lastly, there needs to be some real management going on here. They need to cluster tasks. Often times multiple features are implemented in the same code, having multiple developers over a short period of time working on the same code with overlaping code enhancements is just not good appropriation of time. Of course, this all ties back into the lack of technical/project management from day one.

    Oh, for your own sake, if this is what the whole company is like, look for a better job. Keep your feelers out, because you can't run a SaaS/ASP/software shop like this and make money.

    --
    What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
  42. Management Solution by Xenographic · · Score: 1

    You can always do what management does: you pull numbers out of your ass.

    The only problem is that, unlike them, you may get held to those numbers...

    1. Re:Management Solution by Anonymous Coward · · Score: 0

      I love comments like this, and they show a complete lack of professional maturity and understanding. Management quite often has more experience in the delivery of working products then line developers. Usually they have been responsible for delivering other systems before, or were themselves developers that produced product and moved up through the ranks.

      Management also often has information you may not have, such as availability of other resources that may be brought in to assist if needed, or company deadlines that must be met for reasons you would never consider. It's easy to sit in a cube with a single development task on your plate and no comprehension of all the factors involved and bad mouth those that deal with them daily.

      Any manager that pulls a number out of their ass without something to back up the estimate runs the risk of being seriously wrong, and if that is true and he/she doesn't deliver, he/she isn't likely to be around much longer.

      So quit whining and blasting the people who quite often provide a shield for you so you can get your work done and generally take the bulk of the heat when something is delivered late or buggy. If management is so damn bad, then go out on your own and be an independent consultant who answers to no one but yourself and see just how easy it is to straddle the fence between executive staff and smart assed, know it all programmers.

      Trust me it's a real blast to listen to prima dona developers bitch about how they just don't get the chance to try new things and be creative, and at the same time the company leadership is beating on you as to why they haven't seen a delivery yet from those developers who've been working for months.

      Your job exists so long as the company makes money. The company makes money so long as it has product to sell. And its this management that has the responsibility of taking what others in the company decide they would like as product, and working with pains like you to deliver it. So yes, they may make decisions on dates that you don't like, too bad, leave if you don't like it. Or provide your manager with alternatives such as plans for breaking a project up into iterations that will allow the company to deliver functionality in chunks that you are comfortable with providing in the given time window.

      And if you still disagree, work your butt off as best you can, record all the time you work on the project (don't just list your time card at 40 hours a week like so many salaried developers do) and maybe consider moving into a management role yourself, since you think you know what it really takes to provide estimates.

      Yes I'm a manager, a VP of development at a billion dollar company actually, who started out as a software developer that has built systems from embedded platforms with 16k of RAM/ROM to mainframe COBOL based web services (really). So I know what I'm talking about from both sides. And I can guarantee that my telephone/pager goes off at nights and on weekends a hell of lot more often than it does for any of the 80+ people in the department I oversee.

    2. Re:Management Solution by Ptraci · · Score: 2, Insightful

      In my experience it's been S&M that pulls the numbers out of their asses, trying to make the sale, then management does their best to live up to it, pushing everyone under them for overtime work and scrambling to expedite delivery of materials where they're needed. I'm in the hardware end of things, but I expect things work the same way in software.

    3. Re:Management Solution by AgentSmith · · Score: 1

      Wow! Nice rant buckaroo. Care to back that up with some time honored wisdom towards the actual question? Yeah, I've dealt with prima donnas too, but when others don't lead by example it's hard to see through the hypocracy. That's why the "management numbers out the ass" comment comes in. Try programming something when management gives you the deadline which completely departs from reality. Good luck trying to finish something in 2 weeks that should really take 3 months.

      This deserves a 21 Flamebait mod salute!

    4. Re:Management Solution by computational+super · · Score: 2, Funny
      Management quite often has more experience in the delivery of working products

      Hahahaha! Good one!

      Management also often has information you may not have

      Hoo-haa! You're on a roll!

      he/she isn't likely to be around much longer

      Stop, please, you're killing me!

      --
      Proud neuron in the Slashdot hivemind since 2002.
  43. Partial agreement... by pVoid · · Score: 4, Interesting
    I partially agree with the parent post.

    The last thing you ever want to do when asked by a manager is give a off the cuff answer. It will almost always be wrong.

    So what do I do when I get asked how long something will take? Well, to start off, if I know the code in and out, and I'm aware of the bug, then I can actually estimate what amount of time it will take. If it's not a bug, but something to be developed, and I've done the exact same thing before in my career, I already know the answer.

    If however, neither of these are the case (which is about 98% of the time), I say this: "It'll take me roughly x hours to investigate this matter further and only after that will I be able to give you a timeline that is accurate."

    First off, that gives you way more credibility, and way more leeway. But second, it lets you dive into the situation without having committed your life to fixing it, until you get a better grip on what's going on. If I were for example dealing with a bug on a web app (the kind I regularly work on these days), I would say something like "It'll take me 4 hours to investigate". I will most likely start with about an hour spent understanding the scope and possibly the history of the bug. "Is it reproducible?" is the most important question. If it is intermittent, I will commit to nothing at this point. If I look at the code and can see what is causing the problem, that is, if I can see a clear cause and effect chain that agrees with the test cases etc, I rely on my prior experience and make a guess at how much code needs changing. Plan for it, and plan conservatively. *DON'T* rewrite the application. Only fix the problem.

    If you have time left on your initial x hours, start fixing the problem. See how it goes. Does it look like it's just going to keep on going like this until you fix it, or are you finding your being faced with odd and quirky behaviour left right and center? If you have weird behaviour, beware! If you have undocumented libraries/APIs behaving weirdly, beware! Don't get caught with your pants down. Let your manager know that you are passing some data down to the J2EE/COM/.NET/.Salsa/<NameYourCustomFramework> and that it is not acting as expected.

    For actual development, the process is slightly different. Assess what needs to be done exactly in the same way as above (give an initial x hours to investigate). See what actually needs to be done. *DON'T* rewrite the STL library or .NET framework to do it. Choose the quickest cleanest path with the least amount of development time. Look at all your prior experience: have you previously used STL? Do you know it like the back of your palm? Have you only briefly used COM? And have you had issues with it the times you did use it? Keep that in mind. Try to steer the project in your domain of expertise. Put that as a coefficient in your estimation. If you know you have 100 lines or so of code to write using a library that you know in and out, estimate what you think it will take. If you will have to use a library that you're not really familiar with, pad it like crazy. I mean 2-3-4 times what you expect.

    Those are the practical comments, there's also the more theoretical stuff:

    Don't confuse accuracy and precision. And don't let your managers confuse the two. If I am asked to guestimate a project timeline, saying "4 months, 3 weeks, 2 days, 5 hours, 23 minutes" is more precise but radically less accurate than "4 months". Yeah, it sounds stupid, but accuracy != precision. Don't forget that. Tattoo it on your hand if you must. The longer a duration, the less precise it should be. Commiting to February 5th is ok if you are in January, it is not ok if you are in August. If you are in august, you must commit to a month coming up, and warn your managers to give it leeway. Just cause you said "it'll be done in february", doesn't mean they should plan a launch on February 18th.

    The other thing is a little concept that I really like in comp sci algorithmics: divide and conqu

  44. To thine own self be true by Anonymous Coward · · Score: 1, Insightful
    Here's how to improve your own estimating ability. This is based on experience in many environments. The thing that kills your estimating ability is "negotiated" estimates.

    "To thine own self be true." -- Decide how "tough" the task is in instinctive units. Never reveal these to anyone. This is what you track for yourself. At the end of every project, evaluate how close you were on your "toughness" estimate, and adjust your head accordingly. This has nothing to do with how long it took you to estimate; it has to do with whether the job turned out surprisingly easier or harder. You'll be surprised how quickly you can get good at this estimate.

    Keep a time_multiplier. If you have the luxury of working for a single employer in a stable environment, this will quickly converge. Each workplace will need its own calibration however. Also keep this one to yourself. After every project, see what your "hardness * time_multiplier" predicted (hardness after the adjustment above). If you are low, bump your multiplier; if you are high, drop it. This also can converge quite fast.

    Now the political parts; much mushier. Never state an estimate before you have a confident feel for the "hardness" number; give "estimate estimates", of the form, "I don't know, but if I drop everything now I can give you an estimate in 6 hours (or 4 days or whatever you need)." Estimate estimates are also easy to get good at, but hard to sell politically. You have to stick to your guns here, or you are sunk.

    Once you have your "hardness", and your "time_multiplier", you have what you really think it will takye you to do the job. Now you need to throw in a political_factor. Some bosses will take your estimate and give you 75% of the time (figuring you are padding). Learn to pre-multiply for those.

    Some bosses will understand you are projecting the center of a distribution; be very straight with those (and stay with them even against an offer of 120% of your former pay).

    Some will "negotiate" with you; I once was successful in one of those negotiations when I said, "I thought you wanted my best estimate. If you don't, just make up any number you like; it won't affect how quickly the job gets done." Be very careful to distinguish these people from those who are willing to change the task to fit a schedule. For those people, you may have to hit them with another "estimate estimate," but switching details usually quickly gets to wher you can do some on your feet.

    Summing up. Track "hardness" and avoid connecting it to any "real" idea of time. Keep your instinct of "this should take a day" and learn separately how long it takes you to do what you think of as a day's worth of work. Track "workplace factors" collectively separately; this covers things like how many meetings happen, how often you rebuild your machine, .... Finally, track what you need to do to your true estimate to "sell" it. Selling may be inflating in expectation of an automatic deflate. It may have to do with how your bonuses are calculated. It must include lots of factors about what you tell your boss. Finally, it can also include a cost/benefit analysis ("If I say 78 hours and I come in at 83, we lose our shirts, but if I say 78 and I come in at 72, we don't get the contract"). Sometimes low is too expensive so you pad, sometimes high is too expensive so you shrink.

  45. The Personal Software Process by QuantumG · · Score: 2, Informative

    Go read The Personal Software Process. It's full of helpful, common sense suggestions that every programmer should know. Then go read The Team Software Process, which is a simple forward thinking way of getting programmers to work well together in teams. Then get really really depressed because no matter how hard you try at stuff like this, the software industry is so random and unpredictable that common sense is not all that common.

    --
    How we know is more important than what we know.
  46. Dependent variables... by meburke · · Score: 2, Insightful

    It is nearly impossible to predict the actual delivery time for a programming project because there are too many dependent variables. (For a good pciture of the problems caused by independent variables, read Gordratt's books, "The Goal", "It's Not Luck" and "Critical Chain". "Critical Chain" leads you to the best insights for your position, but the other books are essential prep.)
    http://www.goldratt.com/

    There are two keys to delivering almost always on time; Planning and Management.

    Planning means thinking the project through in the best detail before you start coding. Agile programming seems to work in short, quick-and-dirty projects, but my experience is that it falls short if the project is large and complex. The less decisons you have to make in the middle of the project, and the less changes you have to make as a result, means that the work can me seen to progress along the planned path.

    Management means controlling the variables, and that's where the techniques in "Critical Chain" shine. Nothing, absolutely nothing, is allowed to delay the critical chain in the plan. The biggest dividends come from two parctices: Continuity and Resource management.

    It used to be that if I had a week to do a job that I knew I could do in a day or two, I'd do whatever else needed doing and start two days before the task was due. Of course, If something came up, (essential co-worker gets sick, computer crash, virus, software needs updates, whatever) then I might be delayed during that two days and the task is delivered late. If the task was on the critical path, then the whole project becomes late. The first 10% delay on a project typically costs 25% of the profitability, the next 10% late costs 20%, so being only 20% late can cost 45% of the profitability. People tend to think that if they have some slack, they can relax. Then they wonder why they are late. They should work as if there was no slack! Relax at the END, not during.

    In a large project with multiple developers, some of them may be required to cordinate along different paths, not just the critical path. This is why Godratta called it the "Critical CHain". Those resources MUST be focussed on keeping the essential workflow from bogging down anywhere that may delay the longest chain of dependencies.

    This idea came out years ago, and I've been following project management ever since the 60's. This is the first big change I've seen since 1969. Everyone who told me they tried the Critical Chain method and it didn't work, didn't follow the process. Siemens practically took the whole market for 7200 rpm hard drives by developing them first using the Critical Chain method.

    Good luck on your projects.

    --
    "The mind works quicker than you think!"
  47. It's called Hofstadter's law! by Anonymous Coward · · Score: 2, Informative
    1. Re:It's called Hofstadter's law! by sakusha · · Score: 1

      Good catch. I guess I can't be faulted for forgetting an attribution to something I read like 25+ years ago. Still, it seems nobody gets the recursive joke.

    2. Re:It's called Hofstadter's law! by iworm · · Score: 1

      You can say that again.

  48. Perceiving time by hackwrench · · Score: 1

    I spent two horrible years in Ohio. I moved there just after one Christmas, I seem to remember a Chistmas in between, and then I moved just after another Christmas.

  49. Rough Estimation Guide by droyad · · Score: 1

    * Break all down the requirements into the smallest steps you can
    * Take a look at the steps and write down your gut feel on how long it will take on a system that you wrote and know well^
    * Double it
    * Double it again if you are not familiar with the system
    * Add 50% if it is in a language you are not familiar with
    * Add 50% if the code is Convoluted, Uncommented or generally WTF
    * Add 5 hours for compiling/deployment/support

    This is certainly worst case estimates, so tell your customer that, but better to come in cheaper than overrun.

    ^ You will always underestimate this step, just human nature

  50. easy by monkey23 · · Score: 1

    ask the interested party how long they think it will take. - add 20% rinse and repeat

  51. If you were to ask me to design a browser by hackwrench · · Score: 1

    Right now, I would tell you I still need to either write or learn preexisting libraries suitable for undertaking such a task.

    1. Re:If you were to ask me to design a browser by AuMatar · · Score: 1

      Researching existing libraries (to see if you can skip a big chunk of code) is part of designing. AT that point, you don't want to become an expert in the library, you want to see enough to tell if it ought to do what you need, and add in some time to learn the library. THen remember that as a possible risk (library isn't up to snuff) when you move forward.

      For a very long project, you may want to defer that decision, but add a day or two to evaluate libraries, and note that if you can't find any good enough, you'll need to code it yourself and add that to the schedule. Schedules that long term need to have flex.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    2. Re:If you were to ask me to design a browser by hackwrench · · Score: 1

      Except that I never have any clue how long it would take to see enough to tell if it ought to do what I need. Therefore, I take projects in very small increments. There is no such thing as "very long projects" for me, because such a thing is indistinguishable from eternity for me. It's frustrating dealing with people with expectations dependent on that sort of predictability.

  52. Writing in general by hackwrench · · Score: 1

    When I go about writing in general, I see what others have written on a topic, and then I see what elements I like and then go about to putting it all in my own organization and turn of phrase.

  53. This is what I do... by voxel · · Score: 2, Informative

    When I can't reach a 80% to 90% confidence level that I can give an accurate estimate I do something different.

    I don't give an estimate how long it will take to develop said feature. Instead, I give an estimate as to how long it will take for me the give the accurate estimate.

    So, for example, I will say, I need 3 days to write some test-code, do some reverse engineering, and try to get part of the feature in, and in that time I am 90% confident that I will be able to give an accurate estimate then how long it will take to fully develop the said feature.

    It has always worked very well for me to upper-management, as long as you then come in with a good educated answer how long it will take you after your first estimate.

    It's better than giving a blind non-educated answer the first time around.

    --
    Modesty is one of life's greatest attributes
  54. There never should be a "similar task" by dpbsmith · · Score: 2, Insightful

    The reason why trying to estimate times is a useless exercise is that you can only get a reasonable exercise if you can break the problem down into tasks that resemble similar tasks that have been done before.

    But... ever since the days in the 1950s when the subroutine was first invented, there never should be such a thing as a "similar task." Anything that was done before should have been packaged as a subroutine. Or a reusable object. Or a programming system (entire library or language) designed to attack that class of task.

    Managers that prize predictability over productivity assign their people to do trivial variations of the same work over and over again and get a predictable straight-line curve of time versus work accomplished.

    Good managers allow their people to invest time into tools and techniques are new, hence risky, but pay off with a multiplier effect when they work. They get an unpredictable but exponential progress curve.

    (Bad managers, of course, won't accept the notion that a new task should be estimated at the time that a similar task did in the past. They insist that the task should be estimated as if everything were going to go perfectly this time, no missteps, no problems. ("It will take about a year." "Why do you say that?" "Because, remember, the last time we developed the frammis for the foithboinder project, it took a year" "Yes, but a lot of things went wrong. We had several false starts, because the original spec we were given was wrong. And Jim left halfway through the project and it took a while for Kathy up to speed. And we lost a month when we changed over to the new source code control system." "And why do you think nothing will go wrong this time?")

    1. Re:There never should be a "similar task" by TheLink · · Score: 1

      Question #1 "Given a description of a project and its initial business requirements determine whether the project when started, ever halts (completes). The alternative is that it runs forever without halting."

      Question #2 For a project that has been determined in advance to halt, determine also how long it will run before halting without actually starting it.

      Question #3? Ah for this "bonus" question you're supposed to provide the estimate first before you see the question. Otherwise no bonus for you... ;)

      That said while I agree with you that "cp -a" et all should take care of "similar tasks", in the real world, some stuff can be estimated. While there are no non-lossy compression algorithms that can compress everything, there are compression algorithms that can compress most programs in use in the real world.

      And most people seem to be reinventing the wheel everyday (and getting patents for them too - sheesh).

      --
  55. second most difficult question ever by namekuseijin · · Score: 2, Funny

    first one, of course, is: "How can i make a woman tick?"

    i just don't devote any more time to these 2 questions anymore...

    --
    I don't feel like it...
  56. Double the Guestimate and UP the Unit by Anonymous Coward · · Score: 0

    My technique is to take my first guess on the actual coding effort involved, double the number and up the unit. So, for example, 5 minutes will probably take 2 hours; 1 hour will probably take 2 days, and 1 day will probably take 2 weeks. When all meetings, documentation, testing and other non-coding activities are taken into account, this method is usually very accurate.

  57. Best of the Best Estimates by Anonymous Coward · · Score: 0

    I can't tell you the method directly, but I can give you a hint: It involves a full set of Yahtzee dice, a Scrabble board with tiles, and a really cute blonde with dimples.

    Would you like an estimate of the cost of the estimator?

  58. Estimating database applications by crsm · · Score: 1

    I have a rule of thumb for database applications that seems to work: Count the number of tables involved and multiply with 3 is it is within a known problem domain, and multiply with 5 if it is not. The the reason behind this, is that each table require a definition (1 day), an input form (1 day), a report form (1 day), testing (1 day), documentation (1 day). Definition and documentation can more or less be left out if you're in a known problem domain.

    Then, if you wan't to give the estimate in calender time, you should add another 25%. One day a week is typically being spend on other things like meetings etc.

  59. Quantify the uncertainty by DougWebb · · Score: 1

    When asked how long a project will take, I've told Project Managers "I'll tell you after I'm done, because that'll be the first moment when I can give you a precise response." They don't like to hear that, of course, because it doesn't help them do their job (scheduling and tracking the project.)

    It's true though; as long as there is still work to be done, there is uncertainty in how much effort is needed to complete the work. There may be a lot of uncertainty or just a little, but there is always some, until the work is completed.

    As Software Engineers, we need to accept and embrace the fact that this uncertainty exists, account for it, and help our Project Managers to account for it too. Afterall, they need to estimate risks to the project, and getting a quantifiable handle on uncertainty will help them to do that.

    My approach to estimating:

    • First, always estimate in terms of 'effort', not 'time'. Time is for schedules, which take into account weekends, holidays, sick days, meetings, dependencies on other people, and work on other projects. When estimating a task, only consider how much effort that particular task will require, as if absolutely nothing else was going on in your life.
    • Second, only use whole numbers from one to six, and specify the units: effort-quarter-hours, effort-hours, effort-days, effort-weeks, effort-months, effort-quarters, effort-years. This ensures that longer-term estimates are expressed in less-precise units. You need to do that because of the inherent uncertainty in longer-term estimates.
    • Always provide your estimate as a range. My manager called this a surprise range: you'd be surprised if you got it done with less effort than X, and you'd be surprised if it took more effort than Y. Be as honest as you can about this; it does no one any good if you add a 'fudge factor', or are trying to reduce your estimate in order to please someone.

    Typically, I'll provide my initial estimate as a single task, with a wide range between the min and max. If the Project Manager needs a more detailed estimate, I'll ask for some analysis time, and I'll spend that time breaking the large task into smaller tasks, providing estimates for each. Since these tasks are smaller, they'll typically have narrower ranges than my original estimate, even when I add up all of the mins and all of the maxes to get the overall estimate. This task breakdown is iterative, reducing tasks down to the point where the Project Manager is happy with the units (typically effort-weeks or less) or when the analysis shifts from being primarily estimating to primarily design. Also, as I'm breaking the tasks down, I'm also providing information about task dependencies. This allows the Project Manager to put this information into a Gannt chart / Work Breakdown Structure, which helps the PM to track the project and communicate estimates to upper management.

    To reiterate, you determine the overall estimate, you add up the minimum estimate for each task, add up the maximum estimate for each task, and use those as the overall estimate for the overall task. It's ok to use larger numbers with small units when you do this, because you're working with more precise estimates than when you estimated the initial overall task.

    To turn this estimate into a schedule, the Project Manager has to account for a variety of factors: the starting date, the weekend/holiday/vacation schedule, and the percentage of your time that will be spent actively working on the project. For me, the last factor is 60% / #concurrent projects, assuming equal priorities. That is to say that I spend 40% of my workday on non-project activities: answering email, attending meetings, doing HR-related stuff, and doing maintainence work for software I'm still responsible for. The 60% of my time is divided amongst the projects I'm currently working on, proportionally to their priorities.

    One nice aspect of this approach is that, as tasks are completed, their estimate

  60. Usually your boss doesn't can't anyway... by eyal0 · · Score: 1

    Generally, I've found that my boss will first tell me when he wants it done or needs it done, and then ask me how long it will take. So it boils down to a yes/no question, to which "yes" is the correct answer, for him.

  61. When asked.. by BlindRobin · · Score: 1

    How lomg will it take to do this ? The answer is always this question: How long does it take to catch a fish ?

  62. Start Here by Poeir · · Score: 1

    I've read two really good items on the subject of estimating software schedules. The first is Painless Software Schedules by Joel Spolsky, the Joel in Joel on Software. It's a quick read, and a lot of the comments here are giving the same advice all spread out. Even more useful is Waltzing With Bears by Tom DeMarco (ISBN 0932633609) (very talented author, I strongly recommend Peopleware to everyone), which is about managing risk on software projects, especially as it relates to time. This is one of the fundamental errors in the question "How long will it take?"--the inquirer wants an exact amount of time, so if you say it will take four hours, it should take exactly four hours. The problem is, you may luck out--someone may have had that feature in the program once already, and it was removed, so all you need to do is call some fully-tested code from a different place, or there may be high coupling, so that what looks like a really simple, straightforward change is insanely hard. Those two factors put together means giving an estimate should be something like "No more than forty hours, 75% probability of finishing within twenty-four hours, 50% chance of finishing within six hours, 25% of finishing within four hours, no quicker than an hour." As part of Waltzing With Bears, Tom DeMarco (and I assume others) put together a Riskology spreadsheet, intended to allow you to estimate schedule probability curves, which allows combining multiple probability curves to get an estimate more like "No faster than eight months, 75% within six and a half months, 50% within five months, 25% within ten weeks, no faster than four weeks." And always make sure the first number people hear is the worst case scenario--that's the one they're going to remember.

    Other reading:
    Coding Horror, How Long Would It Take If EVERYTHING Went Wrong?
    Software Estimation: Demystifying the Black Art by Steve McConnell
    Google on Estimating Software Projects

    --
    Sigs are like bumper stickers.
  63. Invention estimation is impossible. Seriously! by strangedays · · Score: 1
    Sharing a few of my personal rules for Software Development Projections and Estimates
    1. Information has no valid size or complexity metric, not even in principle, it simply doesn't exist. This means that deriving the basis of projections by counting any artifact or thing to do with the software itself, is truly and fundamentally meaningless.
    2. Software development is the invention and then creation and deployment of new methods to control behavior of an agent (usually computer hardware). "new methods" requires that the problem, solution and invention be undefined at the start of the effort. This has an inherent and unavoidable eureka factor, in that raw human intelligence must be applied to discover a new insight that permits the solution.

    Note: This excludes from the definition of "software development" vast areas of useful and productive work, that may in fact be estimable. Configuration of an existing method, via a user agent, is not software development. Example: IMHO, developing a spreadsheet does not require the eureka factor.

    (Process Red Herring) Superficial simlarities between projects, such as personnel or architecture, are irrelevant as they are orthogonal to premises (1) and (2).

    (Process Red Herring) True repeatability, doesn't happen, by definition as (2) requires the method be "new". Performance on past projects provides no indication of future performance.

    (Process Red Herring) As we are not dealing with physical effort, adding more physical resources (personnel, machines, etc) does not make the effort more predictable, or committment, more reasonable.

    Political correctness be damned comment:

    Yes, there really are stupid questions, and disengeneous people. Grant me that the world contains many inquisitive idiots. Further grant me that un-ethical management will use threats to deliberately force a developer into stating a date, they want someone to blame for their risky promises.

    (Inquisitive Idiot questions that I have personally enjoyed)

    I can't tell you anything about the foo project, but I need to know if it will be done by the First of (insert bogus date here) ?"

    "This is just like the snafu project, except we'll do it right this time! so it can be done by (insert bogus date here), right?"

    "I promised the customer that we would have it on (insert bogus date here), as otherwise they wouldn't sign the deal. But we need it sooner, by (insert bogus date here), when will it be released?"

    "This is a simple little change on the screen, to give them the weather forecast next month. Deliver it next tuesday, ok?"

    Typical challenge to refusal to give a bogus estimate:

    "We can't miss the deadline! what should we do! ?" Candidate Answer: Start earlier next time.

    "Ok, tell me how to speed the project up ? What do you need?" Candidate Answer: Enough time to invent and deploy a solution. So minimize interruptions.

    My conclusions:

    • Never (I mean that NEVER!) give any estimate for any true software invention work.
    • Never ask a developer to give an estimate for development work.
    • Understanding the difference between invention and configuration, is a project managers responsibility. Failure to do so, is evidence of management incompetence or worse ethical issues.
    • Determining the risks of setting a public schedule, is a senior management responsibility.
    • Communicating a project schedule, however it was derived, is a project managers responsibility.

    Unfortunately, the noun phrase "software development process" is both mal-formed and dangerous. It causes many people to infer and believe that there is a process in play, that they can influence. There really isn't, its just clever people inventing new things.

    The fact that a business needs a schedule, "that development is committed to", is a business problem, not a software invention problem. The effects of that problem include: lost deals, invalid expectations, invali

    --
    There is no god; get over it already! Never exchange a walk on part in the war, for a lead role in a cage.
  64. See Joel On Software by ivec · · Score: 1

    Joel Spolsky had described a simple approach on his website:
        http://www.joelonsoftware.com/articles/fog00000002 45.html
    Absolutely worth a read (like most of Joel's writings).

  65. IT's not documentation that you are missing... by clambake · · Score: 4, Interesting

    I once worked for an "XP" (extreme programming, not windows) shop. We had not a single line of documentation in our entire codebase. What we did have, however, was 100% test coverage (at the unit tests level, the functional test levele, and even at the customer-test level). We could estimate, as a team, the length of time it would take to implement every feature in a major product change up to six months out, and hit them all on the exact day we had said we would.

    It could have been the whole XP process or whatever, but personally I believe it was the testing that allowed us to estimate so well. When something is so well tested, and when you are working from a "test-first" mentality, you get the ability to estimate what you think it will be without having to fudge-factor the results. You do this for a while and you find that your gut instinct gets better and better.

  66. List assumptions/risks, provide low/high estimates by ivec · · Score: 2, Informative

    As developers, we always have a tendency to think in terms of best case scenario. And once you voice that best case once, it gets very difficult to get out of a crazy commitment.

    So *before* providing any numbers, make sure to list the assumptions that you are making, and the interferences and risks that may (and most likely will) occur:
      - other projects and assignments that will steal time and resources
      - spec changes and debugging time, customer interaction
    Explain that you have an estimate in Effort-Days or Effort-Hours dedicated to the project, but that this is not the same as a Calendar-Day. With week-ends, holidays, admin tasks, etc, count 200-240 effort-days per year.

    Explain that uncertainty remains on a number of tasks. You want to give your best-case estimate, but there are things that you don't know, but in practice best case NEVER happens. Provide a more likely estimate taking the risks into account.

    Highlight the key risks and challenges being faced. Discuss ways in which those risks could be mitigated: does it make sense to create a first prototype (to check technical feasibility and/or get end-user feedback) ?
    Or can hiring a consultant (that you would select) to help you with a specific technology (e.g. set-up that database back-end) help speed things up/reduce risk? (sometimes few hours here and there for a couple of days total is enough). Keep in mind that "throwing more resources" at the task often only worsen's a project's delay (training and communication overhead, etc).

    Does not having a quiet and uninterrupted work environment interfere with your productivity? Point this out, make concrete suggestions for improvements.

    MBA or not, your manager hopes to just get a number from you, and then bind you to it. Don't let this happen, but don't be confrontational either: you need to establish a teamwork.
    It is not about you escaping any pressure from a commitment. But many interferences are out of your control, and Manager might be able to help keep those away.

    It is in your mutual interest to have estimates that work. And this is also why you need to keep track of your progress, and notice deviations early on. Be dedicated, and act responsibly. Warn Manager of any delays and problems that occur, so you can rectify the estimated schedule (or the environment) together.

    Hope this helps -Ivan

  67. Painless software schedules by pietschy · · Score: 2, Informative

    I wrote a tool called Mr Schedule that's based on the Painless Software Schedules technique described Joel Spolsky. I've found the technique works very well.

    Cheers
    Andrew

    1. Re:Painless software schedules by Anonymous Coward · · Score: 0

      Cool. How long did you estimate that it would take you to write Mr. Schedule,
      and how did it take you to actually write it?

  68. Weigted Average by KermodeBear · · Score: 1

    This seems to work alright for me:
    A = Shortest Possible Time (Ideal Time)
    B = Realistic Time
    C = Longest Possible Time

    (A+2B+C)/4

    Then double it so you can spend the extra time reading /..

    --
    Love sees no species.
  69. lots of factors are involved by josepha48 · · Score: 2, Informative
    This really depends on lots of things, like, are you familiar with the programming language. Is the existing code something that can find your way around. How well do YOU 'read code'. Yes, 'read code'. I can usually read code like I read a book and get an understanding from it, but only if I am familiar with the language. It also helps if you are familiar with the business logic that you are dealing with, if there is any. Also are you creating new code or working with existing code.

    Creating new code is usually easier to estimate, because once you understand the business rules, you should be able to code it and estimate your time.

    Bug fixes, on ANY code ( don't care who wrote it ) can be trickey. It can often be a situation that if you fix one thing your break something else.

    There is no real set formula I use, but if I think it will take 3 weeks, I'll say 6. I always double my estimate, and often 'fish' for scope.

    Lastly there is nothing wrong with saying 'I'll have to look into that to give you a more accurate estimate. You should be able to take a day or two to get into the code and look at it and figure out enough about it to get an estimate of what is involved. We do this and we call them ballparks. Our ballparks tell how much time the developer needs + qa + spec + IT time + some other things in there. It is usually an estimate.

    Then we write a spec, and in the spec we uncover more. Depending on the outcome of the spec and what needs to be added or dropped the bid can change. Also in the spec we identify ALL the programs that need to be changed. These are things that should have been looked at in the ballpark to give you a better idea of what to extimate.

    It sounds to me like you are a junior programmer. This has nothing to do with your coding skills and everything to do with your project skills. There are many people who can code circles around me, but they can't always give estimates that are as right on as me. As such, take a look at your code. This should be done in a day no longer. Figure out how much time you think you need to spend on it. Multiply by 3.

    After you do this a few times you can start to see how good you are at estimating time. If you estimate time and you are behind on the project, then next time multiply by 4. If you end up ahead of schedule multiply by 2. After a few projects you will be able to say without a doubt exactly how long it will take. Unfortunately some projects will be a range not an exact date, like it will take 6 to 12 months, depending on scope changes.

    really though it takes practice to estimate time. Knowing your own skill level, your knowledge of the language and code base, and what other things will always popup, and lastly your interpution level.

    I'm sadly the goto guy at my company, so my interruption level is high.

    --

    Only 'flamers' flame!
    Does slashdot hate my posts?

  70. Read: I can't get an estimate out of my hacker by BSAtHome · · Score: 0
    You should read "So You've Hired A Hacker" point 5.2 and insist. Basically, you cannot estimate unknown factors. Therefore, don't estimate. They will wait for a result if it is important.

    --
    Greetings

  71. Mod parent up... by mlibby · · Score: 1

    ... even if it is from an AC.

  72. How can a Developer Estimate Times? by Anonymous Coward · · Score: 0

    Two options:
    a) Well
    b) Poorly

  73. Explanation 2 by hackwrench · · Score: 1

    The other post isn't strictly true. Part of the problem is that trying to figure out what's going on with me is confusing. The other thing is that with me things don't seem to obey the time scales other people experience.

  74. How does one evaluate libraries at a glance? by hackwrench · · Score: 1

    What do you look for and what do you ignore to stay on task? A lot of the time the library is a lot to wade through, and then doesn't have relevant examples or somethingh something. Then there is the matter of coming across the library before you can even determine it's appropriateness. It's easier to learn a library or part of a library first, then figure out what the knowledge of the library enables you to do, but that's not possible, with being assigned a project first and then going about to figure out how to do it.

    I generally look at projects already in existence and then modify them, to get a feel for things.

    1. Re:How does one evaluate libraries at a glance? by AuMatar · · Score: 1

      You're approaching it backwards. You find out what you need to have done, then you look for a library that can do it.

      As for how to do that- read the documentation. Read the function signatures and its interface. Assuming it works as promised, that tells you wether it fits your needs or not.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    2. Re:How does one evaluate libraries at a glance? by Bill+Dog · · Score: 1

      Is this some Java-centric approach to software, where if there's not already a library for it, it's simply declared not worth doing? Seriously, I hope you're having a good time working on all those software projects that are so similar to what you've done many times before that there's this simple recipe for estimating. I seem to get things that I've never done before, and don't know how to do yet, or even how long it will take me to learn how to do, when I'm asked for estimates.

      --
      Attention zealots and haters: 00100 00100
  75. Say what? by MarkusQ · · Score: 1
    To say "You have your team focus on addressing the highest priority open issues at each moment" is to focus on baseline enhancements to the exclusion of strategic application development.

    How in the heck do you conclude that? Or, to put a finer point on it, what does it actually mean? Other than just artificially defining the terms ("highest priority open issues," "baseline enhancements" and "strategic application development") to support your conclusion, can you actually give a cogent defense of this claim? Or is it just buzzword stew?

    Now, I thought the OP had a question of project estimation theory.

    Yes, and the answer is (or should be) well known: in general, there is no way to determine the time it will take to complete a software project that takes less time than actually doing the work and seeing how long it took. If you want the theoretical underpinnings, just note that software development is a subset of the halting problem. Given that, we need to go up a level, and ask if there is anything the will meet his needs in a different way. I claim there is, and have outlined the process.

    --MarkusQ

    1. Re:Say what? by SavvyPlayer · · Score: 1
      How in the heck do you conclude that?
      "Addressing....open issues at each moment" implies a baseline issue tracking mechanism in which end-user feedback is logged, collated, prioritized, and assigned. Am I being unreasonable?

      Or, to put a finer point on it, what does it actually mean? Other than just artificially defining the terms ("highest priority open issues," "baseline enhancements" and "strategic application development") to support your conclusion.... is it just buzzword stew?
      I merely expressed my position as concisely as possible, using unambiguous terminology. I'll rephrase my earlier response:

      To say "You have your team focus on addressing the highest priority open issues at each moment" is to focus on a set of individual modifications to an existing system with no consideration given to large-scale modification of that system, or the development of an entirely new system in support of the long-term growth of the organization.

      Can you actually give a cogent defense of this claim?
      Glad you asked. In the spirit of intelligent discourse I chose to politely ignore the blatantly disingenuous comparison you made between market forecasting and project estimation -- a comparison upon which you appear to have based your entire argument. After reading _that_, I'm still not convinced this isn't just a sophisticated troll.

      My original claim was stated thus: "Any cohesive strategy requires coordination at the organizational level (of which IT represents only one of several components) -- coordnation that simply cannot be achieved without detailed planning."

      This concept is virtually dogma, representing a cornerstone of decades of project management theory. I merely stated it in an effort to remind our readers that real businesses rightly consult professional staff when preparing project plans. Plans that are not only useful in measuring the effectiveness of a project team, but which may in fact also be required by law.

      Yes, and the answer is (or should be) well known: in general, there is no way to determine the time it will take to complete a software project that takes less time than actually doing the work and seeing how long it took.
      Agreed -- assuming of course the problem this project solves has in fact never been solved. The vast majority of problems being solved at any given time in IT however, have been solved a hundred times over in other contexts, by other teams. It is the familiarity of these problems and their solution patterns that distinguish experienced software engineers from those, well, new to the field.

      If you want the theoretical underpinnings, just note that software development is a subset of the halting problem.
      Algorithm development != Software development. Algorithms solve very specifc problems, to exactitude. The problems businesses ask software engineers to solve are more general in nature. General problems resembling general patterns upon which general solutions may be based. The differences between algorithm and application development are so vast one could argue the two are completely unrelated.
    2. Re:Say what? by MarkusQ · · Score: 1

      Glad you asked. In the spirit of intelligent discourse I chose to politely ignore the blatantly disingenuous comparison you made between market forecasting and project estimation -- a comparison upon which you appear to have based your entire argument. After reading _that_, I'm still not convinced this isn't just a sophisticated troll.

      Than I shall return the favour. For what it's worth, I've been a professional software developer for just under thirty years. I've done solo work, been a member of teams, managed teams, and (the hardest) managed people who managed teams. I've worked as a contractor and employee for small businesses and major international corporations. I know whereof I speak.

      I started to respond to your points one by one (and will, if you wish) but in reading through them again I realize that we only differ on one key point. I believe that you think I am claiming a gap in our ability to predict the time it will take to develop new algorithms, and that this is the basis for my assertion that predicting software development times is impossible. Based on this assumption, you argue correctly that most software development does not involve designing new algorithms.

      But that is not the point I am making.

      Suppose we divide all software development projects up into three rough piles.

      • Trivial projects, where no estimate is needed (or asked for) because everything involved is so well understood and simple that there is nothing to estimate.
      • Cutting edge projects, which involve the development of new technology, and which we both agree would be foolish to try to estimate.
      • The rest, which I was calling "non-trivial projects".

      I'm assuming that we are both talking about the third sort, in that I excluded the first and you excluded the second, and we both seem to agree that this is where the bulk of real-world software development falls.

      In an idealized world, software development of this kind would involve programmers skilled in their art using well understood, throughly and accurately documented hardware and software to meet well understood, clearly and correctly specified needs under constraints that are understood in advance by all parties. Further, once the project started, nothing would change. No one would leave or join the project, no new version of hardware or software would be introduced, new needs would not arise, constraints would not change, etc. In such a world, I will grant, it might be meaningful to talk about sending the developers off like a ballistic missile aimed at a fixed target, and expect the project to arrive on a date planned months or even years in advance without course correction.

      I'm just guessing though, because I've never lived in that world.

      In this world, all of the conditions listed above are violated beyond recognition. Software development is more like flying paper airplanes than shooting missiles. To deal with the fact, any rational plan has to include a mechanism for course corrections, and most do. But the mechanisms used are generally flawed, in that they are based on the notion that software development is mostly like a ballistic missile and that all that is needed is a little patch on the model to get past the rare gust of wind powerful enough to correct it. They focus too much on late game adjustments, and as a result, by the time anyone realizes the project is in trouble, it is too late to fix.

      One possibility would be to give the developers complete information up front, and prohibit changes (even "minor" changes that "shouldn't affect anything"). Another would be to educate management, to the extent that they would be able to accurately estimate the consequences of changes in real time and adjust accordingly. I've seen both of these tried, and, while they are better than nothing, they don't work very well and they impose a significant overhead in terms of information flow.

      So what does work?

      The o

  76. Can't answer in a single post by stonecypher · · Score: 1

    Estimation is complex and difficult. All four of the major methods today involve keeping significant statistical data on past performance and using it to mathematically generate estimates. This is remarkably accurate - using the PSP and TSP, I've managed to whittle my estimates down to +- 20%. The inventor of the process made a video about eight years ago describing it; in lots of ways it's kind of quaint, since it talks about how big the internet is going to be (for example,) but it also gives a lot of surprising hard data. Since the training courses are several thousand dollars per person and require the whole team, you might want to start by reading the books (Intro to PSP and Intro to TSP) to make sure it's something you like and which is appropriate to your business model.

    PSP and TSP are appropriate for up front engineered projects - application sequels, industrial software, military software (it's originally a DoD system,) et cetera. If you're writing business software or games, PSP and TSP aren't for you - they don't allow for the kind of rapid change that characterizes those designs. They can be bent into it, but there are better tools. Extreme Programming (start with Explained then read installed) are built for rapid-change environments, and were built on the Chrysler C4 project. They're industrial-ready, but they spend a lot of time on post-organization. You want that if your project is changing a lot, like an application you're building for a client who isn't sure what they want. You don't want that when you know exactly what you're building, like a realtime control system which has to respond to an exact list of inputs.

    When you're somewhere inbetween those two poles - say, the new version of an office suite, or a game sequel, where you know most of the features and most of the format, but have to add some small and jazzy new stuff to get an upgrade, you might want to work with a thrash control process. The idea with thrash control processes is to start with a really wide (25-400%) range, and progressively whittle that down as the project takes shape. This is a very good process for when you have a fairly good idea what you're going to do, but when there's still a significant amount of mystery. For that you want the Microsoft axis, largely characterized by McConnell's Software Project Survival Guide and Sullivan's UPOT. Thrash control processes have a very nasty tendency to suffer detrimental early optimism, and they're already in a dangerous place for second system syndrome since they're mostly for reasonably well defined projects, so you'd do well to get some cold blanket advice from The Mythical Man-Month if you go this route.

    And then, there's the hard-nosed engineer camp. They tend to use things like formal estimation based on code points and function points, systemal analysis and big models like COCOMO. This kind of thing is appropriate for large projects. You can get a clearer understanding of formal estimating practices, instead of just that one practice, from Software Estimation: Demystifying the Black Art.

    That should get you started. There are a lot of real approaches to this sort of thing which aren't "zomg double your estimate" or "totally refuse." This is something business needs, and it needs to be done right. There are programmers and there are software engineers. Regardless of what your co

    --
    StoneCypher is Full of BS
  77. Requirements are the key by Dar7yl · · Score: 1

    I used to believe that design was the most important thing about software development, but as I've grown older (and greyer), I've come to the realization that good requirements are critical.

    I've even gotten to the point where I've developed my own requirements tracking system (MRAP - not a very imaginative acronym:).

    When a client asks me to implement a new feature, I ask a few pointed questions to narrow down exactly what he wants. I have a template of over 100 topics in a dozen categories to draw upon. If he can't clarify his expectations, then chances are what he wants is unimplementable.

    I record all the requirements in a database, organized hierarchically. I can keep all sorts of info such as create dates, authors, update history, authorities, design elements, unit tests, etc. attached to each requirement.

    The client signs off on each requirement before development proceeds. (I don't tell him that I've already completed most of the design process by that time.:) On the rare occasions that there is a dispute, I can point directly at the requirement and convince him that it was under-specified, or mis-interpreted. Usually, by that time, he is educated enough that his expectations are in-line with reality.

    It's hard to get the client to buy-into the requirements process. He wants development to start immediately, and is chomping at the bit to get something tangible right off the bat. I usually whip up a proof-of-concept prototype to keep him occupied (distracted?) with the proviso that this IS NOT THE FINAL PRODUCT! and will be thrown away in a week. When development starts, the client is often amazed at the rate of progress.

    The requirements database is dynamic, always being updated as new information becomes available. It is the source/sink for project feedback. Every little detail gets recorded - emails, test results, bugs. It gets reviewed constantly. Completed items get checked off (and hidden if desired)

    Now, to get back to estimation. As the requirements get more detailed, the uncertanties get whittled away, and it becomes easier to estimate - if only based on past experience. Each pass through the requirements allows you and the client to set priorities and define more precise schedules. Those areas that are not fully defined yet can be respecified, bulk-estimated, deferred or deprecated.

    A very important part of the requirements is the project completion section. The project is complete when all the items have been marked completed, the deliverables have been delivered and the money is in the bank.

    If the client doesn't seem happy at this point, it is time to reopen negotiations - perhaps to start a whole new project, or to abandon the whole idea, take your marbles, and leave the playing field.

    regards,
    Dar7yl

  78. slashdot discussion: mathematically impossible by mobygeek · · Score: 1
    This has been discussed previously on slashdot.

    Especially, there was an article showing that objective estimation of development times is mathematically impossible:

    http://cellar.org/archive/index.php/t-638.html

  79. The obvious answer by treak007 · · Score: 1

    This question comes up in any job. The only advice I can give you is a quote for a tv show:

    GEORDI:I told him I'd have that analysis done in an hour.

    SCOTTY:And how long will it really take you?

    GEORDI: An hour.

    SCOTTY:Ye didna tell him how long it was really going to take you?

    GEORDI: Of course I did.

    SCOTTY: Oh... Laddie. You've got a lotto learn if you want them to think of you as a miracle worker.You've got to --

    sorry, had to.

    --
    Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
  80. Common Sense Test by Cataclysmus · · Score: 1
    1. Estimate how how long you think it will take based on your recollection of similar projects/tasks. Double that number. Let's say you come up with 200 hours.
    2. Say this out loud to yourself: "I think I can complete this project in 200 hours given my current workload and taking into account: the quality of the specs provided, time I spend in meetings, time I spend answering e-mails and phone calls, time I spend getting my mind focused again after said meetings, e-mails, & calls, time researching/learning new things as I go, and level of red-tape in my organization."
    3. If you laugh at the very sound of that statement, double the original estimate.
    4. Repeat steps 2 & 3 until you can say it without laughing.
    --
    Shane
  81. Big or small changes? by Michael+Snoswell · · Score: 3, Informative

    For small changes you can generally guesstimate from exerience with that system. If you know the code well there's a better chance of being accurate. If you have to wade through someone else's code you don't know then be very generous (generally double your guess).

    With all but the most trivial changes you need something in writing to confirm what is wanted - even just an email to restate what you talked about and put your estimate in writing. Get in the habit of this. You can talk about it then look at the code for 30minutes and make a far better estimate than being pressuried into giving an answer straight away.

    On much larger projects the time spent on actual coding gets less and less and the time spend on specifications, prototypes, testing, documenting, reviewing etc gets much bigger. I recently worked on a $250m sw project where coding was about 20-25% of the time. It depends on what the code is for. Normally coding is about 40% of a project but the more critical a system the less time spent on code and the more spent on design and testing. I've worked on some safety critical systems (ie where someone dies if your code is wrong) and coding was about 10% of the project. This might take a lot of joy out of being a programmer but it pays to get it right!

    --
    pithy comment
  82. My entire life is backwards... by hackwrench · · Score: 1

    Any advice with that? Though from the looks of things, there isn't anyone that's going the right direction.

    What skills would I need to develop to be more forward? Everyone just takes them for granted and looks at me funny when I try to explain that I don't have them and that I'm not even sure what they are exactly.

    1. Re:My entire life is backwards... by Schraegstrichpunkt · · Score: 1
      Keep detailed records of how long you spend on particular tasks. Better yet, at the start of the day/week/whatever, write down what you need to do that day/week/whatever, and write down an estimate of how long it will take you. Then, record how long it *actually* took you (even if there were unexpected problems), and compare. After a while, your estimates will improve.

      Time estimates aren't really something you can "feel". You make the estimates based on past experience.

  83. Read a book! by Matje · · Score: 2, Interesting

    I can really recommend you the book "Software Estimation: Demystifying the Black Art" by Steve McConnell (the same guy from Code Complete).

    He recommends that you create two or three estimates: the best case, the worst case and the expected case. Using three estimates will give you several advantages:
    - you express the uncertainty in your estimate to your managers
    - Using some simple statistics you can calculate a much more reliable overall estimate (the errors in individual estimates average out if you combine them into a larger estimate).

    But most importantly, he claims that the single point estimate you and I have been giving is in fact the best-case estimate. If you read the book you'll see that it is guaranteed to be impossible to hit the targets we set based on those single-point best-case estimates.

  84. Break It Down by neonprimetime · · Score: 1
    As development lead on my team (small team of 3 developers) ... I'm in charge of making those estimates ... and so I've found there are several things it's based on ... first of all how many developer's are they going to give us for the project ... is this an enhancement to an existing database or are we starting from scratch? And which programming langauge / environment are we using? But beyond those ... the most important thing in my mind is to BREAK IT DOWN ... into smaller pieces before doing the estimate ...

    Example:
    In a website / database that tracks worker's peformance, they want to redefine what it means to "make an error" ... I break it down as far as I can go ... like so ...
    1. Add new columns to Table 1
    2. Add new columns to Table 2
    3. Add new fields to C# Data Entry Web Page
    4. Update Add / save / Delete Stored Procedures behind the C# Data Entry Web Page
    5. Update Report 1 Stored Procedure
    6. Update Report 2 stored procedure
    7. Update Report 3 stored procedure

    Once it's broken down ... (perhaps even farther than this if you can) ... provide a rough ... high-end ... ball-park estimate for each ... like 1 hour for 1.), 1 hour for 2.), 1 day (8x1 = 8 hours) for 3.), 2 days (8x2 = 16 hours) for 4.), 1 day (8 hours) for 5.), 6.), and 7.) respectivity ... sum it up ... 1+1+8+16+8+8+8 = 50 hours ... then add a day or 2 for comfort ... and get something like 50+16 = 66 hours.

    Remember ... the further you break it down, the easier it is to estimate ... Also remember that an overestimate is better than an underestimate ... and also remember ... just try to ballpark each piece's estimate ... don't worry about being perfect, cause odds are for each piece you'll be off on your estimate ... but when you add then all up you'll be pretty darn close.
  85. There are methods by Bud · · Score: 1

    All estimation methods are based on reducing the uncertainty, by splitting the problem in smaller pieces and getting a better understanding of each individual piece.

    Problems can however be sliced in many ways. People commonly split the problem in smaller pieces using a work breakdown structure (WBS) that is either deliverable-centric or activity-centric or both. But you can also split the estimation method itself into an estimate and a calculation.

    Let's say that your developers can do on average 15 lines of code per hour and that your programming language of choice needs 30 code lines per function point. You use one of the many available function point methods to estimate the work for feature X to 35 function points. Thus an average developer will require 70 man work hours to implement feature X. An experienced developer will need less time, while a trainee will need vastly more and also some handholding. This method requires that you find out the metrics for your company.

    Also remember that your estimate is only an estimate, and you can adjust the quality i.e. certainty of the estimate. Sometimes a quick educated guess is sufficient, like when Mr. Sales Guy wonders whether feature X is large enough to affect the price of a project. Other times you must spend hours or days on analysing the problem from various viewpoints, e.g. when scoping and pricing a complete customer project.

    --Bud

  86. Estimates? 4 hours, or 1 month, or... by bzipitidoo · · Score: 1

    For research, there's no knowing in advance. Took, what, about 100 years to prove Fermat's Last Theorem? What if you've got to write an algorithm to solve a problem that you think may be in NP, but you don't know? Might take quite a while to come up with a proof that the problem is NP. Or you could skip the proof and just assume it is NP, but then can you come up with a reasonable approximation algorithm?

    Even if you don't have to wrestle with those issues, it can still very hard to tell how long it will take to write software. One problem is that while you can guess how long it will take to write something from scratch, you don't know if you'll find some library or code that will save you weeks of effort. How long do you want to spend searching the Internet and digging through libraries? You may get lucky and find something fast, or you may search for weeks before finding anything, if there is anything to find. Easy to overlook that it might take more time to search than to inplement it yourself. A simple program could therefore take 4 hours to do, or 4 weeks, you just don't know. This isn't school where a professor can assign a well known and heavily studied programming problem to be due in 2 weeks or some such, and have a pretty good idea that is a reasonable amount of time.

    --
    Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
  87. One idea - "Function Points" by Anonymous Coward · · Score: 0

    Hi gang!

    I don't know if anyone has mentioned "Function Points" analysis yet, but it is worth checking out. (But to me, it has more value when developing older style dumb terminal data entry systems.)

    - TWR

  88. Fixed and agreed upon spec. by jellomizer · · Score: 1

    The thing that can streach out a project time line is rolling Specs. (the Oh-By-The-Ways) When you give them a spec you will need to take a good amount of time using Photoshop/GIMP/MSPaint mocups of the interface, and show them how each interface is going to work and how it will process the data and store it. Then you need to spec out what you client says will be a constant feature or a feature they think will change. Have the speces signed off by management stating they agree with the specs and anything beyond that will extend the project scope and costs.

    Now that you have the full specs which now are considered static. Now you can figure out how much time it will take you to do each project. Using you experience Shorter if you have done it before and you remember how you did it. Longer for parts you never did but you have a clear image on how to do it. And much longer for something you never did and Don't know how to do yet and requires some extra research. Code that is agreed to be static threwout the products life cycle normally takes less time then features that are more flexible. And don't underestimate the Human User Interface, HUI usually takes most of the time because that section is the area of greatest amount of errors.

    When the project occures and the Oh-By-the-ways come up (There is almost no if about it) then you need to re-evualite your project plan and adjust the hours and have management resign off of it again, explaining who put in the request and why. This is the Save your Ass method where if you go over schedule of the origional plan you have paperwork to proove that it is not your fault but Bob in QA Department who sees what you have and it expands his imagation for new features so he want more. Plus with management knowing this they can make the final decision if it is worth putting it in or not.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  89. Re:Worth doing vs. feasible by hackwrench · · Score: 1

    Nobody was talking about "worth doing". The question is about feasibility, whether of doing the project at all, or coming up with an estimate of how long it would take.

  90. Just do it by berbo · · Score: 1

    I agree: break it up into small task, work on them incrementally. The company I work for has used this method successfully for 10 years.

  91. Estimates are only as good as what you know by PDMongo · · Score: 2, Insightful

    I have been in the industry over 20 years and this is one of the more difficult questions to answer. For me, having worked in both development and management capacities, the most accurate answer that can be provided is "it depends".

    Primarily, it depends on what you know. There are a number of techniques beyond the W.A.G. of developer's experience with the software at hand (a google search for "estimation techniques" turns up over 900,000 matches), and depending upon the circumstances one technique may be better suited than another. IMHO they all boil down to one simple fact: the more you know the more accurate an estimate can be. As a manager, you develop a feel for which of your developers pad their estimates and by how much. When the numbers seem high, it is usually because they don't have enough information to make a more reasonable "guess". As a developer you don't want to get caught short when your "rough estimate" turns into a schedule deadline, so you take into account all the things that are likely to come up.

    For me, the best way to stay out of trouble is to offer a range in your estimates. The less you know the wider the range and vice versa. You can always qualify the range estimate based upon what you know. Other posts have suggested taking time to "get back to you with that estimate" and that is a very valid technique to "know more", thus reducing the range of your estimate. If you have reasonable management and business users, they will understand that an estimate is a "best guess given the information available" rather than a due date to be slapped on a schedule.

    How to come up with accurate estimates, isn't an easy question to answer. If it were, there would be one or two simple ways to do it accurately, and everyone would be following those procedures to come up with estimates.

    FWIW...

    --
    I've done the math, I know the odds, but I'm still disappointed when I don't win the lottery.
  92. How I do estimating by TomTraynor · · Score: 1

    Nothing beats experience on estimates, but, there are a few things I do on my calculations:

    1. I assume that a rookie is doing the coding.
    2. Time for a high level specification for the user to review.
    3. Time for the review.
    4. Time for a detailed design where you specify the low level rules for the coder.
    5. Time for a review of the detailed design.
    6. Time to write a document on how you will test, what you will test and under what conditions the code will pass.
    7. Time to set up a testing environment.
    8. Time to set up a Client acceptance test environment.
    9. Time to write a document on the client acceptance environment, test conditions and under what conditions the client should sign off on the code.
    10. Time to walk the client through the CAT document.
    11. Time to walk through the CAT results.
    12. Time to document how the code will be released, who is to be informed, what resources required, etc.
    13. Time to walkthrough the release doc.
    14. Document everything, if the client wants a change it is easier to do it at the design stage. After that do a Change request and make sure the client knows what happens to time/effort and the schedule.

    A few rule of thumbs I work with on hours ->
    1. Every hour of any document = 1/4 day walkthrough with the client.
    2. Every hour of code should require a minimum of 2 hours testing (simple code).
    3. Time for designing tests and the documents = time required to code.
    4. Every hour of walkthrough with the client = 1/4 hour doing the walkthrough report.

    --
    Panic now, beat the rush!
  93. Company Standard by TheOtherChimeraTwin · · Score: 1

    I just follow our established company standard for estimating projects. The boss tells me how long it is going to take, and I say "Yes Sir!"

  94. Old Boss's Forumla by Teancum · · Score: 2, Insightful

    My old software manager came up with an outstanding way of trying to estimate project completion for trying to tell upper management when something would be done.

    He asked each of the software engineers how long it would take, based on their "gut" instincts.

    Then he multiplied the figure by two and moved it to the next higher order of time. I.E. weeks become months, months become years. One time he asked us to estimate when we could get something accomplished and we told him two years. He cried for a little bit and went to upper management and said "Never, we can't get that done".

    Surprisingly this turned out to be a very effective way for him to gague when things would actually get accomplished, and more often than not he was dead on correct. He also didn't let me in on his secret until just before he quit, but it has also helped me to make my own estimates for customers when I'm doing contract work now. I do the same thing where I make a preliminary estimate based on known issues and then apply the above rule to my own guess. I have (fortunately) been fairly accurate with my guesses at that point, even if it makes the customer angry with them insisting that it must be done in a shorter period of time.

  95. Do Not Engage In Such Hocus-Pocus by Anonymous Coward · · Score: 0

    I am appalled that even some of the most experienced programmers persist in
    attempting to provide time-to-completion estimates, which do nothing but
    perpetuate the notion that there is anything meaningful about them.

    We would refuse to read tea leaves or to rely on the auras of ground monkey
    bones as a basis of distilling concrete knowns from nondeterministic unknowns,
    so why then do so many of us go along with self-referential approaches like
    "break it into its component parts, then use little estimates to determine
    a big estimate..."?

    The only correct answer is and will always be "We will know how long it took
    when it is done. If you are an experienced manager and you want an accurate
    time, then find all comparable programming tasks that you have observed
    programmers complete, and use that information yourself to predict the future.
    Asking me to do that for you doesn't gain you any accuracy."

    Please stop giving pointy haired bosses the illusion that estimating time-
    to-completion of programming tasks is even possible.

  96. You could ask me for a firm no-cost estimate by Ardipithecus · · Score: 1

    then multiply it by 3! :(

  97. Not an honest answer yet by texaport · · Score: 2, Insightful
    Since "round up" has yet to be uttered, it is time to paraphrase an old Murphy's Law* :

    30 seconds means 15 minutes.
    10 minutes means 5 hours.
    12 hours means 6 days.
    14 days means 7 weeks.
    8 weeks means 4 months.
    6 months means 3 years.

    * First Rule of Project Management: Divide estimate by two, and round up to next higher unit.

  98. Level of Complexity by vijsats · · Score: 1

    Divide and rule policy not only helps to understand the system better but helps in the estimate as well. Added to that if you assign the level of complexity for each tasks it will be help in providing better estimates. Assign the complexity levels to the atomic level of design as more difficult,hard,normal,easy and then assign appropriate times\days to each one of those. You can further decompose difficult tasks into easy ones to derive estimates.

  99. Experience is the biggest factor by Overzeetop · · Score: 1

    You'll still be wrong, but the more experience you have in solving these types of problems, the less wrong you'll be. To do an estimate (not for coding, but for engineering design on existing work), I sketch out the solution, and then break it down into discrete tasks. I do smallish projects, so that's resonable amount of time to put in (one to two hours, tops, usually less than 1% of the design time). From rules of thumb, I can assign an average value for each task type - usually only three or four type on any project - and get a good estimate.

    For pure analyis work, I've got another benchmark. I can size up a job pretty quickly by eye based on experience and get the number of hours it will take to do the job if I am perfectly efficient, don't run in to any issues, and could work straight through. If I double that number, that's a good shot at the actual calendar time it will take. If there are others working on the project, I tack on 30% for changes which will require rework. It's scarily accurate, but only for from-scratch stuff; working on an existing system means method one, above.

    --
    Is it just my observation, or are there way too many stupid people in the world?