Slashdot Mirror


Are There Limits to Software Estimation?

Charles Connell submitted this analysis on software estimation, a topic which keeps coming up because it affects so many many programmers. Read this post about J.P. Lewis's earlier piece as well, if you'd like more background information.

35 of 225 comments (clear)

  1. Of course there are limits. by laserjet · · Score: 3

    We all know that software schedules, etc. can be estimated, but not with a large degree of accuracy. It has always and will always just be a case of risk management, and whether you want to release early to market, or release late and have a better product.

    In the real world, we don't go by some estimation or rigid schedule, and we wouldn't have to if not for the accountants and marketing people that have to prove their usefulness. THEY are the people who want estimates, and incredibly, they are also the people who have the least idea as to what is requred.

    --
    Moon Macrosystems. Sun's biggest competitor.
    1. Re:Of course there are limits. by mccalli · · Score: 3, Insightful
      In the real world, we don't go by some estimation or rigid schedule, and we wouldn't have to if not for the accountants and marketing people that have to prove their usefulness. THEY are the people who want estimates, and incredibly, they are also the people who have the least idea as to what is requred.

      Not always the case. You're thinking about, essentially, a 'shrinkwrap' environment. Early/late to market and all that kind of stuff. However, a large amount of code is written in-house for in-house use only. Not software houses, but places like banks, government...basically any large institution with a fair few IT systems.

      Your users there aren't developers, and many are more used to work which follows predictable patterns. That's not to say their work isn't hard or even non-technical, it's just that the nature of many tasks tends to be more predictable than that of writing code.

      Most code is utter drudgery. It's predictable in an informal manner to a very high degree. These users get used to that. If you then predict three days on something, hit an actual problem and take three weeks - they will hold you to account. Your explanation at that time had better be good.

      Cheers,
      Ian

    2. Re:Of course there are limits. by dubl-u · · Score: 5, Insightful

      Most code is utter drudgery. It's predictable in an informal manner to a very high degree.

      Quick tip: If most of your coding is utter drudgery, you're doing the wrong coding.

      The potential drudgery I see tends to come from two sources: 1) users tend to ask for very similar things (e.g., a zillion slightly different reports), and 2) tools that are a poor match to the problem domain.

      For the first case, users with similar requests, you give the user control and tools to support that control. So instead of wasting your life writing report after report, write report-generating tools.

      For the second case, you gotta buy or build better tools. Or, possibly, learn to use the ones you have better. For example, if you're using an OO language, stop using your copy and paste keys. (Why? When you copy and paste chunks of code, you're saying that two things are very similar. Instead of copy-and-paste, abstract the problem using, say, inheritance or containment or delegation. Copy-and-paste yeilds maintenance nightmares.)

      Computers do drudgery without complaining, and they do it much faster than you. Make them do your donkey work!

    3. Re:Of course there are limits. by mccalli · · Score: 3, Informative
      Quick tip: If most of your coding is utter drudgery, you're doing the wrong coding.

      I vastly (but politely) disagree. Most of absolutely everything work-related is utter drudgery, not just code.

      ...instead of wasting your life writing report after report, write report-generating tools.

      But the users don't want to write reports - they have other things to do. Report writing is my job.

      Now, if you're saying that I should be writing report-generating tools that I can make use of - you're right. I try to do that - most of my reports output to XML and are then formatted into csv/HTML/whatever by a set of XSL rules. But if you're saying that I should be writing software that runs reports, I have to disagree.

      Point 2 I entirely agree with, and have no quibble with at all. Well except to note, as a matter of miffed pride, that I dedicate a large chunk of my development to wiping out other people's use of the copy and paste keys... :-).

      Cheers,
      Ian

  2. Unless it's a simple project... by Nijika · · Score: 5, Interesting

    There are always things you won't consider until something's being developed. If you've done something a thousand times, and have the libraries developed then you can probably estimate the time required very accurately. If the request is something completely new to your team, you'll never be able to accurately estimate the time required until analisys (which takes it's own time as well).

    --
    Luck favors the prepared, darling.
    1. Re:Unless it's a simple project... by squaretorus · · Score: 3, Informative

      A technique I think would work well for medium sized projects is build and burn.

      You build the project once through, cobbling things together to get as close to what you want in a given time frame. You then start again from scratch.

      Version two of any software is always better, so get straigh on with it. Involve the user towards the end of the initial build.

      You then spend time assessing how you would do it properly, hopefully having had a majority of 'niggles' highlighted during the initial sloppy build.

      I often do this for smaller projects, but think it could scale pretty well. If you spend 20% of the total build time on the initial build - but that lets you estimate the total time more accurately, there are great business benefits to be had.

    2. Re:Unless it's a simple project... by Mr.+Fred+Smoothie · · Score: 4, Funny
      And at level 5 they don't even need a testing organization to release mission critical applications.
      Maybe that explains their shift toward missions that don't cost as much and fail more often.
      --

    3. Re:Unless it's a simple project... by dubl-u · · Score: 3, Interesting

      Yep! The "first pancake" approach is a good one. And, as other posters have noted, a venerable one. Why? as you point out, you discover a lot as you go, both about the user needs and about how to do them well.

      But you can go further with this! Any short-cycle iterative model will give you this sort of feedback every couple of weeks, rather than at the end of every version.

      For more info on it, take a look at Rapid Development's discussion of evolutionary delivery. Or try a process that's built around feedback, like Coad's Feature Driven Development or, my personal favorite, Beck's Extreme Programming (XP) (dumb name, but a great process).

  3. Too much thought on one thing... by FortKnox · · Score: 4, Insightful

    There is only one way to make a good estimate on a software project:

    Experience

    It looks to me like someone just had too much time on their hands, and decided to say that in a very, very complex manner.

    Sheesh.

    --
    Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
  4. An book worth to read by frankie_guasch · · Score: 4, Insightful

    Rapid Development : Taming Wild Software Schedules
    by Steve C McConnell

  5. 2x+7 by Lizard_King · · Score: 5, Interesting

    In a software engineering class in college, I remember a professor joking around that the catch-all equation for software estimation is 2x+7, where x (can be in any units like hours, days, weeks, minutes) is your estimate for how long you think the component will take. So for example, If one of your developers estimates that developing some component will take 4 hours (so x = 4), in *reality* it will take them 2x+7 = 15 hours to complete.

    After gaining a few years of "real world" experience in software engineering (and I know that the very term real world experience is debatable :-), I'm realizing that this professor wasn't that crazy, and his crude estimation mechanism (which is a joke) isn't any more or any less accurate than a lot of modern techniques I have seen people use in the field.

    --
    "My mother never saw the irony in calling me a son-of-a-bitch." - Jack Nicholson
  6. Accuracy, and doubling a double by CDWert · · Score: 5, Interesting

    I have been in this industry for what often times seems too long, My father was in from the beggining 1962, When I was younger and he asked me how long I thought it would take to write I blurted out my answer and he said no X , I said noooo thats way too long how did you arrive at that ?

    Here was his answer I have ALWAYS found it accuraye to +/- 10% so far on hundreds on small to massive projects.

    1. Once you know all , or most of the forseeable estimates take that number. say 10 hours.

    This number is an instinctual reaction to a perfect enviroment , a little experience, some ego on your part of what might be accomplishable in a vacum.

    2 Take that Number ad double it.
    This takes into account all the real world distractions. Events, etc.

    3.Take that number and double it again. This takes into account unssen variables and events beond mortal control.

    40 Hours.........

    I use this on EVERY single estimate I provide, WHY ?? It works, its not too high not too low, just right.

    I tell people this and they laugh, then I tell them that there are MANY legacy applications SSI, IRS, FBI, you name it that were qutoed by my father in this EXACT manner.

    There is NO practical limit to estimation, As long as you have the information neccesary to determine what the job youre actually doing is.

    --
    Sig went tro...aahemmm.....fishing........
    1. Re:Accuracy, and doubling a double by jpbelang · · Score: 4, Informative

      The danger with constantly doubling is that it leads to falsely large numbers for small projects.
      A project estimated at one day should NEVER take four days. A project estimated at three months could take a year.

      In my opinion, everything is about risk and you seem to agree (the reasons you double your time is generally for unforseen events).

      So if risk is the problem, we have to reduce risk. How should this be done ? The simple solution is shortening your horizon.

      Instead of saying "this project of size X will be delivered in three months", deliver smaller increments more often ("this project of size X/12 will be delivered in one week")

      This is extreme planning.

      So I'm an XP evangelist. sue me :)

      --
      JP http://www.wearerite.com
    2. Re:Accuracy, and doubling a double by pubjames · · Score: 5, Insightful

      I use this on EVERY single estimate I provide, WHY ?? It works, its not too high not too low, just right.

      A task will expand to fill the time available... That's why your method of estimation always seems just right.

  7. it develops over time by foo(foo(foo(bar))) · · Score: 3, Interesting

    I work on a very large software project. 6million+ lines of active source code, with 400,000 new development hours per year and growing. -and- we are on our extimates well over 80% of the time. (if we don't hit it, we are under).

    How is this possible? It has evolved over time, some of the same people who started this project 9 years ago are still here and they know the system very well. That knowledge, combined with good project management leads us to several categories. During a requirements phase, designers assign a complexity to the changes for a module, and based on the type an hours extimate is generated.

    Now, Lewis is right, no algorithm can be developed to figure out the compleixty, but a human can, and the computer can figure out how many hours should be devoted to documentation, coding, and testing.

    My overall point, as a software product matures...esitmates are easy to estimate and project dates are easier to meet. But you already knew that...

  8. Programmers intuitively know this by Anonymous Coward · · Score: 5, Interesting
    Programmers that I've worked with have almost always intuitively known this to be true, and non-programmers (in particular, product managers responsible for scheduling) have almost never understood this. Hence the frusteration on both sides.

    I'm glad there's finally a resource to help the folks who insist on accurate estimates understand why my response to the inevitable inane question is always a cynical "two weeks", regardless of the complexity of the problem.

  9. Problems with scheduling by (trb001) · · Score: 3, Insightful

    A problem that seems to come up in scheduling and time estimation is that the people producing the estimates aren't the people doing the actual work. Add onto that the customer giving additional requirements, changing requirements mid project, putting together a team that doesnt have the skills necessary to produce on time deliverables, etc...that's a LOT of variables.

    I don't want to sound like that programmer who makes excuses for why their project isn't delivered on time ("That other guy was a moron", "Management is horrible", "We didn't have solid requirements") but IMHO, if you want a program delivered on time, pick a good team and then try to estimate the amount of time it will take...then reduce that by 20%. It seems like every project is late by about 25% or more, so if you reduce it initially, perhaps it will be delivered closer to when you really expected it.

    --trb

    1. Re:Problems with scheduling by dubl-u · · Score: 3, Insightful

      people producing the estimates aren't the people doing the actual work.

      Absolutely true. Not only are the people doing the work more likely to give good estimates, but people also work much harder to meet their own estimates rather than somebody else's numbers.

      estimate the amount of time it will take...then reduce that by 20%

      Absolutely false. This is the worst thing you can do for morale. The programmers will know they are working to bullshit targets. And then when they miss the fake deadlines, they'll be stressed and grumpy for the last 20% of the work, meaning you'll get that last part slower and with poorer quality then you otherwise would have.

  10. This is the wrong way round. by johnburton · · Score: 4, Interesting

    In real life it's rare to be asked for an estimate of the time required.

    What usually happens is you get told roughly what to build and the final date by which it needs to be ready. There then takes place a series of negotiations and compremises on the scope of work until everyone is "happy".

    I suppose that doesn't really invalidate the point of the article at all, it's just an observation for those who think that estimation is the nice science that it is sometimes presented as being.

    --
    Sig is taking a break!
  11. Reply coming right up... by Baba+Abhui · · Score: 3, Funny

    I'm going to have a great reply to this important story. It's going to have all the latest stuff - it will be broken down into paragraphs and have a high degree of relevancy. My reply will be ready in two weeks, give or take a month or so, if the powers that be decide it also must contain links and be spelled correctly.

  12. Alistair Cockburn on People as the biggest Factor by uqbar · · Score: 3, Informative
    Alistair Cockburn has a number of excellent papers on this point:

    The net-net is that human factors are far more important - and it's really hard to plug these into an estimate. One of Cockburn's contentions is that people aren't linear or predictable. But he also identifies items that can help a project run more efficiently. An excellent read at any rate.

  13. Effort estimation is Irrelevant by Markee · · Score: 5, Insightful

    In the real world, any effort estimations are irrelevant anyway. I am sure everyone working in the business knows this situation:

    Project manager says: "We have to add line item X to the project. What's the effort estimate for that?"

    Me: "Twelve weeks."

    PM: "But we need it in three weeks."

    Me: "No way."

    PM: "We have to. Shoot for" (names target date in three weeks).

    Me: "Sure."

    The due date is fixed, and the software development effort is determined by the available time afterwards.

    --
    Yes, you are right there. -- Another glass of champagne?
  14. Programmers are not machines..... yet.... by Reeses · · Score: 4, Insightful

    Every article I've read on this overlooks one thing that every programmer requires a small amount of.

    Creativity.

    It's something that's hard to be measured. Sadly, programming is not like assembling a car, where it can be broken down into infinitesimally smaller chunks, then added back together to get a whole.

    For example: it takes six seconds to put this screw in place, so we'll stop the assembly line for 8 seconds, then the car moves on regardless, under the assumption that the screw was inserted.

    Programming is not like that. I know I've stared for an hour at the screen trying to figure out why one line of code wasn't working.

    Or sat there for a while trying to figure out how to approach a problem before writing another line of code.

    Likening programming to a production line is not good. There's no way to know in advance how many lines of code there are going to be, nor how long each line is going to be. If you knew this, you could add up how long it would take the average person to key in the strokes, and there's your estimate. That doesn't work in software.

    For time usage, software needs to be compared to any other creative process as opposed to a mechanical one. How long did it take daVinci to paint the Mona Lisa? An hour? Two? 3 days? Could he have guessed from the outset that it's going to take x amount of time? Probably not. He might have been able to give a ball park based on how fast he's painted similar stuff in the past, but he couldn't nail it down exactly.

    Now, granted, as you develop time and experience, your estimations get better. In addition, yor time to completion gets better. (How long do you think it would have taken daVinci to paint a _second_ Mona Lisa? A lot less time than the first one, because he's done one, and he remember how he solved various problems, like how much of each color to mix to make a certain tone.) This is where talent and experience come in.

    But until software becomes similar to assembling Lego bricks (which it will, one day, and has in some places), then it's going to be hard to quantitatively determine how long a given project will take. And even if it becomes like Lego stacking, there's still going to be some fudge factor because how to solve the problem has to be solved before solving the problem.

    And sometimes you have to tear apart and start over because a brick is out of place, or it's just poorly designed.

    --
    Reeses
  15. 3 Big snags in time estimates by corvi42 · · Score: 5, Insightful

    In my experience, the biggest snags in all time estimates have to do with the under-determination of what a project is and what it involves. Given any project F which has only F(x) parts to it, you usually have some rough intuitive estimate that there will be G( F(x) ) bugs to work out. Given that you are familiar with the type of project involved the estimations are generally fairly decent.

    The big problem is that in real-world applications, x is always changing. I have found that the culprits of this is mostly one of several things:

    1) You're not as familiar with the project as you thought you were - or there are some aspects that are familiar, but the unfamiliar ones have ramifications you don't foresee because you're not familiar with them. This adds to both your estimations of F(x) and G(F(x)).

    2) Users are dumber than you thought. The difference in mindset between the user and the engineer is real and very significant. There are things that as an engineer ( especially one who is working closely to a piece of code for months on end ) you would never try to do with a particular application, and yet a user who has never seen it before will do out of ignorance or confusion or both. Just when you think you've made something idiot proof - they invent a bigger idiot. This throws off your estimates of G( F(x) ) because you have whole classes of bugs you never thought of as bugs before. Sometimes this requires reworking core components making estimates of F(x) go wrong.

    3) The client either doesn't know what (s)he wants, or doesn't know how to explain it, or even that it is necessary to be explained. This is the most frustrating of problems, and can be fatal to entire projects. Often clients don't think of software engineering like real engineering. One cannot ask an architect to redesign a building after its already 3/4 built. But this has happened to me with software projects, and even on occasion prompted me to quit a job in frustration. When this happens, all bets on estimates are off.

    Either that or I'm just really lousy at doing time estimates =)

    --

    There are a thousand forms of subversion, but few can equal the convenience and immediacy of a cream pie -Noel Godin
  16. Estimation isn't all that difficult by pubjames · · Score: 5, Insightful

    As someone who has to provide estimates to different clients for different types of jobs on a frequent basis, I have to say that I don't think it is as difficult as some people make out.

    The secret is to base your estimate on a detailed specification. Specify in detail, break down the big task into smaller ones, estimate for each smaller task, add up, add 10% for contingency.

    I think the problem is that too many estimates are made on the basis of poor specifications, then you get a shock when you discover a problem you haven't anticipated. So, my top tips:

    1) detailed spec agreed with client.
    2) breakdown into smaller tasks.
    3) estimate for smaller tasks.
    4) add up and add 10%.

    All this stuff about doubling etc. - what are you people like? If you have to do things like that then perhaps project estimation isn't something you should be doing...

  17. Here's the formula I use... by mrroot · · Score: 4, Funny

    I figure out how much time it will take me to just sit down and do it without any interruptions.

    Then I multiply that by the number of DBA's I have to go through to have a table get created for me divided by two.

    Then I add to that the 10 times the number of project branches I need to request the PVCS administrator to create.

    Then I count up the number of consultants sitting within 50 feet of my desk and multiply by that number times 20.

    Then I multiply that number by the number of status reports I have to submit per week.

    Finally, I add to that the number of games of foosball I play per day on average * 10.

    That number is the final number of days it will take to complete the project.

    --
    I Heart Sorting Networks
  18. Rules of Software Estimation by Jordy · · Score: 3, Funny
    I typically use something like the following to counteract my instinctual response to undercut myself. I've found that because seperating work from home life is so difficult, not assuming I'll always have that time for the project makes it hard to make correct estimates.


    Let x be the first number in days that pops into your head when you think about how long a project will take.

    If the project requires you to work with someone else at any stage (including QA), let x = x*2.

    If you usually work on weekends or after hours (or before hours in case of a flipped engineers schedule), let x = x*1.5.

    If you are in a bad mood when the number of days pops into your head, you weren't really paying attention to what the project was or you simply aren't in the coding frame of mind, let x = x / 0.9.

    If you haven't felt modest in the last 24 hours, let x = x * 1.2.

    If the project requires any type of documentation, let x = x*1.2.
    --
    The world is neither black nor white nor good nor evil, only many shades of CowboyNeal.
  19. The real limiting factor . . . by tmoertel · · Score: 5, Insightful
    The real limiting factor is not the estimating, itself, but knowing what to estimate. For example, imagine that you had the Holy Grail of estimating -- a perfect estimating function f. Given some work X to be performed, f(X) would tell you exactly how much effort the work would require -- perfectly, every time.

    Now, what good is f? On most software projects, f wouldn't be worth much. Why? Because nobody knows what X is. X is a specification of the work to be done (i.e., software requirements), and most such specifications are woefully incomplete, imprecise, and erroneous.

    That's why development processes that are repeatable and emphasize increased formalism allow for better estimates. They provide higher-quality X values, not to mention better approximations of f based on past performance. Therefore, if long-term estimates are important to your business, climb the formalism ladder.

    On the other hand, good long-term estimates are often unnecessary. Many business need only to know where the project is now and to be able to change directions with reasonable efficiency when business needs change or realities are better understood. Witness the effectiveness of so-called agile development processes in turbulent business environments.

    So, in the end, the only real lesson is to pick your software development (and estimating) process to support your business. Doing it the other way around usually doesn't work.

  20. My critique by The+Pim · · Score: 4, Interesting
    Very nicely stated! I was going to publish my own response to "Large Limits", but I honestly decided that the paper was too "academic" (in the sense of, "interesting but irrelevant to the practical world") to be worth critiquing. But this is slashdot, and what better place for worthless thoughts, so here goes ...

    The glaring flaw of the paper is that the main argument can be applied equally to any human endeavor, not just to programming. The argument is essetially a rigorous version of the statement, "You can't (in general) know how hard (complex) it's going to be, until you do it". The author supports this by pointing out that the purpose of any program is equivalent to generating a string that is a complete, precise description of the problem. Complexity theory tells us you can't predict the length of that program (without a formal system bigger than the program).

    But it's not hard to cast any problem into this form. Take baking a cake. The problem can be thought of as generating a precise description of how to turn some inputs into an output within the range of what we consider a cake. In a reductionist sense, that process is incredibly complex (much more than any computer program), involving gazillions of elementary parcticles and their interactions. But nonetheless it's pretty easy to estimate how long it will take to bake a cake.

    Complexity theory shows us that complexity is indeed pervasive in general; but everyday experience shows us that it is usually encapsulated within simple abstractions. Most things we plan and do have relatively simple descriptions in terms of objects with those properties we are familiar, and things we have done countless times before. So while estimating complexity may not be possible in general, it is usually not very hard for the things we care about.

    In order for the paper to be persuasive, Lewis must show that computer programming is, in practice, more complex than most other activities--that new problems can't be easy stated in terms of already solved problems. (He does begin to address this, but only as a side-note.) I think most practitioners would essentially agree (and I'm not going to argue this, unless someone challenges it). What does this mean for the relevance of complexity theory? It's a deep and difficult question, but I suspect that some insights can be drawn. In particular, I do believe that there are problems that can't be estimated without effectively solving them.

    Regardless, there are more obvious, intuitive reasons that complex activities are difficult to estimate. One is that that humans vary wildly in their efficiency at complex tasks. We all know the experience of cracking nut after nut one day, and being stumped the next. Sometimes, to be sure, this is due to misestimation of difficulty, but just as surely it is often purely psychological. Another is that teams working on complex problems are prone to miscommunication and other group disfunctions. A third is simply that the flesh is weak--we often lack the discipline and concentation to plan our projects in sufficient detail.

    And this list only considers the difficulties that derive from complexity. Software development faces a host of additional "accidental" challenges, such as bugs in third-party software, clients (and marketers) that change their minds, changing fashions in tools and methodologies, etc. In short, you don't need a fancy theory to conclude that predicting development time is quite hard!

    --

    The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
  21. Wow, a /. first by T1girl · · Score: 3, Funny

    Somebody is actually concerned about not pissing off the customer? What next, tea and sympathy for the poor end-user?

  22. algorithmic complexity / human complexity by Alsee · · Score: 3, Insightful

    Few people are familiar with the term "Kolmogorov complexity". It is basicly the length of the shortest possible solution (sequence of symbols). Sometimes refered to as "algorithmic complexity". It proves that, except for a constant term, the complexity of a problem is independant of what method or language is used to process the symbols. Except for a constant term, Lisp, C++, Basic, and Perl all yeild the same complexity for any problem.

    Lewis's proof if based on a mathmatical proof that the Kolmogorov complexity is impossible to predict (without actually solving the problem).

    One objection was that for some "Kolmogorov simple" problems it may take a human a long time to find the short solution, and that for some "Kolmogorov complex" problems the long solution may be obvious to a human.

    It got me thinking. If we fudge the definitions a bit, Kolmogorov complexity still applies. "Thinking" is just another method or language for processing symbols (thoughts). So the Kolmogorov complexity is the length of the shortest sequence of thoughts required to solve a problem. In the general case it is impossible to predict the length of the shortest sequence without actually solving the problem.

    -

    --
    - - You can't take something off the Internet! That's like trying to take pee out of a swimming pool.
  23. It makes me cry when this happens by dubl-u · · Score: 4, Insightful

    And generally the way we accomplish something in impossible times is to cut corners. Sure, it works in three weeks, but the code is snarled, there is no documentation, and you took advantage of a security hole to make it go.

    Now of course you tell the manager, "If I spend three weeks on a temporary hack, I'm still going to have to spend another twelve weeks later doing it right."

    And they say, "Sure! As soon as this crisis is past."

    Of course, as soon as crisis A is done, crisis B is looming. And after B, then C, D, and E. So a lot of 'temporary' code gets written. Eventually, the project is just a big heap of steaming turds with some pretty contact paper covering most of the surface. And then the good programmers catch on and leave; the bad ones spend the rest of the lives sticking on more contact paper.

    And the manager, of course, has long since moved on; he met his deadlines, after all, so he must be a good manager. And the person who's now in charge of that group? Well he must be a bad manager, because his team has lots of bugs and never makes deadlines anymore.

    It's enough to make me cry.

  24. Art VS Engineering by Srin+Tuar · · Score: 3, Interesting

    Programmers that I've worked with have almost always intuitively known this to be true, and non-programmers (in particular, product managers responsible for scheduling) have almost never understood this.


    Those in the "Programming is an Art" camp tend to agree that there is no real way to estimate how long doing something new is going to take.


    Those who think of programming as simply bulk engineering, repetetive, boring, or just "coding" tend to be frustrated by this seeming fact. It is almost irreconcilable with normal business practices to know how long a job will take until it is actually done. This makes it extremely difficult to make close-ended contracts, and to predict budgets.


    Asking how long a particular software job will take is often equivalent to asking how long a research job will take.
    Im sure the scientists would be amused if a suit walked down into R&D and asked them when they would be "done" ;)

  25. Software Estimation: Impractical Assumption by jgore26785 · · Score: 3, Insightful

    To tell you the truth, I would tell customers/superiors that I can give them very accurate software estimates as long as they don't change project parameters on me after I start.

    This whole estimation thing assumes that the project parameters do not change during development, which I have never come close to seeing happening on any of the projects I've been exposed to. Ahh.. to be able to work on a project on a fixed set of parameters..

    There are the changes that people can never seem to stop making during product development, and they originate from: marketing, sales, superiors, customers, warehouses and factories, just to name a few.

    Of course, there are also the factors that you can't predict ahead of time (and consequently, cannot quantify besides adding a qualitative factor) such as changing: product costs, product availability, product specifications, competition, benchmarking, and tool quality/availability.

    The best thing I've found is to keep software simple, sweet and very amiable to changing design and specifications. Software estimation is very much an intuitive feel based on past experience; there are also certain characteristics that you know will throw uncertainty into the schedule. For example, not only do I give my superiors at work a "time estimation", but I also give them an "uncertainty" or "risk factor" that tells them how close I feel my time estimation to be. They can learn a lot when you tell them "4 weeks give or take a couple of days" or "4 weeks if it's feasible to do at all".

  26. second order concerns by epine · · Score: 3, Informative

    I've been playing around with the bitkeeper source control system for the last week. After reading this article I suddenly recalled that bitkeeper treats 2-way merge and 3-way merge as entirely separate features. N-way is not even discussed.

    In some ways N-ways is merely a simple generalization of 2-way. The algorithmic complexity is not much different. The problem here is human scale. Humans cope well with two-way merge as a daily activity, cope with 3-way merge at the level of focus required by air-traffic control, and don't cope with 4-way merge under any sane circumstance.

    Bitkeeper solves the problem by designing the architecture so that merges can be performed hierarchically. This is a feature that CVS sorely lacks.

    Everyone knows that the success of projects is to a large measure determined by whether the architecture obviates the need to delve into N-way hell.

    I also recall a project where a database supported two processes which concurrently updated the same dataset. During the design process we found a way to define the system so that each process was permitted to update a distinct set of columns, with maybe a column or two where one process was allowed to set a value and the process allowed to clear the value. Months of potential development effort slashed at the stoke of a pen. The first design dealt with the concurrency problem in a different way. Getting everyone to respect everywhere the subtle rules required by that design just doesn't happen on most projects.

    The best book on the subject is the psychology of everyday things

    What people tend to forget is that nuances of a software design create affordances with respect to the coding effort. When the pressure is on, people tend to grab onto the nearest handle. The handles hidden in the design have a momentous impact.

    Some of the most important affordances are second order effects.

    The C++ language is often criticized for having a model of class protection which is easily violated. Yes, that's true as a first order criticism. However, the C++ makes it fairly easy to figure out a way to manipulate the source code to find all the violations if you decide to look. These manipulations might be a temporary modification for the sole purpose of determining whether a certain kind of integrity exists. The C++ community doesn't lose any sleep over the first order weakness of the class protection model. We all know that violaters are playing a dangerous game.

    On the other hand, there are certain kinds of abuse in the C language where it's practically impossible to turn up the smoking gun short of a complete source code audit.

    The difference is not that C++ prevents programmers from abusing abstractions, but that it provides the necessary affordances to catch the people who do. The importance of these second order effects is vastly underestimated by those who plan.

    You can see the extent of the problem wherever mouthy mights thrive. You know the people who always shout "it might happen" when the downside of anything they oppose is mentioned, as if might was an adverb of quantity. The implicit logic is that only a first order guarantee is sufficient, yet the recent study shows what everyone already knows, second order affordances generally suffice.

    My experience is that projects are a morass of non-quantifiable psychology, experience, and intuition. The second order effects are never discussed on paper. It's left up to the cohesion of the team to impose the second order effects that make the first order effects possible.

    It would be far more useful for the estimation people to spend their time figuring out the conditions under which a project becomes non-viable. Offer the programmers some kind of handle for coming back to management with their concerns about faulty second order effects, in language a whole lot less vague than what I'm using.

    Wouldn't it be a fine start just to be able to limit ourselves to projects where the outcome is somewhat proportional to the effort expended. If we had proportionality already, the kind of estimation we have now would be a second order concern in its own right, rather than a masturbatory mission impossible.