Slashdot Mirror


Can Software Schedules Be Estimated?

J.P.Lewis writes " Is programming like manufacturing, or like physics? We sometimes hear of enormous software projects that are canceled after running years behind schedule. On the other hand, there are software engineering methodologies (inspired by similar methodologies in manufacturing) that claim (or hint at) objective estimation of project complexity and development schedules. With objective schedule estimates, projects should never run late. Are these failed software projects not using proper software engineering, or is there a deeper problem?" Read on for one man's well-argued answer, which casts doubt on most software-delivery predictions, and hits on a few of the famous latecomers.

"A recent academic paper Large Limits to Software Estimation (ACM Software Engineering Notes, 26, no.4 2001) shows how software estimation can be interpreted in algorithmic (Kolmogorov) complexity terms. An algorithmic complexity variant of mathematical (Godel) incompleteness can then easily be interpreted as showing that all claims of purely objective estimation of project complexity, development time, and programmer productivity are incorrect. Software development is like physics: there is no objective way to know how long a program will take to develop."

Lewis also provides a link to this "introduction to incompleteness (a fun subject in itself) and other background material for the paper."

480 comments

  1. Software Schedules by JohnHegarty · · Score: 4, Funny

    There is only two type of software schedules

    1) As long as it takes.

    2) Take your best estimate , and double it and add 5 or something....

    It prefer the as long as it takes. Other wise you end up with something like Windows Me.

    1. Re:Software Schedules by Organic_Info · · Score: 2, Interesting

      "1) As long as it takes."

      As long as it takes to get it right. This to a point is a barrier opensource S/W does not hit to a large extent as development is continual till no longer required.

      An interesting question is when will Linux/*BSD development stop? Will it be surpased by an/other projet(s) or evolve to perfection?

      --
      "Things that you own end up owning you" - Tyler Durden (via Diogenes of Sinope).
    2. Re:Software Schedules by magi · · Score: 3, Informative

      2) Take your best estimate , and double it and add 5 or something....

      The standard multiplier used is PI.

      There are also some interesting results of programming speed in the Prechelt's comparison of different programming languages: an article, a tech report.

      One of the conclusions is that script languages such as Python or Perl are about 2-3 times as fast to program with than Java or C/C++, at least in the small projects. The script programs were also about half as long in lines. There were also some differences in the reliability of the solutions - Python and Tcl had a very good score compared to C, although the small sample size for C may give misleading results.

      I'd personally be very interested to see better data for differences between C and C++. I've recently been involved in C again after a long pause, and it seems like an awfully risky language to program with. However, it may be faster than C++, on average, and the Prechelt's results agree with this conception.

    3. Re:Software Schedules by memfrob · · Score: 1
      2) Take your best estimate , and double it and add 5 or something....

      No, no... Take your best estimate, double it, and convert to the next higher units. (minutes->hours->days->weeks->months, etc)

      Thus, a five minute project will take ten hours to finish, and a "two week project" will, in fact, take four months to complete.

      --
      The Wizard utters the word 'frobnoid!' and cackles gleefully
    4. Re:Software Schedules by flegged · · Score: 2, Funny

      Software design is ultimate application of Hofstader's Law, which states:

      Everything takes longer than you expect, even when you take into account Hofstader's Law.

      --

      "I think he was truly surprised at how little I cared about how big a market the Mac had" - Linus on Jobs
    5. Re:Software Schedules by EFGearman · · Score: 2

      Ummm... Closed source doesn't necessary hit it either. As a programmer, I can tell you that we often have time overruns due to a large variety of reasons. One of which includes QA finding some mistakes in our programming assumptions.

      EFGearman

      --
      Atomic batteries to power! Turbines to speed!
    6. Re:Software Schedules by Anonymous Coward · · Score: 0

      :o So then a 1 year project will take 2 decades?

    7. Re:Software Schedules by jester · · Score: 1

      Nonsense. Those are the typical estimates that I hear in the industry, yet with experience it IS possible to make sensible estimates of timescales. The problems come in when

      1. you are dealing with "unknown" areas ... e.g where you have never written such and such a feature, and are making a total guess.

      2. when you make estimates based on yourself, and someone else ends up doing the work, and they havent got the necessary experience.

      The estimates I give to clients are always with the proviso that it is how long it would take me to do the work to meet the necessary spec - this gets over the second area, and the first one I can always narrow down to within say 20% of what in practice it takes me .... but then again my estimates are based on 15 years in the industry.

    8. Re:Software Schedules by a9db0 · · Score: 1

      The preferred multiplier is the page number.

      --
      -- "Never underestimate the power of human stupidity." - R.A.H.
    9. Re:Software Schedules by ayjay29 · · Score: 1, Informative

      I have heard that one too.

      If you have not done it before, use PI.
      If no one has done it before, use PI squared.

      The book 'Rapid Development' has an exclent chapter on this. It says that the first estimate could be 50% out either way. As the project progresses, revised estimates will offer a more accurate prediction.

      --
      Offtopic, Inflammatory, Inappropriate, Illegal, or Offensive comments might be moderated up.
    10. Re:Software Schedules by Pathetic+Coward · · Score: 0

      1a) We ship when the money to pay the developers runs out.

      1b) We sell the company before the prospective buyer realizes that no one can make money in technology anymore.

    11. Re:Software Schedules by argon405 · · Score: 2, Interesting

      >One of the conclusions is that script languages such as Python or Perl are about 2-3 times as fast to program with than Java or C/C++, at least in the small projects

      the biggest problem of all, is people with experience in small projects trying to apply that to large ones. Working on a million LOC program and a 20k LOC program simply can not be compared. We can speak of orders of magnitude difference, but unless you've worked on very large systems, you really don't have a clue.
      And of course, the vast majority of people who have time to write books and papers work on the small systems.

    12. Re:Software Schedules by DrSpin · · Score: 3, Insightful

      You are forgetting politics: I have been explicitly told Your estimates are unacceptable - they will have to be halved!

      Others have mentioned "creeping featureism".

      There is also the "event Horizon" - When faced with a project of infinite size, people will tend towards an estimate that is based on their idea of how long it takes to solve an infinite problem. For a salesman, this is a couple of days. For a typical manager, a couple of weeks. For an engineer, a couple of months.

      For estimates to be meaningful, the work has to be divided into units which you can guarantee will never exceed your event horizon.

      I have managed many successful estimates on large (over one year, more than 5 people) projects, based on the method that it needs an average of two weeks to implement, document and test, any feature of the project you can identify before the project starts.

      By "feature" I mean explicit bit of behaviour by the code eg "ack an inbound packet", "echo the character on the serial line". I know any amount of people who can code this in 3 minutes in perl or whatever. That is not the same as developing supportable code. All loops have to be unwound, all nesting flattened. Every level of the heirarchy has to be accounted for serially.

      Let me introduce Dr Spin's 2:1 Law: Supportable code needs 2kg of paperwork per byte of executable code. Includes minutes of meetings, sketches on envelopes. (Most of it is binned, but it still has to be created).

    13. Re:Software Schedules by johnnyb · · Score: 4, Insightful

      The truth is, you can somewhat accurately estimate project time. The problem is, few know how.

      The thing is, you must get entirely through the design stages first. The design stages should include every screen as well as every possible error message, sub-screen, or whatever can pop up, as well as an outline of how the program flow will go. This takes a lot of time, but not quite as much as it sounds.

      Once you have done the complete design, you can accurately make schedules. The problem is, most programmers put all error handling and messaging off as something that doesn't need to be designed. That's where the extra time comes in. If you know _exactly_ how the program flow is supposed to work, estimating time is easy. However, if you haven't finished the design stage, YOU DON'T KNOW WHAT YOU'RE PROGRAMMING, so, obviously, you can't estimate the time. So, with a _complete_ design, including all possible error conditions and actions to be taken, scheduling is not that hard.

    14. Re:Software Schedules by SpeelingChekka · · Score: 2

      Yip, I really like C++ (i.e. I enjoy programming with it), but there's no question it isn't the best solution for everything. We use it at work for most our stuff because we need the speed (3d simulators), but for many types of projects its definitely not the best solution, with not only longer development and more LOC but also more bugs than other solutions (a good percentage being pointer-related bugs, e.g. dangling pointers, also things like uninitialized variables etc, and in general you spend more time with memory management). If you don't need speed, rather use things like Python/Tcl/VB/Delphi etc. Simpler, more maintainable, lower ADT (Application Development Time) etc.

    15. Re:Software Schedules by stilborne · · Score: 1

      but how long does it take to do the planning? obviously that is part of the time to complete the project, so can you tell how long such planning will take for a given scenario?

      this also assumes nothing changes after "planning" is done. heh. yeah, sure.

    16. Re:Software Schedules by batboy78 · · Score: 1

      There was a program that I went through called Personal Software Process, that was taught by someone at Carnegie Mellon University, in the Software Engineering Institute division. He taught us that by keeping track of certian factors including the LOC (lines of code) you can write an hour, peer review times, and a host of others that schedules can be very accurate, but it is all part of a very well defined process.

      Check it out about

    17. Re:Software Schedules by Tackhead · · Score: 2
      > 2) Take your best estimate , and double it and add 5 or something....

      You forgot the important step. "...and report the number in the next-larger unit of time measurement."

    18. Re:Software Schedules by AppyPappy · · Score: 1

      Nah. A whole bunch of suits are sitting in a meeting and one says "I need it by March" and the CIO nods his head. That's the deadline. It doesn't matter how you plan it but that's the date.

      Oh and the CIO can't tell anyone about the project for a month.

      --

      If you aren't part of the solution, there is good money to be made prolonging the problem

    19. Re:Software Schedules by 1010011010 · · Score: 3, Insightful

      This reminds me of "The New Jersey Method versus the MIT method."

      The MIT Method is to take as long as needed to get a task done "right," regardless of cost and schedules.

      The New Jersey method calls for solving 80% of the problem, and putting off 20% until later.

      The MIT method results in more project failures than the New Jersey method. Microsoft epitomizes the New Jersey method, as does open source. Multics followed the MIT method, and was never actually finished, just killed off years later...

      If anyone has a reference for the "MIT vs NJ" in its original form, please post it.

      --
      Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
    20. Re:Software Schedules by 1010011010 · · Score: 2

      Here is the original "New Jersey versus MIT" text.

      --
      Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
    21. Re:Software Schedules by panda · · Score: 2

      And the meeting takes place in January!

      --
      Just be sure to wear the gold uniform when you beam down -- you know what happens when you wear the red one.
    22. Re:Software Schedules by rodgerd · · Score: 3, Funny

      Most successful large projects are in COBOL, assembler, or REXX. Especially COBOL.

    23. Re:Software Schedules by tdelaney · · Score: 1

      I've always followed the method of "double, then increase the units by one"

      5 minutes == 10 hours
      1 day == 2 weeks
      2 weeks == 4 months
      4 months == 8 years ...

      Just don't ask about those 2-year projects ...

    24. Re:Software Schedules by gidds · · Score: 0
      We found a large difference between C++ and Java - with Java being up to five times faster end-to-end.

      As has been pointed out, static and dynamic languages have different areas of application. I'd hate to have to maintain 8MB of Perl code, for example...

      --

      Ceterum censeo subscriptionem esse delendam.

    25. Re:Software Schedules by xmedar · · Score: 2

      You are forgetting politics: I have been explicitly told Your estimates are unacceptable - they will have to be halved!

      Yes, I once worked for a company like that, which has gone from $15/share to $0.09/share, fortunately I got out of there, as did other seasoned developers. My advice, if your boss starts on this track start looking for another job.

      Others have mentioned "creeping featureism".

      Again, bad management, all projects have changes within their development cycle, and there is a big difference between "tweaking" and "creaping featurism", if you encounter the latter talk to your boss, if he's a PHB and you're going to have to start working unpaid overtime, give up holidays etc look for a new job.

      Let me introduce Dr Spin's 2:1 Law: Supportable code needs 2kg of paperwork per byte of executable code. Includes minutes of meetings, sketches on envelopes. (Most of it is binned, but it still has to be created).

      You need to specify a fontsize for that to be useful... oh and all the docs should be on the docs leaf of the code tree, everything that you scribble on paper that makes a difference to project needs to be transcribed. As for supporting the software, typically ~60% of the cost of a project is supporting it, if you code things that are badly documented and designed you can make it over 80% support cost. Everyone needs to understand this, and a good thing is to make sure thats taken into account at code reviews, and develop some metrics so you know how you're doing.

      --
      Any sufficiently advanced man is indistinguishable from God
    26. Re:Software Schedules by Anonymous Coward · · Score: 0

      1b) We sell the company before the prospective buyer realizes that no one can make money in technology anymore.

      So you must be the guy who stole the Netscape business plan then...

    27. Re:Software Schedules by xmedar · · Score: 2

      The thing is, you must get entirely through the design stages first. The design stages should include every screen as well as every possible error message, sub-screen, or whatever can pop up, as well as an outline of how the program flow will go. This takes a lot of time, but not quite as much as it sounds.

      Typically we estimate a design flaw is ten times more costly than an implementation flaw and a specification flaw is ten times the cost of a design flaw. In other words you need to really nail down the spec and design before you begin to think about coding.

      --
      Any sufficiently advanced man is indistinguishable from God
    28. Re:Software Schedules by TheLink · · Score: 2

      Erm, but the boss usually wants to know how long it takes to spec, design and to program it. E.g. how long to do the whole darn thing.

      Because that's what the boss wants to know for sure because _his_ boss wants to know an absolute date when the project will be finished.

      It takes a pretty resilient boss to tell his boss/the customer "Wait till our guys do the spec and design first then we'll tell you how long it takes".

      And often it takes longer to spec and design than to type the code down.

      Spec and design is just like doing the architecture for the blue print and building some nice plastic model for the marketing dept.

      Once the blueprint is done, given no unusual/untested materials/designs most people can estimate how long it'll take to build.

      But how long does it take to design the building in the first place? I think the architect design problem is very similar to the software design problem.

      And even worse: with software the "nice plastic model" actually runs and seems to work, so the marketing dept goes and sells it for real :).

      Cheerio,
      Link.

      --
    29. Re:Software Schedules by marhar · · Score: 1
      It's from Richard Gabriel. JWZ has a copy at http://www.jwz.org/doc/worse-is-better.html

      It contains the excellent advice "The lesson to be learned from this is that it is often undesirable to go for the right thing first. It is better to get half of the right thing available so that it spreads like a virus. Once people are hooked on it, take the time to improve it to 90% of the right thing."

    30. Re:Software Schedules by tradervik · · Score: 1

      Methodology is good but is not a panacea for the basic scheduling problem. In essence, a development team cannot accurately predict the amount of time to design and implement something unless they have experience designing and implementing something quite similar.

    31. Re:Software Schedules by DrSpin · · Score: 1
      You need to specify a fontsize for that to be useful... oh and all the docs should be on the docs leaf of the code tree, everything that you scribble on paper that makes a difference to project needs to be transcribed.

      Probably not. If the font is smaller, you get more, but fewer people read it. "Yer pays yer money and takes yer choice"

      I have used a tool which which allows you to embed the documentation in the source files. make then strips it out and builds a single manual for the project. Its quite cute, but not always what you want - you often end up with a lot of low level and no high level.

      I've also used UML. You often end up with a ton on mindless dross, totally unconnected to the code.

      The major factor in all this is having good guys on your team. Just like some footballers are worth $6,000,000 and some are not worth a toss, so it is with software engineers. Unfortunately, no one pays good software engineers $6,000,000 - so their teams are crap.

      If there were as many OS writers as premier league football teams, M$ would be in the Scottish fourth division.

    32. Re:Software Schedules by magi · · Score: 2

      We found a large difference between C++ and Java - with Java being up to five times faster end-to-end.

      That's interesting. Did your tasks require very special libraries which Java includes by default? What base libraries you used for C++?

      There's an enormous difference between coding C++ with a good class library such as Qt or just using the default classes. STL doesn't count, it's pretty useless.

    33. Re:Software Schedules by Henry_Doors · · Score: 1

      Nice theory - have you ever tried putting into practice on a project? A few questions...

      Are your users always able to specify the requirements exactly before they see the system?

      Does nothing ever change after the design stage - or it just that you don't allow change?

      Do you never encounter problems when coding that were not foreseeable when designing?

      To be honest if you take this approach I am surprised you ever get to the coding at all. Yes coding to soon is the cause of a lot of problems but the idea that you can get a complete perfect design before you start developing is just ludicrous.

      --
      "I deny nothing, but doubt everything." Lord Byron
    34. Re:Software Schedules by xmedar · · Score: 2

      I have used a tool which which allows you to embed the documentation in the source files. make then strips it out and builds a single manual for the project. Its quite cute, but not always what you want - you often end up with a lot of low level and no high level.

      Yes, I use Javadoc and various other packages to achieve the same end, it's certainly good practice.

      I've also used UML. You often end up with a ton on mindless dross, totally unconnected to the code.

      Like all things it needs to be used in moderation, UML can certainly be useful, having the Use cases down I find is good for concentrating the minds of developers and helping them stay on target ( i.e. using a saucer of milk to herd the cats )

      The major factor in all this is having good guys on your team. Just like some footballers are worth $6,000,000 and some are not worth a toss, so it is with software engineers. Unfortunately, no one pays good software engineers $6,000,000 - so their teams are crap.

      Thats what share options are for, unfortunately it is easier to assess a footballers performance than a developers, thats why you need to have good metrics and have responsibility for code clearly delinearated.

      --
      Any sufficiently advanced man is indistinguishable from God
    35. Re:Software Schedules by gidds · · Score: 0
      Did your tasks require very special libraries which Java includes by default?

      It was about 3.5 years and two jobs ago, and I wasn't really involved in the C++ side, so I don't really remember. I think it was non-GUI, many small classes forming part of a huge business app. Although coding itself was faster, I they found the real gains were in debugging and other post-coding stages.

      --

      Ceterum censeo subscriptionem esse delendam.

    36. Re:Software Schedules by johnnyb · · Score: 2

      Are your users always able to specify the requirements exactly before they see the system?

      **

      Generally, yes. That's the design process. They are seeing the system, because we actually draw pictures of it.

      **

      Does nothing ever change after the design stage - or it just that you don't allow change?

      **

      I allow change, it just comes with the understanding that it includes a schedule change. The necessary parts have to go back through design.

      **

      Do you never encounter problems when coding that were not foreseeable when designing?

      **

      Yes, but it is pretty rare. Obviously, no matter what, you can't forsee everything. But you can forsee most things.

      **

      To be honest if you take this approach I am surprised you ever get to the coding at all.

      **

      It takes a while, but the coding stage then becomes much, much shorter. By the time you get to it, all that's left is really typing.

    37. Re:Software Schedules by Henry_Doors · · Score: 1

      What size of projects are you talking about - number of developers, no of users LOCS etc.

      We used to use screen layouts but switched to prototypes as business users had real problems visualising system flow from static pictures.

      --
      "I deny nothing, but doubt everything." Lord Byron
    38. Re:Software Schedules by johnnyb · · Score: 2

      # developers ~3
      # users ~8

  2. In all seriousness, this is the wrong place to ask by Junks+Jerzey · · Score: 2, Flamebait

    The majority of Slashdot readers are students without any notable software engineering experience. Sure, not everyone here fits this description, but it's certain that there will be lots of hearsay, what-my-professor-told-me responses, and misguided personal theories based on blind idealism.

  3. Of course they can be estimated. by Anton+Anatopopov · · Score: 5, Insightful
    But not with any degree of accuracy. Function point analysis is one method that has had some success. The key to delivering projects on time always has been and always will be RISK MANAGEMENT.

    Software development is not a science in the normal sense. Designing large software systems is an art. It cannot be pigeonholed. Stroustrup has a lot to say about this when he describes the 'interchangable morons' concept in the 2nd edition C++ book.

    Anyway, read Death march by Ed Yourdon, and the mythical man month by fred brooks, and antipatterns, any time someone asks you for an estimate say 'two weeks' and then bullshit from there on.

    That is how it works in the real world. The numbers are essentially meaningless, but the bean counters and suits have to justify their existance somehow :-)

    Can you imagine asking Linus when 2.5 will be ready ?

    1. Re:Of course they can be estimated. by maroberts · · Score: 1

      Can you imagine asking Linus when 2.5 will be ready ?
      You mean 2.6 (or maybe 3.0) surely - 2.5 will be another development branch. I believe a 2.5 branch is to start Real Soon Now and therefore test releases from that should come every few weeks or so.

      --

      Donte Alistair Anderson Roberts - hi son!
      Karma: Chameleon

    2. Re:Of course they can be estimated. by sql*kitten · · Score: 4, Insightful

      Software development is not a science in the normal sense. Designing large software systems is an art. It cannot be pigeonholed

      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      That is how it works in the real world. The numbers are essentially meaningless, but the bean counters and suits have to justify their existance somehow

      The problem is endemic in the industry. The other Engineering professions require rigorous accreditation before they let practitioners loose in the world, like the PE (in the US) or the Charter (in the UK). But the software industry hires anyone, and lets them get on with whatever they do, with no real management or oversight or planning.

      In a well analyzed and properly planned project, the actual coding stage is little more than data entry.

    3. Re:Of course they can be estimated. by KyleCordes · · Score: 5, Insightful

      This approach applies, more or less, sometimes MUCH less, depending on how well understood the problem domain is, how many times you have done it before.

      If you're building your 57th e-commerce web site, which works roughly like the 56 you build before, you can estimate very, very well, and you can reduce coding to nearly data entry.

      If you're solving a problem of unknown scope, which your team has not solved before, which the solution is not clear to, and analysis has revealed some but not all of the details, etc., then you are not very right.

    4. Re:Of course they can be estimated. by keath_milligan · · Score: 2, Insightful

      If the software industry were saddled with the same level of process that exists in other engineering professions, we'd still be using character-based software, the web and the internet as we know it today wouldn't exist and most business would still be conducted on paper.

    5. Re:Of course they can be estimated. by xyzzy · · Score: 5, Insightful

      I agree with your risk management comment, and a later poster who mentioned fixing the endpoint, but I'm not sure I agree on your claim that it can't be pinpointed with any degree of accuracy.

      After ~15 years in the industry, I've found that one thing that makes a huge difference is the experience of the team, and the familiarity between the actual engineers and the project management.

      As you have experience solving a variety of classes of problems, you can predict with increasing accuracy the time it'll take you to solve later problems. And as your management sees you getting increasingly accurate in your estimates (based on past projects) they can create better and better schedules and estimates for the project as a whole, and have a better intuition for the gray areas of development, or the greener developers.

      Projects that tend to go off into the weeds have included (in my experience) wholly green teams, wholly green management, or areas of development that are outside the areas of expertise of one or both.

    6. Re:Of course they can be estimated. by SLOGEN · · Score: 1

      Please explain to me how an estimate without a bound on the accuracy of the estimate is anything but a guess?

      --
      SLOGEN [ http://ungdomshus.nu : Sebastian cover music]
    7. Re:Of course they can be estimated. by john@iastate.edu · · Score: 5, Funny
      Writing software is not like building bridges because halfway through the project some dumbass from marketing doesn't come down and tell you that concrete is out and so it needs to be a steel bridge. Oh, and those tacky cables have got to go -- the focus group hated them.

      --
      Shut up, be happy. The conveniences you demanded are now mandatory. -- Jello Biafra
    8. Re:Of course they can be estimated. by mobiGeek · · Score: 2, Insightful
      Software development is not a science in the normal sense. Designing large software systems is an art. It cannot be pigeonholed.

      An experienced software project manager can usually be quite accurate in estimation of effort for a well analyzed software project.

      This, however, highlights a few problems in The Real World:

      • many (most?) software projects are ill defined.
      • many (most?) software projects are not analyzed properly prior to the start of architecture design and start of coding
      • many (most?) software projects are not resourced properly up front; resources are thrown haphazardly at a project once deadlines are quickly approaching
      • many (most?) software projects are given unrealistic deadlines prior to analysis being done
      • many (most?) software project leaders do not have the political experience needed to manage the business expectations of a project [most engineering schools have mandatory Management Sciences courses for their students. Most CS schools avoid Humanities courses...yes, I am a CS grad].
      • many (most?) software senior developers are not encouraged to get involved in the "business" aspects of software projects.

      Am I too pessimistic? I don't believe so.

      --

      ...Beware the IDEs of Microsoft...

    9. Re:Of course they can be estimated. by clare-ents · · Score: 5, Insightful

      "
      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.
      "

      But that's simply not true. Writing software of anything that is non-trivial is not the same as straightforward engineering. For a start there is the rate of progress, how many people have 30 years + experience of building 50 story + buildings. How many people have 30 years + experience of dealing with terabyte + sized datasets?

      When buildling software previous code can be reused for a very small amount of effort, when building skyscrapers the previous design can be reused for only marginally less effort than the last one.

      Compare the difference between building a C compiler from the gcc source and the world trade centre from the blueprints.

      Essentially the estimate is

      Time = [time to do the bits we know how to do [accurate] ] + [guess for the bits we don't know how to do [inaccurate] ]

      With software, the first part of that expression tends towards zero since most things we know how to do we can reuse code, whereas with building it remains a large accurate estimate.

      The error here will be of the form

      Error = [variance of inaccurate terms] / [total]

      For the example of a skyscraper whos construction is mostly a known method this will tend to a small number since the inaccuate term is much smaller than the accurate term, but for software with reuse of all the known methods of coding this will tend to 1 - i.e.. 100% error in the estimate and hence the conclusion that it's worthless to even bother estimating.

      In my company we can accurately estimate how long projects will take providing the projects are mostly identical to ones we have done before, and if this is the case it generally costs the client more in programmer time in meetings to dicuss the cost of the job than it does to write it.

      --
      Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. (Einstein)
    10. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      Amen to that. I do a large amount of modeling and system evaluation by programming as an engineer. The majority of the work is done before I ever sit down at a terminal. I've seen my peers just try to "hack" away at writing a simulation program, by sitting down and figuring out the problem as they go. All I need to do is plan it beforehand, and I can easily crank out better code, and faster.

      If more software "engineers" would approach any type of programming this way, you wouldn't see such shoddy code. Sure smart hacks on the fly are great and all, but it's impossible to make anything noteworthy without proper planning.

    11. Re:Of course they can be estimated. by Mr.+Slippery · · Score: 2, Insightful
      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper.

      We'd like it to be so, but it ain't.

      The behavior of bridges and skyscapers is determined by classical physics, which allows us to make precise predictions.

      The behavior of computer programs is governered by complexity theory, which tells us that any reasonably complex program has non-predictable behavior. And the manageability of software development depends on human understanding and appreciation of code - there's an aesthetic factor.

      Certainly things could be better...the fact that something has a large component of art doesn't mean that there aren't areas of mastery for a practitioner to study. But at its heart, the creation of complex software requires a creativity and intuition that cannot be set to a timetable.

      (Yes, one can "engineer" art to some degree - popular music being an example, where teams of marketers follow formulas to construct the next boy band. But that does not result in a quality product that stands the test of time.)

      In a well analyzed and properly planned project, the actual coding stage is little more than data entry.

      But the problem still applies to the design phase.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    12. Re:Of course they can be estimated. by CaptainSuperBoy · · Score: 3, Interesting

      the software industry hires anyone, and lets them get on with whatever they do, with no real management or oversight or planning.

      The software industry doesn't hire anyone. Software companies hire people, and a company that behaves like you described won't be around for long if software is their main source of revenue.

      Also, management != good software engineering. Planning != good software engineering. These are all factors that go into a good software project but people shouldn't think that if they draw class diagrams before they start coding, they're suddenly software engineering.

      On the other hand, you need to look at what's best for the project - it isn't always a large, formal approach to software, especially for small projects. Being too rigid can be as bad as being too loose with your design. I've seen projects design themselves into a corner before the first line of code is even written.

    13. Re:Of course they can be estimated. by halflinger_n · · Score: 2, Insightful

      And beyond the marketroid messing things up. In the physical world you just would not build some things certain ways - they would fall down. (This is one reason that engineers need certifications and licensing - a way of making sure that none of them will succumb to the marketroid telling them that "concrete is out - use this cool blue toothpaste to build that bridge" I think this kind of licensing would be very difficult to enforce in SW eng. though that is for another discussion... (which IIRC has already happened here...) In the world o' software there is no upper limit to the amount of complexity you can add to a project, some of the complexity comes in automatically (various OS's, hardware profiles, DB's etc.) and some is sprinkled liberally by the marketroids who tell you that now it has to have an "XML tie in" either one is enough to make it "fall down" alone. Isn't that the fun of it? (No - you're not allowed to beat the marketroids... that one is the boss's nephew...)

    14. Re:Of course they can be estimated. by ethereal · · Score: 1
      The software industry doesn't hire anyone. Software companies hire people, and a company that behaves like you described won't be around for long if software is their main source of revenue.

      Many people believe this to have already occurred...

      --

      Your right to not believe: Americans United for Separation of Church and

    15. Re:Of course they can be estimated. by Overt+Coward · · Score: 5, Insightful
      The key to function points -- or any other -- estimation techniques is relying on historical data to predict future results. This means that they are fairly accurate as long as you collect metrics and stay within the same general project domain and relative project size. The more radical the departure from historical size or domain the new project is, the less accurate an estimate will be.

      However, the biggest thing to remember is that no matter what estimation method is used, the simple fact that a methodical approach to analyzing the problem will almost always yield a reasonable estimate.
      The main reasons projects go over schedule and budget are:

      1. "Feature creep" -- having the requirements change significantly over the course of the project without adding the impact of changes into the schedule.

      2. Rampant optimism -- many engineers (and managers) will typically estimate how long they think it should take to do a specific task but will not add in a buffer in case somthing goes wrong. And something always goes wrong.

      3. Artificial deadlines -- project schedules where the budget (time and money) was set by customer/marketing committments, and not by the technical requirements at all.

      4. Calendar/personnel issues -- people take vacations, there are holidays, and people occasionally fall ill. Plan for it. Also, don't forget any company/department meetings, training, seminars, etc.

      5. Dependencies -- if a required piece of hardware or software won't be available (or is late), it can impact the overall schedule, espeecially if critical path tasks depnd on those materials.

      Risk management is indeed the key. As the project manager or lead engineer, it is your job to predict what potential risks might be and attempt to mitigate them on a cost-effectiveness basis. You can still be bit by bad luck, but you can minize the chances it will strike.
    16. Re:Of course they can be estimated. by EllisDees · · Score: 1, Informative

      Did you read the article referenced at the top? The problem isn't with programmers, but with the math that underlies all programming. If you have to develop an entirely new system, you can run into a version of the halting problem - that you cannot accurately know ahead of time how long it will take to transform your concept into a functional program.

      --
      -- Give me ambiguity or give me something else!
    17. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      ...sounds like real-world engineering, too.

      While a construction engineering company like Perini may be able to throw together huge buildings, with no sweat, I would not ask them to build a highway. Sure, they have the talent and could eventually do it, but it would not be as efficient as hiring a company with major road engineering experience.

    18. Re:Of course they can be estimated. by bedmison · · Score: 2, Insightful
      I think it is important to distinguish between building custom systems and building shrinkwrapped apps. It IS possible to estimate, with a fairly high degree of accuracy, projects which have a fixed set of FULLY defined requirements. This means everyone interested in the project signs off on the requirements before the first line of code is written. This very useful for beating you customer into submission when they change their minds 3 months into the project.

      Shrinkwrap developers face a much different problem, in that the requirements are often set by the marketing goons based on a tenuious grasp of what they THINK the buy public wants, as opposed to actually polling existing users to find out what they REALLY want.

    19. Re:Of course they can be estimated. by Doomdark · · Score: 2
      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      Pardon my saying this but... Oh sweet Jesus what a load of complete crap!

      I don't want to start "yes you do no I don't" style argument, but I'm afraid it's attitudes like yours that are just digging a deeper hole for all of us. Software engineering is an oxymoron; s/w development is nothing like engineering. People who try to view it as such are trying to force rectangular boxes through round holes. Thinking that it's not people who create systems but procedures that guarantee success. Thinking that 1000 monkeys -- given rigorous procedures, methods, specifications and processes -- are capable of creating well-defined high-quality s/w systems.

      Software implementation is craftmanship. S/w implementors (architects, programmers) are (should / have to be) skilled craftsmen, like highly skilled swordmakers. They have to know a lot of basics from CS and also application area; need experience, have to learn from both their own and others' mistakes (experiences). But you just can't take 1000 monkeys, and with good strict engineering guidelines produce quality systems. And yet people who can't implement s/w systems themselves think they really understand how things can be made to work using well-defined standardized "software engineering" guidelines and procedures. If that was (or ever is) true, the craftmanship part has already been done before the monkeys, using more resources for creating strict definitions (to instruct stupid monkeys), than it would take for skilled professionals to define, design and implement the system.

      This is not to say there isn't anything to learn from actual engineering. There is, certainly. But relying only on engineering history is a guarantee for complete and total failure. I'm not advocating "rogue coder" ad hoc methods. But the processes, procedures etc. have to support professionals, not the other way around. In addition, my own experience has been that when people gain more experience, they become more (not less) disciplined, more professional (perhaps there are prima donna - exceptions though). Or, if they have been spoon-fed too much s/w pseudo-science, they get more relaxed, trying to find a proper balance of process overhead and productivity.

      Finally:

      In a well analyzed and properly planned project, the actual coding stage is little more than data entry.

      I take it you have never ever programmed, ie. implemented any serious-sized systems? Systems that can be coded trivially given specifications, could usually be automatically generated from a high-level specifications. In fact, what you refer to ('trivial coding') is, in real life, done by programs called "compilers". Programmers, then, feed these 'trivial machines'. This doesn't make the actual main task much less complex. Tools, tools, tools. Craftsmen have to know their tools, and like using best tools available.

      --
      I like paying taxes. With them I buy civilization -- Oliver Wendell Holmes
    20. Re:Of course they can be estimated. by cburley · · Score: 2, Interesting
      Software development is not a science in the normal sense. Designing large software systems is an art. It cannot be pigeonholed

      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper.

      But software development, which the other poster was talking about, isn't necessarily software engineering.

      I've been titled "software engineer" (with appropriate prefixes) most of my salaried career, but when I made up my own title as an independent consultant, I went with "software craftsperson", because engineering, itself, isn't the major focus of the sort of software I am usually called upon to develop (operating systems, compilers, generally software-development toolchains).

      Of course, I try to improve the engineering-to-black-art ratio of software I work on compared to the "norm", because I believe the engineering approach, when usable, is superior.

      But actually calling myself an "engineer" seemed, and still seems, a case of calling myself by a title I respect while not being willing to insist on meeting the standards normally associated with that title.

      Generally, I find the industry -- including clients and customers -- prefer "good enough yet modestly expensive and time-consuming" to "well-engineered, way too expensive and never accomplished", which is what estimates produced in the early stages of a project tend to look like for "development/hacking/coding/programming" vs. "engineering" as respective approaches.

      And since most of my clients view the software I am to develop for them as merely one component in a large scheme of software, man-power, and so on, it really is up to them to best determine and evaluate their own optimization function and then decide how they want me to approach my work.

      Naturally, if I was asked to develop software that controlled life-or-death machinery, I'd demand a higher standard. But the real issue would be, would the client demand such a high standard that they wouldn't even consider me for the work, given my history of working on the sort of software that is widely known to be critically buggy despite decades of industry-wide experience developing it -- operating systems, compilers, text editors, assemblers, linkers, and similar utilities?

      Fortunately for me, the free market highly values someone like myself who can churn out productivity-enhancing tools (say, a 5% improvement optimizing a code generator), helping hundreds or even thousands of others make better use of their time and computing resources.

      So, whether I could actually engineer something like a FORTRAN 77 compiler for a specific '80s-era computer, I can't exactly say. I'd like to think I could. But nobody ever asks me for that. Instead, they ask for new features, better performance, debugging help, and the like, always involving software that has been (or will be) developed with only a modicum of "engineering" used.

      Within that context, my use of "engineering" boils down to using proven software-development and coding techniques in usually-small, specific instances -- in the nitty gritty details of a project -- such as avoiding situations where variations of the same original data are separately entered and maintained, yet not consistency-checked as part of a product validation process (such as during a build). That sort of thing is mainly a matter of saving me some embarrassment when I screw up, plus helping others who'll maintain the code down the road from making easy mistakes that end up being hard to track down.

      (And on most projects on which I work, I'm treated as if I'm "going overboard" by most of my fellow developers, who seem to believe that it's okay to spend hours debugging vast, intricate code only to discover the problem is a mere typo that a simple sanity-check could have found in a few milliseconds. Sigh.)

      --
      Practice random senselessness and act kind of beautiful.
    21. Re:Of course they can be estimated. by Lish · · Score: 1

      Exactly. With most building projects or traditional engineering projects, _something_ similar has been done by _someone_ many, many times before. When a software project is essentially starting from scratch, there's little to base a real estimate on.

      --
      "This message is composed of 100% recycled electrons."
    22. Re:Of course they can be estimated. by BinxBolling · · Score: 1

      Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper.

      Is designing a skyscraper or bridge pure engineering, with no art to it? Hordes of architects would disagree.

    23. Re:Of course they can be estimated. by AndrewShaw · · Score: 1

      But that's simply not true. Writing software of anything that is non-trivial is not the same as straightforward engineering. For a start there is the rate of progress, how many people have 30 years + experience of building 50 story + buildings. How many people have 30 years + experience of dealing with terabyte + sized datasets?

      And, in fact, architectural failures of large physical structures seem to happen in 20-year cycles. The theory is that every new generation of architects needs to learn mistakes. So not only does the physical world have cost overruns, delays, and cancellations, it also has spectacular failures.

    24. Re:Of course they can be estimated. by Anton+Anatopopov · · Score: 2, Funny
      Writing software is not like building bridges because halfway through the project some dumbass from marketing doesn't come down and tell you that concrete is out and so it needs to be a steel bridge. Oh, and those tacky cables have got to go -- the focus group hated them

      Oh yeah, and while we are at it, it is no longer a bridge we want, it is a tunnel. And it doesn't cross the river any more, it is going to be used as a large wine cellar. And the 50million dollar budget is now 2 million, the 3 year estimate is now six weeks, we need you to use baseball bats and plastic spoons to dig the damn thing, oh yeah and when will it be ready ?

    25. Re:Of course they can be estimated. by Kiaser+Zohsay · · Score: 1
      In a well analyzed and properly planned project, the actual coding stage is little more than data entry.

      The "actual coding" in these cases is not "software development" but "systems integration". If all you are building is a database browser with CRUD screens, (that's Create, Read, Update, Delete for the IT impared) then you can use function points or whatever to crank out a reasonable guess. If the analysts have done all the analysis, the the design is straight forward. If not, you could spend weeks trying to solve a problem that is not solvable in software.

      The real complexity comes when you're not just hooking together pre-built components and designing screens, but when you have to solve a new problem that nobody has solved before (at least nobody that you know of). And there are enough of this type of problem lying about that you can stumble across one occasionally.

      Example: Given color data for two different types of cloth dye, decide whether or not one can be used after the other without scrubbing down all the equipment. Then use this information to schedule a set of dying jobs to minimize the time spent cleaning the equipment.

      --
      I am not your blowing wind, I am the lightning.
    26. Re:Of course they can be estimated. by nhavar · · Score: 2

      I'd like to add a few items to the list.

      • many Project Managers/Analysts when designing an app create documentation that is unreadable to the people actually writing the code. The design is often either too abstract or missing needed details. Project Managers have a tendency towards nice pretty design docs that look nice in a slide presentation or work well with marketing materials.
      • many projects are started at the marketing end of the business. This causes problems because often marketing assumes what the customer wants and requests it's building before specifically being asked by the customer. Some call this being "pro-active" but it often results in features that the customer rarely if ever uses, while the customer ends up waiting for that not-so-flashy feature that they asked for a year ago. Additionally the marketing people have a tendency to sell an idea or premise that may not be easy to implement or require rewriting significant portions of an application in order to function correctly. Lastly the marketing team typically decides what the release cycle should be based on their own voodoo mathematics (sales figures, implementation dates, contract renewals, etc.) In the end there's very little room for push back or date correction from the Project Manager or the Coder due to the fact that customers have already "been sold on the timeline". This push then usually results in one of two things a) a buggy product b) a reduction of the features (sorry we had to skip something to get it in by the date you asked for)
      • most projects are miscommunicated. Sometimes this is referred to as "the customer not knowing what they want", but often it ends up the person taking the request has misinterpreted the customers wants and not clarified it. There can also be semantic issues between the customer and the designer causing features to be designed in that are not correct and at testing time will be called out by the customer and cause a redesign or rewrite of the code. Another problem closely linked is the failure of some companies to follow procedure in the hopes of "expediting" an implementation. EX: Business documents are created but some last minute touches are missing that the customer must give before the project can be started. Since the information is "non-critical" the customer is given some time to gather the information. In the mean time the docs are shipped off to the designer/coder without having been signed off on by the customer. Coding begins and at the last phase of coding the information that was needed from the customer is still absent. When asked the information will be available two days before roll out. Twenty-four hours before roll out the customer forwards the information to the designers. The information is either inaccurate, the wrong information, or does not fit within the original design framework. When pressed for the correct information and shown how it fits in the application the customer balks and says that's not what they requested and cites the UNSIGNED business requirements as "We didn't sign off on that yet."
      • many projects are handled by multitaskers. These people are programmers/analyst/project manager/technical support/business liaisons. Their actual job title often has nothing to do with their actual role in the company. Because of this they often get left out of important meetings or invited to ones that have no bearing on their actual duties. This and supporting the customer often takes up a significant, and difficult to estimate, amount of time. Often when supporting a customer the task falls outside of their area of duty and given the fact that many others are in the same "mismatched" job descriptions then the person in need of support gets bumped around to four different departments tying up their time also. This mismatch job description problem also causes problems when attempting to schedule resources for projects because the project manager will need to know (and never does) all of the persons duties in order to correctly identify the persons availability for the project. Additionally the project manager will need to know the skill set of the person being scheduled. The person being scheduled will often have a title or be in an area of the company that would suggest a certain skill set and this is very often inaccurate. This problem often leads to the wrong person being scheduled into the project and then that person needing to learn a skill or fudge their way through to get the project done.
      • Contract work and documentation: I've seen many many contractors brought in to work on "last minute" projects. One particular contractor was very good about documenting his code and very methodical in his design work. Unfortunately he had a flair for the obtuse. Every object and piece of code he created was abstracted so that it "might be" "someday" used differently. This created problems when other people attempted to use that code or when standards changed. Whole structures of code had been built and used to hold the simplest pieces of data (I.E. Monetary values). When those structures became deprecated it became harder to switch to the new code because we could not go back and rewrite the old because of time issues and casting/converting from the old structure to the new structure was difficult or a lengthy process. Additional problems arose from the use of bleeding edge code and items that were still on some ways theory. Many of the less adept coders simply choked on figuring out the code and had to spend extra time deciphering it into something they could easily understand. Other contractors also came on and like some full time employees these contractors didn't have the training or time for proper documentation. This often meant that once they left and someone had to go back and "fix" any of their code it would take extra time to decipher it.
      • Many projects have problems with abstraction and modularity. Within a large project a person might be given a task that seems fairly simple and straitforward. They complete their task in the time allotted, unfortunately because they did not know where the object would attach in the grand scheme of things they failed to format some value correctly, or pass some object or catch some exception. Or because they did not know the audience the product would be used by they did the interface improperly they then have to go back and in some way redesign or recode. While this might be less frequent another common result is the duplication of effort. One project is started to fulfill a need that another party has already fulfilled for someone else. For example: the company that I work for decided to create an intranet application to provide internal users the ability to check on customer information. The decision was made that web applications would be the way to reduce support needs and consolidate functions. The problem being that after creating our intranet application another team was set up to duplicate many of the features for the internet. The structure was already there, services already in place to get the same customer information that would be needed externally. It was presumed that since they were dumbing down the interface/front-end that the services would like wise need to be dumbed down. This was all done not understanding that our core components were already designed with this in mind. Once it did come to light it was decided because of the amount of money already spent that the duplicate project would proceed. Because of the way people are given projects in the company and basically told they don't need to know about other projects the "internet group" was doomed not only to create a duplicate product but also to repeat many of the mistakes and replicate many of the problems that the intranet group had already run into. Not having the knowledge ended up costing the company millions and drained off resources from other projects pushing them behind also.
      --
      "Do not be swept up in the momentum of mediocrity." - anon
    27. Re:Of course they can be estimated. by ericlj · · Score: 1

      The problem with all the methods that claim to develop good estimates of time are that they require that you know in advance the size of the project, the number of programmers available and how good they are. They just move the estimation problem to these dependencies.

    28. Re:Of course they can be estimated. by xsbellx · · Score: 3, Interesting

      This brings to mind the old quote "If builders built buildings the way programmers wrote programs, the first wood pecker that came along would destroy civilization".

      When looked at in the context of practical experience, this is quite false. We have been building buildings for at least several thousand years with some tremendous success and some spectacular failures. I live in Toronto where we were lucky (I think) enough to have the first major league baseball stadium with a retractable roof. IIRMC, the original cost estimates were in the vicinity $100 million (CND). When the stadium opened (pretty close to on time), the cost was actually around $480 million (CND).

      I guess this somewhat proves you can estimate either cost or time accurately but not always both. My experience in the IT industry has shown that most problems can be over come with enough resources. Unfortunately, resources are not limitless and therefore consessions must be made. This generally means the completion date slips or functionality is reduced or a combination of both.

      --
      If VISTA is the answer, you didn't understand the question
    29. Re:Of course they can be estimated. by Guil+Rarey · · Score: 1

      I AM a bean counter, and, frankly, this pisses me off.

      Folks, being able to present a realistic and credible picture of how a company's finances will develop in the future is the name of the game. If you can't do that, sooner or later (sooner now) the financial plug will be pulled, either by higher levels in the corporation or by investors. I can't do that, and therefore secure the funding that is needed to continue YOUR employment (and mine) if all I have to work with is B.S. forecasts and B.S. excuses. It is not necessary to be dead nuts accurate, but enough information to explain what is happening and why things have not turned out the way you said previously IS IMPORTANT.

      My other comment is that different kinds of forecasting apply to different projects. For well-defined problems, where the project scope is pretty clearly understood, where you are applying known software engineering techniques to a fairly well understood problem, the forecasts should indeed be tight - schedule and resources spelled out in advance and pretty much attained. Let's be honest. Many if not most software engineering projects can indeed be fit into this category. It's not sexy, it's not exciting, but it is effective (financially speaking). Reinventing the wheel is always lousy engineering. Trying to invent a mag-lev motorcycle when a moped will met the spec is lousy engineering. It might be fun coding, but it's lousy engineering.

      Yes indeed, there are other projects that are NOT well-defined, where you don't know what you don't know about the problem, but I suspect there are fewer of them than is commonly perceived. I suspect there is a natural tendency to overcomplicate problems to provide ego-boost for the engineering, and justify inventing the really sexy app you really wanted to do anyway.

      --
      Do not taunt Happy Fun Ball
    30. Re:Of course they can be estimated. by dillon_rinker · · Score: 2

      Quality, time, or cost. Estimate any two. You can't analyze all three.

    31. Re:Of course they can be estimated. by herve76 · · Score: 1, Informative
    32. Re:Of course they can be estimated. by Nindalf · · Score: 2

      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      That is a direct result of the problems solved. Most engineering creates very, very simple, easily expressed functions. For example: provide a surface between position a and position b capable of supporting X weight of traffic. Any idiot can specify the interface of a bridge. The problem is building it so it stays there.

      Engineering grows out of solving the same problem thousands of times, and using the information gained to reduce cost and improve performance and reliability.

      Programmers usually work on completely new problems. We never do the same thing thousands of times; when something needs to be done over and over again, a program is written to do it, incorporating the learned principles and techniques. A compiler is more directly analogous to an engineer than a programmer is.

      There is no field of software engineering, and there never will be. There are only pretentious, deluded programmers who think their collection of silly fads is the real silver bullet.

    33. Re:Of course they can be estimated. by Spud+the+Ninja · · Score: 1

      The reasons you outline are exactly why your message's parent says:


      The problem is endemic in the industry. The other Engineering professions require rigorous accreditation before they let practitioners loose in the world, like the PE (in the US) or the Charter (in the UK). But the software industry hires anyone, and lets them get on with whatever they do, with no real management or oversight or planning.

      If programmers and software developers were professionally accountable for the work that they do, all of those problems you outline could be avoided. These sorts of governing bodies have some clout, and developers would be well within their rights to say, "This project needs these things before it can be worked on," and "There will be no knee-jerk changes, if you want to redefine the scope of the project, we will start the entire process over from the beginning," and, "Hey, it's your budget. Spend it how you like."

      --
      You can never put too much water in a nuclear reactor.
    34. Re:Of course they can be estimated. by RhetoricalQuestion · · Score: 2

      That is how it works in the real world. The numbers are essentially meaningless, but the bean counters and suits have to justify their existance somehow :-)

      As a programmer gone suit, (got tired of marketing minions telling me what to do, so I became one) I'd like to expand on this.

      In my ideal world, developers wouldn't have deadlines. They'd tell me when they believe they can finish, and as we approached that day they'd tell me how likely it is that they could finish by then, and we'd move the day forward accordingly until we reached some reasonable threshhold of bug-free. Then we'd release.

      But it's not my ideal world. If I want any magazine ads for this product, or prominent product reviews, the PR team needs at least 2 months notice. If the product release slips too much after the ads go out, we get angry people who go off and buy our competitors products.

      Plus, my job depends on my estimates for sales. Products don't get released unless I can justify that the new product will bring in X number of dollars in Qn. If the release date slips, we can't sell the product -- or we sell a bug-laden piece of crap that no one will buy. Then the salespeople don't make their quotas. Then the company doesn't make it's expected revenue. We're a private, self-funded company, so this means our planned expenditures suddenly go out of whack. Then we lose money, and my head goes on the chopping block (with a worst-case scenario of layoffs) -- all because someone said "two weeks and bullshitted from there."

      There is room for flexibility and risk management here -- if I know in advance that something may slip, I can figure out how to mitigate that. But that depends on the development team giving me reasonably meaningful numbers, and letting me know when that changes. I can't manage risk unless I can assess the impact, and time is a huge factor in that.

      I know there are some really bad business/marketing folk who set a completely arbitrary deadlines -- I've had then before, and I work with one of them now. Good suits don't set deadlines that aren't feasible, and are flexible enough to move that deadline when necessary. But there comes a point where it's not possible to move the deadline. Without being able to trust our developers to give reasonable estimates on time, we can't function.

      --

      I can spell. I just can't type.

    35. Re:Of course they can be estimated. by Prong · · Score: 1

      Pish Posh.

      This is the sort of thing I hear from people who seem to have a lot of ego invested in "process and procedure" over "skill and talent". This kind of thinking is one of the reasons that management regards programmers as interchangable cogs and why so few people actually stay in the business.

      I love the assertion that skyscraper and bridge projects don't go over on time and budget on a regular basis. They do, and for a lot of the same reasons that software projects do: change orders from the customers, unreasonable expectations, incomplete and/or incorrect specs, and PMs calling meetings seemingly every 30 seconds. Any large project is primarily a human endeavor, and human factors are the reason they succeed or fail.

      And if the coding portion of the projects you've worked on have been "little more than data entry", I'd suggest you didn't write any of the code.

    36. Re:Of course they can be estimated. by cpart · · Score: 1

      Your forgetting that as much as they may be similar an architect has almost all the details worked before it becomes a physical structure. Programmers don't have that luxury sure they can get the bigger picture worked out but the details don't get figured out until somebody starts to code. You'd do better to compare the architectural design process to programming.

    37. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0


      Part of getting a good estimate is understanding the problem.

      What people are missing here is that a good estimate is not free, it will often take longer and cost more than just guessing and creating the program.
      If your number 1 priority is getting an accurate time estimate, first all of the requirements must be set in stone (this may require making several prototypes). Then the whole program must be designed down to the function/method level. Important sections of the code must be prototype to test the design. Test plans must be created. Only then can coding begin.

      This would probably take 2-3 times as long as just developing the code as part of the requirements setting process. When companies don't spend the time to design and prototype everything, we get programs with unnecessary bugs and that have slipped schedules. Most companies make more money doing it this way than they would doing it any other way. Most developers are happier doing it this way as well since it makes them more than just coders.

      Time estimates will rarely be accurate since the cost out ways the benefits.

    38. Re:Of course they can be estimated. by gUmbi · · Score: 1
      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      But, are engineers asked to build a 100-foot span out of popsicle sticks and rubber cement in 3 weeks within a budget of $2000?

      No? Why not? Developers are put in that position every day.

      Give me a budget of $20 million and I'll build you a piece of software that does ONE thing very well, is completely tested, portable, well documented.

      I'm really tired of this argument...

      Jason.

    39. Re:Of course they can be estimated. by staplin · · Score: 2

      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      I wish I had the text book I used for "Intro to Software Engineering" handy, because there was a great analogy to refute this point. I think you'll find, if you look at any reference that is written from within the Software Engineering domain (instead of observing the domain from some other branch of engineering), that the problem domain in Software Engineering is unlike any other kind of engineering.

      The biggest difference is the difference in requirements. For any other engineering discipline, the requirements are well known, fixed, and known before construction begins. With Software Engineering, the requirements are often vague and continually changing (whether from customer requirements or environment requirements), and software and software development are expected to be flexible enough to handle these difficulties.

      I believe the analogy in my textbook goes something like this: Imagine building a skyscraper, when you begin, you only know it's tall, and has elevators. Don't worry about testing the tensile strength of the girders, they're the latest alloy, and the seller says they're stronger than steel. After you begin construction, the customer tells you it needs to be 100 stories tall, and also include stairs. It's still early (only 20 stories have been built), so that can be handled. After 50 stories are up, it's determined that you need a couple basement levels. It's an obvious addition to the original plan, so just add 10% more time. At about 90 stories, the customer changes the requirements for how it looks, (make the outside glass instead of concrete, and tack on another 10 stories). But once it's done, you aren't finished. The next release of the skyscaper needs a helipad on the roof, and a balcony at floor 87. It doesn't matter that it's not in the original design, your skyscraper must still be malleable. And don't forget that 3 years later, the city is going to change the underlying support structure, and that concrete foundation must be replaced with one made of the latest MS-ferro-ceramic substance (TM). Never done it before? That's OK, it's just a skyscraper. And remember, minimal downtime is allowed when you slip the new version in place of the old one.

      That's why Software Engineering is unlike any other engineering field. If bridges had to be as malleable as software is, we'd never be able to drive across them because they'd always be down for repairs.

      I'm not saying that estimations can never be better, they can. But it will require an environment more like that enjoyed by other engineering disciplines. The problem must be known completely before giving requirements to the builders. The requirements can't be changed in the middle of construction. Allow for the fact that anytime a fundamental change is made, the entire structure may require modifications to support the new components. And ensure there is enough time to test it completely... You would never build a bridge with new, untested materials and expect it to be safe enough for the public to use, especially after racing to complete it in time for the ribbon cutting ceremony that was scheduled before construction began.

    40. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      Writing software is not like building bridges because when you build a bridge you know where it is going to be, what the anticipated usage will be, weather conditions, location, etc. There are alot of "hard coded" requirements. software has to work on millions of unique computers that have different hardware, different processors, different versions of the os, different amounts of ram, etc. to make building bridges like software you would have to design a bridge that would work just as well over the Hudson as it would over some creek in rural Idaho.

    41. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      (This is not a troll.) What do you mean by risk management? Not being a manager, I have a hard time envisioning how risk management would apply to software scheduling, at least in the common case.

      -A

    42. Re:Of course they can be estimated. by 3am · · Score: 1

      while you're doing that though, you might ask the same people how they think their field compares with software development...

      --

      A: None. The Universe spins the bulb, and the Zen master merely stays out of the way.
    43. Re:Of course they can be estimated. by etymxris · · Score: 1

      Exactly. Coming up with an original and creative architectural design cannot be estimated with much precision. But a construction schedule is only made after all the variables are known, design is complete, and so on. At this point in the game, you know exactly where every brick is supposed to lay, where every cross-beam will be bolted, and so on.

      For software engineering, the design and construction are simultaneous. Once you're done figuring out exactly how to put everything together, it has already been put together.

      Now there are "design documents" that are often written before programming a project, so one might say that there is design that goes prior to construction of software. But these design docs are largely a farce. If a programmer knew exactly how the "construction" of software would take place, he would have already written the software. The case is not similar to building bridges.

    44. Re:Of course they can be estimated. by dltaylor · · Score: 1

      >> Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper.

      Not yet, it ain't. Writing software is a craft, or if you're pretentious, an art. In my career, I've watched every attempt to change or deny that simple fact fail. Every couple of years there are new "materials" with which to work and new tools with which to work them. It's as though forty years ago we had stone or bone tools and whatever tree trunks we could acquire with which to build and now we have alloy steel and composites with laser cutters and adhesives. But some of the same guys are doing the work! Even our newest "apprentices" have seen significant change since they entered college.

      Some principles and practices may carry over from one tool and meterial set to the next; even "measure twice, cut once" (design, review, implement) still applies.

      The Civil Engineering analogy is really more accurate than most of us know, though. If I'm designed/building the nth implementation of a through truss bridge, or yet another concrete dam, I can look at the accumulated knowledge that is called "accepted practice" and build one that will do its job and have it done in a reasonably known amount of time. But if I was building a "brand new, state-of-the-art" suspension bridge several decades ago, I might have built the Tacoma Narrows bridge, or if I'm building a "newfangled" steel truss, I might have ended up with the Tay Rail Bridge.

      However, specific software implementations of "nearly the same" widgets W, X, and Y are "trade secrets", "Intellectual Property", ad naseum, so even I'm building yet another, nearly identical, widget Z, I don't have access to reams of implementation details that would allow me to accurately determine how long it will take. Additionally, my company is not likely to be building a "nearly identical" widget Z, but a "revolutionary" Widget ABC, perhaps on brand new hardware; this is essentially a research project, so it will be done "when it is done".

    45. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      Experience helps, but the only issue is that rarely do you get the luxury of building the same architecture over and over, thus getting better at what you're doing. More often than not, by the time the development teams really start to gel and deliver framework oriented reuse, the project is wrapping up. This, of course, opens up the related issue about planning for reuse...

    46. Re:Of course they can be estimated. by Anton+Anatopopov · · Score: 2
      Risk Management is basically about identifying any factors which will cause slippage in the schedule, and enumerating them.

      E.g. What happens if the scope changes. What happens if a key developer gets sick. What happens if microsoft dump the technology we are using etc etc etc etc.

      By constantly monitoring the risk factors, one can get an idea of how risky (and therefore how expensive) a software project is likely to be. There are plenty of books on the subject, the best one is Tom DiMarco's seminal 'Why Does Software Cost so Much ?'

    47. Re:Of course they can be estimated. by Andrewkov · · Score: 2

      The difference between building a bridge and buildig software is that when your building a bridge, you have blue prints to follow. Too often in software developement the planning and implementation happen at the same time. If the proper planning is done before hand, you can get a pretty good estimate of how long the project will take to implement.

    48. Re:Of course they can be estimated. by Wesley+Everest · · Score: 1

      And after two weeks of development, they want to be able to walk across the bridge, even if you have to stop pouring concrete to quickly rig up a rope bridge. Then you tear down the rope bridge and keep pouring concrete, only to have them demand that they be able to ride a donkey across in two more weeks, etc.

    49. Re:Of course they can be estimated. by Grunschev · · Score: 1

      Coming up with an original and creative architectural design cannot be estimated with much precision. But a construction schedule is only made after all the variables are known, design is complete, and so on. At this point in the game, you know exactly where every brick is supposed to lay, where every cross-beam will be bolted, and so on.

      Well, no. There's a concept called "fast track" where construction is begun before all design is finished. One of the best examples is the Empire State Building.

      As a programmer involved with numerous large projects, I've been interested in other kinds of large projects. My favorites are the Empire State Building, the Normandy invasion (D-Day), and the Apollo project. Each involved a huge number of unknowns, creativity in "tool building" and time constraints. Kind of like software development.

      Igor

    50. Re:Of course they can be estimated. by sql*kitten · · Score: 2

      We never do the same thing thousands of times; when something needs to be done over and over again, a program is written to do it, incorporating the learned principles and techniques.

      That's simply not true. The majority of software written in the world is corporate data-processing applications, basically forms and workflow on top of databases. Those can be planned and executed using techniques from engineering. How many e-commerce web sites are there, for another example? Another well-understood area.

      The real problem is, so-called "programmers" who jump in and start writing code without doing any research or analysis, re-inventing the wheel, in most cases sub-optimally, time and time again.

    51. Re:Of course they can be estimated. by naarok · · Score: 1

      The thing that makes Software engineering different from (say) civil engineering is that gravity doesn't chenge on a monthly basis and people have been dealing with it for a very long time.

      Software engineering has only been around for ~40 years, civil engineering has been around for ~2500 years (I'm no historian, so those numbers could be off by a fair amount). We as Software engineers don't have enough of a history to develop meaningfull metrics. How many skyscrapers do you think were well estimated in the first couple decades of building them?

      As I alluded to above, another major difference is that software engineers are retraining in a new language/paradigm/methodology on almost every project. I'm not suggesting that civil engineering is stagnant, but things don't change with the frequency and scope that they do in software engineering. How can you estimate how long an EJB project will take if no one has done one before (A project I was involved with two years ago faced this). If you've done EJBs, how can you estimate a 20 screen forestry project from a 20 screen health project. Contrast that to estimating building a bridge. The structural equations are well known, and experience has taught how various site conditions will impact the project. There is little that is new. Maybe some new type of steel or concrete. But people wouldn't be using the steel or concrete if they didn't have the numbers for strength, ect. to plug into their equations.

      Some would say that people shouldn't be hired on a project if they haven't done something similar before, but again, things are changing too rapidly to expect people to have worked on anything more than somewhat similar to what is being done next.

    52. Re:Of course they can be estimated. by phossie · · Score: 1

      There is no field of software engineering, and there never will be.

      I think you're wrong about the future... but I also think that the future will resemble the past of other forms of engineering. Consider how long software has existed - we're still in the mud and wattle phase of software construction!

      It seems a little premature... the artistry will be elevated once we've really got the basics down. The basics will be developed with view towards the possible massive complexities, which is why things might seem so slow - or so error-prone - right now. We're just getting started. Give it time, and try to contribute. Pretty soon we'll be working on the pyramids, and fantasize about heavy machinery and pre-fab housing.

      --

      [|]
    53. Re:Of course they can be estimated. by myrashka · · Score: 1

      This simply is false. Numerous projects I've seen have some politician come down and say we want to use steel from this guy instead of concrete from this guy. The problem is once you pour the concrete, there's physical barriers (and cost) to digging it up and putting in steel. But I have seen it done...

      My experience indicates that a lot of problems in software engineering have to do with the fact that we've not educated (nor convinced) folks outside (including marketing) that depsite the fact there's no concrete to dig up, the costs and difficulties are about as painful as the steel vs concrete in construction. These outsiders don't understand nor appreciate what they ask. And for some reason, many of my collegues have a problem saying "no" or "fine, but here's the cost".

    54. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      I suspect there is a natural tendency to overcomplicate problems to provide ego-boost for the engineering, and justify inventing the really sexy app you really wanted to do anyway.

      You suspect wrong. As you're on Slashdot, I assume you know a thing or two about computers. Try picking up a requirements document from a customer one day, and reading it.

      If you think it's so easy, you try it. Then come back and spout off about what you do and don't "suspect" like so much voodoo.

    55. Re:Of course they can be estimated. by elsilver · · Score: 1
      Rampant optimism -- many engineers (and managers) will typically estimate how long they think it should take to do a specific task but will not add in a buffer in case somthing goes wrong. And something always goes wrong.

      I got in to an argument with a friend over this one. I recently slipped on a schedule I had proposed, and we were discussing why. I said that I had estimated how long it should take, and then added a number of days, 'cause "something always goes wrong."

      Now I thought I was being smart, taking this into account. The friend, however, pointed out that if I schedule for the something I know will go wrong, I also need to add additional slack to allow slippage for something (else) to go wrong. Her point was that since I know there will be a problem, and I schedule for that problem, then I haven't really given myself any extra room.

      It feels to me too much like the start of a calculus problem (what is the limit of 3 weeks + (20% slippage)^n as n approaches infinity?) or a Dilbert cartoon (make me a list of all the unknown problems we'll run into), but it did leave me wondering -- does she have a point, and how do you express it in practise?

    56. Re:Of course they can be estimated. by greenrd · · Score: 1
      It's a logical error. You are scheduling a buffer zone for anything that could go wrong, not any one particular thing. Of course, some things are so disastrous that no buffer zone will help...

    57. Re:Of course they can be estimated. by Kris_J · · Score: 3, Insightful
      The best phrasing is; The project can be on time, on budget or right, pick two.

      It all comes down to experience with similar things. Like any other project, if a software project is very like something you done hundreds of times before you'll know pretty well how long it will take. If it's unlike anything you've done before there isn't even much point in guessing.

      Thing is, in the real world development happens once and then the "project" is duplication (ie; For a "So-and-So Homes" place - Design house once. Build house hundreds of times), but with software duplication is instant - just copy - the project is the original design. (ie; Design software once. Burn 10,000 CDs)

      The fact that many companies design their own software, even when they're not software design compaines is the problem. If you were a real-estate place you wouldn't build your own cars, or photocopiers, why do you design your own software? Moreover, why are you surprised when it takes longer than you estimated?

    58. Re:Of course they can be estimated. by greenrd · · Score: 2
      This very useful for beating you customer into submission when they change their minds 3 months into the project.

      This is a bad attitude to have. If you or even your customer misunderstands their requirements, you can't just beat them over the head. You have to fix it. And in the real world not every system can be specced out and fixed in stone on Day 1. Requirements creep exists; we have to deal with it. Hence ideas like extreme programming. You can try and sell them a useless system but they probably won't patronise you again (unless they're a branch of government, in which case they'll probably come back again and again!)

    59. Re:Of course they can be estimated. by geggle · · Score: 1

      I am not a real engineer, just software, so what I'm about to propose may not be correct, but I'm going to do it anyway :-)

      I think part of the problem is that in real world engineering, there are known physical limits to what can be done, known upper bounds for materials performance, and known lower bounds for environmental factors. This allows engineers to design using models that are less complex than the systems they are building - "If it's 5mm steel then it has a safety margin of 2". In a software system, it's hard to reduce the complexity down, and still fully describe the system. You can't "beef up a beam" in software - it is either correct, or not correct.

      The point that you make regarding accreditation is true. By and large it has happened since the consequence of failure for most systems is low in the eyes of the general public. The probability of killing someone with a malfunctioning general purpose application is so close to zero to be not worth mentioning. Faulty real engineering can kill people. This makes the cost of software failure low, so the risk to the company is minimal, which therefore means nothing is done about it, since the cost of fixing it is higher than the risk cost multiplied by the probability of that risk occurring. I believe that the only way this will change would be through regulation, and no country is going to do that for fear of destroying its software industry by spiralling employment/training costs.

    60. Re:Of course they can be estimated. by ahde · · Score: 1

      that would be right, except that in the past 30 years, the accuracy of estimates for large buildings has become increasingly inaccurate. 30 years ago a skyscraper was much more likely to be completed (closer to) on time and within budget. Software development now is plagued by the same thing as other fields -- increasing imcompetence in management, lower work ethic in labor, and lower skill levels all around. We're entering a dark age

    61. Re:Of course they can be estimated. by geggle · · Score: 1

      This brings up a critical point.

      Sure, you should do the best that you can to produce a reasonable estimate - a good idea here is to produce *three*, a low, expected and high estimate, which will at least show how uncertain you are with your estimate.

      Now, your boss may well choose to publish the lowest one - that's his/her call - but you should always immediately notify him/her as soon as you know of anything that causes any of the three estimates to change. Don't wait until the next project meeting, it's your job to keep your boss informed of changes that may affect the project, and to do it in a timely fashion.

    62. Re:Of course they can be estimated. by Mija+Cat · · Score: 1

      But... But telling them off is the FUN part!

      --
      Yes, that's really my e-mail. Don't change a thing.
    63. Re:Of course they can be estimated. by xmedar · · Score: 2

      That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

      Yes, and look at those industries, if you want to build a bridge, you know what standard types of material are available and their properties in very intimate detail, now compare with software, it's like having to build a bridge where you have to choose what percentage carbon you need in each damn bolt. OO was supposed to solve this by creating reusable components that you know the characteristics of, unfortuntely OO has not been the saviour. Why? Well there might be a few reasons, first there is little commercial sharing of code externally, so you might have a class that could be used by Acme Inc, unforunately you don't share that code outside the company so Acme have to role thier own. This is one of the real benefits of Open Source. Secondly you have a problem with languages which might be akin to having different units of measurement, again this means there is less ablility to reuse code if it's not available in the language you are using. Third, you can write perfectly good code that works on platform X and then have to recode or even redesign when the company that created platform X changes to platform Y with nice incompatibilities (yes M$ I am talking about you) therefore keeping any possible stability out of the industry. Creating that instability is good for selling new software, but bad for those of us that have to deal with it on a daily basis. In short, if we had a stable set of tools and platforms to work with we could approach having a sane industry that could do more real innovating and less having to recode Wheel 3.141 for Windows XP Service pack 1. As for bridge builders and the like, if you look at major civil engineering projects you can see that they get it wrong sometimes too, two good examples are the Channel Tunnel and the Millenium Dome in the UK, both vastly over budget and over time. In all aspects of life it would be great if we could have evaluations of how well or badly projects worked out and the reasons why we'd all be able to learn from each other mistakes as well as best practices, well I can always dream can't I?

      --
      Any sufficiently advanced man is indistinguishable from God
    64. Re:Of course they can be estimated. by Ateocinico · · Score: 1

      You are wrong because there are stablished
      scinetifuc and mathematical methods for
      generating digital and electronic circuits,
      for example: Karnaugh maps, pole-zero placing.
      And in civil and mechanical engineering you
      have classical mechanics, thermodinamics
      and stiffnes theory as fluid mechanics as well.
      I ever remember that quote of Titus Livius
      put by Donald Knuth at the beginning of his
      third volume of the "The art of computer programming":

      Cookery is become an art,
      a noble science;
      cooks are gentleman.

    65. Re:Of course they can be estimated. by TheLink · · Score: 2

      Yeah but in a well analyzed and properly planned project the coding stage isn't the part that takes the most time. So how do you estimate the total time?

      The difference between Civil/Aero/Mech Engineering and Software Engineering is with Software Engineering, after the designers design and build the plastic prototype, the marketing department launches and sells it :).

      Coz the plastic prototype kinda runs :).

      So in most cases there's no "build the real thing" phase. The final prototype is the real thing.

      Yeah if people built software the same way as they do some buildings sure the software will be better.

      But then it'll take as long as a building with the same complexity (number of custom decisions/features) to design, spec, prototype and then _build_for_real_.

      A multistorey building may not be that complex because most of the floors are the same.

      Go ask an architect to design a 100 storey building where every floor is different and does different things. Ask how long it'll take to _design_ it.

      Cheerio,
      Link.

      --
    66. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      Yes, Yes, Yes!!!! Software is NOT and never was and never was intended to be engineering profession. There are NO constructs in engineering project methodology that correspond to or even remotely relate to software development. Software 'engineering' was a weak-kneed invention of electrical engineering to force their presence into an industry that was mostly beyond their comprehension in the '70s. I will allow that the world needs a construct that enables hardware engineers to develope software to operate their hardware designs - but those needs have NO corresponding relavence to ANY other types of software. Unfortunatly, the methodologies of the 'bean-counters' falls into the same mold of being useless to software development for a different reason. Business, in large numbers in the US, has failed to include software as one of those entities that are an integral part of the overhead of their existence such as management, sales, admin, etc. There is no rational decision about the role/importance of computerized information to the business - it's just another project... Accreditation is the solution to all problems... If I could only count the number of engineers who subverted their own dignity and knowledge to implement stupidity instead of standing up for their professionalism, I could take accreditation seriously. The facts are that for every engineering project that meets schedule and cost objectives, there are many engineers who feel like they have sucked the organ of the system to the point that they can no longer recognized professionalism. Yes, coding is data entry. However, it is engineering that thinks there needs to be a prescribed path of rigid definition and standards to do the coding. For at least 30 years engineering has been saying that coding should be implemented using tools that simply take the ramblings of an engineer and turn it into code - since there is obviously no content to programming. I would assert that history proves you to be an unknowlegable fool, since there has been significant progress toward this pipe dream. Perhaps, it is engineers who need to allow for the fact that other professions, while not as rigidly defined as theirs, are actually useful.

    67. Re:Of course they can be estimated. by moebius_4d · · Score: 1

      You think development is overcomplication problems? Are you high? I've worked everywhere from fortune 50 companies to 5 person startups and I have *never* *never* had a project of significance (say, > 4 weeks effort) start and finish with the same requirements. Never.

      How would that work in the bean counting world? Line up some outside financing, these are the terms we are looking for. Two weeks later, no, those terms are unacceptable, tell those investors to go away. Now *these* are the terms we are looking for.

      Hey, I'm not complaining. Constantly changing requirements are the reason I can make a lot of money as a contractor, because I can actually handle it. I make extensive use of patterns to decouple and modularize in my architectures, and it saves my ass and the project on a reasonably frequent basis.

      But don't come in here and tell me that development overcomplicates things out of ego. As far as engineering/development going out of our way to add features when we don't need them - we scarcely have time to meet the schedule for the "top priority" features as it is. Every hand a feature list to a customer and tell them to prioritize - only "1" and "2" will be in the first release. They all come back "1" or "2". The only scope creep we add is making things flexible and modular so that we can cope with the requirements change we *already know is coming*. If I didn't do that, I'd be out of work muy pronto.

      Why don't you try asking developers what's going on before spouting off - it makes you look like an asshole. Nothing personal.

    68. Re:Of course they can be estimated. by Anonymous Coward · · Score: 0

      They can be estimated, down to the minute - if the purchaser is willing to pay for the predictability that is so important to them. Estimates are simply an example of the good-old American business practise of cost shifting, as is any other kind of accountability. I once headed an IT department with a battery of data entry clerks. We were asked by the business to allocate our time to the business units we entered data for. The business units complained when we charges the recording time to them, and the accounting unit complained when we charged the recording time to them. Both of their responses were that we should call the time non-productive overhead. Aren't endless estimates and their subsequent reporting business tools of the organizations demanding them? Why not let them pay for the time, since they seem to have so little knowledge/confidence in the concepts for which they need the effort?

    69. Re:Of course they can be estimated. by lordbyron · · Score: 1

      I agree... the industry is based on to many under-experienced hard working project managers and software developers that lack the understanding of estimating, project management, and over all scope management.

      The education system has also supported this in basically not teaching an overall methodology such as the SDLC.

      If any-other eng. discipline were to allow the overall lack of professionalism in overall project management and scope management.

      Software is absolutely able to be realistically managed both on time and on budget!

      http://www.wylywade.com

    70. Re:Of course they can be estimated. by maxpublic · · Score: 1

      Funny, it's been my experience that management (in terms of suits, not the concept) is far more likely to bollix the process than to aid it. In fifteen years working in the industry I've yet to see the involvement of managers aid the project in any discernable way; usually they take a time estimate as calculated by the programming team and bloat it beyond belief with meetings, committees, useless PP presentations, and whatever other method they can dream up to justify why they get paid more than the programmers.

      The projects I've been involved with that were closest to the mark in terms of time were those with the least amount of management interference, i.e., in those rare cases where the manager had the good sense to stay out of the way. But these sorts of suits are few and far between, alas.

      I'm seeing this right now in a job that should've taken about a week, starting at the end of September. It's now November and we still aren't done. Why? Because the project is good PR and every suit under the sun wants a piece of it, even people from other departments who have no clue what we're doing. If we can't schedule accordingingly to allow all the management types to come and give their blessing, the project comes to a screeching halt.

      I would agree with the 'planning' part of your statement, but in my experience any involvement by the upper echelons is bound to screw things up.

      Max

      --
      My god carries a hammer. Your god died nailed to a tree. Any questions?
    71. Re:Of course they can be estimated. by Twylite · · Score: 2

      And the reason this doesn't happen with bridges? The engineering team starts with a meeting of the financial backers, planners, marketers and artists. The have a mockup (drawing and miniture model) of the bridge before they start the design work, so they know that the look is agreed upon, and the idea is technically feasable and likely to be within budget.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    72. Re:Of course they can be estimated. by Twylite · · Score: 2

      Very true. I was engineer/manager on a 9 month long project, and we hit our targets perfectly (except the last, because the company liquidated ... ack!). My team and myself were familiar with the technologies involves, and understood the requirements, which is important.

      Recently I calculated it would take two weeks to port some synchronization abstractions from Windows to Solaris. I was our by 50% because Solaris pthreads implementation is broken (wrt. recursive mutex locking) - a little-published fact that took several hours to prove (that it wasn't our implementation), and days to correct.

      As a matter of habbit I build in 50% buffer time if I am mostly familiar with the concepts involved, 20% if I am absolutely certain, and 100% otherwise.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    73. Re:Of course they can be estimated. by Twylite · · Score: 2

      IANA civil engineer, but I have spoken to several on this topic. And with no due respect, you're wrong :)



      Every building is a new and unique challange, and the building environment changes far more than people may assume. An American engineer with 30+ years of experience in sky scrapers will be lost trying to build in London (where soil densities and high water table screw with foundations), Japan (where the buildings must resist regular earthquakes), South Africa (where steel-based structures corrode within a matter of years) or Paraguay (can you say "logistics").



      Making a C compiler from the GCC source? make depend ; make. Or do you mean looking at the source and creating a whole new C compiler? That's not exactly a good parallel - that would be like looking at the WTC before Sept 11 and taking notes, and then rebuilding it. Not gonna happen.



      The equivalent of rebuilding the WTC from blueprints would be to have the annotated design for a C compiler, including full object hierarchy, API and behavioural specification. Now give it to a programming team and tell them to implement.



      Oh, one more thing. I want a more streamlines version of the WTC for thin clients. Please take out the central support columns because they are resource-intensive.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    74. Re:Of course they can be estimated. by Lozzer · · Score: 1

      That's why Software Engineering is unlike any other engineering field. If bridges had to be as malleable as software is, we'd never be able to drive across them because they'd always be down for repairs.


      That sounds like Hammersmith Bridge to me.

      --
      Special Relativity: The person in the other queue thinks yours is moving faster.
    75. Re:Of course they can be estimated. by Lozzer · · Score: 1

      Without being able to trust our developers to give reasonable estimates on time, we can't function.

      The whole point of the article is that you can't trust your developers to estimate well, because it is an (algorithmically) impossible task.

      I'd guess that an alternative explanation is that humans are more complex than algorithms - so trying to model the estimating "process" with algorithms is fundamentally flawed. I'd personally like to believe this, AI developers probably wouldn't.

      --
      Special Relativity: The person in the other queue thinks yours is moving faster.
    76. Re:Of course they can be estimated. by Godeke · · Score: 1

      The question is: what is the cost of a well analyzed, properly planned project? I think perhaps a lot of the people are working in different spaces than those who have the luxury to spend months "properly planning". As an independent consultant, I am frequently called in late in the game during a "properly planned" project that never got anywhere, because the client couldn't understand the "waste" of money that was going on. "Three months and not even a prototype - who are these people!!!" So I whip out a prototype in a week, and have a functioning version in a month deployed. Is it perfect: no. Does it meet business goals and budgets: yes. I wish I had the luxury to draw pretty pictures and produce binders for a living.

      --
      Sig under construction since 1998.
    77. Re:Of course they can be estimated. by Henry_Doors · · Score: 1

      In a well analyzed and properly planned project, the actual coding stage is little more than data entry.

      So I'll tell our programmers their Job title has just changed to 'Data Entry Clerk' that will go down well!

      Of course schedules can be estimated, I've been doing it for 10 years - unfortunately I always get it wrong (though usually within acceptable boundaries)! It is an estimate it is going to change as the project progresses ignore this basic fact and you are going to run into big trouble.

      The only time you will know the actual cost / duration of a project is when it is finished.

      --
      "I deny nothing, but doubt everything." Lord Byron
  4. Re:In all seriousness, this is the wrong place to by yatest5 · · Score: 0

    Because anyone who does know about software engineering is working his ass off trying to claw back some time on his 3 year late project ;-)

    --
    • Mod parent up! [a] by Anonymous Coward (Score:5) Thurs, June 31, @13:37
  5. Are we Artists or Workers? by egriebel · · Score: 1

    I think a relavant tangent to this is how developers view themselves. In the "professional world", many of my peers view themselves as "artists", meaning that they can't code unless the mood strikes them, their work can't be rushed, etc. The other camp (myself included) believes software development to be a creative process, which requires some time for the creative process, but shouldn't dominate.
    But, this probably mostly applies to professional software development, not academic/government-type work.

    --
    ACHTUNG! Das computermachine ist nicht fuer gefingerpoken und mittengrabben. Ist nicht fuer gewerken bei das dumpkopfen.
  6. so so true by Anonymous Coward · · Score: 0

    can anyone say tribes 2?

  7. No Chance! by libertynews · · Score: 1

    I regularly try to estimate my time, and come in at 1/2 to 1/3 (or worse) of the actual time to complete the task, even when I try to take into account the 2x or 3x factor! There are just too many factors involved (for example, your development platform crashes and takes a day to rebuild and get up to speed). Or the problem is more complex than it looks on the surface -- alot of the time you never really understand whats involved in the project until you dig into it.

    But of course the client doesn't understand these things, so when you submit a proposal for 3x what they expected it to cost they freak out. So you submit for 2x what you estimate and hope they will understand when things take too long .

    --
    Remember Lexington Green!
    1. Re:No Chance! by Anonymous Coward · · Score: 0
      Wonderful. You change your professional estimates of facts because of pressure?


      If your doctor told you that you had lung cancer, would you reply "Well, I don't that's possible. Cancer is expensive and puts a real hole in my golf schedule. I'll take pneumonia antibiotics instead." What the hell would you think of your doctor if he accepted your response?


      Well, when you "massage" your estimates because of pressure you're just like that doctor if he were to give you the pneumonia treatment instead of insisting that face facts and get treatment for cancer.


      Do you also put only enough gas in your car to go 100 miles of the 200 to your mother-in-law's because your wife *insists* that it's only 100 miles? What do you tell her when you run out of gas?


      And if you're regularly estimating low, don't you think you should be reviewing your process for generating those estimates?

    2. Re:No Chance! by Theodrake · · Score: 1

      If you're bidding on a goverment contract, you sure do. The irony is that when you bid what it will actually cost you lose the contract. If you bid what the customer wants you win. Then you just hope the customer really wants the system and will keep paying for it and accept the overruns. Which eventually costs the customer more then if they had been realistic in the first place.

  8. Double the number, add one and raise the unit! by Uriel · · Score: 1

    How long could it possibly take? No more than three days? 3*2=6 ... 6+1=7 ... 7..days..no..WEEKS. Yes. That's the estimate.

    Two weeks? No, make that five months!

    This is mostly joking, but if you have people changing the specifications while you are writing the code, it can indeed happen.

    PHB:"When will it be done?"
    Me:"It's been done twice already, but now it's done for the third time. Unless you change the specification again..."
    PHB:"Didn't anyone tell you?"

    Uh-huh.

    1. Re:Double the number, add one and raise the unit! by dattaway · · Score: 4, Funny

      We can get it done by next week! We can do this because we have just #defined a day as having 2000 hours.

    2. Re:Double the number, add one and raise the unit! by Bobo+the+Space+Chimp · · Score: 1

      If that were only true. I once estimated I needed about 36 hours in a day to get in all the sleep and relaxation I needed to be happy.

      Anyone know how to build a Director Xtra C/C++ .dll to manipulate the native point arrays, or just "call" a standard .dll therein from a Director script?

      --
      I am for the complete Trantorization of Earth.
    3. Re:Double the number, add one and raise the unit! by Anonymous Coward · · Score: 0

      A real life example of the changing specifications:

      A simple project I am currently working on required a simple answer from the client which only affects if I put a simple loop around a calculation to do it twice in the same run with differnt options or for separate runs to be made. All interior coding within the loop would remain the same. The answer was - "Yes, do both in the same run. And would you send the results to different files." The problem? Well a lot of routines before the calculation had to be altered to get relevent data to TWO files so the results listed would be meaningful when the two files go different directions. This increased the scope of the work and blew the completion date (but in this case the client did not mind since they were getting what they wanted, fortunately).

      How you write up some steps of the project is also very important. The client wanted the software completed by the end of October which was a doable date. However there was a client review step that was to be one week long followed by a two week completion step. The client is now approaching four weeks for their review and it is also now November. Fortunately I was wise enough in writing the schedule to make the end point two weeks AFTER receiving the clients review results.

      Moral of the story is that estimating completion dates is impossible when there are outside people involved who can do what THEY want, when THEY want, to the project.

    4. Re:Double the number, add one and raise the unit! by KyleCordes · · Score: 2

      [Anyone know how to build a Director Xtra C/C++ .dll to]

      NO, and more importantly I would not bother to estimate the time to build it until I understood how. :-) Once I understood, I could estimate it pretty well.

  9. Sure they can... by Mike+Schiraldi · · Score: 3, Interesting

    As they say, the first 95% of a software project takes 95% of the time.

    And the remaining 5% of the project takes another 95% of the time.

  10. I don't think so by segmond · · Score: 1

    I see software development as solving a mathematics problem, Can you estimate the length of time it would take for you to solve a problem? prove a theorem? I don't think so. Hence no! The problem is that many people are still reinventing the wheel. It is very hard to imagine that 99.9999% of the software that will be written tomorrow are revolutionary. They are nothing more than evolutionary, thus they should be grab libraries/routines for a good chunk of 80% of the code and tie it together. But such doesn't happen...

    --
    ------ Curiosity killed the cat. {satisfaction brought it back | it didn't die ignorant | lack of it is killing mankind
    1. Re:I don't think so by Anonymous Coward · · Score: 0

      um, actually thinking back to uni (discrete mathematics) I think you can prove the worst case number of steps required to solve many kinds of mathematic problems..

      Anyone else remember that stuff ?

  11. Yes but No by Anonymous Coward · · Score: 1, Insightful
    If you want to keep the suits happy, Its easy, take the time you think it will take, multiply by two and add 10%.

    Now when it comes to the actual work, forget it. Unless your project management is extra tight, which is unlikely from all the places I've ever seen, you will have too many unknown variables, such as:
    • That hot new developer you just hired turns out to be clueless
    • The specs were badly written, or your customer changes the specs mid-project
    • You can never factor in testing time properly (Trust me, I'm a tester). See below.
    Especially when it comes to testing, too many project managers think you can just say "Oh sure, a twenty page testplan for that module will take one person three days. So we'll allow two weeks of testing per build, at three builds" This is total BS, because frankly, you won't know how many bugs are in the product, and therefore how many builds it will take to test the product, until you actually test it.

    Sure, you can get an estimate, maybe to about 30% of the actual time it will take, about 60% of the time. Its certainly an inexact science though.
    1. Re:Yes but No by Anonymous Coward · · Score: 0

      If you want to keep the suits happy, Its easy, take the time you think it will take, multiply by two and add 10%.
      Wouldn't it be more time-efficient to just multiply by 2.2?

    2. Re:Yes but No by Anonymous Coward · · Score: 0

      Yes, but doing it my way makes it sound better. Its intended to be sarcastic...

  12. from a Consulting viewpoint.. by Tadghe · · Score: 3, Informative

    The reason that software development timetable "estimation" (guess is a better word) is so often wrong is that quite often you are not given enough information about the projecto accuratly pin down what your milestones are much less your final delivery date.

    To accuratly plan a software release you must have the project, and all it's complexities and nuances down COLD. otherwise you are not giving an estimation, you are giving a guess based upon incomplete knowledge.

    The question becomes, do or, can you, know the complete details of the project? In this, software development is NOT like manufacturing, but more like home construction.

    Think about it.

    --
    Bugs Bunny was right.
    1. Re:from a Consulting viewpoint.. by Anonymous Coward · · Score: 0

      This also makes an assumption that the requirements do not change, and they always do. A new version of your database becomes available which breaks things or adds features the users get a new version of some piece of software that you have to integrate, even though your 70% done with integrating the old one. Personally, I think any software estimate that is over a couple of months is a lie.

    2. Re:from a Consulting viewpoint.. by Anonymous Coward · · Score: 0

      As a consultant arent you supposed to *know* what to ask so you can get a clear picture of what needs to be done? That is the whole point of software engineering, you try to nail as much of the requirements and design first, then you code and test. If you did your job correctly, then project estimation is almost trivial. You also have to let the customer know that any mid-life changes to the original design *will* set back the project timeline significantly. This will force them to think about what they want up front and stick to the design later. Of course its almost invariable that some part of the design will change mid-code, but you can add a "fudge factor" to account for stuff like that. Also, if you design the software correctly, then mid-code design change effects can be minimized. Coding the project *should* be a small part of the entire project. More time should be spent up front in nailing the specs and design. This will make the coding part trivial.

      my two cents.

    3. Re:from a Consulting viewpoint.. by markmoss · · Score: 5, Interesting

      To accuratly plan a software release you must have the project, and all it's complexities and nuances down COLD. otherwise you are not giving an estimation, you are giving a guess based upon incomplete knowledge.

      The bulk of the work of programming consists of getting all the complexities and nuances down cold. Once you really and completely understand what is required, coding is trivial.

      This leads to a thoroughly unrealistic method of estimating software costs:
      1) Work for months on the specs.
      2) Get the customer to sign on to those incredibly detailed specs, even though he doesn't understand them.
      3) Go and code it, no spec changes allowed.

      8-)

      The article mainly talks about the mathematics of estimating complexity. This is a lot like the proof that you cannot determine when or whether a computer program will end -- it's true for pathological programs, but it has little relevance for the real world. You try to write the code so the conditions for the program to end are clear. If it gets into an endless loop, you probably got a conditional expression backwards and you'll recognize it immediately once you figure out which loop is running endlessly... Likewise, there may be well-defined specifications for which it is impossible to estimate the coding time, but the usual problem is poorly-defined specs, which obviously makes any estimate a guess.

    4. Re:from a Consulting viewpoint.. by Happy+Monkey · · Score: 2

      To accuratly plan a software release you must have the project, and all it's complexities and nuances down COLD.

      Of course, that's just pushing the problem back to the earlier stage. How do you estimate how long it will take to plan the project down COLD?

      --
      __
      Do ya feel happy-go-lucky, punk?
    5. Re:from a Consulting viewpoint.. by Anonymous Coward · · Score: 0

      The reason that software development timetable "estimation" (guess is a better word) is so often wrong is that quite often you are not given enough information about the projecto accuratly pin down what your milestones are much less your final delivery date.

      I was once asked to estimate a completion time for something where the problem (let alone the solution) wasn't quite known. With The Mgt. looking on I divided up a sheet of paper into squares, wrote a number in each square, and flipped a coin onto the page. I then read the number off the square, looked The Mgt. in the face, and said confidently "Three weeks".


      A completion time of three weeks was duly recorded in the quote to the customer. Some people just don't understand sarcasm.

    6. Re:from a Consulting viewpoint.. by the+bluebrain · · Score: 1

      [...] even though he doesn't understand them[...]

      aye, there's the rub. Getting the client to understand what the hell the specification means is the hard bit. Most of the time, you spend half the specification strech explaining the client's requirements back to them, because they don't even know precisely what they want/need. I.e.: translating "fuzzy logic" into "hard logic".

      --
      yes, we have no bananas
    7. Re:from a Consulting viewpoint.. by jschrod · · Score: 1
      Sorry, but this is not a consultant viewpoint, but a technical one.

      As a consultant, one knows that it is one job to handle sliding requirements. Managing such changes and their associated risks lies at the heart of our jobs. One has to anticipate and will guesstimate changes (and, in particular, rate of changes); incorporate them in the software development timetable up front.

      Such estimates are based on previous experience in that job, in that area, and with that customer. (The latter is forgotten very often.)

      And, of course, it's very hard to find staff with that qualification. (I'm a CEO of a consulting company, by the way.)

      --

      Joachim

      People don't write Manifestos any more -- what's going on in this world? [Frank Zappa]

    8. Re:from a Consulting viewpoint.. by elBart0 · · Score: 1

      3) Go and code it, no spec changes allowed.

      As another consultant, I can tell you that spec changes always happen, after a customer has signed off on a project, and accepted the spec and the project plan. What's then done is a 'change request' or 'spec change'. (terminology varies)
      You formalize the changes, provide an impact to the current project, and additional hours required produce the requested change.
      If the entire process is as formalized as possible, it is quite possible for projects to be completed on time, or close to on time. Invariably, some projects will be done in less time, and some will be done in much longer than estimated time. But, experience and formalization of procedures leads to more accurate estimates over time.
      If your most junior employee is writing project time estimates, you are going to have bigger problems than missing your milestones.

      --
      09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
    9. Re:from a Consulting viewpoint.. by nagumo76 · · Score: 1

      To do an accurate estimate, you have to have all the specs down cold, AND you have to consider all the possible trip-ups and their solutions. This is 99% of the effort needed to code. You might as well just write the program.

    10. Re:from a Consulting viewpoint.. by agir · · Score: 1

      But the trick to good estimating is to factor in enough flexiblity into the schedule.

      Understand that requirements will change. Build in a change factor. If the change(s) requested by the customer are so big that they would bust the schedule, let the customer know. Push back if necessary.

      Don't forget to factor in the things most people forget, stuff like testing, integration, education, marketing issues, personal & vacation time, all of these can impact the schedule and should be considered.

      Lastly, remember that schedules are a living document. Estimates become more refined as more information becomes available. That task that you didn't have any clue about how to accomplish, and initially estimated at 2 months, after a little research and prototyping, is now down to 3 weeks. That's fine.

      As many people have said, risk management is key. If you expect some parts of the estimate to be off, try to balance them with parts of the estimate that are known to be fairly solid. You can build in a fudge factor, but you should have some idea of what you're planning to use it for.

      With completely unknown projects, all bets are off.

    11. Re:from a Consulting viewpoint.. by Anonymous Coward · · Score: 0

      I was a project manager for web development.
      I pressured to start my first project without a clear plan and 16 months later it wasn't finished (it was scheduled to take 3 months) and had cost 3 times what was estimated.
      After that I able to convinced one of the divisions of my old company to spend nearly 3 months developing a spec for an e-tailing web site. The spec was nearly 60 pages. The developers told us it was the best spec they had ever seen. They were able to develop an accurate estimate.

      Unfortunately we were so accurate that the price tag scared people away, and we were villified for the estimate.

      If we hadn't developed that spec we would have gotten an estimate of half what we did, and feature creep would have caused to cost 3 times the estimate, and we would have been villified for the overruns. Be nice to your project manager they have really difficult jobs.

      From experience, no matter how unrealistic it may seem, don't move forward without as bulletproof a plan you can come up with.

    12. Re:from a Consulting viewpoint.. by TheLink · · Score: 2

      That's not the main issue with that approach.

      The hard part is getting a customer to sit down for _as_long_as_it_takes_ to fully _spec_ the project and all parties sign the spec.

      Once the spec is done, estimating the planning, etc isn't that bad. We may even say we can't do that sort of thing :).

      Wonder how many projects will we'd get with that approach :).

      Cheerio,
      Link.

      --
    13. Re:from a Consulting viewpoint.. by TheLink · · Score: 2

      Oh yeah, and after the project is completed, the customer hates the stuff because the customer only spec what they _thought_ they needed and wanted. Not what they need and want in real life which they only realized much later- typically X more exceptions for each feature.

      And they never work with you again...

      --
    14. Re:from a Consulting viewpoint.. by truesaer · · Score: 2
      Those three points are EXACTLY correct. This is similar to how Ford's software development division works. They have a 4 month development cycle, and vary the resources and scope of the project to fit it in. Basically, someone comes in with a project and they figure out exactly what must be done. Then you prioritize the features, break it up into chunks that can be completed in 4 months, and allocate enough people to cover all of the chunks.

      Of course, the hardest part here is defining the requirements exactly. And, the business customers aren't much help. Usually they have a vague description of the project, and don't really want to make the effort to define it adequately. So, when its contracted out to compuware, IBM, or someone, they are often times forced to bid without really knowing exactly. I think this is the real reason that projects so often run over budget, over schedule, or are just crappy products.

  13. Fixing the endpoint? by sphealey · · Score: 3, Insightful

    Very large and complex projects do get completed, sometimes even on-time/on-budget. Examples include skyscrapers, nuclear submarines, aircraft carriers, power plants (whether conventional or nuclear), oil refineries, B-747/A-320, etc. And all of these systems nowadays have a software component as well.

    So the easy response is that bad management in general, and bad project management in particular, is responsible for software project failures. While this is no doubt true, the next question has to be, why do software projects have such bad project management?

    I don't have a good answer, but one thing that occurs to me is the lack of a fixed endpoint. When an oil refinery ships its first load of POL, it is complete. When an aircraft carrier launches its first plane, it is complete. But the amorphous and mallable nature of software means that it is hard to define an exact endpoint, and very hard to avoid changing the definition of the endpoint as the project proceeds. So things keep "creeping" along until disaster occurs.

    sPh

    1. Re:Fixing the endpoint? by blang · · Score: 2

      Maybe it's harder to access slashdot, and taking care of your personal correspondence, play some game, surf around for news, etc. if you're a construction worker on the clock? Something that makes the estimation much easier for a contruction boss.

      --
      -- Another senseless waste of fine bytes.
    2. Re:Fixing the endpoint? by KyleCordes · · Score: 3, Insightful

      Note that many of the kinds of projects you mentioned also sometimes have cost and time overruns of remarkable size.

      Note also the enormous difference between building the first 747 / skyscaper / nuclear submarine and the 15th or 1500th of each.

    3. Re:Fixing the endpoint? by Bobo+the+Space+Chimp · · Score: 1

      Those systems are not done in six months, a year, or a year and a half. Many computer projects are done on the Herculean Effort schedule, all the while pretending to be on a well-defined develop/test/refine cycle.

      --
      I am for the complete Trantorization of Earth.
    4. Re:Fixing the endpoint? by Reality+Master+101 · · Score: 2

      I don't have a good answer, but one thing that occurs to me is the lack of a fixed endpoint.

      That's also a failure of management. All projects should have a requirements spec that describes exactly what the system is supposed to do.

      I think the fundamental problem is that people don't want to spend money on all the "non-coding" documentation. Good documentation can take half the time of a project. It seems so much more "efficient" just to put a hoard of programmers on the project and crank out code, but it ends up costing a lot more.

      --
      Sometimes it's best to just let stupid people be stupid.
    5. Re:Fixing the endpoint? by xyzzy · · Score: 2

      One distinction between many software projects and the examples you give above is that after the first example of a new thing, no "new" engineering is done. The 5,000th B-747 is to a first order, exactly like #s 1-4,999 (or at the very least, exactly like all the others in its model family). However, building the FIRST B-747 is extremely complicated (and, if you read any of the history of Boeing, was a "bet the company" project!).

      Skyscrapers and bridges are similar in that many have been built before, and there's usually a PENALTY for innovation beyond a certain degree. For instance, skyscrapers usually look aesthetically different, but structurally they are very similar to the one down the block. The same goes for bridges.

      Can the same be said for software? Not always. The SCSI driver you write tomorrow is probably a lot like the one you wrote 4 years ago, but things like the first browser, MP3 player, Napster, Gnome/KDE, Quake -- more groundbreaking pieces of software -- probably didn't have a lot to go on.

      This is one area where Open Source can make a huge contribution, by letting people spend time on the innovative areas of their project, and let them draw from a stable toolkit of features and technologies that they don't have to reinvent.

    6. Re:Fixing the endpoint? by Anonymous Coward · · Score: 0

      Isnt it the case that when an estimate for a building is put forward, complete designs have been finalised, and that this research/design phase takes weeks/years to complete in itself?

      If software builders did *all* the designs before starting to code:
      1. Things would never move forward very fast, 1000 years to get from concrete the steel girder.
      2. Late arriving specs would never get implemented.
      3. A project would run for several weeks/years before a cost/time estimate could be finalised.

      Functional point stuff just seems to be a way of doing a quick and dirty design, but still doesnt account for the fact that some research (what do the users really want, how fast does the database go, etc) will still be done during the implementation phase.

    7. Re:Fixing the endpoint? by RandomPeon · · Score: 2
      Very large and complex projects do get completed, sometimes even on-time/on-budget. Examples include skyscrapers, nuclear submarines, aircraft carriers, power plants (whether conventional or nuclear), oil refineries, B-747/A-320, etc. And all of these systems nowadays have a software component as well.

      Software involves what I call "military-grade risk". Almost every military technology is delivered late, over budget, and without full functionality, no matter what the newspaper tells you (trust me). The national missile defense system is the greatest example, but any piece of military equipment more complicated than a rucksack always has problems at first. There are two reasons for this:
      • The military is far less risk-averse than corporations from a financial perspective. Cost overruns are a fact of life, as are initial problems.
      • The DOD wants things that are actually innovative because it needs new technology to "keep up". You don't get substantial improvements without taking substantial risks. Projects that the private sector would never consider paying to try are commonplace in the defense world.

        Every piece of software is a military-style project - it's exceedingly complicated and usually nobody has built it before (or they don't have access to the previous designs). You want to try unproven technology, you'll get uneven results. The alternative, just staying with proven technology, has never been acceptable to the defense establishment, and is becoming less so to other sectors.
  14. Well organised software projects.... by Anonymous Coward · · Score: 0

    have resonably predictable schedules. Badly managed prjects don't. Mozilla is badly managed. hence, it is very. very, very late.

    1. Re:Well organised software projects.... by a42 · · Score: 2

      Well organized projects have unpredictable schedules. Badly managed projects have even more unpredictable schedules.

      --john

  15. The reality steps in by forgoil · · Score: 2

    Yes, you can guess how long it could take, and no, there is no formula for it. I can have a great day and produce 10x as much as usual. I can be lucky and my first guess of how to do it is correct, or I can take the wrong one and loose a week. You might predict for some kind of generic person, but I know for experiences that there are very large differences between how fast different people produce code/documents etc.

    So it's all a loss? Nope, but you have to remember that it's not an exact science. It involves replanning, knowing your work force, letting the work force plan on their own, more replanning, experince, guesses, and whatever it takes. Honesty is also high up on the list, and not trying to do huge amounts of work in one go. Heck, there is so much about this subject that it would ages to describe them. My suggestion is, go out in reality, work, and learn.

  16. Projects != R&D by TheKodiak · · Score: 2, Insightful

    Straightforward implementation, no matter how complex, can be scheduled accurately. Developing new technology cannot.

    --
    -=Best Viewed Using [INLINE]=-
    1. Re:Projects != R&D by Anonymous Coward · · Score: 0

      If the only part you want to schedule is the actual development work, I.E not included specifications, testing & roll-out, yeah, I'm sure you could get a pretty accurate estimate overall.

      If you want to estimate the entire process, no, forget it. There will be too many unknowns or changes or oversights to throw your nice MS Project Gantt Chart right off. Take a look at a development manager some time, see how often they spend updating their work schedules etc. They sure as hell don't do it for the fun of it.

  17. Spam alert! by wiredog · · Score: 2

    This article is also at K5. In fact, it's the same article. If you want to get comments from two different places, then please post the article at one place, and post a link to it at other places.

  18. Be afraid of the unknown by blang · · Score: 2

    When making estimates, people tend to sweep under the carpet, or simplify the things they don't know, but can be quite accurate estimate the things they've built before. That's why really large project fail so badly, because every single person involved im the project has many more unknowns than known things to deal with.

    So, never say "How hard can that be?" before having coded up a small working prototype.

    --
    -- Another senseless waste of fine bytes.
    1. Re:Be afraid of the unknown by markmoss · · Score: 3, Insightful

      The problem is, you don't get paid for coding up a small working prototype in order to do an estimate. So my estimating technique is:

      Figure the time to do the parts I understand.

      Count the parts I don't understand. Allow a very long time for each of them.

      Add it all up, then multiply by 3

  19. Type of project by ishark · · Score: 1

    I think that the problem is that "it depends on what you're doing". If you're re-applying for the 100th time the same metodology (= solving the same problem again, with different sugar) or if you're just gluing together pre-cooked solutions, then the process is much like an industrial project. You can make estimates, and only the normal delays will pop up.

    On the opposite, if the developement is more like "research", i.e. doing something completely new, designing new solutions to known problems, extending known solution to new problems, then you're in the same boat as the scientists.
    There's no way to give a correct estimate, since you don't know the exact procedure which will be followed. And no, "design - code - test" is a bit weak of a process description to be a basis for an estimation.....

    1. Re:Type of project by KyleCordes · · Score: 2

      This is the key insight, and the one that the "software engineering is a science, you hackers should go away" crowd ignores. There is no one answer to how well software development can be planned / estimated, it depends *enormously* on the kind of project.

      I once has a person stand up and tell me that his organization could estimate sizable projects with great accuracy. After some questions, it turned at that the projects were essentially the same thing again and again. Duh.

      On the other hand, I usually do a pretty good job of estimating costs and schedules, even when there are some significant unknowns. So perhaps the situation is not as had as some people are making it sound, either.

  20. Incompleteness by wetdogjp · · Score: 3, Funny

    Lewis also provides a link to this "introduction to incompleteness" (a fun subject in itself)

    I started writing a paper about this topic once, but I never finished it.

    -WetDog

    1. Re:Incompleteness by Anonymous Coward · · Score: 1, Funny

      I've been meaning to write a SegFault article about the Art of Procrastination, but I keep putting it off...

    2. Re:Incompleteness by Black+Parrot · · Score: 2, Funny


      > started writing a paper about this topic once, but I never finished it.

      Me t

      --
      Sheesh, evil *and* a jerk. -- Jade
  21. Proper Knowledge by sui · · Score: 0

    You can make an accurate estimation on how long it takes to create a software application by knowing your developers, what needs to be done, and how well they previously worked on projects. Sure there can be set backs, buts thats why its an estimation. It depends on what your making too of course, I don't think you can just set a specific date for something as big as a wordprocessing suite or a 3D game but for something along the line of a website, database, etc. You should be able to fairly accurately base your estimation of past work. Setting deadlines can be great motivators, giving company bonuses for meeting those deadlines are pretty nice as well. If nobody sets a deadline for you then you might never motivate yourself to finish it.

    --
    Why do the kids in West Side Story have to join a street gang if they can afford $70 Gap khakis?
  22. Estimates based on motivation by ciurana · · Score: 4, Insightful

    My company develops turn-key systems. Sometimes we also develop custom solutions for our customers. Our customer base has increased steadily after the dotcom crash, when we switched from products to services. One of the reasons our customers like us is that we don't bill projects by the hour. We will the project on a fixed price, not to exceed, basis.

    The programmers who work with us on a contract basis don't bill us by the hour either. After we have the design and we distribute tasks and prior to submitting the final estimate, we ask contractors to place a fixed bid.

    We've done six major projects like this since March, and in all cases we finished within budget and on-schedule, and the systems are currently in production. They are all mission-critical systems running in either robotics environments or high-availability networks.

    Our economic motivation is then to do things well and quickly in order to increase our profits. That also enables us to move on to the next project faster than slaving over some customer in order to bill the maximum hours.

    As far as development techniques go, we adopted XP earlier on and it's working for us.

    Cheers!

    E
    --
    http://eugeneciurana.com | http://ciurana.eu
    1. Re:Estimates based on motivation by KyleCordes · · Score: 3, Interesting

      My firm also does some work on a fixed-cost basis, with similar good results. I also borrow many ideas from XP.

      A key to fixed-cost is that it takes practice. Try it on a small scale before you commit to it on a larger scale, to avoid large-scale failure...

    2. Re:Estimates based on motivation by justanyone · · Score: 1
      >> We adopted XP earlier on and it's working for us

      We've got to figure that the XP is "Extreme Progrmaming" as in the book by the same name (at This amazon.com link here.

      Team programming, like code review paradigms of the past, increase effectiveness of programming, but do require significant personnell and management input. People working together closely calls for matching personalities and resolving tech approach disputes cordially and effectively. This means adding good technical management to the team. Management is supposedly a science, but like p-sychology there are hard areas and (throat-clearing noise)really SOFT science areas that defy characterization.

    3. Re:Estimates based on motivation by vanix · · Score: 2, Insightful

      That is very interesting, but how do you determine the fixed price you charge the customer?

      --
      "Government is a disease masquerading as its own cure." --Robert LeFevre
    4. Re:Estimates based on motivation by rafial · · Score: 3, Insightful

      It would seem that with fixed cost billing you'd need to specify rigid acceptance criteria up front to avoid the customer lobbying for "just one more feature" under the cost umbrella of the current contact.

      How do you reconcile this with the nature of XP projects to deliver something that is noticeably different from the customers original conception of their need (but that in fact fits very well the customers need as learned over the course of the project?)

      I'm seriously interested to hear about folxs who have figured out how to marry an agile development process to fixed cost contracts.

    5. Re:Estimates based on motivation by Skapare · · Score: 2

      It would seem to me that the fixed-cost would be subject to unfixing every time any specification would be subject to unfixing. Unfortunately one of the bad things about XP is that it does increase the variabiity of cost.

      --
      now we need to go OSS in diesel cars
    6. Re:Estimates based on motivation by BinxBolling · · Score: 1

      The same way you estimate schedules: Come up with something that looks reasonable, then triple it.

    7. Re:Estimates based on motivation by KyleCordes · · Score: 3, Interesting

      [agile development process to fixed cost contracts]

      I work with the customer to divide the project up in to phases / steps / iterations / releases / whatever. Group the most vital core pieces together and do them first, at a fixed cost. As requirement change, these changes either go in to future fixed cost releases, or they are done hourly if requested. Thus, the overall project is not fixed, but at each stage the customer knows what they are buying at what price, and does not have the worry of the "meter running".

      There is some related explanation (not a sales pitch) about it on my web site:

      http://kylecordes.com/story-182-shared-risk-pricin g.html

    8. Re:Estimates based on motivation by TheAJofOZ · · Score: 1
      We've done six major projects like this since March, and in all cases we finished within budget and on-schedule, and the systems are currently in production. They are all mission-critical systems running in either robotics environments or high-availability networks.

      What do you mean by within budget? Do you mean that each party forked out exactly the amount of cash they said they would and so you are financially within budget, or do you mean that all resource usage was in line with the plan? The reason I ask, is that most projects that claim to be on schedule and within budget are actually way over budget but the extra hours put in by the development team (remember those long nights at work) aren't logged properly so the company can say it was on budget. By working with a fixed payment plan the whole way down the line, all you do is offset the over-budget problem from the client to the developers.

      Worse yet these kinds of activities often lead to incorrect figures being used as the basis for estimation of the next project and so the budget just gets further out.

      Even if this doesn't happen in your company, it shows that your company is not within budget because of fixed price payments. Though, it is very likely the reason you have gained extra business as the client is assured of the price and if you do go over budget, they get a bargain.

    9. Re:Estimates based on motivation by dgroskind · · Score: 1

      Could a key factor in success be in the phrase We've done six major projects like this since March? Six projects in 8 months suggests short projects. Short projects are easier to estimate accurately because there is less time for unexpected things to occur. They also have a smaller and thus more well-defined set of specs.

      He also says: The most important part of this process is not to start coding and testing until the business requirements are clearly defined.

      It's excellent advice but the implication is that the longer you spend in the analysis phase, the more accurately you can estimate the size of the project. Somehow you've got to recover the cost of this analysis, which can be a large part of the project, particularly a short one.

      Presumably this cost is recovered in the fixed price, which will be more accurate as a result of the detailed analysis.

      Another question is: if he was on time and on budget did he still make a profit? Many projects "finished within budget and on-schedule" because the margin of error is the profit margin.

      You say: Though, it is very likely the reason you have gained extra business as the client is assured of the price and if you do go over budget, they get a bargain.

      There is a rought correlation between being able to estimate a project accurately and being able to turn out a quality product. If his estimates are accurate it is because his analysis was thorough, which would result in better design and therefore probably a good product.

  23. Much more like manufacturing than physics. Mostly by ers81239 · · Score: 3, Informative

    As a software developer, I would have to say that a majority of the development that I have been involved in or been aware of is of the manufacturing variety. Most business sofware is a DIDO job. Data in, Data Out. Make some fancy forms and reports and you have turned a database into a 'billing' system or what have you. There aren't really any new algorithms needed. Of course, there are a ton of them in use in the database server, the network protocols, etc. But you aren't developing those, just using them.

    The reason that estimates are always wrong are *1* unclear requirements, *2* changing requirements, *3* complicated user interfaces, *4* weak focus on testing.

    I find *1* to be the biggest difficulty. The prinicipals of a software project like to say things like "Automate timeclock operations" but as a developer, you need *A LOT* of information to do that. When you ask questions like "I understand that you do not want to allow any changes to a pay period after the checks have been cut, but then what are we going to do when travelling workers report their hours late?" Management thinks you are being a pain in the ass, but if you don't get it right, your project will fail.

    I agree with taking a realistic estimate and doubling the both the developement and the testing estimates.

    --
    there are 2 kinds of people. those who divide people into 2 kinds, and those who don't.
  24. There are four parameters by dybdahl · · Score: 3, Insightful

    There are four parameters to a software project:

    - Quality
    - Quantity
    - Deadline
    - Costs

    In a competitive environment with humans involved, up to three can be specified. Not four. Good examples are:

    - Many guidelines for managing software projects tell you to reduce quantity when you get near deadline.
    - Some customers have a specified budget but really don't know how much software they can get for that money. They prefer to have costs fixed than to have quantity or deadline fixed.
    - Sometimes deadline is so important, that costs may 10-double in order to reach that deadline, and quality and quantity may get reduced a lot in order to finish the project.

    It is extremely important to realize the meaning of all four parameters before you can talk about estimating project schedules.

    Lars.

    1. Re:There are four parameters by cjhuitt · · Score: 1

      This reminds me of a signature a guy used at a company I used to work for. (The company won't be mentioned, but let's just say there are jokes out about the returns on their stock compared to collecting the deposit on beer bottles.)

      Anyway, the signature:

      You can have it: Correct, Cheap, Now. Pick any two.

    2. Re:There are four parameters by the+bluebrain · · Score: 1

      hm... I've been working with the triangle "Cost", "Schedule" and "Quality". "Quality" in this case includes "quantity" in your sense, but considering feature creep, I think making it a seperate corner point makes sense... thanks Lars!
      (maybe I should just read a book about project management, rather than going by the seat of my 501's :)

      --
      yes, we have no bananas
  25. More like Research and Development... by quadcitytj · · Score: 1

    I think software engineering is more like research and development than hardware engineering. You know what your ultimate goal is, and you can SOMETIMES estimate how long it will take, but usually, you're doing something that you've never done before. So, for large scale projects, it's VERY difficult to estimate with any degree of accuracy how long a software project is going to take.

    This is why code re-use is so great. It makes software engineering more like hardware engineering, allowing more of a construction method of building software than a research "how-am-I-going-to-do-this" method.

  26. Right place to Ask by maroberts · · Score: 2, Interesting

    Like any public forum Slashdot has a wide range of readers, a large number of whom actually work in the software engineering field [myslef included].

    Anyway my personal theory based on blind idealism is that it is extremely difficult to get an estimate for completion right; short term goals are fairly easy to predict, because you have most of the information you require to make those predictions, but longer term estimates are much more of a wild guess. I personally thing its a consequent of chaos theory - a butterfly flutters its wings in Brazil and your software project instantly takes another two years! More seriously small errors in estimating components of a large project can induce large errors in estimating the time and resources needed to complete the whole project.

    Linux is right with its "release when ready" motto. Since it is impossible to tell when it will be ready over such a wide range of groups and interests, you have to pick your release moments when they happen, not try and force them to happen.

    --

    Donte Alistair Anderson Roberts - hi son!
    Karma: Chameleon

    1. Re:Right place to Ask by King+Of+Chat · · Score: 3, Insightful
      (Maybe someone should do a survey to find out how many of us are pros?)

      Likewise, I've been developing (C++) for a living for about 12 years now and I've come to some conclusions:

      There are estimating techniques/metrics which will work. They depend upon going round a few times to "calibrate" and consistent application. "Task Points" was a good one - basically break your use cases down and down until you have a series of one-line statements about the system. Multiply these by your magic number and that's the estimate. This, like all estimating techniques, is built on sand because:

      It depends upon a development team sticking around long enough to do a few projects to calibrate you method.

      It depends upon the exact functions of the system being known at the time you do the estimate. This is the killer.

      I have never worked on a project where the exact functioning is known at the time coding starts. I have, however, observed that the more analysis/design you do before estimating, the more accurate the estimate is. The problem is, that people always want the answer (estimate) before they've given you the problem (spec).

      FWIW On small projects (which are generally better defined), I run through the spec, do a rough n' ready count up of the number of classes, multiply by a factor (decided by the complexity of each class and who I think is going to code it) add a QA+debugging allowance and come up with figures which aren't too wide of the mark.

      Oh yeah, and the "who's coding it" is important. Lots of studies show that the difference between "good" and "bad" coders can be a factor of ten. I've been slammed by PMs after estimating how long something would take me, then the PM puts some "cross trained" ex VB dork on it.

      To summarise: it is possible if you know who is coding what. Recommendations: 1) read Brooks, 2) keep it small 3) ignore any of the "latest methodologies" that Project Managers try and sell you.

      --
      This sig made only from recycled ASCII
    2. Re:Right place to Ask by Anonymous+Brave+Guy · · Score: 2
      Like any public forum Slashdot has a wide range of readers, a large number of whom actually work in the software engineering field [myslef included].

      Thing is, that's an assumption. Unless someone surveys a major, unbiased fraction of the /. readership, we'll never know. All we can judge by is the comments here, and those are certainly dominated by very opinionated and enthusiastic but largely ill-informed people.

      Linux is right with its "release when ready" motto.

      Unfortunately, while Linux can afford that luxury because it's not against a clock, most of us in a commercial environment can't. If you're in an environment where first mover in the market takes 90% of the money, you will do whatever it takes to be that first mover, or you will lose big time. The prosecution submits "Microsoft" as the only evidence required in support of this claim.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    3. Re:Right place to Ask by maroberts · · Score: 1

      Actually being the first mover is not ideal, you actually want to arrive in the market close to the first mover, but with the right design. To verify that this strategy works, I would suggest that Sony are rarely first to market (look at Minidisk) but sell well 'cos everyine recognises that their products are better than many of their rivals.

      Even MS is not first to market, but follows where it believes it can make a reasonable competitor.

      --

      Donte Alistair Anderson Roberts - hi son!
      Karma: Chameleon

  27. Analysis, Design, and Project Management by weez75 · · Score: 2

    There are tons of tools and techniques to developing software. Best practices abound in fact. Two things present in every form of good software development are analysis/design and project management. If you do the work in analysis and design you will be capable of building a good estimate.

    That's only half the battle. Once a project is underway, keeping scope in check is critical so you need good project management. If you build a great estimate through analysis and design and then throw it out the window when you start writing code, you'll never have a good estimate.

    Where do major providers like Microsoft and even Mozilla go wrong? Simple, they either jump in and start coding before they've completely settled on what they're building or they change their mind in development about what they're building. Either way, it screws up delivery dates.

    --
    Of course we torture people, we need the information --Gen. Pinochet
    1. Re:Analysis, Design, and Project Management by Black+Parrot · · Score: 2


      > Once a project is underway, keeping scope in check is critical so you need good project management.

      Yes, requirements creep seems to be the main problem. Since software is "intangible", management seems to think that they can change the requirements when it's half done, with no adverse consequences. The same management wouldn't dream of doing the same thing with their new office building. (E.g, doubling the space requirements after the foundation and half the floors have already been built.)

      In general, it's a management problem from top to bottom. Start with vague requirements, disallow sufficient time and money even for a minimal implementation of those vague requirements, put underqualified and undisciplined staff on the project, change the vague requirements while the project is in progress, and go on death marches when the inevitable happens.

      Software projects aren't going to behave well until management imposes an engineering discipline on them. And the biggest issues for management are (a) deciding what they are going to do before they start, and (b) deciding before they start whether the project is worth the time and money it's going to take, and cancelling it up front if they don't like those times/costs, rather than just trimming the time/cost projections down to something that their organization finds politically acceptable and then going ahead with the project under falsified time/cost projections.

      --
      Sheesh, evil *and* a jerk. -- Jade
    2. Re:Analysis, Design, and Project Management by Anonymous Coward · · Score: 0

      There are tons of tools and techniques to developing software. Best practices abound in fact.

      "x million Windows 95 users can't be wrong". There are over three hundred software engineering standards. The current state of softare indicates that either they don't work or they're being ignored. Neither option is particularly encouraging.
  28. Neither by Anonymous Coward · · Score: 0
    Programming isn't a mechanical process (attach part A to part B) or a mathematical process (debugging = 3 days), it's a creative process that relies on a human mind to construct.

    That process can be estimated, but I haven't seen an instance of setting hard and fast scheduling rules that has been successful in the long run, unless they had a whole bunch of padding in them to begin with.

  29. The short answer: no by Tassach · · Score: 3, Insightful
    I've been developing software professionally for about 14 years now. In that time, I've almost NEVER seen a development project get completed in the allotted time. This has been true even when the schedule has been padded outrageously to account for slippage.


    The biggest problem I've seen is requirements creep. Most often, you don't have a firm set of requirements to start with. Management and programmers both have a tendancy to view requirements documents and other formal software engineering practices as superflourous. The problem is that without a firm set of fixed requirements, you are always trying to hit a moving target.



    Another problem is attitude, mostly on the part of management, but programmers are guilty too. One faulty attitude is that we are conditioned to expect immediate results. There's also a prevaling attitude that there is never enough time to do it right, but there's always enough time to do it over. This leads to undocumented, unmaintainable masses of code that either gets thrown away after a while.



    Even worse, you wind up with garbage code that SHOULD be thrown away and re-written from scratch, but winds up getting patched and modified for years. I can't tell you how many times I've had a manager say "there isn't time to rewrite it, just patch it". That would be OK if you are only going to patch it once -- but you wind up patching the same program a half dozen times, and it winds up taking twice as long to do all the as it would have if you had just rewritten it from scratch.

    --
    Why is it that the proponents of "one nation under God" are so eager to get rid of "liberty and justice for all"?
  30. Not Voodoo Dammit!! by deKernel · · Score: 1

    Okay, I finally found an article that I feel the need to reply too.
    Writing good code is art-work, but it is not a black-art. If you spend some time upfront to design the system, you should be able to give a good estimate. Don't give me that "but its new technology" bullshit either. Then in your schedule you put a prototyping period in where all you do is write scrapable code (did you happen to catch the word "schedule" in that sentence).

    That being said, Yes, I realize that sometimes manangement doesn't/won't give you that time upfront for which you will pay 10-fold in a piss-pour design. I might not be the sharpest knife in the ol drawer, but even I know that.

    Basically, the moral of this rant is, just apply good engineering principles and you should be able to create a schedule (ah there is that word again) that you should be able to track reasonably close.

    1. Re:Not Voodoo Dammit!! by Anonymous Coward · · Score: 0

      I disagree on one point: How can you make the "real" schedule if you haven't done the prototyping yet? What I want to be able to do is say "give me X days/weeks/? to study this and I will give you a good estimate. Unfortunately there are always so many projects going on that I never get that "luxury". I tend to agree with most posters about it depending on what % has been done before and what % is totally new.

  31. Extreme Programming addresses this by HisMother · · Score: 1
    The Extreme Programming methodology has a way of dealing with this: basically, you only make predictions a few weeks in advance. You break everything down into individual tasks that are small enough to estimate reliably in "ideal programmer days." An ideal programmer day is a day where a programmer gets to work all day without interruption. Everyone naturally estimates this way already and people are actually pretty good at doing it. The problem is that you don't get ideal days; you get real days, where you have to go to meetings, and answer the phone, and people get sick, etc. What you do is you measure the ratio between ideal days and real days. Then you estimate in real days, and multiply by this velocity to get a reliable estimate. You can develop very reliable velocity measures for a given team in a given environment. You can update the measurement over time.

    Then every three weeks, you pick enough individually estimated tasks such that the total number of ideal programmer days multiplied by a previously measured velocity equals three weeks. You then say with very good confidence that in three weeks, you'll have finished those tasks. You're virtually always right, once you've got some practice and measurements behind you. If you don't hit the target exactly, you adjust the velocity for the next iteration.

    Beyond that, though, any estimates you make are understood to be back-of-the-envelope and not to be trusted. You don't bet the farm on anything you don't really know. And the customers are very happy when you hit the target time after time!

    --
    Cantankerous old coot since 1957.
    1. Re:Extreme Programming addresses this by NineNine · · Score: 1

      A few weeks? How in the hell does it address esitmates for large projects? Sounds like mumbo-jumbo CS-degree bullshit to me.

    2. Re:Extreme Programming addresses this by jpbelang · · Score: 1

      You do large projects in many iterations.

      The main problem with this is to have the customer on-site.

      And, no, this is not CS bull. The guys behind this (as are most of the agile methodology people) are just programmers, not university types.

      --
      JP http://www.wearerite.com
    3. Re:Extreme Programming addresses this by markmoss · · Score: 2

      The Extreme Programming methodology has a way of dealing with this: basically, you only make predictions a few weeks in advance. Correct, given reasonably competent management, it should be possible to estimate what you can do in the next 3 weeks pretty accurately. The problem is, usually the customer wants to know the cost of a 6-12 month project up front, before they decide whether or not to even start it. Be honest about this ("You don't know exactly what you want yet, and even if you did no one can tell you what it will cost with any accuracy") and most customers will go to someone willing to _lie_ to them...

    4. Re:Extreme Programming addresses this by Skapare · · Score: 2

      The problem which NineNine referred to I believe is how to reconcile a large scale project using XP methodology with the MBA types who want one big estimate for when the whole damn project will be complete and how many dollars it will cost just from the original specifications (e.g. the job order the sales people already signed on to). If your management (and marketing, etc) are not in line with extreme programming methods, it's not going to work there.

      --
      now we need to go OSS in diesel cars
    5. Re:Extreme Programming addresses this by philg · · Score: 2

      XP is actually notable for its lack of "mumbo-jumbo CS-degree bullshit" -- it was developed and refined by development teams in the field (of industry and cosumer-related IT, not building space shuttles or cruise missiles, like so many other methodologies).

      XP is one of a series of methodologies called "lightweight," or, more recently, "agile." A good starting point for reading about it would be the book Extreme Programming Explained by Kent Beck. (Sorry, no ISBN, look it up somewhere.) You will find it much smaller, simpler, and more informative than most books on the subject. You can also check out their website)

      There are actually a lot of other methodologies besides XP that are taking this approach -- you can find a lot of links and a statement of shared values at the Agile Alliance website.

      phil

    6. Re:Extreme Programming addresses this by jpbelang · · Score: 1

      The problem which NineNine referred to I believe is how to reconcile a large scale project using XP methodology with the MBA types who want one big estimate for when the whole damn project will be complete and how many dollars it will cost just from the original specifications

      From your tone, I get that you aren't an MBA type :)

      The main problem is that everybody wants a heavy handed process because that's how they know big things are built (like airplanes). But this ain't true of software, because specs change too much.

      If your management (and marketing, etc) are not in line with extreme programming methods, it's not going to work there.

      Agreed. But this is true of any developpement methodology.

      --
      JP http://www.wearerite.com
    7. Re:Extreme Programming addresses this by Anonymous Coward · · Score: 0

      There is a saying in systems engineering...

      It is impossible to build a large system. It cannot be done. Ever.

      The best you can do is build a simple system that works and then add to it until it has all the features you want.

    8. Re:Extreme Programming addresses this by Anonymous Coward · · Score: 0

      Actually, XP also addresses the long term issue. It tries to front load the project with the most valuable (to the customer) features, and assumes that the project is over when the customer can't find enough valuable features to justify the cost of the next deliverable. In other words - there's no attempt to either estimate a complete project or to control features long term. It avoids all the problems associated with that form of uncertainty

  32. Re:In all seriousness, this is the wrong place to by Bobo+the+Space+Chimp · · Score: 2, Insightful

    You can develop properly, but you have to design modules with all specified functionality in mind -- no last second adding in "oh yeah, don't forget the login system" or "we're gonna want a WOW display attached to the processing so add in all these hack hooks at the last second into the core engine."

    If you need that stuff, design it in from the start. Too many programmers worry about general design to make future expansion easier, while leaving out consideration for real, hard requirements that won't be implemented until later in the project.

    And to avoid the problem with really bad bugs that are responsible for the (double it and add 5) estimation, take a little extra time to write exhaustive testing (as far as possible) of each module, indeed each function, to make sure it doesn't do something wrong when given values out of "happy path" input range.

    --
    I am for the complete Trantorization of Earth.
  33. Slashdot readers are students? by Smallest · · Score: 3, Interesting

    where'd you get that idea?

    i've always thought most /. readers are programmers and IT people who come here to kill time at work.

    -c

    --
    I have discovered a truly remarkable proof which this margin is too small to contain.
    1. Re:Slashdot readers are students? by Anonymous Coward · · Score: 0

      You only have to read the comments on political articles to know the average Slashdotter is about 20 years old and clueless.

    2. Re:Slashdot readers are students? by NineNine · · Score: 0, Flamebait

      I had a feeling that most were 16-18 and clueless.

    3. Re:Slashdot readers are students? by dattaway · · Score: 3, Funny

      I thought most of us worked for the NSA and FBI.

    4. Re:Slashdot readers are students? by Anonymous Coward · · Score: 0

      You Have Been Trolled.
      You Have Lost
      Have A Nice Day

    5. Re:Slashdot readers are students? by THEbwana · · Score: 1

      Bullshit. People are that stupid in all walks of life.

  34. There are reasonable ways to get a good estimate by north.coaster · · Score: 1

    I have worked in a couple organizations where schedule estimates are pretty accurate. The key, for these orgs at least, was to follow a structured development model where the requiremenst were well defined in advance. We used the Capability Maturity Model. This methology probably wouldn't work for very small or very large projects, but it works very well for medium sized project.

    It's important to note that this methology is independent of programming language, operating system, etc. What is does require, however, is experience. In other words, the longer that you follow the CMM, the better your schedule estimates will be. Also not that everybody related to the progect (System Engineering, Managament, etc.) has to participate. Management in particular has to understand that it is better to have an accurate schedule that ends later than desired than it is to have a schedule that meets the desired end date but that is impossible to meet.

    The amazing thing about the CMM is that the higher the rating of the organization, the less stress that the programmers feel when they are doing their work. For me, that makes it all worthwhile.

    /Don

  35. Re:In all seriousness, this is the wrong place to by Organic_Info · · Score: 5, Informative

    True but most experienced S/W engineers or Project managers know that most projects slip because of changes to/deviations from the original project spec.

    Fixed specs are much easier to engineer than those that continually change. You wouldn't easily engineer a bridge if the river banks kept moving.

    I think experienced project managers know how to control the spec rather than the project. (I could be wrong - It's just what I've seen).

    --
    "Things that you own end up owning you" - Tyler Durden (via Diogenes of Sinope).
  36. True Estimates are Rarely Used, Anyway. by Chibi · · Score: 1

    With a few notable exceptions (companies where the developers drive everything - like id, Valve, etc), most deadlines are determined by business people who don't understand all of the business and technology requirements. Then, the development staff are forced to create a schedule that fits into this deadline. That's why you get horror stories of people working 70+ hours a week. Some of this overtime can be attributed to dedication and interest in the work, but more of it can be attributed to people feeling they have to work that much to meet the deadline.

    And when the deadline is in jeopardy, most companies will try to cut corners, rather than address the real issue - lack of time. Most deadline changes come much too late.

    --
    If all you have are silver bullets, everything looks like a werewolf.
  37. Some Estimations can be made by justanyone · · Score: 1
    I find after 10+ years C/Perl consulting:
    • I'm almost never off by more than 50%;
    • I'm somewhat more accurate when I'm the architect as well as developer;
    • Systems complexity determines uncertainty;
    • GOOD project management (not me - someone to run interference for me w/ management) can increase my effective productivity by 30-50% by assigning achievable tasks with adequate testing time;
    • BAD project management can cut my effectiveness to nearly zip likewise;
    • If I have free reign to do simplification / moderate rearchitecture as part of improvements, my effectiveness goes up again - I can solve underlying problems of bad code sections before they turn into TIME-CONSUMING BUGS.

    All this adds up to good experience and a good corporate culture. Writing SIMPLE code that morons could debug (and whoever comes after you might just be one) saves tons of time and effort over the life of the code.

    Book recommendation: "Enough Rope to Shoot Yourself in the Foot" by Holub has great stuff about simplifying code and reducing uncertainty in software project time estimations.

    Time Estimate Uncertainty == Complexity / (ProgrammerCompetence * GoodManagement)

  38. What a cop-out! by Anonymous Coward · · Score: 0

    It's the same old generic method for disproving something. Reduce it to a formula, and then apply the Theorem of Incompleteness to it. That's the one that demonstrates the fact that no mathematical system can ever fully describe every situation. It doesn't prove that estimates are not workable, but rather that they can never be absolutely perfect.

  39. SW Schedules by rlp · · Score: 2

    SW development is still more of an art than a science. That said, I've seen several fairly common causes for late software:

    1) Lack of up front planning - too many projects fail to do proper initial planning - specifically defining the problem to be solved, producing detailed product requirements, and a detailed project plan (and then sticking to it).

    2) Late (or incomplete) requirements - if you went to an architect half way through home construction and wanted to change the design of a house; you wouldn't be surprised if it fell behind schedule and went over cost.

    3) Poor risk management - failure to track dependencies, too many high risk dependencies ("we'll build it on the next OS release, with the new compiler, and that SW package that our start-up partner will finish next month"), failure to make and execute contingency plans.

    4) Failure to heed Brook's Law ("Adding software developers to a late project - makes it later.")

    5) Failure to have read Deming ("You cannot test quality into a product").

    6) General design failures - not assuring that product is scalable, reliable, testable, etc.

    7) Failure to place a senior developer on the team that knows about the previous issues.

    --
    [Insert pithy quote here]
    1. Re:SW Schedules by jpbelang · · Score: 1

      1) Lack of up front planning - too many projects fail to do proper initial planning - specifically defining the problem to be solved, producing detailed product requirements, and a detailed project plan (and then sticking to it).


      My opinion is that long term planning fails all the time because of ...

      2) Late (or incomplete) requirements - if you went to an architect half way through home construction and wanted to change the design of a house; you wouldn't be surprised if it fell behind schedule and went over cost.

      ...this. Customers (the people who pay) change their minds. Sales (your own) tend to over promise or even forget features promised.

      I also think that getting precise requirements
      is so difficult that it tends to be useless (except in a couple of businesses). Keep them simple...

      My preferred developpement method is XP because it does just this.


      5) Failure to have read Deming ("You cannot test quality into a product").


      Which doesn't mean that you shouldn't test :)

      7) Failure to place a senior developer on the team that knows about the previous issues.

      Or, at least, a very knowlegable available customer.

      --
      JP http://www.wearerite.com
  40. Doesn't work for anything non-trivial by renehollan · · Score: 2
    I've seen, and been subjected to software-estimation techniques.

    The best defense I've heard is that "Yes, everyone's estimate will be way off, but they are independent estimates of different pieces of code and when aggregated the standard deviation drops to a reasonable value". IOW, the estimate I pulled out of my butt will be way optimistic, but your estimate will be pessimistic, and it will all cancel out.

    There are a few problems with this, rather nice and neat statistical trick:

    1) As Michael Milken found out, the observations are not independent -- there are two many interactions between the components being estimated. In Milken's case, he argued that a diversified portfolio or junk bonds would have high yield, low risk charactersitics. Unfortunately, the performance of shaky companies in a market downturn is rather strongly corelated.

    2) You need something objective to estimate. In our case, we measured the number of easy, medium, and hard member functions of classes that had to be implemented. See the problem? You need to cast your interfaces in stone, external, and internal ones, right at the start. On simple projects this is easy, but not on hard ones, as much as we all agree it is desirable. There is something called learning from one's mistakes and it will happen with anything novel.

    3) This presumes that the design is sound. To ensure this we reviewed and analyzed and studied, and "damnit, you indented 3 spaces instead of 4...", well you get the idea. The closest scrutiny will find the obvious bugs, but not the really tricky ones.

    4) This technique does not encourage the one thing that saves you in the face of change -- adaptive and modular design. You make things modular so change affects as little as possible, and you make things adaptive so change is as painless as possible. IOW, you plan for making changes bacause of mistakes. Naturally, this violates (1) above, so it is not permitted. The mantra is "Design it right the first time!" We know that we can get 95% or 99% or maybe even 99.5% of it right, but never 100%.

    In the end, sure, we "finished" on time, but, er what was finished didn't work very well, and had to be rescued by the few who knew what was going on. To be fair, the design efforts and documentation helped provide a somewhat modular system, but the really important parts weren't documented -- we had reams of paper describing the "trees", but not nearly enough describing the "forest" as it were.

    So, I'm skeptical.

    I've heard that these techniques encourage "discipline" and help mediocre programmers contribute acceptable code. Well, where I work now, we have a policy of not hiring "mediocre" programmers. I can dump a suspicious log on someone and be assured that they WILL fix the problem -- I don't have to argue that there IS a problem ("but, the process, the process says this WON'T happen... your log must be a lie...")

    --
    You could've hired me.
  41. Actually.... by Anonymous Coward · · Score: 3, Funny

    ...the real reason estimating doesn't work is that there's no way to predict how much time programmers will spend reading Slashdot...

  42. Of Course They Can Be Estimated... by Trinity-Infinity · · Score: 2, Insightful
    Check out the CSE Center for Software Engineering
    Home of ....
  43. It's all a bunch of bull.. by sid_vicious · · Score: 2, Insightful

    I remember being in my software engineering class in college the day the professor was lecturing on "CoCoMo" (think it stood for "Cost Completion Model").

    He very carefully laid out the algorithm - I don't have my textbook handy, but it involved elementary mathematical operations on estimated man hours, estimated lines of code, estimated overhead, etc., then at the end -- and I am not making this up -- they multiply the result by a "magic number".

    Where did you get the magic number, oh sage of the ivory tower? Well, we just made it up -- it seems to work.

    It hit me then that the whole discipline of estimating cost completion is all bullshit. You might as well be estimating with a crystal ball or divining the future with chicken bones. Since I've been working, the best advice I've gotten so far has been "take how long you think it'll take and double it".

    --
    If it ain't broke, it doesn't have enough features yet.
    1. Re:It's all a bunch of bull.. by NearlyHeadless · · Score: 2
      It hit me then that the whole discipline of estimating cost completion is all bullshit. You might as well be estimating with a crystal ball or divining the future with chicken bones. Since I've been working, the best advice I've gotten so far has been "take how long you think it'll take and double it".
      There is a methodology which works pretty well within its limits. That is function point estimating. If the requirements of the project are well-defined enough to use it, then the estimates are not complete bullshit. See, for example, the book Function Point Analysis[goatse.cx]


      The paper that started this Slashdot discussion is sort of silly, but it does reference a good empirical work in the CACM which finds that function point analysis works and most other methods don't.


      Of course there are projects which have vague, always-changing requirements that even this wouldn't work.

    2. Re:It's all a bunch of bull.. by ogren · · Score: 2, Funny

      He very carefully laid out the algorithm - I don't have my textbook handy, but it involved elementary mathematical operations on estimated man hours, estimated lines of code, estimated overhead, etc., then at the end -- and I am not making this up -- they multiply the result by a "magic number".

      It hit me then that the whole discipline of estimating cost completion is all bullshit. You might as well be estimating with a crystal ball or divining the future with chicken bones. Since I've been working, the best advice I've gotten so far has been "take how long you think it'll take and double it".

      Back when I was in middle school my math teacher told me that in order to calculate the area of a circle you had to square the radius and (I am not making this up!) multiply it by a magic number. They even had some hocus-pocus name for the magic number.

      It was then that I new the entire field of mathematics had been invented by a bunch of wackos, and that my method was much better. I guess how large I think the area is and then double it. Works for me.

      All equations with constants are obviously flawed.

    3. Re:It's all a bunch of bull.. by angel'o'sphere · · Score: 1

      then at the end -- and I am not
      making this up -- they multiply the result by a "magic number". Where did you get the magic number, oh sage of the ivory tower? Well, we just made it up -- it seems to work.

      Yes, and?

      Read up the book again: Dr. Barry Boehm or better visit the COCOMO web site: http://sunset.usc.edu/research/COCOMOII/index.html

      The magic numbers are not magic at all. Boehms team analyzed software projects of various size and complexity. The projects are divided up into cathegories, e.g. systems programming versus application programming etc.

      For each cathegory different "magic numbers" where found.

      Regards,
      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    4. Re:It's all a bunch of bull.. by remande · · Score: 2
      I've seen magic number estimation, and it works well. Extreme Programming uses them. Here's how it works:
      1. Geeks are notoriously bad at taking things such as writing reports, talking on the phone, staff meetings, etc. into account.
      2. So we don't ask them to. We ask them to estimate in "perfect programming days" or "optimum time". That is, "How many eight-hour days would it take, pretending for the time being that nobody bothered you and you could just write the code without being interrupted".
      3. We then multiply that estimate by a magic number, or fudge factor, to get the real time needed.
      4. If we don't have a fudge factor, usually we put in 3.
      5. Once we've done this a couple of times, we start measuring the actual time taken. Divide the actual time taken by the optimum time, and you have the fudge factor.

      Doing a fudge factor this way works, regardless of the sorts of time sinks a developer has, so long as those time sinks don't vary widely. Rather than trying to figure out all the things that might impact the project, you work on the assumption that the same things that slowed you down last month will slow you down this month, and let the fudge factor handle all of them. You keep recalculating the proper fudge factor, and if it suddenly shoots up, you know you have a problem.
      --

      --The basis of all love is respect

    5. Re:It's all a bunch of bull.. by Anonymous Coward · · Score: 0

      All project management involves "magic numbers" -- the trick is figuring out what they are.

      For example, for industrial engineering, they are typically can refine the multiple down to 1-2%. Software is still in the 100%+ range.

  44. Our formulas by scott1853 · · Score: 2

    Where I work, we just take any estimate and multiply it by 3 and that seems to be a lot closer to the end result.

    Of course that doesn't stop the managers from asking every day, starting on the first day, whether or not the 3 month project you're working on is complete.

  45. Rule of Threes (was Re:Double the number) by isdnip · · Score: 2

    You're close, but I think you're maybe even too optimistic.

    I learned this about 25 years ago, while at a startup that was trying to build a computer out of the then-hot 6502-class microprocessor. The company tanked, never fully delivering. The smarter folks there (alas, there were not enough common-sense smarts where needed, just comp-sci-smarts always looking for another feature) knew the real Rule of Three:

    Take the amount of time you think it should take. Triple it. Then increment the unit of time.

    So three days is nine weeks, two months is six quarters.

    Double plus one is, well, just too optimistic. Of course there are a lot of people who understand a "rule of three" that forgets to increment the unit, so the rest is just quibbling.

    But hey, Microsoft did finally deliver something labeled Cairo (X P)! Lessee, that was due in what, 1995?

    And Linux, while ten years old, still manages its desktop (rendering, fonts, etc.) somewhat worse than the Win95 GDI did. Nobody's immune.

    1. Re:Rule of Threes (was Re:Double the number) by biohazard99 · · Score: 1

      Chicago (Win95) was set to ship at the earliest 4Q 93 (compute magazine), it shipped 3Q 95, with a switch from 16 to 32bits, now intel should be the one we should be bitching about, Merced was set to ship 4Q 98 or 99 (1992 predictions in Pop sci) it finally made it out of the gate 1Q/2Q 2001, that is a delay. I've never heard of Cairo shipping in 95, but if you've got documentation, back it up

  46. That is exactly the issue... by _anomaly_ · · Score: 1

    ...not taking the time to compose complete specifications for software engineering projects... at least that's what I've experienced. Most manager types want estimates without putting any work into it, which is when you run into BIG problems (BIG underestimates). The thing is, there is quite a bit of work that has to be done in order to even have an educated guess. Customer specifications, developer specifications, test planning, etc. Once these things are considered and drawn up, it forces you to consider the unforseen, and plan for the unforseen.
    Unfortunately, I personally have never met a manager type that will allow you to put time into a project they don't know will be profitable or not.

    --
    "I have no special gift, I am only passionately curious." - Albert Einstein
  47. This is why software projects fail by dybdahl · · Score: 2, Insightful

    When you construct a house or a power plant, you are in a business with subcontractors, that can take some of the risks. It is generally accepted to set a fixed price, because the procedures that are involved, are mostly known.

    In software, however, most projects do not rely on known procedures. It is fairly easy to estimate the costs of creating 1000 different window layouts, which is a known procedure, but it is a very difficult task to estimate the costs of implementing the layouts.

    If software would use as much energy on estimating each new task as construction projects did, developing software would be extremely expensive. Just imagine that you had to do a while-loop according to an ISO standard, and another while loop according to another ISO standard, because the two while loops were in different functions that were categorized differently by a third ISO standard. Instead we hire a bunch of programmers and make them program themselves. Sometimes we do it a little more complicated, like Open-Source, Xtreme Programming etc., but it's still a bunch of programmers hacking around.

    The trick is to manage it anyway - and that's why managing software projects will always be risc management and not very predictable.

    Lars.

    1. Re:This is why software projects fail by sphealey · · Score: 2
      If software would use as much energy on estimating each new task as construction projects did, developing software would be extremely expensive. Just imagine that you had to do a while-loop according to an ISO standard, and another while loop according to another ISO standard, because the two while loops were in different functions that were categorized differently by a third ISO standard. Instead we hire a bunch of programmers and make them program themselves. Sometimes we do it a little more complicated, like Open-Source, Xtreme Programming etc., but it's still a bunch of programmers hacking around.
      But perhaps the software might actually work, hmmmmm?

      Don't take me too literally here: I am no big fan of ISO 9xxx processes or the rigidity they create. However, the argument that software can't be developed successfully due to the difficulty of developing software is a self-reinforcing system.

      sPh

  48. Timescale estimates are an art in themselves... by shic · · Score: 1

    In my experience, the ability to give an estimate as to a timescale is extremely useful when it comes to planning. When a knowledgeable person asks how long a problem will take, I'm taken to one of these options:

    1. I've no-idea - it will take X days to 'nail down' what we want before I can give a more accurate answer... and this assumes everyone else can answer my non-technical questions immediately.
    2. This is going to be hard... Think in terms of several months/weeks or more for a first version, which probably won't be all that you're looking for.
    3. This is not really hard - just tedious - it requires X lines of code to be (trivially) altered which will probably take about X hours.
    4. This is easy - come back in a few hours - it will be ready then.
    5. I know less about this that Mr/Ms Y - so I suggest you ask them.

    I have found I've got better at my estimates as I become more experienced... I've also learned that using terminology like "a few ..." is very useful, as it leaves a reasonable margin for error. It feels honest too:-) In many situations these rough guesses are just what is needed in order to start strategic plans. Even wildly inaccurate estimates are useful when you need to prioritise the order in which tasks are tackled.
  49. I've done it by roman_mir · · Score: 2

    I've being working on large mostly web based applications for the past five years. There are always problems with timelines for software design and development, but I must say that most of the problems I've seing are not actually related to computer science. Whenever the task of time allocation is done by a marketing person, the times are wrong. When I get into the room with a couple of other developers, look at the problem that is set for us from the very beginning, from basically the reasons why this application is developped and who the users are to the point where we have to understand the datamodel, the time assignment exercise becomes much more clear. For a person with experience, it should be possible to estimate time for a task if this task resembles some of the person's experiences in the past. Of-course everything new has new risks associated with it, that is why you must always allow some slack for every specific task within the entire project. It also helps if you know who your developers are and if you have seeing these people at work before.

  50. Yes, it can be estimated by TheBracket · · Score: 1
    As the subject line, software development time can be estimated throughout the lifecycle of a project. Estimates don't become realistic until you've mapped out the exact framework of which code will do what, and planned every single discrete module (as in extreme programming, every module should be distinct and testable). Once you have this - and have a map showing dependencies - its not that hard to figure out how long it will take to create. Add in some flexibility (because humans are fallible; even the best programmers in the world have bad days, get the flu, break up with a girlfriend, etc.), and you have a realistic estimate. Its worth adding to the "programming time" estimates for every module to ensure time for thorough testing (insist on testing at all levels), as well as a detailed beta stage and rollout phase. Depending upon the complexity of the project, these can be large phases.


    On the other hand, a poorly-planned, creeping-feature project with little engineering and a lot of hacking/coding probably is impossible to predict with any degree of accuracy.

    --
    Lead developer, http://wisptools.net
  51. Defining Requirements by Snar+Bloot · · Score: 1
    It's the time getting the exact requirements nailed down that's toughest to estimate, that's where you need to get all the "creep" out of the scope.

    Then, if that was properly done, the rest of the construction should go on schedule.

    And don't accept unrealistic timeframe requests...

  52. Laff: Of course it can be estimated by dbretton · · Score: 1

    Accurately, too!

    I would dare to say that the first iteration will fall within about a 2 sigma error margin. That is, your first estimate on your first major program will have a bit of variance in it.
    It is a matter of obtaining the correct measurements of performance, time, and complexity for the project.
    After the first iteration, accurate estimations can be performed rather easily.
    No secret at all, really. Good metrics, a clear understanding of the problem space, and strong control (i.e. exacting configuration management) lead to a successful, well run program.

    Quick example:

    My customer wants me to design a fault tolerant, web-based acquisitions program to manage a 5,000 employee company's transactions. All of this is via an intranet. (the problem really doesn't matter. I just thought I would toss it in to give "details" people something to think about)

    1. Determine problem statement/space.
    Get the details! Determine the business-level requests. Brainstorm and develop a document listing the details (implications) of the problem.
    Present to the customer. Iterate until problem is completely defined.

    2. Draw on previous experience to determine approximate complexity of code. This can be tough, as complexity can be hard to factor. Look at the interactions, locations of system fault, probability of fault, and cross-cutting concerns in system usage.

    3. Leverage step 2 with previous metrics, such as source lines of code (SLOC), to make a first order estimation on total code to be produced.

    4. Combine SLOC estimate with pre-recorded employee productivity (SLOC/{week,month} as well as error rates (#bugs/{1k,10k}SLOC), to determine the length of time to produce the working product. Note that the above metrics usually include test, demonstration, verification and validation time.
    Factor in SLOC conversion rates if the application language differs from the baseline. (e.g. C->Java 1.3, JAVA->C++, ~1.0, Ada->C++ 1.2, cobol->C,...etc)

    5. Determine the migration time, if applicable, to move the customer's current base to the new product.

    6. Determine amount of time to distribute and train the customer for the new product.

    7. Roll numbers in, mix, and viola: you have your numbers for development of a project.

    Note that none of the above mentions product life cycle support and the like.

    IEEE J-STD-016-1995 is a good source for software life cycle process.

    -D

  53. Incentive is to Underestimate by dilute · · Score: 1

    Any estimate of development time is a prediction of the future, and thus always subject to the impact of unforeseen events.

    Nevertheless, it is possible to estimate many aspects of development, especially if there is a track record of similar jobs.

    But . . . it seems to be in the interest of the developer, most of the time, to underestimate development time and cost. That way, you get the work. Too long or high estimates (even if honest) scare people away. Once the commitment is made to a lowball estimate, and time and money sunk, the organization doing the commissioning is to some extent over the barrel, and will have no choice but to accept some (sometimes substantial) delays and overruns.
    The moral, I think, is don't rely on an estimate given by the people who are going to do the development.

  54. Strongly agree by peter303 · · Score: 2

    Works very well.
    You have a shippable system every 2-4 week cycle.
    Each new cycle nets more features.

  55. I'ts not impossible, but... by Anonymous Coward · · Score: 0

    ...you need a lot of experience and a lot of delayed projects on your shoulders. I think about the project, make some blocks, an idea of how it should work, then I say "Uhmmm... that's 1 month". Here i don't use de 2x or 3x. I take that number for the mean delay of the previous projects. I call that number the "Engineers Optimisic Index" (Or pessimistic, i alweys underestimate the times). Thet there are a crucial factor that is the part of the year the project must be done. In summer I add a factor of 1.5, in winter 1, an some number between in fall and spring depending of how i see my workers.
    I have a more controlled delay, but the problem is that most of my customers doesn't accept the prize rise. No problem, at last I know how munch it will be delayed, and I have a lot of time to prepare two or more excuses.

  56. Try common sense by joss · · Score: 2

    WRT software schedules - seldom has so much crap been written by so many for the benefit of so few.

    The problem is that the term "software schedule" is too wide a field to say anything meaningful about it. If you want to estimate how long it will take to put together a customized ecommerce web site, and the organisation has already built 5 of them, there is no problem. If you want to solve some problem that hasn't been solved before, it could take a week or a hundred years. Recognising the difference between these two cases is less simple than one might expect. And, if there's genuinely no novelty in the problem one should not be writing software at all. Someone should just write an application to solve that general class of problems.

    People get unstuck when they break the problem down into small chunks and then guess a number on each chunk. Often the initial decomposition misses crucial interactions and needs to be refactored later on. This is a bit like answering the problem about how long is a piece of string, by saying - well the string eginning, a middle and an end, I estimate each piece is 5 inches long, so the string is probably about 15 inches long. Unless the breakdown has brought genuine insight into the unknown aspects of the project, the estimate it provides is worse than useless. However, since one can then stick things out in MS project, print out pretty GANT charts, etc, this estimate is given more credence than a number generated by just reading the spec and making an educated guess.

    Part of the problem is that it's described as software engineering. Then we get all sorts of morons saying: civil engineers can tell us how long it will take to build a bridge, the problem must be that software engineers are unprofessional or that the subject is in it's infancy - things will improve. No, they won't, for the same reason that mathematicians couldn't tell you how long it would take to solve Fermat's last theorem.

    --
    http://rareformnewmedia.com/
  57. ScheduleTime = EstimatedTime * Math.PI by Anonymous Coward · · Score: 0

    Works well for me.

  58. Provably impossible by QuickFox · · Score: 1

    A mathematically rigorous examination will show that predicting development time is impossible since it's impossible to predict how interesting Slashdot will be and how much time will be spent there.

    --
    Terrorists can't threaten a country's freedom and democracy. Only lawmakers and voters can do that.
  59. Re:There are reasonable ways to get a good estimat by Anonymous Coward · · Score: 0

    The amazing thing about the CMM is that the higher the rating of the organization, the less stress that the programmers feel when they are doing their work.

    Well it's nice to see that there's at least some benefit to the CMM. Several empirical studies have to date found little evidence that an organisation at level n+1 produces products which are any better than one at level n. The reason why these things don't work too well is that they assume that producing software is like cranking out cars. Perfect the process and you produce consistent-quality cars each time. The problem is that software is produced by cloning the result of a one-off product of the programmers' creativity, so methodologies like CMM and related process-based techniques are doomed to failure (or at least lack of success) because software engineering isn't like any other type of engineering process.
  60. Some parts of the process are schedulable by CodeWheeney · · Score: 1

    I'm a developer with about 8 years of professional experience. I can say that, in those 8 years I've been involved in 4 or 5 BIG projects. Of those, one was estimated accurately. It happened one stormy night .....

    We (the engineering team) did not give an estimate for code completion until after a significant amount of design was complete, and we knew where the high risk areas of the project were (FYI, this was a major revision to a shipping product, 1.0 to 2.0 kind of thing).

    We broke down the work to be done into as many discreet tasks as possible, and found all the risky and dependant tasks and carefully reviewed each one, including proof of concept coding (which we got management approval to throw away).

    We then estimated the development tasks (including more detailed subsystem design and all development tasks, along with testing and documentation). These estimates were done by the developer(s)/testee(s)/doc folks who would be doing the work.

    We then aggressively kept track of our progress, and attacked any slippage immediately. We had testing in place from the first month (including nightly build and smoke tests, etc). We did not have many meetings for meetings sake, but everyone had ownership in the schedule, everyone re-factored as needed (ala XP), everyone concentrated on beating down risk, and we had a team that worked well together.

    All in all, I think this 12 month project was successful for several reasons: 1) We treated it as a very complex thing, which it was. 2) We attacked risk immediately. 3) We kept an eye on the schedule, and 4) We got lucky. 5) Marketing requirement changes were few, and the schedule impact was examined before acceptance/rejection.

    Luck is not to be discounted. We managed to identify all of the really risky parts and not get surprised by any odd things (considering we were writing for new technology).

    Overall, I'd say that parts of the software process can be estimated accurately. It is important to distinguish design from development work. That is, don't try to schedule the wandering, brain draining, R&D-esque part of development, it's too spasmodic. But, make sure to give it enough time, because if the design bits leak over, you're in trouble. And, this will happen, so spot it and account for it immediately.

    --
    C8H10N4O2 | Developer > Code
    1. Re:Some parts of the process are schedulable by Amazing+Quantum+Man · · Score: 2

      including proof of concept coding (which we got management approval to throw away).

      This is critical. When you are doing something completely new, and you need PoC, then the odds are your first cut (even with semi-formal or formal design methods) will be bad/buggy/suboptimal. Being able to trash it, without fear of repercussion is very important.

      I've seen many cases where we were told "this is demo, don't worry", and then the demo became the shipping product.

      I've had the luxury of discarding built code exactly once. This actually cleaned up every single bug because I was able to work from a (re)design that came from what I learned in PoC phase.

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
  61. Time for a real Slashdot poll by SeanAhern · · Score: 1

    Knowing, in general terms, what the demographics of Slashdot readership and postership (?) is would be a very useful thing.

    1. Re:Time for a real Slashdot poll by Totally_Lost · · Score: 1

      self selected polls are nearly always invalid, using the connection data base to the website, or hits from the banner ads would be necessary to ball park some of the figures. IE compare .edu hits to .com hits - and discard aol, @home and the like unless they represent more than 30% of the base - even those could be statisticly narrowed by
      selecting a random selection by slashdot and emailing the registered users for demographics.

  62. No such thing as Software Engineering by Whip-hero · · Score: 1

    This is a subject that really irks me in light of the conventional "Software Engineering" mindset. Most of SE nowadays seems to be aimed at making software projects as predictable as possible, as if they were like civil construction projects. The fact of the matter is that they are not like building projects... If we conform to the doctrine of software re-use, on of SE's central tenants, we should never have to re-write a piece of software, so we will never know what the complexity of the related problems are until the project is finished. Software has nothing to do with engineering- it is more like original composition, like writing a symphony or novel, except that it also has a constraint for rigorous correctness. Physics is a good analogy for that.

    --
    --WH--
    1. Re:No such thing as Software Engineering by NineNine · · Score: 1

      Let me guess... you're a student, right?

    2. Re:No such thing as Software Engineering by Whip-hero · · Score: 1
      > Let me guess... you're a student, right?


      No. Actually, I've been programming since the AplleSoft Basic days with the Apple IIe. I've worked on multiple-10-KLOC-sized projects, and I've done both code maintenance and original design.


      I also remember the days when flowcharts were an absolute necessity for good programming- if you didn't use them, you lacked professionalism. I took some heat for balking at that idea back then.
      I felt that flowcharts were an ill-concieved method of planning programs. Now, flowcharts are virtually extinct in the development process, and I'm paying my bills by writing code the same way I always have.

      --
      --WH--
  63. It's a question of money by jdoeii · · Score: 1

    With proper planning the duration of a software project can be estimated with very high defree of accuracy. The problem is that proper planning itself may take as long as 50% of total project time.

    In case of manufacturing, the process is known. Proper planning was done in advance, when the manufacturing process was developed.

    In case of physics one has to solve the problem before he would know how complex it is. Proper planning is the process.

    Basically, stick to projects you understand and planning should be a piece of cake.

  64. The magic eight ball by SilLumTao · · Score: 1

    I keep a magic eight ball at my desk for project estimation.

    BOSS: We need an wiz-bang feature added for customer XYZ, pronto! Give me an estimate.
    ME: Oh, magic eight ball, can this feature be completed in 6 months?
    8-BALL: The future looks cloudy.
    ME: Oh, magic eight ball, do we assign more than 5 people to this project?
    8-BALL: It seems likely.
    ME: Oh, magic eight ball, will I get a bonus if the project is done on time?
    8-BALL: No freakin' way.

    --
    "He was a wise man who invented beer." -- Plato
    1. Re:The magic eight ball by Anonymous Coward · · Score: 0

      ME: O magic eight ball, will I be laid off if the project fails?
      8-BALL: Yes.

      ME: O magic eight ball, will I be laid off if the project succeeds?
      8-BALL: Yes.

      ME: O magic eight ball, will the boss get a bonus if the project fails?
      8-BALL: Yes.

      ME: O magic eight ball, will the boss get a bonus if the project succeeds?
      8-BALL: Yes.

  65. second that opinion by ragnar · · Score: 2

    I agree entirely. My software engineering class involved an overview of various estimated tools and it was all BS. The systems used lines of code as a metric. What a joke. I remember the magic number, which is just a way of them reverse engineering on historical data. The bean counters are desperate for a way to understand programmers without knowing a line of code.

    --
    -- Solaris Central - http://w
    1. Re:second that opinion by sid_vicious · · Score: 2

      The bean counters are desperate for a way to understand programmers without knowing a line of code.

      I agree with you on that. But I also believe that besides just giving the bean counters a way to estimate, cost completion models give the suits some air of authority with which they can back up their paper estimates.

      "What, Project X is $7 million over budget?! But, but.... I used CoCoMo(tm)!"

      *camera zooms in on single teardrop running down cheek and dripping onto lapel of $1000 suit*

      --
      If it ain't broke, it doesn't have enough features yet.
  66. But there are workarounds by Will+Duquette · · Score: 1

    If you're writing your Nth application according to a familiar pattern, e.g., the Nth order-entry system, you can probably estimate the time-to-completion fairly well based on past experience.

    Otherwise, there's only one approach that really makes sense: recognize that development time is limited and do the important stuff first. That is, begin by implementing the simplest possible version of the application that does something of value, and then add features one-by-one in order of importance. When the inevitable dead-line comes, you'll have a product that may not do everything you'd like, or do it in the flashiest way, but which will give as much value as possible to its users given your time constraints.

    And if you have time to do this iteratively, so much the better, as you can get course corrections in midstream.

  67. Re:In all seriousness, this is the wrong place to by gorilla · · Score: 4, Interesting

    I'd have to agree with this. There are two major problems, the first being that the users don't really know what they want and the second being that almost always, the problems being solved are new problems, and therefore it's difficult to know what solution will best solve the problem.

  68. The Real Problem by jeffphil · · Score: 1

    The real problem starts when a project gets delayed, and none of the developers are willing to tell any other entities because of pride, ego, etc.

    So the marketing people keep preparing for product launch, or the sales people are selling vapor-ware, or the support people are saying the fix is 'right around the corner' and the customers and end-users are screaming for their software all because the developers did not update them on the timing.

    Ultimately the project will be released too soon because of the lack of communication and the bugs will cause another rapid release, and the cycle continues.

    And yes I do believe that X-Programming addresses these problems the best.

    1. Re:The Real Problem by markmoss · · Score: 2

      Ultimately the project will be released too soon because of the lack of communication and the bugs will cause another rapid release, and the cycle continues.

      Don't forget that leaving lots of bugs in rev 1.0 gives marketing something to brag about in 1.1 ("50% of it works like it ought to...").

  69. More Design Work = More accurate Estimates by msheppard · · Score: 2

    Scenerio 1:
    Q: It has to do *this*, how long?
    A: X days (Not very accurate)

    Scenerio 2:
    Q: Find out what it has to do, spend TIME specifiying it, then tell me how long.
    A: X days (Can be very accurate)

    The Problem I (10+ yrs pro developer) keep running into, is that you figure out what it is to do, specify it very well, and then as you start developing it and delievering pieces for review, that specification is changed and you are plopped solidy back into Scnerio 1. Worse is when you think you're done, and begin QA and get SLAPPED back into Scenerio 1... or even Scnenerio -1 where you are trying to hack your guess at how it works into how it really should work.

    M@

    --
    Krispy Cream is people
    1. Re:More Design Work = More accurate Estimates by radja · · Score: 2

      q: it has to do this, that and so-and-so.. can you write that?
      a: sure...
      q: How long will it take you to write it?
      a: 4 days
      q: ok, so we can go to market in 5 days??
      a: we havent tested ...
      q: we never tested, have we?
      a: no, but...
      q: so we wont test now either.. we go to market in 5 days..

      AAAAAAAAAAARRRRRRRRRRGGGGGGGGGGGGHHHHHHHHHH

      --

      No one can understand the truth until he drinks of coffee's frothy goodness.
      --Sheikh Abd-Al-Kadir, 1587
  70. Slashdot Reader != Slashdot Poster by Christopher+Bibbs · · Score: 3, Interesting

    I'm not saying the majority of Slashdot readers are professional developers, but don't judge the readership on the first-posters.

    That aside, my experience in software development (only 3 years) ball parking (1-3 days, 1 week-3 weeks, 1 month-3months) is usually possible, but tends to become wildly inaccurate beyond a few months. Regardless of what methond we use to determine timelines, some things always seem to slip, while others take a fraction of the expected time.

    1. Re:Slashdot Reader != Slashdot Poster by Cro+Magnon · · Score: 1

      I am a professional programmer, but I use all my brains on the job so there's nothing left over for my /. posts! :)

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
  71. Mythical Man-Month by Dogun · · Score: 1

    The book, the Mythical Man-Month, addresses this issue... it's a good read, I reccomend it. Actually, I think there's a slashdot review of it...

    1. Re:Mythical Man-Month by jeffphil · · Score: 1

      It addresses the problems, but says that there is not yet a good solution.

      The 25 year anniversary edition has a lot of extra updated information that basically says not much has changed over the 25 years since the problems were originally addressed.

  72. It is hard to write software by jageryager · · Score: 1
    As Torvolds said in the Cisco interview "software is hard to write." One of the hardest things about software is that much of the work is abstract. Since it is abstract managing software projects suffers from special problems.

    I like to make use analogies to think about the problem of SW engineering. If I were building a house I might select a site to build the house, and have an architect draw up some blueprints. After the blueprints existed, I would probably find a builder. The builder would look at the scheduling of his crews, and my blueprints, to come up with an estimate of when the job would be done.

    As actual building progresses it is easy for all involved to get a very intuitive idea of how things are coming. Has the basement been dug yet? Is the foundation in? Rough framing been done? Roof? Wiring? Plumbing? Dry wall? Flooring? finish Molding? Painting? Siding? A 10 year old could probably tell you with some reasonable amount of accuracy how the job was coming and how soon things would be done.

    In SW, it is often very hard to get a realistic clue on how well things are coming. A GUI might exist, with no real computing implemented behind it. Or the opposite might be true. The software might handle a small file, or a low rate, but not meet operation requirements. You have to have very clearly defined requirements, design, and implementation plan. and then take the time to actually determine how well the implementation is coming along. This can take a lot of time. Often the developer is left to report status with nobody double checking. Often the requirements, design, or implementation plan are poor. This make it even harder to determine progress.

    If my house was 50% complete and I decided that I really wanted a 2 story colonial instead of split level ranch, every one involved would easily recognize that this was a major revamp, and would probably mean starting from scratch. It would be intuitively obvious that my foundation was no longer the right size, and that the framing would need major revamps, and the first thing to do would be to stop all work and get a new set of blue prints. Probably the existing work would need to be torn down, and we would start from scratch.

    In software, since the work is so abstract, it is common to hear of projects where basic requirements and designs are radically changed in mid stream. The Boss doesn't really understand what software is, so he doesn't really know what impact the changing the requirements has.

    Since writing software doesn't consume raw materials other than time, people don't' seem to put enough time into requirements, or design. And since no 2x4's will be lost if I call for a major revamp in the SW, people are often willing to call for those major changes in mid stream.

    Folks who build houses are mostly skilled trades people who keep close track of their time worked. This gives planners good information for later estimates.

    Most SW folks are salaried staff. Often we don't get paid over time. Usually the amount of time it requires to do some work is not well documented. It is often not well documented when people work a lot of overtime to get a job done. This adds to the estimating problem. It took 2 man years to do the work. Does that include over time? Overtime for how many people? A staff of 4 working 6 months on a job probably won't be able to put in as much extra effort as a staff of 8 all working part time for 3 months.

    And even home building suffers delays, and miss deadlines, and even cancel projects in mid stream. Isn't there a major road/bridge/ramp project down around NYC that got canceled years ago, resulting in this unused ramp that just ends in mid-air?

    Software is infinitely copy-able. If I write it once, I don't need to write it again. many SW projects are really new inventions. It's a new idea. Something that didn't exist before. How long will it take to do this? Don't know. I've never done it before.

    Kevin

    --
    "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety"-B.Franklin
  73. Without a doubt by jscharla · · Score: 1
    In the case of a known platform, with a known problem times can definately be estimated. My belief (based somewhat in reality) is that more often then not the times are blown due to one of two reasons.
    • Research that the developers must perform in order to get up to speed with the chosen solution, and
    • Improper understanding of what is required and how long it will take to implement.
    These are related in that both could be solved by the developer/engineer knowing exactly what is required, having a strong voice in the actual budget, and actually being able to break the problem down into easily estimated chunks. More oftent then not it's client service and marketing people making the budget estimate who don't have any clue other then, "Well, this other project cost $x but this one doesn't seem as complex so it will probably cost $y". I think the industry has a huge shortage of knowledgable tech-savvy client service people who are not afraid to talk with the developers before giving an estimate.
    Oh well, that's my rant for the day.
    --
    Save the whales... Collect the whole set.
  74. /. factor... by Hooya · · Score: 1

    unless the estimate factors in the time it takes to load /. on any given day * 50 that estimate is no good. (because developers usually spend their time loading slashdot 50 times a day, silly.)

  75. Not again... by Anonymous Coward · · Score: 0

    How many times must we revisit this stupid topic?

    How do you expect to accurately estimate the time required for a creative work?
    Can you accurately estimate how long it will take to write a good novel? A trashy one, perhaps, but what about a good one?

    How about a painting, or a sculpture?

    They are all creative works, and as such involve some discovery on the part of the creator.
    Discovery can take anywhere from 30 seconds to 30 months or more, depending on the size of the project.

    We can estimate within about 30-40% how long we think it should take, but barring a crystal ball (for all the stuff that WILL go wrong), it's a guestimate at best.

  76. HOWTO: Estimate Project Schedules by jd · · Score: 2
    • State your objectives.
    • Create a formal specification
    • Draw up a critical-path analysis on that specification


    The time taken for ONE itteration of the software lifecycle will be equal to the "critical path". (A "critical path" is defined as the path that absolutely cannot be reduced in time, because of dependencies on other work.)


    Because the bulk of the work has been done, in the prior itteration(s), what you will get is a curve that is tending to a limit. That limit is the theoretical amount of time it would take to produce the optimal program for that specification.


    Once you have extrapolated the function, then you can produce an estimate of how long (and how many development cycles) it would take to produce a software component of a given standard.


    Note that CPA (Critical Path Analysis) also defines the optimal project team size and structure. No matter how many people you have on a team, you can NEVER produce a program in a shorter time than it critical path.


    (ObTrivia: CPA is the computer equivalent of asking the following: If it takes 1 man 60 seconds to dig a post-hole, how long would it take 60 men?)

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
    1. Re:HOWTO: Estimate Project Schedules by WolfWithoutAClause · · Score: 2

      Yeah; almost works, except you can't always predict how long each of the bits are really going to take; you get requirements churn, some of the people you employ may not work out, some fall under buses, some resign etc. etc.

      Many times the critical path can be beaten though- you can often break the project up and form a new critical path. Even the classic pregnant woman can give birth in less than 9.5 months (although its not something you should aim for!)

      --

      -WolfWithoutAClause

      "Gravity is only a theory, not a fact!"
  77. 2 weeks by KarmaBlackballed · · Score: 3, Insightful

    Ask a sharp programmer to estimate the time to develop a software solution and he might shrug and look irritated. Ask him if 2 weeks will be enough time, and there is an 80% chance he will say "of course" no matter what the task!

    Gung-ho programmers are optimists. Couple optimism with the ennumerable factors involved in programming a non trivial application and you will get what we have today.

    By the way. I am a programmer and I have little to no confidence in my time-estimation abilities, or anyone elses. It has taken me 14 years to come to grips with that.

    --

    --- -- - -
    Give me LIBERTY, or give me a check.
    1. Re:2 weeks by Anonymous Coward · · Score: 0

      I always say it will take about 3 months. I cant
      imagine any project would require longer than that.

    2. Re:2 weeks by jfisherwa · · Score: 1

      By the way. I am a programmer and I have little to no confidence in my time-estimation abilities, or anyone elses. It has taken me 14 years to come to grips with that.

      14 years? Is that your final answer?

    3. Re:2 weeks by cburley · · Score: 1
      I am a programmer and I have little to no confidence in my time-estimation abilities, or anyone elses. It has taken me 14 years to come to grips with that.

      Okay, but how long did you originally estimate it'd take you to come to grips with that?

      --
      Practice random senselessness and act kind of beautiful.
    4. Re:2 weeks by the+bluebrain · · Score: 1

      heh... ask her/him how long it will take to document it:)

      --
      yes, we have no bananas
  78. Fully agreed by l2b · · Score: 0, Flamebait
    most slashdot readers/posters are programmers that have no clue what methods are (hey insist on calling them methodologies like lame recruiters).

    just because you've read a uml book or an article by a 'popular' author, does not mean that you have the knowledge to make comments that others could realistically use.

  79. Software Engineering by su-geek · · Score: 1

    According to my Software Engineering Professor around 90% of all software engineering projects fail. With implementation of UML they are trying to change this. Using UML and a case tool you are able to save a great deal of time by generating code as well as documentation. The one problem with this is the programs to do this are basically, rational rose (~$4000) and Microsoft visio (YUCK). Well I must be off to my 8:00 calc class :)

    Peace,
    adam

    1. Re:Software Engineering by Amazing+Quantum+Man · · Score: 2

      Where did you get the $4000? That's *SINGLE-SEAT*.

      A full-bore installation of Rose and associated toolsets for Ada can easily run to $125,000 + 10%annually for maintenance!

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
  80. One could estimate if.... by HenryFlower · · Score: 2
    1. The requirements were fully understood and detailed ahead of time
    2. The biggest technical risks were understood ahead of time
    The problem is that you can't fully understand the requirements and the technical risks ahead of time, since they can only be fully known by building the software. In the time that it takes to fully understand the requirements and the technical risk, you could have released version 1 of the software, which would be incomplete, and would miss the mark but would be:
    • A better attempt at understanding requirements and technical risk than armchair analysis
    • An actual deliverable that, if you are lucky, might just be valuable to the customer
    How many times have you spent 10% of your time on the hard stuff, and 90% of your time on the easy or silly details? Why is the program 90% done for 1/2 the project duration? Why do the requirements and the specs always change? Why does the customer always hate the first version of the program?

    That's why the open source rule of "release early, release often" is the proper way of doing things in commercial software as well. The emphasis on planning and control makes the difficulty of software development worse that it could be, because it focuses effort on nearly meaningless exercises (business and technical analysis) that don't uncover real risks nearly so efficiently as building working software.

    See the agile software development movement for more.

    1. Re:One could estimate if.... by Theodrake · · Score: 1
      Why is the program 90% for 1/2 the project duration?

      Simple. The estimates where overly optimistic and the programmers know the schedule. So on every weekly status they show progress that exactly matches the prediction until they reach the 90% point. Then it freezes at 90% until they really get to the 90% completion.

      The common joke was the last 10% takes 90% of the time.

  81. Most projects are on time by Anonymous Coward · · Score: 0

    Imagine if Mother Nature worked for a typical business. Asked how long it would take to "manufacture" a human child she replies, "Nine months", to which her manager responds, "Sorry, we need it in three". Three months later, the fetus has barely developed and clearly isn't ready for delivery anytime soon. At seven months, delivery is induced and the child survives -- barely. And there are significant medical complications. Then the CEO blames the manager for delivering a defective product four months behind schedule.

    Unfortunately, this is the story of most software projects. People in fact have a realistic idea how long it will really take, but they don't like the answer. Greed (I MUST get to market first!), fear (If I tell him how long it really will take, it'll hurt my career) and ignorance (anything I don't understand must be easy to do) conspire to produce an arbitrary and unrealistic result. And in a futile attempt to meet the schedule many corners, such as requirements analysis and testing, are cut resulting in an unreliable product.

    Sure, there will always be nasty surprises on some software projects, but there ought to be a lot fewer of them. In the final analysis, a software project represents a People Problem, not a Process Problem and it's people's shortcomings that lead to a "late" project. If people would be more willing to own up to reality, most software projects would "take about as long as we thought".

  82. Software Development is like DESIGN! by chrisreedy · · Score: 2, Insightful

    People like to compare the software development process to manufacturing. But people also ignore the fact that before manufacturing there is design, which culminates in the first version of the object. Manufacturing produces versions 2 and beyond.

    The process of developing software is more like the process of producing the ultimately detailed design. For software, manufacturing is a mechanical process -- duplicating the initial working version.

    Now, with this view, ask how often the design for a product is completed on schedule, especially for a large complex product like an airplane (or the Intel Itanium processor :-)). I don't believe (I have no firm data) that the experience is a lot better than the experience for large software projects.

    Chris

  83. Re:There are reasonable ways to get a good estimat by a42 · · Score: 2
    What is does require, however, is experience. In other words, the longer that you follow the CMM, the better your schedule estimates will be.

    I would agree that experience improves ones skills at estimation. I wouldn't necessarily assume that this is a benefit or byproduct of CMM or any other methodology. It's simply a matter of having more data on which to base your assumptions. I've also discovered that this experience doesn't necessarily translate well from one type of project to another or across problem domains. To get a decent estimate you need smart people who are experience at doing your type of project in your problem domain. No way to get around it.

    --john

  84. YES: empirical evidence by mekkab · · Score: 1

    If you just so happen to be a big company that has been taking "good" metrics of your previous SW engineering projects for the past 7-10 years,
    and you are presented with a new project that is somewhat similar to your old projects, you can EASILY estimate accurate schedules.

    it's all about empirical evidence: how have we been performing? that's a great indicator of how we will continue to perform.
    BUT BARRING THAT:

    Basically- you come up with a plan, you see how feasible it is, if your plan slips you have multiple plan B's, and you track as you go.

    Then, to win the bid, you make your estimates a bit more aggressive ;)

    now what if you aren't a big company that's been taking metrics? You start out with your "old programmers intuition" on how long things should take- and you break 'em down (like we do to every problem)- and you then divide those pieces over time (taking dependencies in mind). Then- track your progress- if you are falling behind and not delivering the estimated value you thought you could be, look at your process. you are either 1) doing something wrong, 2) introducing too many bottlenecks for your developers, 3) didn't have an accurate grasp of the problem 4) you are in the wrong business and you should declare bankruptcy.

    I got this software engineering thing ALL werked out! (this "english-thing" however, is a much tougher nut to crack)

    So you have this problem! You are behind schedule! Oh no! What to do! Well, this should have been taken care of in your intial Risk mitigation and management assesment.

    --
    In the future, I would want to not be isolated from my friends in the Space Station.
  85. Software like a factory by LazyDawg · · Score: 3, Interesting

    Assembling software from reusable pieces requires three things that most software companies don't typically have:

    1. Discipline. Your average programmer will have read about various programming methodologies, but skipped past the parts which would make their code an easy-to-reuse template in lieu of fast development time. As with any gamble, you should know at exactly what point you want to quit, have an A-line for version 1.0's feature set, all that jazz.

    2. A big code base. Because of step 1, or maybe just a lack of previous projects, one's code base is typically limited to what you can find in a computer science textbook. Having a good database of classes and patterns that have turned out to be useful, and having easy access to this database for the information you need is the difference between a library and a code base.

    3. Incremental development. Throwing together a large software project, all at once, and then testing the whole thing is very tempting, and happens more often than most people like to admit. What should be happening is a series of incremental integrations into the final product, with unit tests of each part. Otherwise your large project can become a giant, complex nightmare. Making complex software shouldn't be made quite so complicated.

    While making a "software assembly line" takes slightly more work and trouble than your average car assembly line, it has incredible cost savings in the long run.

    --
    "Look at me, I invented the stove!" -- Ben Franklin
  86. Re:In all seriousness, this is the wrong place to by volsung · · Score: 1

    Doesn't this apply to every topic, not just software engineering?

  87. I don't have to worry about estimations by NineNine · · Score: 2

    Our marketing department makes them for me! They sell something to the customer on a certain date, then I'm told what I'm programming and when it's gonna be done. You gotta love the job market today...

  88. Estimation is very possible. by Kefaa · · Score: 5, Insightful

    The issue is not physics versus manufacturing, it is scope and cost containment like is done in manufacturing. As a person who has lead multi-million dollar projects, I have grown used to the cliché that goes something like this:
    If we built homes like software we would all be living in the street, penniless...

    The major issues I have seen revolve around a lack of scope and cost control. In many cases it is because there is little penalty for being late or over budget. In cases where penalties exist it is often beneficial to then over estimate the effort or cost required. Then once the money is approved, using it is becomes easy.

    Going back to the analogy consider the following:
    Scope
    If you were building a house, each piece has a specified cost, known in advance to a very large degree. In addition, altering the scope itself often incurs a penalty, because the work is not done by the owner. You plan a three bedroom, 1.5 bath home. Midway through planning you decide to make it a two bath home instead. The architect will charge the "re-scoping" fee and the builder will add the material fee. Now do the same after construction has begun. The architect gets their fee, the builder adds the material and resource costs, plus a "revision" fee for changing your mind after construction begins.

    During a software project, it is common for individuals to approach the developers and ask to expand the scope. This would be analogous to approaching one of the work crew and asking them to just add the extra half a bath. The difference is the work crew would get fired, and the developer gets bonus points for adding the feature, either directly or indirectly.

    If the developer chooses not to do it, or pushes them to the project manager, the client may label them uncooperative or difficult to work with. The project manager not wanting to be labeled either may coerce, cajole, or beg the developer to accomplish it, without a scope revision. Failure to do so by the developer results in real financial impact at some point, and offers little incentive to hold the line.

    Cost
    I call this the "Porsche syndrome".

    I go into the Porsche dealership and see a new 911 Carrera Coupe. Smiling the dealer offers to sell it at a deep discount, with options and accessories $84,000 (U.S.). Whewwww baby!!! I cannot afford that. "Look," I tell him, "my wife will never approve that, you need to get it down to $28,500 tops." Would any of us expect to have the price cut down? By half or more?

    Okay, how about "Look, what will it take to get it under $30,000? Seriously now, what do I have to give up" As the dealer is escorting me to the door he explains the only way I will get this car under $30k is with a mask and a gun or from a scrap metal dealer.

    Yet, daily we go to developers and tell them to do the same. We ask for an estimate and then go back with "This is too much, it needs to be smaller or it won't get approved!" --Insert blank stare here--- The idea that if something cannot be cost justified it should not be done, is often lost in the "request" itself.

    To nearly guarantee a project is on budget and time requires things many companies are unwilling to provide. Strict scope control procedures, with oversight by the person responsible for the money. That means each change, regardless of how trivial must be approved by someone above the project management team with business justification. It also means that requests for scope change cannot be made to developers directly, by anyone.

    I was very happy with the people who built my home. When speaking to many of my friends and coworkers who built their homes, they describe it as a process akin to having their flesh removed. Everything required such effort and detail that many would not do it again.

    Most of them were looking for the relationship to be like one at the office. We all want to get along and help each other out. This is not a commercial arrangement, and when we put the commercial context around it, we see it many offices lack structure.

    Internal organizations can be setup like commercial ones, but it is usually unwelcome as the perception is everyone should be working for the greater good of the company and this has the appearance of bureaucracy. Even if inaccurate, everyone "wanting to get along" prevents it from being implemented.

    1. Re:Estimation is very possible. by Lumpy · · Score: 3

      First, you can easily get a Porsche 911 turbo (or whatever they call it today.) for under 30K.. I can get you one right now for $12K. Do you require the new vynal smell and no minor paint scratches? are you willing to pay $70K to not have those paint scratches and not have 80K miles on it? It's still a porsche911. It still acts like the shiny new one, it just needs to be watched. maintained and cared for.

      The same can be done in software. The solution can almost every time be a used product or older product. The ony thing you gain by shiny new product is maybe performance, and that is a big maybe. and trouble free operation... well in software that is not the case.

      The simple fact is you can have what you want if you widen your scope.

      I drive a 911turbo and I have a Testerossa in my garage. I also only make $40K a year and live in a 980SQ foot house in the nicest neighborhood (not rich-snob land) in my city.

      I also have more spending cash than my $180K a year friends, they will never own a testerossa (Unless I sell them mine HA!) and probably never drive a 911turbo as their daily driver (except winter.)

      Why do I succeed and they fail? I have what I want, I got my toys. I also only have a $700 a month mortgage... they have $2000 a month, My cars are paid for and older (Porsche is 1989 The testerossa is 1986 and needs a transmission and interior.. I need to install the rebuilt tranny and havethe leather seats re-done) My boat is from the early 90's they pay $600.00 a month for their boat payment,$900.00 a month on their lexus and I have to take them out once a month because they cant afford to have fun.

      Only a very rich man or a moron demands to have the NEW items when a used item or older item is a perfect substitute.

      Work asked me to find out how much to replace out SQL6.5 servers with SQL2000. 50 user licenses for 10 servers...

      I asked why, their response was because it's new.

      They wanted to spend $20,000.00 for no reason whatsoever... and in fact would have caused downtime as the software that relies on the SQL server is not compatable with SQL2000 yet.

      That is the porsche syndrome... spending money foolishly and for no reason whatsoever... Unfortunately I.T. and I.S. is rife with stupid spending.

      Upgrading when needed is important. I fully support spending money when it increases reliability and productivity and therefore positively effecting cash-flow. spending it for only bragging rights or because there's a new one available?

      That's the failure of many people and companies today.

      --
      Do not look at laser with remaining good eye.
    2. Re:Estimation is very possible. by drinkypoo · · Score: 1

      Advertising is very successful. Also, particularly as Americans but also in other countries which emulate America's corporate methods, there is a drive to have the latest and greatest and be as productive as possible, or at least to be able to be productive. I buy tools I'll probably never use again rather than rent them, no joke. But I like to be able to do those sorts of things.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    3. Re:Estimation is very possible. by rela · · Score: 1
      Only a very rich man or a moron demands to have the NEW items when a used item or older item is a perfect substitute.

      There's not that much of a diffence between the two, often enough. =)

    4. Re:Estimation is very possible. by jamesl · · Score: 1

      Having a house built is easy and painless. Spend time developing your specs and pay an architect to turn them into drawings. This is your only opportunity to make changes. Hire a contractor to build to the plans for a fixed price with a schedule. Then leave everyone alone. If you forgot to get it into the spec, that's your problem. If the house is built wrong, you don't pay for it and it's the contractor's problem.

      I had one house built and have had several additions done. All painless, on budget and on schedule. If you aren't willing to spend time on the specs, go find a house that's already built.

  89. Interesting but irellevant by SLOGEN · · Score: 1

    Although I like to apply complexity theory to stuff as much as anyone, it doesn't really make sense here:

    Quote, The article, Abtract, line 5:if it is accepted that algorithmic complexity is an appropriate
    definition of the complexity of a programming project

    This assumption set's focus in the wrong place. Most projects have low algorithmic complexity and many of those fail. so that's not the actual problem.

    It might become a problem when people in the software world start solving hard (algorithmic complexity-hard) problems -- but I don't see that happening in commercial mainstream software within my lifetime ;)

    --
    SLOGEN [ http://ungdomshus.nu : Sebastian cover music]
  90. Experience can improve on this significantly by Totally_Lost · · Score: 2, Insightful

    You are absolutely right for most inexperienced developers. It was certainly the case when I was 24 and first started fixed price contracting. The reality, is that with a small amount of positive feedback most developers can start to get this right - typically within 25% within 3 months, and within 10% in a year. In my case I under bid the first project by a factor of five, and spent 3 months working at about $0.50/hr, the second project was within 50%, and the third nearly dead on. Working and getting paid by the job is experience that I think nearly every programmer needs BEFORE being allowed to work T&M or salaried.

    There are secondary effects of working by the job - you very quickly learn to do only what you are getting paid for - and don't spend a lot of time on personal research projects or unnecessarily rewriting other peoples code that is working just fine but doesn't conform to your personal style. KISS is absolutely a necessary personal style - anything else and you are doom to continuous cycles of project overruns and long talks with management about why your project is another month or two away from completion.

    1. Re:Experience can improve on this significantly by JabberWokky · · Score: 2
      with a small amount of positive feedback most developers can start to get this right

      One of the nicest things about my current (previous? I'm circulating resumes) job is that I was the sole developer other than one other code monkey who did reformatting and data entry and such. I could reliably estimate myself.

      As long as it *was* just myself. Things get much ore difficult when you're dealing with a major, multi-developer, or even worse, multi-company project. The graphics arrive late from the designers (or design company), halfway though the 14 month project, a new division opens up, Oracle is late in delivering their part of the project (despite paying those fsckers serious money to sit around and use their own special coffee machine).

      The best a manager can do is make sure all dependancies are lined up and build slack into the schedual. I.E., a fancy way of "multiply your estimate by 3.14".

      --
      Evan "Four major projects under my belt, all sucessful, all but one on time. Bleah."

      --
      "$30 for the One True Ring. $10 each additional ring!" -- JRR "Bob" Tolkien
    2. Re:Experience can improve on this significantly by GreyPoopon · · Score: 2
      As long as it *was* just myself. Things get much ore difficult when you're dealing with a major, multi-developer, or even worse, multi-company project.

      I wholeheartedly agree! I can usually do a pretty good job of estimating my own time and involvement, but as soon as other hands are involved you get unbelievable complexity added to the project. In fact, that's why the management philosophy of providing more resources to get the job done faster almost always ends up falling apart. You eventually reach a point where additional members to a project team actually cause the project to take longer. This is because you spend longer training people and making them understand your ideas. Meetings greatly increase in length and frequency to combat this situation.

      Another major problem is having a single person involved in too many projects. This usually happens when you have a development group. Each person in the group can easily be involved in 5 or more separate ongoing projects, although not necessarily with the same people. In my opinion (and it's definitely just an opinion), I feel that companies should instead devote a smaller number of project members to only 1 or 2 projects at a time. Your development group might be able to tackle the same number of projects, but I can almost guarantee you that the quality of work and timeline will be positively impacted by focusing your individual resources. I firmly believe this, even though I personally hate having only one project to work on at a time. My results are consistently better when I don't have to "task switch."

      --

      GreyPoopon
      --
      Why is it I can write insightful comments but can't come up with a clever signature?

    3. Re:Experience can improve on this significantly by xmedar · · Score: 2

      Indeed, thats why I recommend everyone to read The Mythical Man-Month: Essays on Software Engineering it's still a classic treatise on running projects, if you havent read it I suggest ou do, if you're a poor student, get it from the library, just read it okay?

      --
      Any sufficiently advanced man is indistinguishable from God
  91. extraneous items cause project runover by jshep · · Score: 1

    I have seen success estimating development time in person-hours using object point and function point estimation methods. Provided you have people that have estimation experience, these methods are usually quite good at approximating the amount of time it will take to develop each component in a system. However....

    ... I've found that even though you may correctly estimate the development time for a project, time schedules are often thrown off by team meetings, conference calls, interruptions by coworkers who want to tell you about what happened to their cat this weekend, etc. I believe someone in a previous post referred to the "interchangeable morons" concept in Stroustrup's C++ Language book. The team must be an efficient unit and the project manager must be intent on keeping meeting overhead to a necessary minimum. Otherwise, a well-estimated project will run over its schedule every single time.

    --


    "Computer Science is no more about computers than astronomy is about telescopes." - E.W. Dijkstra
  92. Software Schedules cannot be estimated by mosch · · Score: 2
    My professional experience has proven that software schedules cannot be estimated. Unless of course you're competant.

    If you need to double your estimate and add a random number, then I hope that you're a very junior coder, or that you're unemployed.

    1. Re:Software Schedules cannot be estimated by daviddennis · · Score: 2

      Software schedules can be estimated, if you know the exact boundaries of your project and you have done similar things before. For instance, if I am asked to write a report that does similar things to stuff I've done before, I know about how long it will take.

      But let's take a recent example of something I did. I had to connect to our SQL Server database, which required that I figure out a way to connect to the database, learn the various quirks of that method, and do the job. I might have to try several different methods, and some of them might require that I learn new tools. It would be very difficult to estimate that project accurately; the only way I can think of would be to actually do it.

      So that, of course, is what I did. It turns out my original intuitive estimate ("a week or so") was pretty accurate (once adjustments were made for my nasty case of the flu :-( ), but I wouldn't bet my professional reputation on its accuracy.

      If you only do routine things, then, you're right. But if you sometimes venture into unknown territory, well, I'd like to see what your estimation mechanism is.

      D

    2. Re:Software Schedules cannot be estimated by tubs · · Score: 1
      then I hope that you're a very junior coder, or that you're unemployed.

      Standard practice in a company I used to work for was to add 50% to any time estimate a designer quoted.

      People always seem to think they can work faster than they really can, usually because they don't include lunch, or holidays, or weekends, or toliet breaks in estimates for thier own work.

      --

      try to make ends meet, you're a slave to money, then you die

  93. The BAD way to develop software... by nologin · · Score: 2, Insightful
    1. Salesperson comes to initial agreement with client about a product.
    2. Salesperson contacts Software Department and finds out that product doesn't exist.
    3. Salesperson diplomatically alerts client to that effect (essentially turning product into project).
    4. Salesperson initiates project with Software Department director and sets a firm deadline based on estimates from company.
    5. Developers begin working on project.
    6. Problems crop up; appears project may run a little late.
    7. Company hires or assigns a project manager to try to put project back on time.
    8. Project manager and Software Director send mixed signals to development team, causing a waste in time and further delays.
    9. Project manager makes a final projection of delivery, appears to be far later than expected.
    10. Company replaces Software Director due to delays in project.
    11. Developers become less efficient due to uncertainty in company.
    12. New Software Director and Project Manager make compromises of project to reduce the delays.
    13. Project is eventually completed. Project manager is assigned to new project or leaves company.
    14. Go to step 1...

    Some companies actually do business this way. It scares the hell out of you if you are the client, but it is even scarier if you are working for the company in question.

    1. Re:The BAD way to develop software... by Anonymous Coward · · Score: 1, Insightful

      12a. Salesperson notices that competitor has new whizbang feature and changes specifications to include it without adjusting deadline.
      12b. Software Director and Project Manager inform developers that half their work is to be discarded and that they will be working unpaid overtime. Developers not pleased.
      12c. Best developers leave to work for competitor.

  94. Re:Much more like manufacturing than physics. Most by joe52 · · Score: 1

    When you ask questions like "I understand that you do not want to allow any changes to a pay period after the checks have been cut, but then what are we going to do when travelling workers report their hours late?" Management thinks you are being a pain in the ass, but if you don't get it right, your project will fail.


    So true. I have found it extremely difficult to explain to people that software is not magic. Phrases like "and so on" and "etc" do not belong in requirements docs. If you have 100 specific cases that you need me to handle, you cannot list three, say "and so on" and then explain to me verbally more or less what you want. I really need that list of every case. Oh, and I'll need time to test every single one of them. Yes, that will take more time than not testing, and no, I'm really not trying to be a pain.

  95. Politics by a42 · · Score: 2, Interesting
    I work in corporate IT doing software development and implementations. The project that I'm currently working on started in July 2000. The system was scheduled to be fully operational on November 30th, 2000. In addition to missing that date we've also missed dates in December 2000, January, Mar, June, September, and October 2001. We may or may not actually make the December 2001 date that we've currently been given. Each and every one of those missed dates was chosen for political reasons. The question has always been "When does this business need this system?" and not "How long will it take?"

    After the October date was missed there was a meeting of all the Project Managers, Program Managers, Subject Matter Experts, and other people involved in the project. They worked round the clock for nearly 3 days to come up with a revised project plan and estimate of how long it would take to finish the system, test it, and bring it online. The number they came up with moved the date into late January. Executive management didn't like this and decided that the new date would be mid-November. Their plan for squeezing out these extra two months? Just make everyone work harder. Needless to say we've got a group that is completely burnt out and getting less done in more time. Nifty.

    As long as "suits" continue to make schedules based on business needs (read "corporate politics") and not based on the complexity of the problem this is going to continue to happen.

    --john

  96. Most projects are not revolutionary... complexity. by Samuel+Nitzberg · · Score: 1

    Most projects are not fundamentally new... They are graphics systems, databases, communications systems components, etc....

    Fundamental systems (databases, graphics libraries, languages), we pretty much know how to describe and build - efficiently and well. Of course, what was bid by any given company, what can be done with their labor and expertise, and other issues can upset things.... :(

    Special and exotic systems, e.g. computerized data interpretation for medical uses, e.g. analyzing mamogram results, especially for the first generation of such systems, can take longer to develop, due to the criticality and novelty of the systems. Next generations of such systems should take less time, as they can operate on a wealth of collected information, samples, and data.

    Systems-of-systems can be much more complex and difficult to build, debug, and maintain. These, especially, can be cutting-edge, complex, and contain unforseeable development hazards. They can (and this is where scheduling becomes really difficult), rely on multiple components, each under development, and proper integration, for their timely development.

    Most systems - databases for insurance companies, real estate offices, etc..., are relatively routine. The quality and expertise of the software developers (and those bidding the contracts / developing the deal) should greatly affect not just the timeline, but overall satisfaction with the final product...

    Years back, an article in Scientific American suggested that complexity was a critical factor in software development problems. I generally disagree, and discussed this in my H2K (Hackers on Planet Earth) panel of Ethics in Military and Civilian Software Development (Audio from this session is available from http://www.2600.com) . Most problems (and some time issues) are really related to (I feel) a basic lack of care and concern for basic software engineering issues, and a lack of respect for what difficulties may be encountered. Careful planning and implementation alone can go a long way...

    Best book : The Mythical Man Month, Brooks.
    "Adding people to a late software project makes it later..."

    Sam Nitzberg
    sam@iamsam.com
    http://www.iamsam.com

  97. Lack of research investment by keath_milligan · · Score: 1

    One of the key things I see plaguing accurate software schedule estimation is the lack of understanding of what you are building.

    When a skyscraper or airplane is built, the schedule is often proceeded by years of research to determine precisely how each brick should be laid or how each rivet should be placed before the estimate for actual construction is made. Software rarely benefits from any research at all.

  98. When constants are constant and when they aren't by StrawberryFrog · · Score: 3, Interesting
    Where did you get the magic number, oh sage of the ivory tower? Well, we just made it up -- it seems to work.

    There is nothing wrong in principle with measuring what has happened in the past, and using that to predict what will happen in the future, before you discover why it works like that.

    For instance, if you measure that throughout the year, the average time between sunrises is 24 hours. You can use that number even though the only explanation for it that you might have is "it seems to work"

    Of course, when you apply this to software develpment time estimation, it falls down for a number of reasons. It's not constant across technologies. It's not constant across types of project. It doesn't take into account the variation in technological risks (ie if you have done something like this before, you will spend less time finding ways to do stuff). It doesn't scale linearly with the size of the project. It varies across individuals. etc. etc.

    --

    My Karma: ran over your Dogma
    StrawberryFrog

  99. Warning - large trade-off here in by KyleCordes · · Score: 2

    [Just imagine that you had to do a while-loop according to an ISO standard]

    You could make software development more predictable, but it would probably come at the cost of *enormously* increased total resources spend. Would you rather have:

    (A) A project estimate at $1,000,000, which might blow the budget and csot $2,000,000.

    (B) The same project estimate at $10,000,000 and come in on budget?

    1. Re:Warning - large trade-off here in by sphealey · · Score: 2
      Would you rather have:

      (A) A project estimate at $1,000,000, which might blow the budget and csot $2,000,000.

      (B) The same project estimate at $10,000,000 and come in on budget?
      The problem is that the recent history of large-scale software project has been: (i) Estimate of 5,000,000 (ii) actual expenditure at project termination: 45,000,000 (iii) probability of success: 20%.

      Given that history, yes, I would prefer the 10,000,000 projet that came in as budgeted.

      sPh

    2. Re:Warning - large trade-off here in by Tiroth · · Score: 1

      references?

    3. Re:Warning - large trade-off here in by KyleCordes · · Score: 2

      Given your choices:

      A) estimate $5M, actual $45M, FAILURE

      B) estimate $10M, actual $10M, SUCCESS

      I and everyone else would obviously choose B. But that wasn't the questions I asked; my question and point were about the idea that increasing the estimatability of a project may come at a severe price in increasing the absolute cost of the project, and that is a tradeoff which organizations must address, either implicity or explicity.

      Note that a side-effect may also be that hard-to-estimate project may be cancelled or skipped entirely, even though they could delivery great business value.

    4. Re:Warning - large trade-off here in by sphealey · · Score: 2
      references?
      Do you own term paper! ;-)

      I apologize for not having complete references at hand. Communications of the ACM and Risks Forum have both published quite a few examples. Three that come to mind are:

      • When United Airlines styled itself UAL Corp, they started a project to replace various airline, hotel, and car reservatations with one super-disco system. Cost: 200M USD. Result: failure and reorganization of company
      • Australia's largest bank started a similar project to replace all their retail, stock, bond, and exchange systems with one uber-"risk management" system based on some advanced algebric theory. Cost: 150M USD. Result: failure.

        The US FAA initiated a 10-year project to replace the North American air traffic control system (which then and now runs in 1401 emulation mode on current generation IBM mainframes!). Cost: 2B USD. Result: total failure, nothing salvagable.

      That's all I can think of right now, but I am sure others can add more.

      sPh

    5. Re:Warning - large trade-off here in by greenrd · · Score: 1
      Australia's largest bank started a similar project to replace all their retail, stock, bond, and exchange systems with one uber-"risk management" system based on some advanced algebric theory.

      Hmmm... doesn't sound like they were very good at risk management when it came to software projects...

  100. Sure by stats, but 1% of a million is a huge base by Totally_Lost · · Score: 1

    I think you will find that there are probably better than 10K of us old farts that have been doing this for 20-40 years that read this list regularly. And probably 5-10X that with more than 5 years experience.

  101. Ever hear of Trojan Nuclear Powerplant? by digitalunity · · Score: 1

    Well...... you were doing fine with examples until you got to nuclear power plants. Right here in my home town, Trojan Nuclear Powerplant was behind schedule for so many years, the state shelved the project. They said it was too much money. Of course, this wasn't determined until there was only 10% of the project left. Then, they let it sit for many years, costing us local taxpayers a 100 million $ a year to keep it cleaned up and safe(yet inoperable). Whew!
    I better stop... I'm just getting pissed off thinking about it.

    --
    You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
    1. Re:Ever hear of Trojan Nuclear Powerplant? by sphealey · · Score: 2
      Well...... you were doing fine with examples until you got to nuclear power plants. Right here in my home town, Trojan Nuclear Powerplant[...]
      Just for the record, I have worked in nuclear construction as well as other large-scale engineering environments. I am aware (sometimes painfully) of the examples that have been provided.

      Yes, some of these large-scale projects went over schedule and over budget (the worst I can think of those that were completed is Clinton Nuclear Power Plant: estimate of 6 years and $800 million for a 2-unit, 1600 MW plant; actual was 12 years and $6 billion for a _one_ unit, 800 MW plant. Which was just recently sold for $20 million!).

      But - most of these projects did get finished sooner or later, at costs no more than 4x their original estimate, and did fulfill their intended function. This cannot be said for many large software projects - or medium-sized ones, for that matter.

      sPh

    2. Re:Ever hear of Trojan Nuclear Powerplant? by JennyWL · · Score: 1

      Hope you're not talking about the state of Oregon, where Trojan Nuclear Power Plant operated successfully for 17 years of its 20-year license term, closing down only when costly material replacement was looming (steam generator tanks with cracks in them). Perhaps you're thinking of WPPSS plants 4 and 5? Those were shelved after plants 1 through 3 ran so far over estimate that the Washington Public Power Supply System realized they could NEVER make back their costs over the expected operating life if they went ahead with the last 2. There's a reason that acronym is pronounced "Whoops".

      Jenny, who has relatives and friends who worked at Trojan.

    3. Re:Ever hear of Trojan Nuclear Powerplant? by digitalunity · · Score: 1

      Hi Jenny,
      Actually, I am talking about the one in oregon. Yes, you're right. It did run for many years with good success. Until that nasty crack in the steam tower, which they said they'd fix for years and years. No, they just want to dismantle the damned thing now. No, my dad works for Bonneville Power Administration(He's a marketer) and he tells me that WPPSS flops really weren't that expensive. About 7 years ago, I went on a tour of all the dams around here. Had a blast. We did end up going to some of the WPPSS plants. (Can't remember which ones, I wasn't old enough).

      Such is life...
      Mike

      --
      You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
  102. Management dictates by Mechanik · · Score: 1


    One reason why projects can be late is if management dictates the schedule. If the product/program manager decides that "We need this product to come out first quarter," then generally speaking they will find a way to make it happen, or at least they will find a way to make it happen on paper anyway. The opinions of the programmers can and will get trampled as a result.

    Personal anecdote:

    About a year ago, our company hired a program/project manager (yes he wears both hats simultaneously) to oversee our project. He asked us to generate a list of tasks for the project, and then list estimates of the time required for each one.

    We, having experience working on previous versions of the product, knew that by the nature of our product (ported software), that sometimes you could hit an unexpected problem that would take a long time to resolve. E.g. maybe you find out that your bug is actually due to assumptions by the original programmers about how the compiler on their target platform worked (Windows), which aren't applicable on your target platform (UNIX), and it takes you a month to refactor the code to work around not being able to use that particular C++ feature. That sort of thing. Experience told us that something would happen like this probably a few times during the course of the project.

    Armed with this knowledge, we came up with our estimates, but we were smart about it. We gave three estimates for each task; a best case (things go better than we expect), an expected case, and a worst case (something fundamental blows up and it takes a long time to debug or fix). As you could gather from the previous paragraph, the "worst case" was actually rather likely to happen, and not senseless paranoia on our part. We made this clear to the manager when he questioned why we didn't just give one estimate, and why the worst case estimates were so large.

    Predictably, the manager looked at the sum of the worst case values and didn't like what he saw (since he wanted the product out in a certain quarter), and used all the expected case values when making the schedule, which then fit his timeframe. Then he wondered why the project was running behind before too long.

    He even went so far as to try to blame it on our team leader, saying that he hadn't given him good estimates, and that he was having to cover for the team lead's screwup. The team lead gave him a piece of his mind over that one. Needless to say our team lead demanded a transfer to another group not long after that.



    Mechanik

    1. Re:Management dictates by andrew+cooke · · Score: 1

      He was right to complain. You said yourself that your worst case estimates should really have been your average case estimates. If you expected problems to occur, why did you stick them in the worst case?

      I'd be annoyed too.

      --
      http://www.acooke.org
  103. Software is neither manufacturing nor physics by jc42 · · Score: 1

    In my (several decades) of experience, the main thing that causes software to always be late is the fact that all software must use things from an underlying "system", and these things are generally not entirely knowable by a programmer.

    This is especially true in the case of proprietary systems. In this case, many details of the underlying system are intentionally hidden from the programmer, and can only be discovered. Even then, knowledge can only be partial, and future surprises can't even be predicted in principle.

    In the case of Open Source software, the underlying system's behavior is in principle knowable. This helps greatly in the debugging process, since you can examine the lower-level software and reach a detailed understanding of any specific portion. But even in a fully open system like linux you are facing the fact that there is too much information for a single human to master.

    In manufacturing, you can get specs for the low-level nuts and bolts. You can ask about properties and failure rates and get correct answers. With software on a proprietary system, you can't get such information at all. And on any system, including Open Source systems, such information may silently change with even the smallest system upgrade.

    In physics, there are fundamental units (photons, electrons, etc.) that are all identical and whose behavior never changes. In software, the detailed behavior of a machine's opcodes may change from one machine to the next, even when they are the same model. So software can never have general equations or universal principles in the sense that physics has such things.

    Also, in physics, the concept of a "hidden variable" is still in dispute after a century. In software, it's a fact of life. The makers of the computers have carefully hidden a great many significant details from the programmers. And they change these variables without notice.

    As long as the low-level details can be hidden from the programmers, software can never be made into a reliable manufacturing process, or into any sort of science.

    --
    Those who do study history are doomed to stand helplessly by while everyone else repeats it.
  104. Can software schedules be estimated? by Anonymous Coward · · Score: 0

    This is really the Turning stopping problem test revisited. Turning: Can you tell me that a given program will terminate within a certain time [budget]? or the Turning correctness test? Can you tell me if a program is correct? More difficult is just how do you define and measure correctness? Classical mathematics (physics) was upheaved in the early 20th century by Cantor & Godel and probablity theory (quantum theory).

  105. Unknown? by King+Of+Chat · · Score: 2, Interesting

    With software, the first part of that expression tends towards zero since most things we know how to do we can reuse code, whereas with building it remains a large accurate estimate.

    I thought that's where GoF patterns could help. When I've been asked to explain design patterns to PHBs, the analogy I've always used is structural engineering - eg. for a bridge, we could have: box girder, suspension, cantilever etc. Design patterns are just like that.

    Of course, in the real world, this is only a partial solution. Over 90% of software project failures are down to requirements. If we could get that right, then software development could, indeed be a "proper" engineering discipline. The only place it is, though, is where people are prepared to pay what it takes to get it right - flight control systems etc. IIRC, one of the few people to have achieved the SEI CMM level 5 are the lot who develop the space shuttle software. At the last count, their code was costing them over $1m a line. How many people would put up with what that would do for the cost of their text editor?

    --
    This sig made only from recycled ASCII
    1. Re:Unknown? by oogoody · · Score: 1

      Patterns work in structural engineering because
      they are always trying to solve the same problem:
      how to keep a building up. Problems that can't
      use standard patterns usually won't even be tried.

      Not the case in software. Patterns in software
      are useful but every problem is usually highly
      customized so the savings is not great, though
      quality is improved. In software almost no problem
      is standard and almost all aspects are
      specific.

    2. Re:Unknown? by King+Of+Chat · · Score: 1

      Not sure I agree. Maybe I'm getting a bit long in the tooth at this game, but in most systems I see, the majority of code is the same structural/functional stuff holding it together. The "application specific" algorithms make up quite a small part of the code. I've got someone else's "advanced calculation code" in front of me right now, and 98% of what I see can be described by standard patterns. They are put together in what appears to be a creative fashion (although a bit lacking in performance - but I'll fix that).

      I'm not saying that there's no skill or creativity in designing software (I have to justify my salary somehow), but in the past I have had great problems where wheels have been re-invented.

      --
      This sig made only from recycled ASCII
    3. Re:Unknown? by flumps · · Score: 1

      in most systems I see, the majority of code is the same structural/functional stuff holding it together.

      However, what you fail to see is that the "structural/functional stuff" can combine with other structural functional stuff in potentially thousands of different combinations at any point within any part of on section of code. We call it plumbing, and its the plumbing that causes most of the problems in software design. Concurrency is another, but thats a different kettle of salmon.

      The "application specific" algorithms make up quite a small part of the code. I've got someone else's "advanced calculation code" in front of me right now, and 98% of what I see can be described by standard patterns. They are put together in what appears to be a creative fashion (although a bit lacking in performance - but I'll fix that).

      The code its self may be in a standard form, because he's (sensibly) coded it to be readable and standard. Imagine though, if another programmer now tacked on his own functions/objects somewhere else in the system that called this function slightly incorrectly, or passed an incorrect value or even slightly misinterpretted the resulting figures. Multiply by another 1000 calls that could possibly be made by recurrance, other functions etc and you can see that just because its written in a standard way theres alot of scope for failure. You simply do not have the single rule in programming that "If you do this it will fall over". Unless of course, you're running WINNT and then pretty much everything you do will make it fall over ;0)

      --
      "So there he is, risen from the dead. Like that fella, E. T." - Father Ted Crilly
  106. Re:In all seriousness, this is the wrong place to by dattaway · · Score: 2

    Beer does innovate at a much faster rate. Like at a bar, those lines just get better looking as the night progresses and you have to take them all home. It is debugging the staggering amount of code hurled the morning after the hangover that is the headache.

  107. It depends on the caliber of the head engineers by anticypher · · Score: 2

    How many engineers do you know who understand terms such as

    algorithmic (Kolmogorov) complexity terms. An algorithmic complexity variant of mathematical (Godel) incompleteness

    Not many. They exist, but they are too few for the numbers of software projects out there. There is also the problem of clueless PHBs who refuse to hire competent engineers with actual degrees who studied "mathematical (Godel) incompleteness" in university and can make use of it for accurate planning.

    I've a good friend from university days who stuck it out for about 7 years of study, both computer science and mathematical modeling. He now works for a large company heading large software projects, and his job is to make sure the abstract stuff is covered. Abstract means the kilo-lines-of-code are calculated within reason, the defect tracking statistics reflect reality, and that the end goal is well defined so accurate planning estimates are worth something. He hasn't had a project go over schedule in the last 5 years, but he has had to dump some projects after management tried to fuck them over.

    His only horror stories come from clueless VPs who suddenly want to add the latest buzzword to the project. Now every contract for a project contains a whole section dedicated to any changes after the initial spec is finalised. If the client wants to change something, even something very tiny, the whole project starts over with a large payout for the cancelled version of the project. With contracts like that, software projects always stay on time.

    the AC

    --
    Hemos is like...sci-fi fans;he thinks technology is cool, but he hasn't bothered to understand the science it's based on
  108. Re:In all seriousness, this is the wrong place to by sunwukong · · Score: 1

    I might be believe you if you can supply an objective proof of your statement.

    ;-)

  109. Components by wytcld · · Score: 4, Interesting
    Very large and complex projects do get completed, sometimes even on-time/on-budget. Examples include skyscrapers, nuclear submarines, aircraft carriers, power plants (whether conventional or nuclear), oil refineries, B-747/A-320, etc. And all of these systems nowadays have a software component as well.

    Yes but. The important components of a skyscraper are steel beams. Put them up correctly, after calculating loads and stresses, and it doesn't matter what the twenty tons of stuff you have sitting on the 27th floor is. It doesn't matter if the beams come from different foundaries, either, because the specs are clear enough (dimensions, strength, where the bolt holes are).

    Now try putting together a typically complex business software solution, meshing a bunch of different, reasonably good, existing programs and components with some custom code and configuration. Even where there are reasonably good standards spec'd in some areas of the project, if you're not solving new problems it shouldn't be a software engineering project at all - it should just be system administration using the available solutions. That it's real software engineering means you're running into unpredictable surprises where the components at hand don't fit without a great deal of extra labor.

    A parallel can be found in work on the portions of the New York City infrastructure that are under the streets: We still have wooden water mains in some places from the mid-1800s, mixed with gas, electric, steam pipes, sewer, subways, gas lines ... most of which was not documented to current standards on either installation or subsequent changes, despite most of it being reasonably well done by the standards of its time (pretty amazing, those wooden water mains still working, right?).

    So what happens when we finally go in to improve one of the services - say, lay new water mains? Other stuff is found that's in the way where you didn't expect it, or that need's fixing on examination when you didn't expect it. Meanwhile you've got the street ripped up but you have to cap it again quickly or traffic is too snarled for too long. So a single block's 4-week project can stretch out for over a year - dig up the street, fix one problem, discover more, recap while designing and provisioning the next stage, repeat - because it's all stuff that needs to be done once you get into it, that can't be properly assessed until you get into it.

    Well, software in the real world isn't as old as New York, but if anything it's more complex, and the layers of crufty stuff that have to be accommodated in current projects are as considerable, and often as poorly documented by current standards (which will always advance so as to obsolete whatever we do now). Building a skyscraper, by contrast, is just a sysadmin job. Put the beams and bolts in the normal places, and it stands.

    --
    "with their freedom lost all virtue lose" - Milton
  110. Theory vs Reality by _J_ · · Score: 2, Interesting

    I've just finished working on an IBM RAC (Rapid Application Center) project. It was filled with elements similar to extreme programming, it used function counts, it seriously defined scope and development cycles. I've developed ideas about the method both in it's theory and it's method.

    In Theory:
    - All your resources are available to you when you need them for the length of time you need them.
    - The client is with you all the time so that they are available to comment on the direction development is going.
    - An enormous amount of time is spent in analysis to make sure the project goes in the right direction.
    - Every task is estimated and ranked and put into a timed, development iteration schedule. If time runs short for a specific iteration then lower ranked features are "descoped."
    The idea is that you have a fixed budget and a fixed end date and that based on these the one degree of freedom is the scope of the project. Therefore if anything changes it is the number of features.

    In Practice the theory is adhered to closely but other factors enter into the project like:
    - Scope Creep. This involves features that were ranked lower in the requirements and were descoped but become necessary for the end product to be useful or features that weren't caught by the requirements process but are necessary for the end product to be useful.
    - Requirements Interpretation. They were nailed down, or so we thought.
    - Budget. If the estimate comes in for 4 developers and a lead for 3 months but the budget only allows for 2 developers and a lead then there's an issue.
    - Resources. If the client can't or won't provide the resources you need to extract the inputs you need from other systems then your schedule will be thrown for a loop.
    - Client Participation. Asking 100% of you client's time in the project is an enormous request. And not always do-able.

    How could it have been improved?
    - The client could have provided the resources we needed. We were extracting information from some host databases and had a hard time figuring out what fields, rows and tables we needed.
    - Our BA's could have done a more thorough job on the requirements. There were things that were missed or weren't defined accurately enough. We developed integer benchmark times when two decimal places were required.
    - Our client could have sat with us to make sure what we were doing was what he wanted (which was what was originally agreed to). Nothing quite like having the client say that a particular feature was not quite what he wanted.
    - Us developers? Well, there are always things that could have been done quicker in hindsight. I did some java-scripting that - in retrospect - could have been a hell-of-a-lot more efficient. I aim to correct that when I get a momemt.
    - The function estimates were off and that caused some late nights and freaking out. It really is an art form.

    Overall, the model was nice but our lack of adherence to it caused us unnecesary grief. While the client got a product he could use the process would have been more satisfactory and less painful if we hadn't strayed.

    The lesson is that theory is all fine and dandy but it doesn't work if you don't follow it.

    IMHO, as per

    J:)

  111. The barriers to accurate estimation by ajcpi · · Score: 1

    The main issue to estimating software projects is that the corporate sociology drives the estimates to be unreasonably low.

    The descision makers rarely understand the complications of the development process, and naturally choose the "equally credible" proposal that promises more for less. Teams and individuals that estimate accurately rarely/never are selected.

    a.

  112. The Big Dig (was Re:Fixing the endpoint?) by xyzzy · · Score: 2

    It's also worth noting that there are many large projects that DON'T get completed on time/on budget. A prime example of this is the 10+ year 15+ BILLION DOLLAR "Big Dig" here in Boston. I won't go into details, you can get more info on the fiasco on the web.

  113. Software can be scheduled... by pberry · · Score: 4, Interesting
    As long as your defintion of what you are doing is sane. Everyone who hasn't read Joel Spolsky's essays on software development should...not to follow like sheep, but mearly to gain perspective and see if any of what he says works for you.

    Painless Software Schedules is a great one and you will get sucked in just following the links from this one essay.

    --
    -- Are you an EFF member yet?
  114. Mod UP by puckhead · · Score: 1

    Insightful and funny

    --
    Watching Cowboy Bebop in my jammies, eating a bowl of Shreddies.
  115. Check my sig blue leader! by WolfWithoutAClause · · Score: 1

    "There are lies, damned lies and project plans- but what else you gonna do?" - me

    "Work expands to fill the time available for its completion." - Parkinsons Law

    --

    -WolfWithoutAClause

    "Gravity is only a theory, not a fact!"
  116. Re:In all seriousness, this is the wrong place to by ayjay29 · · Score: 1

    No! 56% are employed (may still be students though). What worries me is that 5% of Slashdot readers are Cowboy Neal's Slave.

    See for yourself!

    --
    Offtopic, Inflammatory, Inappropriate, Illegal, or Offensive comments might be moderated up.
  117. Reductio by hey! · · Score: 3, Interesting

    OK, what I take it here is that you are talking about a method by which software project times can be predicted accurately. Suppose we had such a method. Since it is a method which takes inputs and produces outputs, it can be described as an algorithm. Since it is an algorithm, it be be represnted as a software program which predicts completion times. So far so good.

    Next get together a team of programmers. Set them to work on a program which determines proves {insert your favorite unsolved mathematical conjecture here}. It turns out you actually don't need the team at all, just run your software project estimator and if it comes out with a finite amount of time to complete the program, you know that the the conjecture is true.

    In other words your software estimator can be used to solve the halting problem.

    OK, this is a joke, but it points something about the question. I once had a CS professor who required that we right requirements statements for all of our assignments. She forbade us to include halting times, because "you can't predict whether a program will halt or not." To which I wanted to reply, "About that 'hello ,world' assignment..."

    The lesson is that there are some cases to which a rule like this applies and others to which it does not. There are some projects that can be estimated with simple tools, some that can estimated with complex tools, and some that are not practical to estimate at all. Even fairly seat of the pants kinds of estimates work pretty well on relatively simple problems, providing you break things down a bit and do an honest estimate the costs on individual deliverables and the individual functions you know you'll need to make them work. About the only methods that never work are pulling a number out of the air based on how much the project scares you, or using wishful thinking (whether the source is your boss or you). Nobody can give good estimates when you spring the question on them with no time to prepare. My boss's most (and my least favorite) questions start with "how hard would it be.." and my most favorite (and his least favorite) answers start with "It depends..."

    Nonetheless, my experience with past projects of the kind that I do means I can do a pretty good job with relatively unscientific tools, provided the problem is like one I've solved before. However if you are writing software for space flight or some other kind of highly complex mission, I could estimate until I was blue in the face and it wouldn't be worth a damn. You want to hire somebody with experience in such projects and who has methods of estimation well calibrated from similar past projects.

    I think the particularly difficult cases are ones inolving software maintenance -- extending software to perform things that weren't originally factored into the design, or adapting the software to run when the systems it depends upon change in some unpredictable way. These are cases where surprises can throw the best laid estimates well off.

    --
    Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
  118. Estimates should include debugging by MarkusQ · · Score: 3, Interesting
    The huge gotcha, that IMHO makes most if not all schedules fantasy, is that people talk about how long it will take to finish coding when what they are really interested in is the time it will take to have the code finished and debugged. Of course, the time it takes to have debugged code depends on things like:

    * A tester or test suite exhibiting the bug

    * Someone recognizing that it is a bug

    * Enough data being gathered to define the bug ("It hangs sometimes" or "I don't think the results are always correct" doesn't cut it).

    * Enough eyeball hours to find the bug (this in itself makes the process equivalent to solving a crime. Do we ask the cops to schedule crime solving?)

    * About two minutes (average) to devise and implement a fix

    This has to be done for N bugs, where N is unknown. People who think you can estimate software development schedules with any accuracy are either dreaming or assuming that they just have to estimate how long it will take to get it coded, not how long it will take to get it working correctly.

    -- MarkusQ

    1. Re:Estimates should include debugging by Amazing+Quantum+Man · · Score: 2

      Mod this guy up. In my 18 years of experience, I've *NEVER* seen enough time allocated to test, and this is in DoD-land, where they actually realize the need for test.

      If test isn't allocated at least 30% of the man-hours (50% is better), then you're going to have delivery problems.

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
    2. Re:Estimates should include debugging by markmoss · · Score: 2

      I can estimate my debugging time pretty closely. If all I have to find is my own mistakes, the time works out to 40% design, 20% coding, 40% test and debug. (If you are willing to let your customers find many of the bugs, you could cut the test time down...) Where things get less predictable (aside from the effects of fuzzy specs and requirement bloat) is that often I'm interfacing to someone else's work, and either their description of the interface is not entirely accurate and so I have to find out how to make it work by trial and error, or they didn't get all their bugs out and I have to work around that. So I have to pad the estimate out to account for that.

      The other issue is that you send through an estimate that says 2 months for design, 1 for coding, and 3 for debugging, and the PHB's get all upset...

  119. You can Estimate a Software Engineering Project by jpeters77 · · Score: 2, Interesting

    But not a "hack" job. I've got a mere 7 years experience in the software world stemming from a traditional engineering background and I've seen projects that were "on time" and projects that failed miserably. The problem is EXACTLY the same as any other engineering problem if you choose to look at it that way.

    OK, I'm going to dive into the classic analogy to traditional engineering: the bridge project. Nobody ever answers the question "How long will it take to build a bridge?" right off the bat. Every aspect of the project is scrutinized and estimated separately. In other words, to build a bridge we need to do A., B., C., ...etc. Each task is then estimated along with the dependencies on other tasks and how an overtime task affects other tasks (Pert and Gant charts are dreamy for this). In the end you come up with damn accurate estimate of how long it's going to take along with heuristics that describe what external can make a difference and how big that difference will be.

    Now, back to the software arena. There is a big difference between a software developer and a software engineer. Software developers "hack" or piece together code that works, but there's been no real analysis done to support it (my definition - feel free to argue). Software developers are comparable to general construction contractors. For example, a contractor may build a deck without much analysis (i.e. how will it behave in an earthquake; what is it's failure temperature, etc.), but a major structure (like a bridge) requires an in depth analysis.

    A software engineer, on the other hand, follows a much more rigorous analysis and design technique that can be used to estimate the overall time a project can take. To do this, one doesn't estimate how long it's going to take to build the entire project. Rather, one should divide the task into sub-tasks and continue to do that until one ends up with tasks that are estimatible with a defined region of uncertainty.

    To do this, a certain amount of design needs to occur. Admittedly, the estimate for the design can sometimes be a shot in the dark. But, a good design can give not only a good estimate of the time required to complete a project, heuristics about the end product can be determined from the design. IMHO, the coding becomes an afterthought, a footnote to a good design.

    OK, I'm done ranting. Start the flames.

    1. Re:You can Estimate a Software Engineering Project by deodiaus · · Score: 1

      Maybe projects should be defined in the number of parameters necessary to define it. If you have a bridge or buiding, the CAD diagram should give you a good estimate of the number involved. Now consider a small SW project. the number of parameter is a measured by the number of variables. The complexity could be measured by the number of branches. The coupling factor is the extent to which functionality can be broken down to reusable modules. Basically, my point is that designing a software program should be weighted based on the difficult involved. Most bridge designers would refuse to give you a quote unless he were to spend a good deal of up front time to figure it out, unless he has access data of the same exact conditions. Yet, programmers are expect to come up with estimates in a couple of days, in a world where technology changes faster than Italian fashion. (Consider that in less than a decade, Unix has just given way to Windows, GUI's and event-driven programming popped up, Object-oriented programming has taken off, the internet has become a platform to support, C gave way to C++, gave way to Java, and might be replaced by C#.) That's like assuming that designing a bridge from wood 100 years ago is identical to designing one from steel and concrete now.

  120. The problem with software development. by Xiver · · Score: 3, Insightful

    The problem with estimating development time lies mostly in the management's concept of software development. I was hired to work on a project that was estimated by management to last two months. My estimate was four months and the actual time it took to complete was over a year. Why could I not meet the project deadline?

    The customer claimed it was because I could not seem to fully complete a component of the project. What they really meant was I could not fully complete a component of the project before they would request a change to that component that in some cases required a complete rewrite of the component. They didn't think it was a big deal to add a button here or there in the application after all it was only a button. Never mind the fact that each of those buttons required stored procedures to be written and existing stored procedures to be altered. They would get upset that I could not make their requested changes in a day when they wanted to completely alter the way the interface to the application worked.

    The bottom line is most people who don't know anything about software development don't think it is a big deal to add a feature here and there at the end of the development cycle. I try to equate software development to carpentry. Sure I can add another door in the center of those cabinets, but don't expect it not to affect the other doors and their space within.

    --
    10: PRINT "Everything old is new again."
    20: GOTO 10
  121. Human insight is noncomputable --Penrose by Robert+Baruch · · Score: 2, Interesting

    Roger Penrose, in Shadows of the Mind, puts forth a presentation of a proof via Godel's incompleteness and Turing's halting problem that shows that human understanding and insight cannot be reduced to algorithmic form.

    The Large Limits paper uses pretty much the same proof, but doesn't add Penrose's assertion that human thought can't be computable, and therefore algorithmic limitations don't apply.

  122. Re:There are reasonable ways to get a good estimat by markmoss · · Score: 2

    software engineering isn't like any other type of engineering process. Not entirely true. A lot of software shops pretty much write the same program over and over again, and these shops can do accurate estimates if the management is competent. This is like a civil engineering firm that specializes in steel truss bridges -- give them the length of the spans, maximum weight, and roadbed width, and they can crank out the design in a quite predictable time and cost to build.

    However, much software development is a wild plunge into the unknown, like building a bridge out of new materials using a whole new concept for holding up the bridge. And civil engineers just don't do that; the first steel bridges were copies of wooden bridges, and grossly overbuilt just in case, then once they got comfortable with steel they gradually moved to more efficient uses of it. Nor do automotive engineers design a whole new car from scratch, without referring 90% of the design back to things that worked OK on the last model... Previous designs are re-used to reduce the risk and uncertainty.

    Software producers are caught in a bind here. If you are re-using a previous design, why should the customer pay a lot for copy-and-paste? It's just bad management if you know enough about the job from experience to estimate it accurately and still have to do much coding... And if a large part of the job is new and genuinely does require new code, then it's a high-risk project, and likely to cost more than the customer is willing to pay.

  123. well, yes, but it depends. by roffe · · Score: 2, Interesting

    I am in the process of completing a research report on this very issue. the background is the engineering development project modelling software SimVision, which we have undertaken to modify for use with software development projects.

    the answer is yes, but it depends on a lot of things, because programmers are not like other kinds of engineers and software engineering is not like other kinds of engineering, to wit:

    • programmers should use programming languages they know (if a programmer on the project does not know the relevant programming language, exchange him or her for somebody who does ).
    • the project should be planned with constant changes in the specifications in mind. There should be clearly defined procedures for handling specification changes.
    • it is not always true that adding manpower to a late software project makes it later.
    • it is important that the manager knows how far each programmer has come. Programmers often signal way too late that they won't finish on time. Make clear milestones and follow them up closely!
    • use programmers who are familiar with several different programming languages and/or paradigms.
    • programmers who score high on IQ tests are more productive than programmers who score lower. similarly with programmers who score high on conscientiousness on Big-5 oriented personality tests. (there are some important corrilaries, such that there should not be two hi-IQ programmers on the same subteam because they'll never quit arguing about the best way to do something).
    • good managers finish on time because they cut corners. find out as early as possible which features can be sacrificed
    • programmers are often not very good at communicating, especially at communicating fears, doubts and possible failures. rewards for being honest early should be emphasized.

    it seems that managers improve their estimating skills by experience, so using experiences managers is a good tip.

    there's a lot more to it than this of course. unfortunaltely our report is confidential just now.

    --
    -- Rolf Lindgren, cand.psychol
  124. Estimation/SWAG is possible....but it's hard by Blasphemous · · Score: 1

    I've been developing reasonably large software projects for over 15 years. It is possible to deliver software on time/budget, but there are key concepts to keep in mind: 1. You can't develop time estimation based on large work units. Take a big work unit - design/develop an XML parser (example). Figure out what the 300 hundred individual things your parser must do (from a development perspective, not user requirements perspective). This level of functional decomposition will allow you to give a reasonable swag (scientific wild ass guess) on the larger work unit. 2. Manage risk properly. This is not easy. Think of everything you know of that can go wrong (experience helps). Take into account the things that you don't know of that can go wrong (experience is irrelevant). Detail the risk indicators (how do you know if one of your risks is happening?). Come up with contingency plans for each risk. Follow your risk plan throughout the project lifecycle. 3. Implement a change management system. Requirements do change, that's life. However, allowing this to affect your project is unacceptable. If the powers that be request a change, go through the entire estimation process again with the new data. Give them the new date, if they accept it ok. btw: a changed deadline due to changed requirement is *not* the same as a slipped deadline. 4. Careful management of minor and major deadlines. Most pople manage major deadlines only (alpha, beta, RC# etc). If you don't manage minor deadlines, how do you expect the major deadlines to be reached? (if you take care of the nickels and dimes....you know the rest). Most developers (people in general) work more efficiently under pressure. Keep the pressure on by managing the minor deadlines, and the project momentum will be maintained. As others have metnionned, R&D of new technology is the ultimate risk to a project, however the vast majority of projects are implementation derivitatives, not ground breaking stuff.

  125. The origin of the fudge factor in COCOMO by Aging_Newbie · · Score: 1

    The fudge factor, if my memory serves me, starts out as a guess based on the full set of COCOMO projects and then (and this is important) is tuned by comparing the estimates and actuals for the project. Each development group (or company) should have its own constant based on experience. COCOMO is mostly a good tool to estimate future effort based on analyzing past performance. If you use it other ways, your mileage will most certainly vary (sometimes a lot!)

  126. Software Development==Engineering? by zeus_tfc · · Score: 3, Interesting

    That's exactly the sort of attitude that has caused the sort of spectactular failures of software projects to be accepted as the norm. Software Engineering is *not* "hacking" or "coding" or "programming", it's *engineering*, like building a bridge or a skyscraper. Yes, those projects go over time and budget too sometimes, but they are the exception rather than the rule.

    I agree with you up to a point. I am an engineer. I have worked in Process Engineering, at AMEC, and now work in Design engineering. I have not done much coding, but I think that software development probably relates most closely to design. As I said, I now work in design. In design you can estimate a schedule, but that schedule is dependant on our everything going perfectly the first time, which we all know doesn't happen. This does also not include problems with parts we have to design around, which we then have to wait on, or a change in requirements of our part. (Sound familiar yet?)

    This is all in the conceptual, design phase. This doesn't include the acutal production of a physical part. That all happens later, after our 3D model has been packaged correctly. Once the physical part has been made, then there are the joys of testing and testing and testing...

    What I'm trying to get at, is that I've experienced several forms of Engineering (Yes there are many), and I think that Software development relates most closely to Design. In design, there is no reasonable way to schedule out how long things will take. We just make an estimate based on what's happened in the past, and change things as we go along.

    --
    "...At the end of the day"..."when everyone goes home, you're stuck with yourself." RIP Layne Staley
  127. Limit planning by dickDragon · · Score: 1

    Acknowledging that a perfect estimate is impossible
    makes making a reasonable esitmate easy.

  128. Then you have to deal with Marketing... by Amazing+Quantum+Man · · Score: 2

    Whenever I had to make an estimate, I'd figure out the best value (we had COCOMO estimation software), and then I'd pad it...

    Not because I thought the estimate was off, but because Marketing would *ALWAYS* shave the estimates, and that's what would be in the contract. Well, that plus Hofstaedter's Law.

    In addition to man-hours, I'd often try to tack on N calendar-months for learning curve if we were doing something new (new platform, problem domain, etc...).

    Wasn't always successful, but it worked pretty well... usually we worked out to the original man-hour estimate plus the learning-curve time. Of course, Marketing always low-balled it, and the learning-curve time always went away.

    --
    Fascism starts when the efficiency of the government becomes more important than the rights of the people.
  129. IME by Fjord · · Score: 2

    Manufacturing is more akin to installation of software, than creations of it. Creation of software is more like the engineering of the thing to be manufactured (design) and it's manufacturing process (implemenation).

    When creating a new piece of software, there is a very large amount of discovery. It is impossible to estimate how long discovery will take, it would be akin to setting deadline for the cure for cancer. It is even impossible to know between two people which will get it done faster.

    In addition, it is almost certain the case that somewhere in the design or implementation phases, a conflict in requirements is found or requirements are found to be incomplete. Because of this, the requirements must change. A change in requirements becomes a change in estimation.

    Then there are people details, such as burnout, roll over, yank factor, procrastination, and dicipline. These things happen with different people at different times. The result is more uncertainty.

    Personally, I like XP's method of handling estimation: the user stories (requirements from the customer) are broken into tasks by the developers working on the story. The tasks are estimated in the best possible scenario by the developers working on the task. No task should be longer than 3 days (if it is break it up). Then you use a previous measurement of how quickly you finished tasks to limit how many ideal days there are in a time frame.

    The cental thoughts to this method is that A) only the people doing the work can estimate for themselves; B) the accuracy of estimation is inversely proportional to the length estimated. If a developer says something will take 6 weeks, they likely don't actually know how long it will take, but are picking a seemingly large number to give them wiggle (I call it "Scotty padding", refering to how Scotty would overestimate the time to repair the Enterprise so that he looked like a miracle worker); and C) using precious measurements adds a reality factor to how off your estimates are.

    But there are problems with this method. The main one is that tasks can be unrealized until implementation. No matter how well you plan, something will likely get left out. Another problem is that is doesn't work over a long period of time. This method is used for planning an iteration (about 1-2 months). Longer than that the estimations will go wonky because the estimations for an individual task will vary greatly as more work is done. At the start of a project, it is easy to add a feature, but later on it may be easier, because you have supporting classes in place, or harder, because you need to update a large part of the system.

    So I'd say it more like the weather. You can estimate well up to a certain point, but after that, you're just throwing darts.

    --
    -no broken link
  130. Re:When constants are constant and when they aren' by sid_vicious · · Score: 1

    There is nothing wrong in principle with measuring what has happened in the past, and using that to predict what will happen in the future, before you discover why it works like that.

    You go on to make a good argument as to why this doesn't work in the rest of the post -- and you're right, constants work great for systems that don't change (pi, e, etc. in mathematical systems) or systems that *may* be changing, albeit very slowly (cosmological constant in astronomy). But, for the reasons you've enumerated, a standard constant across all companies and projects just doesn't make sense - thing change too rapidly. Size of company, competence of employees, stability of economy ..... screw it, just multiply by 1.75!

    But I'd also like to add that we weren't provided with any validity for the rest of the equation. Any formula will work for a given set of circumstances if you add in the right "magic number". Not to mention the idea that the formula itself contained estimates -- who knows where the "lines of code" estimate was supposed to come from.

    Anyway, I wanted to address this topic but I didn't want to respond to the obvious flamebait troll the other guy posted about pi.

    --
    If it ain't broke, it doesn't have enough features yet.
  131. My estimations are always correct ... by Aceticon · · Score: 2
    I just use the average life expectancy in the country i'm living in and multiply it by two:

    Manager:How long will it take you two change the position of that button in the Frontend?

    Me:152 years, worst case scenario.

    Nobody ever lives long enough to prove me wrong!!!

  132. Problem with an initial estimate... by darthtuttle · · Score: 1

    The problem I run in to is in initial estimates. You have no idea how your team is going to perform with the given languages and technologies. On the other hand, if you have a system that has been in development for five years, you have been using something like CMM and PSP (see Software Engineering Institute) all this time so you can take objective measurements of development times, and you have a well planned software project with obvious milestones and releases then figuring out the time for some new feature or change is easy, though very expensive and takes a lot of time. I would imagine that a project like Windows XP could not be developed by a CMM level 5 shop. The money and man power it would take just aren't there to do it.

    On the other hand once you have some history you can come up with very good numbers. They aren't numbers you might be able to prove, but your going to be very, very close (3 9's maybe), the same way that despite large holes in theoretical math I can still add 1 and 1 and get 2.

    --
    Darthtuttle
    Thought Architect
    1. Re:Problem with an initial estimate... by angel'o'sphere · · Score: 1

      I would imagine that a project like Windows XP could not be developed by a CMM level 5 shop. The money and man power it would take just aren't there to do it.


      If I get your sentence right you asume a software development process is the more expensive the higher the CMM level is?

      Fact is:

      If you start a software development business now without any investments into a software process or engineering environment you are on CMM level 1.

      The problem will be that you have a variation in time and cost of about 100% of your estimations.

      Or even higher.

      CMM proves now, that you can work on your process and engeeniering environment to improve your estimation accuracy and get more predictable costs and times.

      You can gain a CMM level about every 3 to 5 years (However you could start from CMM 2 and your company/department should be able to reach CMM 3 in about 3 years) cutting cost by 30% and up to 50% (in rare cases more) per level.

      Lets asume you allready have a decent formalized and smoth running process, that could be around CMM 3. This means you are off in time and budget in your typical projetcs of 20% or less. About every 3rd or 5th project runs as estimated.

      By moving up from CMM 1 to CMM 5 you need an overall time of about 15 to 20 years (or even more).

      The costs per line of code can be reduced to 1 tenth or even less on CMM 5 versus CMM 1.

      About 30% of the software companies work on CMM level 3, about 5% on CMM 4 and about 5 departments (DEPARTMENTS, not COMAPNIES!) work on CMM level 5.

      65% of all software companies, and this are those there the developers posted: "Software is an art and must be treated like that", "Software enginieering is not like engineering of buildings", "it is prooven that software is unpredictable complex", "Software costs can not be estimated because ....", well 65% of all software companies are below CMM 3.

      What does CMM 3 now mean?

      Among other things it means:
      You plan before you go.
      You go.
      You measure your position while you go.
      Goal reached:
      You check wether you indeed have reached the goal.
      You compare plan versus measurement.
      You test the quality of the going and the goal.
      You record all measurements and all tests and all results.
      You reassess for every thing: why didn't I meet my plan as I planned?
      After the project is finsihed you have:
      - a product
      - a plan
      - logs about:
      o who did what (and who reviewed it)
      o for what cost/time
      o who introduced which defect(bug)
      o where was it introduced, in which phase
      o where was it fixed, by whom

      If you are off in costs and money you have now the material to check: WHY!

      BTW: if you can answer all the later questions, you should have logs for, you are more or less ISO 9xxx compliant.

      If you introduce PSP for your own development you are able to estimate short term (and with experiance medium term) projects with an accuracy of 1% and BETTER. To reach that goal you need about *one year* -> Watts S. Humphrey, A Disciplin for Software Engineering.

      However: the posters who pointed out that software often is a moving target where you have no idea what all the features are which are finaly in the product, are right!

      If that is the case you can not estimate the whole project at forehand.

      However: you can educate your customer! And you can change your process!

      In such a case you determine with the customer short term goals to deliever smal results which give you a base of numbers to estimate further goals.

      If you are not able to do that, well, you need to educate your self, look for different kinds of customers, different kinds of projects, or live with the fact that you are off by 100% and more regulary.

      Regards,
      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  133. Why not? It's our fault. by way0utwest · · Score: 1


    Software schedules can be somewhat estimated, but only with a "team" of people that work actively to get better. The Software Engineering Institute at Carnegie Mellon developed a model for improving software engineering. It mainly works by capturing lots of data about your projects and using that in developing estimates for the next time. The bottom line is a team that adopts this mentality is constantly
    seeking to improve their methods.


    Difficult to do for a small project (lots of overhead). Almost impossible for an individual.

    Most individuals get better by getting more experienced AND having a better code base from which to grab snippets/widgets/objects/etc.


    Most of us overestimate the work we can do, get distracted with other items (other projects, fixes, etc). We also get distracted with
    /. :).



    Not only are we distracted, but we all code with our own styles. In doing so, one thing I think nearly every programmer is guilty of is not seeking enough input from others. Whether this is users for UI design, or colleagues with which we must later integrate, we make assumptions as we proceed. Quite a bit of time is lost once we start to integrate components together from different developers.



    One last thought, software is nothing like building a physical structure. It is more like painting a picture where there is a feedback loop. As you do something, you not only learn, but are affected by the result. The next stroke you make/line you code/note you play is affected by what you just did. If we could focus only on the original plan without being affected by something that happens in the design, out estimates might be better.

  134. Where did you hear such a thing? by Aceticon · · Score: 1, Funny
    It's totally untrue!!!

    We're all just normal geeks ...

    No need to worry about those sirenes ...

    It must be for your next door neighbour ...

    Just stay where you are ...

    There's nothing to worry about ...

  135. the biggest mistake by NaturePhotog · · Score: 2

    For reference, I've been a professional software developer for 14 years.

    The biggest mistake most people make in scheduling software is forgetting time for QA. They add up the pieces, thinking "OK, this will take this long, this will take..." and completely ignore that it generally takes as long to properly QA a project as it did to write it. A decent QA should be at least an in-house alpha test and multiple rounds of beta test. That's likely why the "take your best estimate and double it" approach arose.

    Schedule slippage comes mostly from (1) not understanding the task when you make the schedule (2) not getting the resources you were told when you made the schedule (been there...) (3) people changing the spec along the way. For the last, stick to your guns. Once the schedule has been made and someone wants to change the spec, tell them up front that a change of that type will cost X amount of time in the schedule. They can have the change, but they have to be willing to pay the cost.

    1. Re:the biggest mistake by bluGill · · Score: 2

      No, QA doens't take as long as coding. QA takes 50-60% of the time.

      Coding is maybe 20%, design and documention are the other 30%.

      Coding is the only really fun part. So programers try to make it take 50%. Further I'm considered a programer so I'm expected to spend a lot of time doing that, which can't happen because programing is such a small part of the job.

      Worse, a project moves into maintance mode after it is released. I spend the majority of my time testing bits and pieces. 10% design, documentation, and coding; 75% testing, and the remaining helping customers and trying to understand their problems.

      I include in test personal testing, and the supporting the system test group, but those are seperate tasks that should be brokern out.

    2. Re:the biggest mistake by NaturePhotog · · Score: 2

      No, QA doens't take as long as coding. QA takes 50-60% of the time.

      That's what I said (50%). Writing it includes designing and documenting it (which done right, can cover a lot of the same ground besides in-code documentation). But my point was that programmers tend not to think about the QA part. Most of the programmers I know like the design stage, but not the QA stage (I don't either) and tend to leave it out in scheduling, or blissfully/hopefully assume it won't take very long. I agree that coding (and design) are 'fun' parts, though.

  136. software schedules can be managed by ajbiv · · Score: 1

    i've been in this business as a developer a short 5 years and know that yes, software schedules can be managed. unfornuately, i have yet to see that happen.

    the bottom line is that the wrong people always make the decisions about schedules and schedules are pulled from peoples hats rather than based upon real data or experience. schedules are made based upon market pressures and pressures for management to receive bonuses.

    if we actually tried to schedule a software project based upon reality....then yes it could be done.

    wake me up when its over.

  137. Not just experience counts, so does Humility by andy4us · · Score: 3, Insightful

    One of the greatest criteria for a good programmer, whether it is the quality of the code, or the ability to estimate a schedule, stems from humility. Part of the problem with people when estimating a schedule is that they thing they are Superman. They think that they are so good that the complex task that is in front of them is trivial. These people tend to have very buggy code as well (normally from insuffient testing). All programmers suffer from this to some extent. I've also noticed that these people tend to never use libraries, since they can write one better, but then use up all their scheduled time rewriting libraries and never actually working on the project.

    Personally for me, I tend to do the best hourly breakdown I can and then double it before submission. This is normally not too far wrong (say one week on a 3 month project). The double factor allows for inaccuracies, meetings (which really do take time !), and spec changes. I may add more "fudge factor" depending on my feelings for how well the spec is sorted out and the quality of management (i.e. weak management will allow spec changes every week, good management will filter well).

    ANdy

  138. I've been within +/- 20% or better, but ... by tz · · Score: 2, Insightful

    When I estimate, and the resources are there, I usually hit, if not dead-on, then very close. Basically I look how complex the system (in this case, embedded systems) is going to be, and can fairly accurately estimate how long it will take me to complete the program. The 20% sometimes is because things go easier (e.g. I find an OS solution so I don't have to write something) or worse (e.g. the hardware has problems so I can't test). But I can usually see the complexity - number of inputs, outputs, equations (reduced to atomic operations), and how they interact, and know my own "velocity" (See the Extreme Programming series for a larger discussion of something that does work).

    But that doesn't help. The first problem is if I say something will be done by January 15th, they will still want it (without any help, tools, extra paid OT, etc.) on December 15. The technically correct estimate is not politically (or in marketing terms) correct.

    A second problem is when you are at the bottom of the feeding chain, so if some of your test hardware goes bad, you can't get it fixed quickly, or if they disassemble your test setup every few weeks to ship engineering modules (which aren't replaced) to customers, so you start with the assumption of a reasonable development and test environment, and retrograde to LEDs on soldered leads to check things.

    Sometimes this effect is in a different order - I depend on a computer or test hardware being engineered in parallel by another group, so the first test milestone in january can't be done until may when the hardware actually appears. Oh, and the extra time for an emulation system so we could develop without actual hardware was shot down because it was guaranteed to be there in january. I think one project didn't have functional hardware until two weeks before the first ship date.

    Those are purely technical, but then there are political considerations. E.g. I'm using the Unix type work environment that exists everywhere free (Linux, Win32 with CygWin, etc.) and GCC but they have been using ideosyncratic windows tools - something not quite completely unlike make as a builder, some other C compiler (it had much better C++ support but C v.s. C++ embedded is another rwar). Some code (non-)documentation and editing tool that isn't integrated (they promise they might do something in a few years to integrate things). So I have to change from a porsche to a top-heavy underpowered motorhome and still try to keep up speed.

    Then some higher up doesn't like version control tools. Not even something as simple as CVS. So we can't reconstruct anything other than release images making simple changes or backouts (or integrations) much more difficult.

    Why is it impossible to estimate how long it takes to empty a 50 gallon trough with a 1 gallon bucket assuming you can do one bucketfull every 10 seconds? Well, they want it emptied in 3 minutes regardless of your calculation. No, you can't use the spigot so when the trough gets empty you won't be able to fill the bucket. Oh, and the bucket had a hole in it and we replaced it with a sieve. And didn't we tell you before the estimate that you can't empty close to the trough, you need to walk 100 feet up stairs and pour carefully through a 1 inch hole - we haven't budgeted for a funnel either. Oh and...

    Estimates are wrong more because the assumptions are wrong (or those doing the calculation are wrong). Or what needs to be submitted needs to be wrong to be accepted - lowest bidder then add cost after it is half done v.s. accurate original bid.

    And if the environment is such that you can't control things, something like extreme programming is the way to go since it is flexible enough to accommodate constant changes to function, priority, and staffing. Though it won't work when the problems are political.

  139. Re:Much more like manufacturing than physics. Most by Karl+Cocknozzle · · Score: 1
    When you ask questions like "I understand that you do not want to allow any changes to a pay period after the checks have been cut, but then what are we going to do when travelling workers report their hours late?"

    I applaud you for knowing what your software is actually supposed to "do" in the real world.

    That is the biggest problem where I work. We make a healthcare product, but the vast majority of the people writing the code and specifications have never worked in a hospital in any capacity. A lot of them have never even VISITED a hospital in this country (many are immigrants who haven't been sick in the U.S. yet.)
    --
    Who did what now?
  140. Re:Estimates based on motivation - XP by splante · · Score: 2, Insightful
    How are you compensated for changes that occur after the bid, as development occurs?

    XP calls for short release cycles of a few months at most. Do you just bid on the current short release cycle or on the whole several month (or year) project?

    XP calls for implementing the highest priority features first, so features that slip past the release will be of lower priority. Do you get paid for a release even if lower priority features slip?

    XP recognizes four variables in software development: cost, time, quality, and scope. Of these, one is usually going to have to give. XP recommends fixing cost, time, and quality and allowing the scope to change. It recognizes that requirements are never clear at first, and customers can never tell you exactly what they want. As development progresses, you adjust the scope to match the conditions as you find them. So, following XP, are you saying that you charge a fixed price but change the scope throughout the life of the project? I can see how that can work, but I don't think that's what people understood your post to mean, and it's not what most people consider 'fixed bid'.

    We use and like XP as well, though we charge by the hour. I am intrigued to hear more about how you use XP with fixed bids. It seems like it might be a fixed bid for "whatever we can get done in 3x8 man months," though.

    (my comments about what XP says come almost directly from Extreme Programming Explained, by Kent Beck).

  141. Re:Much more like manufacturing than physics. Most by ers81239 · · Score: 2

    I forgot to mention the problem of noncooperation from other departments or your own management.

    Many times you will submit documents for approval or ask for input on a subject and they (managers/other departments) will grind your project to halt. I've been in the position where I had 5 projects (a couple major efforts, and the rest smaller projects) yet I wasn't able to actually code anything for about a week and a half because nobody would approve anything.

    Come to think of it, thats why I have so much time to troll around /. right now. I have just one project, and nobody wants to commit to anything.

    --
    there are 2 kinds of people. those who divide people into 2 kinds, and those who don't.
  142. Schedules by ImperfectTommy · · Score: 1

    This is something I recently wrote on the topic:

    Schedules for technical efforts at startups are voodoo. Throughout my 10 years, I've watched schedules haunt project after project. Why? I previously thought engineers were optimists, giving unrealistic estimates to please the powers that be. Tonight I just changed my mind. Engineers are literal animals. To the young, unspoiled engineer, the world is a simple and wonderful place. It's the right technology for the right job when you're a young techie. (It's worth noting that once engineers realize this is not so, they become useless, fit only to manage.) When you ask literal people, "How long will a task take?" They budget only what they can anticipate and control. Today, even creating a small 10-line program is a large integration project requiring an operating network, working hardware, correctly configured OS and lots of application software. As the number of dependencies grows, so too does the probability of failure and delay. With each added component in the system the probability of delay through failure increases.

    Complicating the situation is the fact most components -- network, operating system, application software -- are invisible due to the forest for the trees effect. Even if you wanted to take into account all dependencies, how do you factor in the failure rate of your DSL line or operating system? Some failures, like user mis-configuration, we assume will never happen again, but due to poor interface and lack of process, they do. Regardless, accurately scheduling the frequency of component failure rates is not possible. The best you can do is pull numbers from your butt, but what good is that?

    Established companies, like HP & IBM, mitigate risk by integration of existing technology. Startups, however, develop new technology and do not have that option. A better tool than the schedule, in my opinion, is a priority-based task list with a business plan. Make sure all your resources support your business goals and your goals support the business plan. Schedules, in my opinion, are most often used as tools for budgeting. Do early startups, driven entirely by venture capital, require a budget for the technology development? I don't think so; there's already an implicit budget - the bank account. Every venture-given penny a startup takes is accepted with the promise to the venture capitalist, "We can deliver the technology on time." Therefore, every action a responsible startup takes reflects that promise.

    Now, back to schedules as misused tools of the devil. If every action a startup takes reflects the timely promise and schedules determine what is to be done and when, you have problems. Personally, I think schedules used in this manner are only useful to discover just how bad your engineering team is at estimating work time requirements. This all goes back to risk, research and a high number of dependencies in today's technical work environment. Far better, I think, to know when your company needs to acheive milestones to support the business plan and ensure, at any time, the top priorities support the upcoming goals. The schedule is only useful to rate your current engineering processes and not for predicting the future. When it becomes clear the business goals are not being met in timely fashion, it's time to audit the current processes used for effectiveness and problems.

    Don't expect to see such an audit at a startup, though. Engineering processes, like "invisible" dependencies contributing to failure and delay, are taken for granted. Additionally, these processes are put in place by the startup's executives. Due to insecurity, most startup executives would rather run their companies into the ground than admit fault.

    So what happened tonight? We have an upcoming release of our product next week. Late last week, the CTO authorized swapping out the foundation of our technology with an entirely new sub-system without a means to back out to the previously working system. Given this large, complex system had never experienced either specification or quality assurance, I had doubts the integration would go smoothly. Now, a week later, with days to release, nothing is working. The CTO asked me to collect completion time estimates from the staff after he said to the engineers, "It is too late change our plans, we must finish on time." As I collected the estimates, I knew they were all bogus, supporting the timely promise. After receiving the list, my CTO said, "Items 1 & 2 seem a bit optimistic to me." I bit my tongue and said, "You're right," though I was thinking, "If you're going to be picky, they're all unrealistic."

  143. Software development CAN be estimated! by Anonymous Coward · · Score: 2, Insightful
    It can be done. The place I work now does pretty well at meeting goals. Here's my experience:
    • You must have good, seasoned, management that has sucessfully shipped working products before (preferably, products in the same category).

    • Most of your programming staff must also be seasoned pros with multiple products shipped in the past.

    • You must have formal requirements and design documents and they must be maintained over the development cycle.

    • Middle management must protect the programming staff from capricious changes to schedules and requirements.

    • Middle management must protect upper management from capricious programming changes (hey! let's develop a new lanaguage to meet this requirement, it'll be a lot more fun to code that way). Programmers are just as bad as management at changing things late in the process.

    • The best practice I've seen for making schedules is to set up lots and lots of intermediate goals. Just as important, those intermediate goals must involve integration from the very front end to the very back end of the product in question. Integration of all components must happen as soon as possible in the process, even if nothing is fully working.

    • A formal process of builds, build tracking and build deployment into a test environment must be in place from the very first week of the project. Everything goes under source code control from the very start (including stuff that isn't exactly software, like documentation, html files, etc).

    • Testing should start before there is even anything to test. In the beginning, it's enough to test that the stuff that is there builds and installs and is available, even if it doesn't do much yet. Just being able to say you've started testing is worth something, even if you aren't formally tracking bugs yet.

    • Code for demos. It's a pain in every programmer's butt, but done properly, coding for demos can really help you stay on track. We do a major demo every time the board meets (early on, your demo may be pretty lame and you may have a lot of stuff faked out or held together with chewing gum and bailing wire, but at least you have SOMETHING to show). The demos often cause extra work that doesn't go to the bottom line, but they also provide insight into the final product and feedback to the requirements process. Often, it is the process of integrating several components early on so they can be demoed that uncovers glaring holes in the design or implementation. Also, just knowing that you have to lash together a demo (at least once a quarter) influences the way you code and the flexibility you incorporate.

    • Programmers have most of the responsibility for the coding being done in time and it is imperative that they use good practices. Requirements WILL change (for a good reason, you hope) and well-designed and well-written code will adapt to requirements changes ten times better that dreck that was thrown together by a careless programmer.

    • The best way to keep your programmers on track (and I'm speaking as one of them, not a manager) is to have real, formal design reviews (based on written designs) and at least informal code reviews. The best system I've seen is to have each programmer have one "buddy". The buddy looks over all the programmers code and understands it pretty completely. The programmer is then driven to make the code look good (so the buddy doesn't find foolish mistakes or obviously lazy shortcuts) and is backed up by the buddy (in case the person leaves the company or gets switched to another project or something). In my experience, strict, formal code reviews aren't as useful as informal code reviews. You get everyone in a room picking on one programmers code and that programmer is going to resent some of the comments, no matter how well it's done and no matter that tomorrow will be someone else's turn. The resentment turns against the process, not the defects and pretty soon you have a broken process.



    It can be done, teams do it all the time. It just takes skill, dedication and attention to not-very-fun process.
    1. Re:Software development CAN be estimated! by Pathetic+Coward · · Score: 1

      Moderate this up!!

      I would like to add to this:

      - The company needs a principal author/idea person: one who is aware what the product is supposed to do and how to evaluate whether or not it is successful (initial sales are fine, but, if the thing doesn't do what one expects it to, there will not be repeated sales. And this has nothing to do with bugs: it's general design). This person needs to have the final say over what feature proposals are approved and is to be the one to go to when developers and others have problems understanding the product. This person does not have to be a programmer but should have serious professional credentials (doctor, engineer, professor, etc - even marketer if it's a product to be used by marketers).

      - User interface. This is just as important as the internal coding and needs to be handled just as seriously. Design, demo, test, design, demo, test.

      - Testing: test the product design as well as the functionality. Developers need to test, then QA, then on-site betas. Lack of testing will kill even the best-designed and best-managed product.

      - And, finally, if management is not honest with its staff about the financial condition of the company, all suggestions about software development practice become meaningless.

  144. Just like building a skyscraper by Aceticon · · Score: 4, Insightful
    Let's see:
    • At any point in time the ground your skyscraper stands on can crumble into nothingness. [Operating System bugs]
    • Your skyscraper can be required to stand on slightly different types of ground. [Operating System types and versions]
    • Also the steel, glass and cement you are using have wildly varieing properties. They also might have been imposed by an outside entity (read Company Standarts). [Third Party Components]
    • Plus the elevators that you get always do less than their specifications (for example they don't stop on the 5th floor). The next version of the elevator will actually do that but on the other hand it doesn't fit on the elevator shaft.[Third Party Components and Applications]
    • Also half-way through building the skyscraper you find out that the plant has been changed and it's now supposed to have a Shopping Mall on the ground floor.[Creeping Requirements]
    1. Re:Just like building a skyscraper by kcbrown · · Score: 1
      • At any point in time the ground your skyscraper stands on can crumble into nothingness. [Operating System bugs]

      Yep. But, worse, parts of the ground can literally disappear while others are rock-solid, and you won't know ahead of time which is which.

      • Your skyscraper can be required to stand on slightly different types of ground. [Operating System types and versions]

      Not just "slightly", either, but types of ground that could have completely different characteristics.

      • Also half-way through building the skyscraper you find out that the plant has been changed and it's now supposed to have a Shopping Mall on the ground floor.[Creeping Requirements]

      Worse, the requirements of the shopping mall are such that you'll have to completely redesign your building.

      --
      Use 'slashdot stuff' in the subject line in any email you send me if you want to get past the spam filter.
  145. my time estimation method... by nullset · · Score: 2, Interesting

    I got this from a friend, and it works perfectly.

    take how long you think it'll take, add one, and go up the next denomination of time.

    example: 3 days will take 4 weeks, 4 weeks will take 5 months, ......

    it's scary how accurate this is :)

    --buddy

  146. Coding from requirements... by richieb · · Score: 2, Insightful
    Building software from requirements is just like walking on water. It's real easy if they are both frozen. ;-)

    ...richie

    --
    ...richie - It is a good day to code.
  147. A simpler solution by Anonymous Coward · · Score: 0
    If you want to keep the suits happy, Its easy, take the time you think it will take, multiply by two and add 10%.

    A simpler solution: Just add 120%.

  148. Ummm, ok......but by tacokill · · Score: 2, Insightful

    At one point, NASA could estimate within 5 or 10% of EVERY development project they had running. Of course, they are CMM level 5 - which basically means they have their shit together. Most of everyone else, however, does not. In fact, I would say that the vast majority of projects out there could be considered to be in a state of chaos and I dont see that changing until two things happen: a) the "business" people think through what they REALLY want instead of just throwing a bunch of unformed ideas at the wall and hoping they stick. It constantly amazes me how little thought is given to systems by the very people who have to depend on them. (ie: solid requirements) and b) the developers must start acting like professional developers and not "hackers". I realize that there is a grey area between art and science but too many programmers I know take too many risks and don't think through their analysis. Often times, projects fail because something is not thoroughly analyzed or is not throughly thought out. Don't get me wrong, programmers don't need to be experts in risk management, but some acknowledgement of risk MUST be made by developers nowadays. You can't just go into your corner and code away.

    1. Re:Ummm, ok......but by KyleCordes · · Score: 2

      Take, for example, the much-hyped NASA space shuttle software project. It is apparently completely free of bugs, among other merits.

      But building software the way they are building it takes an enormous amount of time relative to the features delivered. If you tried to create commercial software that way, you would be done years or decades after the market for your product passed.

      Most projects don't need a way to deliver perfect software at monstrous cost; they need a way to deliver very good software, at reasonable cost, soon.

  149. yes - it can be estimated by cdn-programmer · · Score: 2, Insightful

    But only AFTER it has been designed. I've been a developer for over 20 years and far too often what is done is that development estimates are demanded before the project has even been designed.

    In traditional development projects, typically people KNOW what they need to do before it is undertaken. The contractor starts with a blueprint. It is actally possible to count the number of 2x6's that a house will need. One can make an estimate on the time required to nail one 2x6 to another and then multiply by the number in the house in order to estimate how long it will take.

    I've had ignornant management ask on far too many occasions how long it will take to develope such and such a project. Best answer is how long is a string?

    Management that has no feel for the problem is the problem. How long does it take to write a book?

    Well - I suppose it depends on the book. Just because you can not estimate how long it will take does not mean that books will not be written or that they are not valuable.

    I can write a book in a day... It will just be a simple book and quite short... but then did anyone define how many pages a book must contain in order to quailify as a book?

    I can write a programming project in a day also. But it won't contain over 1/2 million lines of code. For a complex project... well, when we start to see light at the end of the tunnel, then we'll be able to make an estimate how long the tunnel was.

    That is the best answer I can give.

    1. Re:yes - it can be estimated by giantsquidmarks · · Score: 1

      yes yes yes... Development can be estimated... Design is more "creative" and unpredictable.

  150. I agree with you ... by Aceticon · · Score: 2

    ... now if i could just convince my manager that the average time between sunrises is 24 hours she might stop allocating me for 28 hours days (12 hours/day working time)

  151. Yes there is! by richieb · · Score: 1
    What is engineering then? My definition of engineering is the science and the art of building useful things. The engineer can use whatever tools science provides, but if such tools do not exist he has to build the thing anyways, as that's what people pay him for.

    For example, in late 18th century a lot of iron bridges in England and US failed, because the science of metal fatigue was not there. Should the engineer's have not built those bridges?

    Similarly, today there is no science of software development (there are just little things here and there that are well understood) so the software engineer has to hack to build the systems that people want.

    Someone said that "A scientist discovers what is, but the engineer builds what never was".

    ...richie

    --
    ...richie - It is a good day to code.
    1. Re:Yes there is! by Whip-hero · · Score: 1

      Thank you for not reading the body of my post. The point is that software has nothing to do with iron bridges in the 18th century. A bridge is drawn up by some civil engineer who actually knows about statics and materials, then is built by construction workers who input almost nothing to the design. Any one of the workers could be replaced with almost no effect, because they are all just following the engineers instructions anyway.

      With software engineering, things are different because the high-level designer talks about object models and protocols, but the code is actually written by programmers who are solving the hundreds of little problems that go along with actually fleshing out the specification. Just specifying the pre and post-conditions of a function doesn't write the function. A coder actually needs to figure out how to do it. Sure, most of the problems are pretty repetitive and trivial, but many are not, which is why automated code generation only goes so far.

      The thing that really gets me is that researchers in the field of software engineering can't even decide among themselves whether or not programming is like construction. The question still isn't resolved. They spend their time fooling around with antiquated methods and voodoo like Halstead's "Software Science".

      I'm a little concerned because Open Source seems to be leaning in that direction, especially with these large projects like Mozilla and Gnome (although there are plenty more). People marvel at the sheer size of these applications, and I believe the problem is that they are no longer hackers working in their own self interest to fix bugs and add desired features. Instead, they are a huge team working on lots of little pieces that add up to a lot of bloat. Remember The Cathedral and the Bazaar? ESR says that one of the things that makes Open Source great is its freedom from conventional management structures.

      --
      --WH--
  152. Science vs. Engineering by hearingaid · · Score: 2
    Software development is not a science in the normal sense. Designing large software systems is an art. It cannot be pigeonholed.

    Software development is a science in the normal sense.

    Have you ever tried to do scheduling for lab or theoretical scientists? No?

    It takes variable amounts of time. You just don't know when the breakthrough will come. You can make estimates, of course, especially when dealing with relatively routine kinds of things like drug testing, where there's a huge history to base your time estimates on.

    But, c'mon... hard science does not lend itself to tight scheduling. Probably even less than programming does.

    The poster who pointed out that when you're coding for an unfamiliar environment, estimating is rough, is exactly correct. That's why (for example) I can make pretty good estimates for how long it's gonna take me to code something on an OS like VMS that I know extremely well, while my guess for something like Windoze programming is going to probably be way off.

    But that also applies to groundbreakers. When you're coding something really new (which still happens, yes), it's hard to guess. Reason? You're looking for the breakthrough, just like the chemist.

    --

    my old sig used to be funny, but then slashcode ate it and now it's not funny anymore

  153. From the desk of BOFH by Anonymous Coward · · Score: 1, Funny
    Here's how a BOFH handles estimates:

    • It'll take as long as it takes -- and it'll take longer if you don't shut up and let me do my fucking job!
    • What?! You want me to predict the future too?! Hire a sorcerer and ask him how long this'll take!
    • It would have been done already if you kept your mouth shut!
  154. PM Estimates by Martin+S. · · Score: 3, Insightful

    PM: How long to do this work ?
    ME: How about a spec ?
    PM: You're kidding :) I only want a rough guess.
    ME: Roughly 6 weeks.
    PM: Nah, too long we'll never get that past the customers, lets call it 4 weeks.
    ME: Not again remember what happened last time, you chopped my estimate ?
    PM: Don't worry I won't hold you too it, this time!

    PM: That work finnished ?
    ME: NO, two more weeks.
    PM: You said 4 weeks, look here it is in the plan.
    ME: I said 6, You said 4 weeks, and that you wouldn't hold me to it.

    PM: The only thing I can fault you on is your estimates, they aren't very good.
    ME: You £$%&* git !!!

    And practically every project manager does the same thing.

    Why engineer failure into the plan ?

  155. Well, you've obviously never actually tried it. by TheMCP · · Score: 2

    In a well analyzed and properly planned project, you still can't tell when the compiler (or interpreter or virtual machine or web server or database server...) will suddenly manifest an unknown bug and you'll have to go scrambling for an alternate way of doing things.

    From many years of coding and project estimating, I can say pretty accurately how long a project will take (assuming it's largely known methods and tools) before starting, but I've also learned to add a pretty large fudge factor. The pre-fudging estimate is usually pretty accurate assuming nothing goes wrong, but something always goes wrong, and all I can do is hope that the fudge factor is big enough to cover all the times things go wrong on the project.

    If you can plan your projects to the point where "the actual coding stage is little more than data entry", you're obviously never innovating or doing anything really creative.

  156. Phasing by fleabag · · Score: 1

    About the only thing I haven't seen mentioned is phasing. If you have a huge problem, cut it up into pieces...

    Release 1: Architecture + a tiny bit of functionality
    Release 2: A load more functionality
    Release 3: All of the functionality

    By the time you get to later releases, great chunks of the system are robust and tested. Release 1 is the danger point - so make it as small as possible (while still being useful). When you get to Release 3, you know how long it will take to implement each function point (or however you measure it). Trying to do something complex in one go is much more likely to fail.

    Add to that:

    1) Robust change management. When the dude from marketing comes down, you need to be in a position to say "OK, you can have that feature, but it will take an extra month, and cost another $1m"
    2) Development architecture (i.e. when the environments get hosed, you can be back up in minutes not days)
    3) Metrics and reporting - so you know you are late a day after it happens
    4) Decent planning - go in on 7 hour days, 5 days a week. Also highlight that you will need 2 servers etc for the performance testing, rather than getting people in at night.

    ....and you have a manageable project. Obviously this is for projects that are known quantities (e.g billing, mortgages). Anyone doing research or real cutting edge development has a much harder job.

  157. Re:In all seriousness, this is the wrong place to by SpeelingChekka · · Score: 3, Informative

    There also seems to be a professionalism problem in software development - programmers often deviate from the project spec to add things that they want to add, just because its fun for them, with no regard to the impact on the deadline or whether or not the feature is required and/or even useful for the project. Project deadlines for bridges would also often slip if some of the engineers kept deciding halfway through that it "would be cool" if the bridge pillars "looked like giant penguins" or something. "Real" engineers have the professionalism to realise that they need to stick to the spec. With software its not quite so clear that you absolutely have to, so (unprofessional) software developers spend too much time near the beginning of the project adding fun, cool, useless things instead of concentrating on what needs to be done. Then for the last two weeks before the deadline SOMEBODY ELSE (usually me) usually ends up picking up the slack and working 16-hour shifts to get the program ready for delivery.

    I keep having fights with one of the developers here, who is a good programmer, but he has *no* concept of deadlines, time, or priorities. Even the *management* have started multiplying his development time estimates by a factor of three (its usually the other way round!). He's always like "I'd like to add this", or "it would be really cool if we had this feature", or "but we're going to need this eventually anyway" (for future future projects that don't exist yet). And its always "it'll take less than a day", or "it'll only take a day or two". And it ALWAYS takes several times longer than "a day or two". And these things add up, he just doesn't see it, a few days here and there soon add up to a month or two. I can't get it into his head that even if it "only takes a day", as he insists, that thats one day that we don't have to spare, we're already running late as it is. Its simply not possible to add features without pushing your deadline further back, and he just doesn't get that. Its unprofessional, and its frustrating.

    My biggest problem as project manager just seems to be getting people to work on what they're supposed to be doing. It doesn't help either that my manager keeps finding other things for the programmers to do. Some of the developers are professional, and will just focus on doing their jobs without requiring nanny assistance, but some of them you seem to need to check up on several times a day to make sure they're not doing the things they *want* to be doing. I shouldn't have to do that.

  158. Fix estimates as project goes on by frankie_guasch · · Score: 1
    First start with something like

    It'll take between 3 and 4 quarters


    As the project goes on start doing it more precise

    It'll take 9 months


    And later:

    it will be finished the first or second
    week of october


    and so on...
  159. piece off cake, 2 weeks by Wansu · · Score: 2

    Many developers are very cavalier in their estimates. They will say it's a piece of cake and that they can do it in 2 weeks. Then, after 2 weeks, the back peddling starts. There's alot of cocky developers who under-estimate projects. Management comes to expect this. If you say you don't know how long or tell them 3 months, they give it to the guy who says 2 weeks. So after a couple rounds of that, you say 2 weeks also.

    --
    Wansu, th' chinese sailor
  160. That's what I meant by "real". by SeanAhern · · Score: 1

    I agree completely. You can't do it as a voluntary poll. It has to be randomly sampled.

  161. Re:AZ Diamondbacks Win the World Series !!!!!! by Anonymous Coward · · Score: 0

    we let the canadians play too.
    And they suck

  162. In practice, Theory and Practice are different by suitti · · Score: 1
    Denning held back page replacement by "proving" that you couldn't do any better than his "working set". An assumption that it was based on was that you couldn't predict future activity. Naturally, this is wrong. Sequential access and random access patterns can be predicted by the OS, and the programs themselves can be compiled to give additional hints.

    The paper seems to say that software development is like the halting problem. You can't tell if a program will halt or not without essentially running it. You can't tell how long it will take to write something without writting it. However, a short program like:
    for i = 1 to N then
    x = x + 1
    next i
    can easily be shown to halt in less time than order N.

    With software development, it is the same. If you break down the project into small pieces, you can analyse the pieces and add up the estimates. Many of the pieces will be familiar, so the estimates are faster than doing them from scratch. For experienced estimaters, this should be most of the pieces. The real problem is that people make mistakes, and miss pieces. Missed pieces invariably require more time.

    Estimation is overhead. At some point in the estimation of any project, the cost of refining the estimate is larger than the cost of adding padding to the real project to cover these details. This is reasonable, and is a good justification to limit rigor in estimation. But, it can lead to missing important details that will take a long time, degrading the accuracy of the project.

    The paper also seems to concentrate on the largest projects. But large project are most often just the integration of several smaller projects. Small projects can be estimated. Integration of small projects, especially those designed to work together, can be estimated.

    The paper talks about projects where the goal is something that has never been done before. In my experience, this is extremely rare. But here, I agree that estimating progress is extraordinarily difficult.

    Of the projects that I've estimated, only a small fraction have turned out to take longer than the estimate. In a small fraction of these, some aspect of the task escaped the estimate. In the vast majority of cases, something was changed that violated an assumption. This might have been scope creap or change, change in personnell, or delay in some external factor. This is life in the software business. In many cases, a clear contract can keep everyone honest and eliminate these sources.

    No one likes it when a billion bucks is spent and the partial results are thrown out. It nearly always turns out to be some well known phenomenon.

    Ford's current practice is to keep the budget constant, keep the schedule constant, and in a crunch, discard functionality. The customer has input on what gets discarded. Often, discarded functionality makes it into the next phase.

    --
    -- Stephen.
  163. Specialized experience... by Aceticon · · Score: 2
    As i see it most programmers tend to be better at "programming" than at "doing business".

    I've seen it time and time again:

    1. Some guy is the best coder in the whole company yet still he will accept totally unrealistic deadlines and work late hours to try and finish it on time. Worse, if he does suceed, he's reward will be even more unrealistic deadlines for the next project.
    2. Very competent people keep working on the same job for years on end, earning pennies, while the guy next door is total crap and makes twice as much
    3. Some people are constantly interrupted by costumers or collegues with the sort of stupid questions that they could've easily figured out themselfs, if they weren't so lazy. (I call this one the Good Guy Sindrome)
    What's wrong in all these cases?

    Lack of negociating skills. For example:

    1. The ability of tell your manager "I will not accept that deadline. If your keep with it, when it does get overrunned i will tell "that you ignored my advice" to whoever wants to know why is it late.
    2. The ability to now who to talk to (and how), to get yourself a raise or find yourself a beter paid job
    3. The ability to say to people that come to you with stupid questions that they should investigate it further before coming to you. And the ability to keep doing so until they get the message.
    1. Re:Specialized experience... by Darth_Burrito · · Score: 1

      *Some people are constantly interrupted by costumers or collegues with the sort of stupid questions that they could've easily figured out themselfs
      *The ability to say to people that come to you with stupid questions that they should investigate it further before coming to you


      Better to spend a half hour showing them how to find the answer than to tell them in five minutes or leave them to flounder on their own for two hours. Teach a man to fish....

    2. Re:Specialized experience... by Aceticon · · Score: 2
      I was actually thinking of people which come to you with incomplete problems which they are perfectly capable of investigating further before coming to me with it, or even sort it out themselves.

      A common example:
      The administrator of an application that you developed has a problem and immediatly comes to you (the programmer) saying something like "Your application is not working!".

      My sort of reply to this would be:
      - Have you checked the logs?

      Now, in my case, if this is a first time offender he will say "No", after which i'll explain him were the logs are and how to read them (this is the part about "education"), after which i'll send that person back to check those logs.

      If that same person tends to repeat the act ("Your application is not working!" - "Have you checked the logs!" - "No"), i will become progressively more difficult to reach (as in longer delays to respond to that person), while insisting that the person should check the logs first (i will still try to teach and help a person that i believe actually has dificulty in learning how to check the logs).

      At the same time, the ones that do come to me after digging up more information are actually "rewarded" by getting higher priority from me plus getting their problems solved much faster.

      So, what's the end result of this after a couple of iteractions?

      • People will start sorting out some of their problems ("This is not working" - "Let me check the logs" - "This directory is missing" - "I'll create the directory" - "It's working ok now")
      • The ones that investigated further but still could not solve the problem will come to me and i will get their problems solved much faster (since i have to solve less problems plus i start with more information, i can solve problems faster)
      • The lazy ones that will not make any effort to investigate their problems will be pushed back to the lowest priority. This will reflect on their image because their systems are the ones with more issues and longer downtimes, while everybody else's system are running perfectly. The pattern that the outside world sees in this is not that what i program has a lot of problems (since i solve the problems of everybody else's systems) but instead it looks like the systems used/administered by certain persons have more problems than everybody else's.
      What do i gain from this?
      • Less workload because i have less problems to solve and i start with much more information whenever i do have to solve a problem
      • I get to solve REAL problems instead of having to spend half my time "changing diapers"
      • I get a beter track record - my systems have lower downtimes due to problems, because any problem that arises is swiftly solved
      • I get Respect
  164. A Matter of Experience by jsfetzik · · Score: 1

    It is possible to accurately estimate how long a project will take. The problem is you can only really do this if you have done something very similar before. It comes down to experience within a given project domain.

    Once you developed your third payroll system, with the same development team, you can pretty easily estimate how long the fourth one will take. This does not however mean you can accurately estimate how long it will take the same team to develop a fleet maintenance system.

    If you haven't done it before you can not provide an accurate esitimate.

  165. It's Art, not manufactoring, or physics by deanj · · Score: 2, Insightful

    The real problem with software schedules is that most managers won't believe the estimates that software engineers give them in the first place. When you've been around for a while, you have a pretty good handle on how to estimate things. If you come up with an honest answer, 10-to-1 the manager doesn't want to hear it, and wants something earlier than that. I usually revert to the "When do you need something", get the info, and then tell them what features we can do within that timeframe. If they want more, it'll take longer. If they want it faster, they get less features.

  166. Mechanisms for dealing with change requests by Fencepost · · Score: 2
    When doing fixed-cost bids, it's also important that there be a structure in place for handling requests to make changes to the specification. That means all changes - customer-initiated or developer-initiated.

    At the least, this should include documenting what the change is, why the change is needed, who the change is for, what the impact on the final cost will be, what the impact on the schedule will be, and approvals for the change from the project management on both sides.

    The group I used to work for used to do fixed-cost bids without this, and it worked fine until we had a combination of a customer who didn't know what they wanted and a project manager who didn't keep control on the customer requests. We kept the customer and actually had a good relationship and multiple projects with them for several years (until they were swallowed whole), but that particular project was a mess.

    --
    fencepost
    just a little off
  167. Matching XP and fixed requirements by ciurana · · Score: 3, Interesting

    A couple of posters asked this question above: How do we reconcile XP short develop/test cycles with a fixed project plan + bid?

    The answer is simple: During the planning and estimate parts we focus on defining the problem domain and a set of solutions for it. We don't focus on too many implementation details.

    XP techniques are applied to solving each specific problem found in the requirements. For example, the problem may be something like "how do we decode this math-intensive file the fastest?". There usually are two or more answers to such a problem. First we define an interface, then we try two parallel, different solutions and try both. The one that meets that criteria best wins, and we move on to the next problem.

    The thirst for features suffered by some people is often the result of poor design choices in the beginning of the project. If additional features are required, and the analysis was done correctly, you'll find that these new features simply extend solutions you were already working on (or solved). Thus, XP comes to the rescue again by letting you add the new feature without throwing the schedule out the window. Think about it: If a new feature forces someone to re-write a whole system then something must've been overlooked during the requirements analysis phase.

    The most important part of this process is not to start coding and testing until the business requirements are clearly defined. We've been guilty in the past of coding before understanding the problem completely; we try to avoid that trap now. That is probably the single most relevant cause of software project delays.

    Cheers!

    E
    --
    http://eugeneciurana.com | http://ciurana.eu
  168. My $.02 by Anonymous Coward · · Score: 0

    I've been developing software professionally for the past couple of years and the most important thing I've learned is that large projects are 95% planning -- coding 'from the hip' only works for the simplest of projects.

    The most important assets a company can have is a good system for scheduling software and an experienced pro at the helm.

  169. Problems with scope and cost estimations by TheMCP · · Score: 2

    The problem I have usually observed with scope and cost estimations is that they're usually done and signed off on before a programmer is consulted, and in cases where this isn't true, the programmer is usually some sort of generic programmer/manager type person who isn't expert at any of the specialties that will be required to complete the project.

    Once the programmers get their hands on the project, they discover that they're being asked to deliver the moon on a silver platter, carved into nine pieces and wrapped in a red velvet ribbon, to be delivered next wednesday.

    I can't remember how many projects I've been handed which I immediately looked at and said "this will go past deadline and over budget: who estimated this thing, anyway?"

    I even remember one where the schedule had all programming scheduled concurrently with the design and planning, so once we had a spec for what we were going to do we were supposed to have it done already. Design and planning changed constantly, so I didn't get to start programming until I was supposed to be finished.

    In the end, what I'm saying is that problems in delivery (past deadline or over budget) are usually because appropriate programming team members weren't consulted for an estimate in the first place, not because they estimated badly.

  170. I worked in a CMM Level 5 organization. AND LIVED by snoitpo · · Score: 1

    For the US Census we ran a CMM level 5 shop. (I was with Lockheed Martin at the time, the same company who works on the Shuttle code). Our code development ran a bit slower than you have experienced but should expect with inspections and feedback. But once the system was deployed, it worked. And mostly on budget and just a hair behind schedule (see next paragraph).

    The big problem was feature creep. The government figured (correctly) that a few thousand dollars in additional development effort would save on personnel--as it was we had about 8000 operators in the system at the end. So new requirements were coming in all the time. The total bill for the new features ran into the millions. But they were kept in control with processes.

    Working on the Census convinced me that applying professional engineering concepts to software development actually works. When people say "software is different" I feel that they are so stuck in the last century. And in the end, it's a cost savings to do the right thing. You just need to convince the PHBs (which is the hardest part).

  171. Re:wrong place to ask by JJ · · Score: 2

    I agree with your major point that a majority are students or recent graduates. Certainly there are a significant number of people with significant experience. Unfortunately there is no way to separate the two and a poll would be clouded. It'd be good to see one though.

    --
    So long and thanks for all the fish . . . !!!
  172. NOT A GOATSE LINK! DON'T CLICK!!! by alienmole · · Score: 1

    Now I'm never going to get the horrible image of that serious book cover out of my mind...

  173. A good quote... by C_Mattie · · Score: 2, Funny

    "They didn't want it right, they wanted it Wednesday."

    --
    "If you're not failing every now and again, it's a sign you're not doing anything very innovative." -- Woody Allen
  174. More mundane reasons for underestimations by remande · · Score: 5, Insightful
    Software development isn't always like physics--often we are boldly going where people have gone before. However, certain factors in software houses cause underestimations:

    Underestimation as a Marketing Tactic
    AKA "Vaporware". Even if marketing knew when a product would be shippable, a particularly cinical marketing department may claim it to be earlier, thus freezing competitor's development.

    Lack of Feedback (Moving Targets)
    Software engineers are particularly bad at estimating because they have never done what they estimated. They are given a large project, give a large estimate, start working on it, and the project changes in the middle in a major way. This is a moving target; the estimate no longer applies. Major law of software development: You cannot change the spec or the development team on the project without impacting the real ship date. If you don't re-assess the estimated ship date, you are simply fooling yourself. Thus, they don't have any clue whether they hit the estimate or not. One way to defend against this is to break the project down into bite-sized pieces and estimate them; a small piece gives you a chance to do precisely what you estimated. Once you have that, you can have somebody track your estimates, and come back saying something like "On average, you go one third over your estimates. Add a third to your estimates from now on, and we'll be accurate".


    Management Estimates
    Often, engineers don't do the estimate. The management or marketing people tell you what must be done, and how long you have. Sometimes this is done explicitly; other times, management may have a number in mind and shame a software team into agreeing with it by laughing off any number that doesn't match theirs. Business people often negotiate the ship date with the geeks, like any negotiate with any other vendor. To a suit, vendor negotiations are how you determine the "margin", or how much the vendor is making (like when you buy a car, you and the dealer come to a number that determines the dealer's margin). This doesn't work in in-house software develoment because geeks hold back precious little "slack" or "margin" (they don't get paid profits, they get paid salaries); in a decent shop, geeks program at flank speed all the time and always give the project 100%.

    See Ed Yourdon's Death March or any of Ward Cunningham's Extreme Programming books for more details, and ways to avoid the above traps. Yourdon suggests that the head geek has to take a hard stand in scheduling to prevent business interests from setting both the project spec and the ship date. He especially tells you never to negotiate schedule, and to help the suits understand why you never do. Whatever number you estimate doesn't affect the actual ship date, so playing with that number is simply fooling yourself.


    Extreme Programming actually has a "planning game" (sort of a ritual dance) which places business interests and geeks on the same side of the table. Two big rules are "The geeks may not reject any part of the spec" and "The suits may not reject any part of the estimate". Once the suits set the spec, both teams break it down into pieces-parts, line them up in order of what gets done first and the geeks give their estimates. From there, the suits can choose the ship date (and can instantly see how much product will be ready by then), or can choose a certain amount of project completion (and can instantly see the ship date). The fun part about this method is that the suits can change their minds at any time by changing, adding, or removing pieces-parts, and can instantly see how that affects the ship date. The other fun part is that breaking up the project into pieces-parts allows developers to do a (small) project they estimated. This allows people to track estimated versus real time, and to give developers feedback that lets them make better estimates. Such a team will start off with bad estimates like everybody else, but they will be able to improve rapidly.

    --

    --The basis of all love is respect

  175. spec writting by deodiaus · · Score: 1

    In order to write such detailed specs to the point where the coding is trivial will take a lot of time. Is the proposal meant to be developed on one's free time, and hoped that it is amoritized once the project is landed? Many companies bidding on gov't projects really get annoyed when then lose the project, yet have the winner review the other proposals for better ideas.

  176. It'll be done by Friday. by CorporateProgrammerD · · Score: 1
    Of course I don't exactly specify which Friday!

    --
    To email, do the obvious.
  177. Something that screws up time... by cr0sh · · Score: 3, Insightful

    "Suffering" from it right now, AAMOF...

    1. Programmer comes up with new system in spare time while learning a language. New system, if polished, would actually make a nice application to sell to current clients. Programmer is excited, and shows "product" to highers-ups.
    2. Higher-ups are excited, can see it may take a bit more work, and look into what it would take to get it to market. They tell sales and marketing to go see the programmer to have him demo it to them.
    3. Programmer is excited, shows it to sales and marketing. Sales and marketing love it.
    4. Months pass. Unbeknownst to the programmer, sales and marketing have sold it to a client, as part of the contract, to be a finished package by the end of the year - OR ELSE.
    5. More months pass - higher ups finally tell programmer, and others, that this new system is wanted - and oh, BTW, it is wanted in Java - not in the VB it was shown it.
    6. Three months are left to complete the project. Original programmer knows little Java. Other Java coders know little Swing. Architecture of app is changed from a simple app to a three-tier client-server system. Only two other coders have sufficient Java experience to code on it. The lead of the project knows no Java, and only takes notes at meetings.
    7. Twenty-one days until deadline (ie, it has to be in QA in 21 days) - everyone sweating bullets knowing it can't be done. Oh, and BTW, at every meeting it seems like a new section not planned for is realized...

    It was an ad-hoc system, and it is progressing as an ad-hoc system - a system that should have NEVER been shown to marketing and sales. I am not the programmer who originated it, but suffice to say it is a system that will be nice for our clients once it is completed. Fortunately, it sounds like things will be able to be smoothed over if we miss the deadline...

    So remember, all you budding coders out there - if you create something in your "learning" time - don't show it to anyone BUT other coders. If marketing and sales come around, have them sign an NDA promising not to sell it or something - you don't want to release a product to market before it is done - quit "selling" vaporware!!!

    --
    Reason is the Path to God - Anon
    1. Re:Something that screws up time... by blair1q · · Score: 2

      Fortunately, it sounds like things will be able to be smoothed over if we miss the deadline

      That is the real secret to success in software management.

      --Blair
      "Choose your parents well."

  178. Paper may be correct, but is irrelevant by remande · · Score: 3, Interesting
    My understanding of the paper is "Software estimation has been proven to be impossible by any formal systems."


    Now, this paper makes a hell of a lot more sense to anyone who's read Hofstadler's Godel, Escher, Bach, but I suspect that many, even most, Slashdotters have read this one.


    What makes the paper irrelevant is that we don't use formal systems to estimate software. We use our own head. We use hunches. We use intuition. These things are informal systems, capable of forms of reasoning that no formal system can achieve. That's what Godel proved.


    The paper is saying that you can't take a spec, give it to an estimator program, and have the program write the estimate. You can give the spec to humans who write estimates for parts of it, feed that into an estimator program (like a spreadsheet), and you can get an estimate, but you simply cannot remove the human from the loop.

    --

    --The basis of all love is respect

  179. Re:No such thing as Software Engineering-SCORE 5!! by Anonymous Coward · · Score: 0

    How come this was moderated as a 1? Geez.

  180. like manufacturing by deodiaus · · Score: 1

    In a project bidding phase, Of course it is like manufacturing, but you only make one [or few] copy of product. Yes, Windows sells millions of copies, but there are millions of products which sell only one copy. The manufacturing project which most closely resembles this is the Apollo project. The USA developed an industry which was costing $14B a year in 1968, but only $1B in 1973. The cost of development fell once the process was established and the industry established. But we were no longer working on Apollo by 1974. That works well with gov't money, but ask someone else to take that gamble. If I develop a project for one client, and then can't sell many copies of it, I can't amoritize my costs over multiple projects. Its like saying I developed a project for dB2, so all I have to do is calculate the costs of changing the database to Oracle, and hence can sell to more costomers. Well, to change it to Oracle is going to take up 75% of the project, so I might as well start fresh all over again. Maybe I hate the GUI anyway, so I might as well redesign that as well.

  181. Several points to be raised -- is it all academic? by Kope · · Score: 4, Interesting

    The article presents an interesting arguement for why a completely new software project must have an arbitrarily large upper bound for time/quality estimates and can have no lower bound.

    But herein lies the rub -- exactly how many software systems are "completely new?"

    Damn few!!

    The average software project in an average industry will be primarily a repackaging of previously solved problems.The majority of integration tasks will be sufficiently similar to previous integration tasks as to be known.

    You will be left with a small number of "sub problems" which are unique and new. But now we have a situation where the caveats of the article are very important. Specifically, if we have decomposed the programming tasks to a sufficient degree, it should be the case that the estimation is tractable.

    Also, it should be noted, that the author assumes that a good estimate is one obtained through formal methods that is objectively defensible. However, in project maangement, a good estimate is defined as one that is believable and acceptable to all stakeholders in the process. The method for obtaining the estimate is not important.

    Moreover, good project management will include some significant up-front analysis. One common (at least common to companies with good PM'ing track records) is to run "monte-carlo" simulations of project work with large variances in schedule-v-actual work. With a run of a few thousand simulations, those processes that are most important to the time and budget performance of the project.

    These "key" work packages are often non-obvious without this type of simulation work. However, with a good work breakdown structure and a good simulator, it is possible to generate a reasonably accurate picture of project performance based on what is not known.

    This means that in the "real world" of business, the article's claim is irrelevant!!

    We don't NEED objectively defined and defensible estimates. Instead we need estimates that the project stakeholders (which includes the people doing the work) can agree to.

    We don't NEED our estimates to be generated by formal methodologies. Subjective estimates backed up by years of experience are just as good, and often better, from a planning perspective.

    This whole article strikes me as another programmer trying to show how dumb the business people are. Hey folks, good business people KNOW that estimating is hard and that it isn't objective. But just because something isn't objective doesn't mean it can't be done well. It is possible to build models that compensate for unknowns if you can do enough decompossing of the problem to limit the unknowns to a well defined, small manageable few.

    So, in the view of this PM, this is all just academic and has no bearing on the real world.

  182. Time / project management for software by mikers · · Score: 2, Informative

    I believe there is a way to estimate project time, but of course it is a learning process, experience matters and refinement of estimation techniques is the process.

    In reading a book called 'Your Money or Your Life' - don't remember the authors (try Amazon) they talked about tracking fincances, and figuring out where the money was going had to be done before being able to plan for savings or doing what you wanted in life rather than letting bills, banks and credit cards run your life. You have to track your money before you can figure out how much it costs to do certain things, and before you can reallocate it to get the best bang for buck.

    In reading a book called 'Introduction to the Personal Software Process' but Watts Humphrey he talks about first tracking accurately pretty much every minute in every day, each week and figuring out where the time is going before you can reallocate to important tasks. The major outcome of this is of course putting your time where it matters, and being able to figure out how long certain tasks and projects take based on history.

    The lesson is to: watch what you do accurately, categorize and analyze, set your priorities and goals to reflect what you want to accomplish (project, product, whatever), plan and repeat until you know fairly accurately how long specific tasks in each project take, and how long certain projects take.

    This way you can work on decreasing production times, work on important tasks first rather than leaving them to 'whenever' and determine where time is being wasted.

    I think it is totally possible to estimate project times this way. It can be done if you are willing to put in the due diligence. If not, hey take a guess and multiply it by two -- then make up excuses until its done (way less stressful I'm sure).

    m

  183. Are art projects really late?? by Gorimek · · Score: 2

    My impression is that while art projects are sometimes late, they're no worse than any other mature industry.

    So the argument that "we're late because we're artists" doesn't seem to hold any substance.

  184. Why almost all the posts are off topic. by the_great_cornholio · · Score: 4, Insightful

    As silly as this paper is, most responses to it are off-topic. What he is trying to show is that there is a good case for saying there is no general, algorithmic way to estimate how long it will take to do a given software project. What he isn't saying is that you can not make reasonable estimates on a given project.

  185. Optimism and ego as a source of underestimation by frank_adrian314159 · · Score: 2, Interesting
    Whether you want to believe it or not, programmers are a highly optimistic bunch. This is especially true WRT any technological issue, where you almost never see actual analysis of possible problems with a system. Most of the time, this is a good thing, as most systems are relatively benign (actually, most are banal, but that's another issue) and developers need their optimism to face ever more complex code and systems. However it does make them tend to underestimate the time that development will take.

    Another reason that developers tend to underestimate development time is that they tend to have very healthy egos when it comes to technological issues. Again, when facing the complexity of modern code and systems, this is probably a healthy defense mechanism.

    But when you couple all of this with a management that wants to believe deflated time estimates, it's no wonder that most project end up taking more time than initially thought.

    --
    That is all.
    1. Re:Optimism and ego as a source of underestimation by rfc1394 · · Score: 3, Interesting
      Whether you want to believe it or not, programmers are a highly optimistic bunch.
      I think that being optimistic is a good thing; it keeps most programmers from going out and getting other (less-stressful) jobs (my favorite one is to suggest I'll quit being a programmer in order to do something less stressful like driving a truck of unstable explosives) or going Postal. :)
      This is especially true WRT [with respect to] any technological issue, where you almost never see actual analysis of possible problems with a system. Most of the time, this is a good thing, as most systems are relatively benign (actually, most are banal, but that's another issue) and developers need their optimism to face ever more complex code and systems. However it does make them tend to underestimate the time that development will take.
      I have learned, myself. One thing I started to do - and I explained to my manager, who, thank goodness, used to be a programmer - that I am taking what I think things will take and doubling the estimate based on the fact that something ALWAYS goes wrong. There's always some snag part way through the work that causes it to slow to a crawl or come a cropper [grind to a halt]. Some piece takes longer, or the implementation I choose doesn't work, or factor X. [an otherwise unknown event or circumstance] This means that I have slack space in the other items to make up for the one that goes wrong.

      Carleton Sheets, a man who was talking about how to buy real estate on his instruction tapes said something useful which I decided I can use in estimating time requirements for various fixes:

      If what you are offering doesn't embarass you (in effect, if you don't feel like you're being greedy in offering too little to them, or you don't feel that your offer is so favorable to you that you are taking advantage of the other person) you're offering them too much.
      We need to learn to ask for the proper amount of resources and point out that less than the minimum makes it impossible to respond within the requirements no matter how much someone wants it to happen. (As Brooks points out, it doesn't matter how many women you throw at the task it still takes 9 months to produce a baby. Demand the baby be brought forth in less time and you either get a dead fetus (and possibly mother) or a sickly premature baby.)
      Another reason that developers tend to underestimate development time is that they tend to have very healthy egos when it comes to technological issues. Again, when facing the complexity of modern code and systems, this is probably a healthy defense mechanism.
      We need to learn that this is not a good idea because if you are consistently wrong on your estimates, eventually you get the "kid that cried wolf" syndrome: nobody believes you any more and all of the estimating systems become what everyone knows they are: a joke.
      But when you couple all of this with a management that wants to believe deflated time estimates, it's no wonder that most project end up taking more time than initially thought.
      It's actually no wonder "most" projects end up being cancelled. They take too long (because the people who are supposed to implement them were too aggressive in what they would deliver) and cost too much (because they routinely run overtime because the estimate was wrong in the first place).

      Paul Robinson <Postmaster@paul.washington.dc.us>

      --
      The lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
  186. The best tool for correct estimates ... by puckhead · · Score: 1

    The best tool for correct estimates I've found is the salary. I estimate in days rather than hours.

    --
    Watching Cowboy Bebop in my jammies, eating a bowl of Shreddies.
  187. the cost out ways the benefits by KyleCordes · · Score: 2

    2-3 times is a pretty high multiplier, but there is a lot of merit to your comment. Here's a related hyptothetical question. You have a 5-month project. How do you spend months 1 and 2?

    A) Detailed requirements and design work. Endless meetings. Lots of documents. Little or no code.

    B) identify key requirements (highest value to customer) and implement them; provide working version 1 of the system, with modest documentation and simple code.

    I've done some of each in various roles I have worked in. Nowadays I do a fair amount of work for my own clients, who seem to prefer option B.

    The value of option B is especially obvious in an outsourcing situation. It's much easier to snow a client with an almighty thud of documentation than with working code. Therefore, with option B you know much sooner if your outsourcer is incompetant, so you can fire them if needed.

  188. Magic 8 Ball Estimations by staplin · · Score: 2, Funny

    One of my former coworkers had a relatively accurate method of predicting schedules using a Magic 8 Ball. For example:

    "Will this project be done in 8 weeks?"
    shake "Outlook not good"
    "OK, how about 12 weeks?"
    shake "Maybe"
    "Hmmm. Let's make it 15 to be sure..."
    shake "Yes"
    "Yep, this project will take 15 weeks."

    And it really annoys managers when they discover that you used a Magic 8 Ball, and then it confounds them when it is right...

    1. Re:Magic 8 Ball Estimations by rednaxel · · Score: 1
      We have here some keyboards with extra keys named Power, Wake and Sleep. Some engineers managed to remove them, and use as indicators:
      - How will this project run?
      (throw the ripped keys)
      Power (face up), Wake (face up), Sleep (face down): this means that nobody will sleep again, and will keep awake with Power drinks...

      --
      If you can read this, thank an english teacher.
  189. Cleint/Management Practices are Partly Culpable by Anonymous Coward · · Score: 0

    Several months ago, I printed and posted in my work area one of those little quotes that appear at the bottom of /. pages. It conveyed what typical non-technical management or client so consistently fails to understand.

    "One cannot guess the real difficulties of a problem before having solved it." Mathematician Carl Ludwig Siegel.

    Most managers demand "estimates" but only allot time and resources for "guesses".

    It is often their failure to understand the nature of the work and what can influence it positively or negatively, or at least to listen to those who know. The problem starts when they do not provide intelligible/coherent/complete specifications and then don't have the time/patience/wherewithal to sit down and flesh out the spec. I try to pad and qualify my responses in detail (usually in writing), stating such things as the assumptions that I made about things in the spec and with boilerplate like "assuming no changes to the existing spec, availability of resources", etc. But it usually gets overlooked down the road when they allow or apply influences (spec. changes, resource changes etc...) that negatively affect schedules without accepting responsibility for schedule slippage.

  190. Re:I worked in a CMM Level 5 organization. AND LIV by Anton+Anatopopov · · Score: 1
    For sure. I have worked on trading floor development, which are at CMM level -99999 and the main thing seems to be that you have to be seen to be typing something, and to appear stressed and have a sense of urgency about everything, even if what you are actually doing is crappy hacking in perl or tcl or vb with no proper analysis, and no process control.

    I have also worked for an organization attempting ISO9000/9001

    I know which one I preferred, because ultimately the 'macho' trading floor style developement method is pure BS, and ultimately unrewarding (spiritually). However, otoh the hack and slash of the trading floor job paid a hell of a lot better. I am not sure if that was directly related to the lack of process overhead cost though.

    The amazing revealation of process is that it works. People who think they are exceptional, and 'creative' (the Code is Art brigade) do not like it, but you cannot argue with the bottom line.

    In short: quality software costs money. But crappy software costs you more in the long run.

  191. 'Engineering' is NOT a panacea. by Anonymous Coward · · Score: 0

    I find it funny (more sad, really) that you imply that Engineers would solve all software problems.

    Software IS NOT LIKE A PHYSICAL SYSTEM. Can you just make a copy of a skyscraper once you've built it? Restore it from tape backup when it crashes? No.

    I'm a little sick of the attitude from engineering schools that they can do everything better, no matter what.

    My experience, working with engineers in past jobs , is that they write HORRIBLE code. (No flames please -- I know perfectly well that there are some very capable coders out there who are engineers.) The engineering faculties in my city turn out coders who write everything in FORTRAN, regardless of what language they're actually using. I've had to clean up their mess on more than one occasion.

    Once, the mess was so bad it killed the company -- these 'accredited engineers' had screwed around with their crappy code so long that the project was over a year behind schedule. I was a junior programmer just signed on to the company, so my opinion of the code wasn't listened to until it was far too late.

    I currently work at a college in the Computing Science department. The labs I supervise are primarily for CompSci students, but the Engineering faculty also has its own programming courses which are taught in the labs. It's strange that the Engineering faculty has its own programming curriculum -- I suppose if Engineers aren't teaching the course, it's not perceived as being 'good enough'.

    The irony is, they're teaching horrible coding techniques -- global variables everywhere, cut-and-paste repetition of code, procedures with 8+ arguments, using float types for looping variables, you name it. It pains me to see that the students are being taught such crappy coding by their instructors.

    I don't believe Engineering programs should teach any programming. Engineering faculties should swallow their pride/attitude and let the experts -- Computing Science faculties -- do it.

    Would the Engineering faculty of your local University allow the English department to teach students how to build bridges? I didn't think so.

  192. Estimates should be optimistic.... by lhbtubajon · · Score: 1

    ...otherwise, the project completion time will ALWAYS expand to fill the "maximum" amount of time allotment, and then some. Check out Eli Goldratt's Critical Chain for an outstanding explanation, and a practical remedy. You CAN meet software project schedules, but the way to do it is NOT by padding your schedule. Check it out.

  193. Re: languages by mlanett · · Score: 1

    This is hardly something new. Interpreted typeless languages work very well for small programs, especially those which address system integration issues, i.e. mostly string processing, not much complexity, short execution times, few error conditions, and much calling of external programs for specific actions. Statically typed languages, which are generally compiled, are what you want for very large self-contained or homogenous systems.

  194. Re:In all seriousness, this is the wrong place to by Anonymous Coward · · Score: 0

    Exactly. That's why most software engineers who have to make these kinds of decisions ignore topics like this on Slashdot. ;-)

  195. No Silver Bullets... by randyflood · · Score: 1
    If you believe that Software Engineering is just like other engineering disciplines, and that software projects could be accurately estimated if only we had qualified people, then you must read Fred Brooks classic "No Silver Bullet" article. This is (and should continue to be) required reading in all Software Engineering classes.

    No Silver Bullet In any case, software engineering is still ill-understand and fundamentally "fuzzy". People have unrealistic expectations about how software can be retrofitted. Despite out best efforts, I do not see software cost estimation becoming more precise in the near future.

    Ofcourse, if you do 99% of the software development without coding, and then do clean room development for the coding, you may be able to estimate that phase fairly well. But, the overall project will still take a very difficult to determine ammount of time as a whole.

    --
    Randy.Flood@RHCE2B.COM
  196. That happened to me once by Bake · · Score: 1

    When I was working for my uncle who's a contractor and runs a small contracting company.
    In this tiny street we were hired to replace the sidewalk since it was basically ruined.
    Well, after we ripped the old one up we discovered that the soil had to be replaced as well (it was clay-like sand and just plain mud) or else the new sidewalk would break into pieces as soon as temperature goes below 0 Celcius.
    As we were digging up the old soil the civil engineer came to take a look and came to the conclusion that the hot water pipes needed to be replaced as well.
    And just as we were escavating more soil, to make it easy to remove the hot water pipes.
    The power company then came and decided to lay down a new cable, they were followed by the phone company that decided it would be a great idea to put down new pipes for pulling cable through, for future accomodation.

    Now, that project was only supposed to take a maximum of two weeks, started in early September and was still going on when I quit at my uncle's company in late November.

    Moral of the story in case you didn't feel like reading it. It's not just the software industry that suffers from shortsighted decisions.

  197. How enlightening... by Anonymous+Brave+Guy · · Score: 1

    Someone posts what appears to be a perfectly sensible comment, but one that is critical of a large part of the /. readership. It gets modded up 5 times, but then marked as "troll", "flamebait" or "overrated" 4 more. Gee, I wonder who modded it down... ;-)

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  198. QRST by Wargames · · Score: 1

    Quality, Resources, Scope, or Time. You can pick any three you like.

    eXtreme Programming is one solution:
    http://www.xprogramming.com/index.htm

    --
    -- Each tock of the Planck clock is a new world and here we are still life. --
  199. Now isn't it obvious! by Anonymous Coward · · Score: 0

    More specifically, the paper shows that Program size and complexity cannot be objectively estimated a priori.
    Development time cannot be objectively predicted. Absolute productivity cannot be objectively determined.
    Even approximate estimators are suspect: there is no estimator that produces a correct fixed bound on the complexity of all programs


    enough said.

  200. Standard estimate by sulli · · Score: 4, Funny

    "You tell me the month, I'll tell you the year"

    --

    sulli
    RTFJ.
  201. Since when is a computer program FINISHED? by Anonymous Coward · · Score: 0

    Programs are *never* done. They can be (and are) improved perpetually. Ask any government contractor.

  202. Always say - Yes! I can do that! by Anonymous Coward · · Score: 0

    When asked if you can crank code for an unreasonably-scheduled project always say - "Yes! I can do that!" Then drop the hammer as to what it will take as far as resources: software, development tools, development servers, contractors, outside consulting, overtime and just plain time. Also, insist that if all of this is not provided in a timely manner then the project finish date slides to the right - non negotiable.

    Do this, and you are never the bad guy: the guy who insists that the job done can't be done. In fact, you are the guy who had a plan and that was optimistic: it was dumb management that refused to come through with the resources and destroyed the plan!

    One thing most important before you begin: you must have a realistic plan, you must have it documented (shared with management) and you must stick by that plan. The plan should be granular enough so that changing the requirements somewhat can be reflected immediatly in the plan. The plan should also highlight the most difficult coding and make it the most time-critical element; everyone must know beforehand what coding is spam and what coding will take the real work.

    If someone doesn't give you the resources your project needs, update the schedule and distribute to management immediatly - show them the immediate impact someone's neglect is causing.

    Do this, and people will be more reasonable with you.

  203. What is development? by Anonymous Coward · · Score: 1, Insightful

    In my limited experience, the problem is that the "coding" is relatively easy and can be likened to engineering. The problem is that the team doing the coding normally also has to do the following:
    1. Setup the process and all the tools required to support it
    2. Interpret/Interview and write the specifications
    3. Fix old software the engineers worked on that broke
    4. Figure out why simple things don't work like the documentation says
    5. Try to figure out why the manufacturer of the tools left out essential features
    6. etc.
    These numbers are left out of the estimate. And dominate the time.

    That's the real problem. At least in most smaller companies.

    Also one should note that a large software package is more like building/designing an new airplane than building a building.... just a thought....

  204. The deeper problem: why things really fail by Anonymous+Brave+Guy · · Score: 3, Insightful
    With objective schedule estimates, projects should never run late. Are these failed software projects not using proper software engineering, or is there a deeper problem?"

    Yep, there's a deeper problem, and it's very simple. Suppose your manager asks you for an estimate, and you say "six months" because that's how long you think it will take. Your manager works out that the project will not succeed if it takes six months, and asks you if you can do it in four. If you say "Yes", you have just become a statistic.

    Saying yes does not mean that you can do it if you couldn't before, it just means that you have lied to management, prevented them from doing their job properly. If your project would take six months, but it will not make money if it takes six months, then you simply should not start that project. Failing to realise that simple fact is the major cause of late/failed projects, IME.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  205. Re:In all seriousness, this is the wrong place to by Anonymous Coward · · Score: 0

    So right.

    Problem #1: Programmers are anarchists. They don't like to be told what to do.

    Problem #2: Managers are pushovers, and let customers change anything up until the due date.

  206. Re:Several points to be raised -- is it all academ by rfc1394 · · Score: 3, Insightful
    The article presents an interesting arguement for why a completely new software project must have an arbitrarily large upper bound for time/quality estimates and can have no lower bound.

    But herein lies the rub -- exactly how many software systems are "completely new?"

    Damn few!!

    Unless you're merely doing maintenance on an existing program and know exactly what you need to change, what you are doing is new. Especially if you are trying to fix a problem with a software package that you are not familiar with.
    The average software project in an average industry will be primarily a repackaging of previously solved problems.The majority of integration tasks will be sufficiently similar to previous integration tasks as to be known.
    If that was the case we would be able to make better estimates. This is almost always not the case.
    You will be left with a small number of "sub problems" which are unique and new. But now we have a situation where the caveats of the article are very important. Specifically, if we have decomposed the programming tasks to a sufficient degree, it should be the case that the estimation is tractable.
    Software development is an art form. You can hire someone to paint your house and he can tell you exactly what it will cost. This is presumed upon the house being already built and it being an exact structure before he starts; that you not rebuild the house while he is painting it; nor change the paint color in the moddle of the job; and not asking him to remove the previous paint coat, etc. Otherwise it's akin to doing the Sistine Chapel without even an image to start with. An unlimited job results in an unlimited requirement. Until someone pulls the plug.
    Also, it should be noted, that the author assumes that a good estimate is one obtained through formal methods that is objectively defensible. However, in project maangement, a good estimate is defined as one that is believable and acceptable to all stakeholders in the process. The method for obtaining the estimate is not important.
    It is if you want it to be realistic. Usually the estimate is either totally unrealistic or it's manufactured from whole cloth.
    Moreover, good project management will include some significant up-front analysis. One common (at least common to companies with good PM'ing track records) is to run "monte-carlo" simulations of project work with large variances in schedule-v-actual work. With a run of a few thousand simulations, those processes that are most important to the time and budget performance of the project.
    This is ridiculous. If management knew what it was doing we wouldn't have so many businesses run themselves into the ground and the dot com bubble would never have happened in the first place.
    These "key" work packages are often non-obvious without this type of simulation work. However, with a good work breakdown structure and a good simulator, it is possible to generate a reasonably accurate picture of project performance based on what is not known.
    Asking for estimates on the development of art work is ridiculous unless you have fixed guidelines and an exact idea of what you want, something which is usually lacking.
    This means that in the "real world" of business, the article's claim is irrelevant!!
    If it's irrelevant, why is it in the "real world" more than 3/4 of all projects run over time and over budget and something near 1/2 end up being cancelled?
    We don't NEED objectively defined and defensible estimates. Instead we need estimates that the project stakeholders (which includes the people doing the work) can agree to.
    You can get people to agree to anything. The question is whether the estimates are anything close to accurate. In most cases, they are not.
    We don't NEED our estimates to be generated by formal methodologies. Subjective estimates backed up by years of experience are just as good, and often better, from a planning perspective.
    True. But the problem is, most places don't know enough about what they are doing or how it is defined to be able to give any kind of reasonable estimate. If you don't measure what's going on, and you do everything in an ad-hoc style, you will get estimates that are essentially about as valid as rolling dice to get an answer. And maybe less valid than that.
    This whole article strikes me as another programmer trying to show how dumb the business people are.
    It is not that business people are dumb, it is that we are failing to make adequate estimates and standing up for them as based upon what we know to be correct. But again, since the measurements of what is being done are often missing, the estimates are usually nothing better than seat-of-the-pants guesses, and wildly wrong.
    Hey folks, good business people KNOW that estimating is hard and that it isn't objective. But just because something isn't objective doesn't mean it can't be done well. It is possible to build models that compensate for unknowns if you can do enough decompossing of the problem to limit the unknowns to a well defined, small manageable few.
    If that was the case, why is it common place for managers to demand increases in functionality and cuts in the schedule? Because those who hear the estimates think they are overly padded (and therefore should be cut), and those who make the estimates don't have the means to show where they get the numbers from (and therefore can't show why their estimate is even close to correct, when it probably wasn't anyway).
    So, in the view of this PM, this is all just academic and has no bearing on the real world.
    Believe that if you will; the way things are really happening in the world prove otherwise.

    Paul Robinson <Postmaster@paul.washington.dc.us>

    --
    The lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
  207. Re:In all seriousness, this is the wrong place to by ahde · · Score: 1

    In my experience (college dropout) the most valuable thing you learn as a student is how to estimate time of completion---

    I can get this lab done in 10 -- 1 hour segments in class or put it off two weeks and get it all done in 8 hours the night before it's due.

  208. If you have certain preconditions, then yes. by soft_guy · · Score: 3, Informative

    Software engineering is like any other kind of engineering. You *can* create a realistic schedule that you can follow. I have worked on a large number of software projects. Some hit their dates, others did not. I have identified certain preconditions that have to be met if you want to hit your date. (Not that these are profound, pretty much everyone would agree this is common sense stuff -- it's just that often times conditions aren't met which causes late projects.) First, the customer (whoever if calling out the requirements) can't be changing the requirments insanely. This one should be obvious, but I've experienced a large number of situations where management changes the basic premise of what they want regularly and are surprised when this impacts the schedule. Any external dependencies have to be met in the timeline called out in the schedule. I worked on a project where we had to deliver a server that talks to our customer's other servers using a proprietary protocol. The customer asks, "Can we have it by x date?" Our response, "Yes, if you can give us the documentation to your protocol and access to a testbed by x-y date." They delivered their end of the bargain (extremely) late causing us to be late. ("But you said you could hit the date!") Go figure! The third precondition is that the program manager should not be an idiot. This person needs to have the following characteristics. They need to be very technical. People who are former developers usually do okay. As a rule, people whose total background is as a marketing assistant or a receptionist(!) usually do not make good program managers. (The receptionist I had as a PM didn't do too bad because she understood that she didn't know anything about it and let me - the lead dev - call the shots.) This person should have been around the block a few times and should agressively track down any risky issue or "gotchas" in the process as soon as it is uncovered. This person should be tenatious in doing this. If you have those three preconditions met, then typically you can hit your date.

    --
    Avoid Missing Ball for High Score
  209. Two Cents From a Project Management Lifer by NoHandleBars · · Score: 3, Interesting

    With a little over 20 years experience of managing very large software projects for Fortune 500 companies I can identify the root cause for the spectacular successes and the colossal failures: Scope Creep.

    If the business requirements have been properly defined and management discipline exercised to keep within the original scope, every estimate I've developed -- using a variety of methods over the year -- has been successful. But those instances where the specs continually change, the business requirements are "discovered" along the way and/or new requirements are added to the mix are all failures. This has been true whether I've led teams doing something "no one's done before" or the "same old thing" again.

    Kudos to everyone here that has posted information on the REAL solutions in the form risk management, scope containment, good old fashioned discipline, and the like.

    --
    +-+-+-+-+-+-+ "I don't know what's wrong with you, but I'm quite sure it's hard to pronounce."
  210. Don Knuth Knows... by Anonymous Coward · · Score: 0

    Yes.

    It's called ``TeX''.

  211. Re:There are reasonable ways to get a good estimat by Anonymous Coward · · Score: 0

    I have come across essays which question the CMM, but nothing so definite as a 'study' that empirically contrasts results at different levels. Do you have a pointer or any other info on these studies?

  212. Re:There are reasonable ways to get a good estimat by Anonymous Coward · · Score: 0

    Did you read the article? It specifically quotes the CMM (one of the quotes on the first page).

    The CMM made some silly claims early on. I believe they have toned down their claims since then.

  213. Estimating smaller pieces by philsown · · Score: 1

    In my web development I've found that breaking an application out into small pieces and estimating on the peices was effective. Writing a complete spec is also helpful before coding to work out a datamodel and pageflow before any code is written. This makes it easy to identify on paper where code can be reused. The spec is also a great tool for understanding the application fully. By the time I sit down to type all the real thinking is done. Standard items are very easy to estimate now that I've done them many times and have library code to work from.

    --
    Kind Regards, Phillip
  214. I resonate with the sentiment of this paper... by Anonymous Coward · · Score: 0

    ...bim...but I think they should be using resource-bounded complexity measures. Otherwise the size of a formal specification (in Z say) would be a reasonable estimate of the size of the system, and software engineering would be good science after-all. I think claim 1 should probably read "It's not possible to feasibly estimate the size of a feasible program for..."

  215. But is Software Engineering a useful metaphor? by PeteMcBreen · · Score: 1

    I realize that comparing software development to Engineering is common, but is it really useful? Accreditation is somewhat useful in constrained engineering domains, but for software developemnt accreditation is not really a useful goal. After all, what does an embedded systems developer need to know about PL/1?

    Yes, we could make the coding stage little more than data entry (or more likely generate the code from CASE tools and models), but that would just shift the problem. Getting the requisite level of detail into the development language of choice be in C or UML requires skilled, talented practitioners. To get these, we need to consider the metaphors we use.

    Software Engineering doesn't really work as a metaphor for software development because few developers really understand what an engineer does. What we need to do is find an alternate metaphor that allows us to think differently about software development.

    I prefer a Software Craftsmanship metaphor. Imagine trying to get a craftsman to produce a detailed estimate for a 10+person-year project without giving them sufficient time to investigate the project. They would laugh. What do software engineers do? They plug numbers into COCOMO models and come up with an incorrect number because the requirements are not even understood. For some reason we have forgotten that creating good estimates takes time and costs money, and even then you have to validate the estimate against the performance of the project team.

    Please find something better to replace the worn out Software Engineering metaphor.

    --
    Author, "Software Craftsmanship The New Imperative" Addison-Wesley (C) 2002
  216. Correct analysis of a flawed premise by drew_kime · · Score: 2

    There are two major problems, the first being that the users don't really know what they want

    Could this be why projects keep failing? "We" all claim to recognize that "they" don't know what they want or need. But we go ahead and estimate it and develop it anyay. If you haven't convinced yourself that "they" know what they want, or even better helped them to figure out what they really want, then you're not ready to start development.

    To beat the construction analogy horse another inch beyond its life: if you're a contractor and someone asks you, "How much to build a house," you wouldn't give them an estimate. You'd talk to them until they had narrowed down what they actually wanted.

    --
    Nope, no sig
  217. Analogous to the Halting Problem by Anonymous Coward · · Score: 0

    As soon as I read the headline, it was as if a great epiphany had hit me in the face. Another way to think about this is to model the "Software Specification" as an input tape to a Turing Machine (programmers). To estimate how long this project will take requires that one know if the program will halt. Of course, the only way one knows if the program will halt is to emulate a Turing machine running the same program and seeing the new program will Halt. Since this cannot be guaranteed to halt in finite time, it is clear that software schedule estimation is uncomputable!

  218. Deadline estimate by $criptah · · Score: 2, Funny

    Let's assume that it is possible to have a fixed deadline, then in order to meet it you will need to get all the specifications for the program, such that they will not be changed while you're developing it. Moreover you need to have a boss that doesn't add functionality to an already started project. All these things are completely impossible, that's why our initial assumption was
    incorrect. A very flexible deadline? Maybe...

  219. the real reason by porky_pig_jr · · Score: 1

    Kolmogorov algorithm, Goedel incompleteness, Heisenberg indeterminism, holy Moses ...


    The real reason why software projects fail is that software engineers are not really engineers. Take some arbitrary CS cirriculum and compare it with EE cirriculum and you'll know what I mean. Software engineering is the oximoron. Engineering isn't just being taught as a part of CS. Period. I hate to think what would have happened if EE was taught the same way CS taught. Your PC would have been DOA. Ever.

  220. Best Software Process has *no* Schedule by Anonymous Coward · · Score: 0
    I wish I could remember where I read this, but one (IIRC well-known) study asserted that the highest-quality software was that written with *no* schedule whatsoever. This might be a better way to work.

    Perhaps someone else can provide the source of this information; I'm too busy right now to search through all my software engineering textbooks!-((

  221. With 25+ Years of Experience, Hubris and Humility by Baldrson · · Score: 3, Insightful
    Of the question "Can software schedules be accurate?" I can only say, it depends on how much new stuff has to get done.

    To take a reductio ad absurdum:

    You are given the task of duplicating the functionality of Windows NT. Furthermore, you are given the source code for Windows NT in a .tgz file and the associated development environment within which that source code can be tested. The question now degenerates into "How long does it take me to copy the tgz file?" That can be accurately predicted by measuring how long it takes to copy files on that environment in general, and the estimated schedule can be predicted to absurdly high degrees of accuracy with enough benchmarks of the system's file copying performance.

    Here's another reduced complexity angle:

    Translate a program written in Visual Basic and convert it to C++ (readably).

    You actually can sit down and convert a sampling of the program and get a measure of how long it will take you to do the whole thing -- the more you sample, the more accurate the measure right up to the point where you have converted the whole thing.

    Here's another example with a bit less reduction in complexity:

    You are given a working program but no source code, and some expert users of that program. Here we are getting into what might be thought of as "function point analysis" but really, it is much easier and more accurate than that since the program exists and works as it is "supposed" to work, you can bang away on it, and the expert users can bang away on your version of it to ensure it meets their needs -- perhaps discovering that some of the features in the old program were not really used thereby simplifying the task.

    Each step has been away from the "absurd" position of simply copying a program which was, in a sense, a "spec" for itself.

    At the other extreme, we get to the problem of "write a program that will make me as rich as Bill Gates". Note that this specification is not very specific.... it is very far from being source code for a program you can simply copy, isn't it? Guess what that says about the accuracy of the schedule?

    So a lot of this hubub about estimating software schedules is really hubub about the nature of the program specificiation process.

  222. Frank Lloyd Wright by shovelface · · Score: 2, Insightful

    Frank Lloyd Wright's buildings were often new ideas in theory and construction, much like the "unknown" part of estimating a software or web project today. His materials were often strange (or at least had traditional material joining with more exotic material) and the structures were oddly shaped.
    This is why Frank Lloyd Wright's buildings were often way behind schedule and way over-budget. He was a great architect and a wonderful designer, and I'm sure most of the engineers and builders were talented as well... but when you are dealing with brand new ideas, there is a certain amount of trial and error neccessary. Unfortunately he also didn't build that trial and error into his estimates.
    Also unfortunate is that many of his buildings have leaky roofs.

    The way that guy Joel does project management is the way I've been doing it for quite awhile, but he does say it so nicely:
    http://www.joelonsoftware.com/stories/storyReade r$ 31

    If you are going to compare building a bridge or a house with building software, choose the right bridge or house to compare with. Most software projects are not a cookie-cutter suburban home that everyone knows exactly what it's gonna be like and how to make it. Most of the time it's more like a Frank Lloyd Wright or IM Pei house.... We know the physics and tools of building a house. But we usually want to make them more useful, more livable, and more beautiful. That last part takes more time.

    -trout

  223. Beware carleton sheets... by bani · · Score: 2

    I don't think i'd take ANY advice from carleton sheets....

    http://www.johntreed.com/Sheets.html
    http://www.johntreed.com/Reedgururating.html
    http://www.mazu.com/carleton_sheets.html
    http://www.papersourceonline.com/discus/messages /1 649/1431.html

  224. Like physics? Like hell. by DoctorNathaniel · · Score: 2, Insightful

    Physics allows projectable timelines? Think again. I'm currently employed on a fairly major project (http://www-numi.fnal.gov:8875) that, when I joined, had a completion date of 2003. Now it's 2005 and counting.

    Software and physics have certain similarities (not least of which being that physics requires software development). The essential point is that you don't know how long it will take to do something that you haven't done yet. If you HAVE done it, then you don't need to do it again; all software design (or experimental physics experimentation) is essentially a research endevour, although the research results aren't neccessarly of interest in themselves.

  225. Not if there's a good QA department. by xdangavinx · · Score: 2, Insightful
    From my experience in the development department at my place of work, often no matter how wacky some of the deadlines given by "project managers" are to have fairly significant pieces of code or patches to be done by are often met - more times than we'd like to admit they're met at the last second.

    However since they're met at the last second, often the code that is written suffers. From there often the QA department will find something wrong with the poorly written code, send it back to the development department who then has to spend some more time to fix the new errors that the sloppy code created. So although the "project manager's" deadline was met, the end client often is delayed by the additional things that were discovered.

  226. Design time vs coding time by Anonymous Coward · · Score: 0

    I'd have to agree with those who say it's possible to estimate the amount of time to code and debug a project somewhat accuraterly. All it takes is a thorough and complete design process.

    I'd recommend a 80/10/10 ratio for proper accuracy -- 80% design time to 10% coding time to 10% beta testing time. After you spend all your time designing, then you ought to be able to predict the remaining part of the total project time quite accurately.

    By designing, I not only include developing an accurate functional spec, but also a gruesomely detailed task by task (all bite sized...) specification, and performing any proof-of-concept tests to determine the method any task may need to use to be implemented. (NOTE -- no proof-of-concept code should be kept longer than it takes to document the methodology used and any OS gotchas discovered during the proof -- proof of concept code is never clean enough to use as production code...)

    And oh yes, the design phase also includes creating any graphic, video, and audio design elements which need to be made -- you really must have ALL of those in hand before writing a line of code or they could contribute greatly to schedule slippage. (And no matter how tongue in cheek this post is, I'm actually *very* serious on this point -- I can't tell you how many projects I've been on that have slipped due to missing graphic elements...)

    Unfortunately, it remains impossible to determine how long the design phase will take. But hey, at least you'll know how long your code will take, right? Assuming, that is, that the target OS isn't updated after the design phase -- then all bets are off.

  227. actually... by Anonymous Coward · · Score: 0
    no matter how new a subject matter, no matter how large a system and no matter how complex a system, it can be engineered.

    the fact that many like yourself do not even know how to do it says volumes about the disgraceful state of computer science education...

  228. Re:In all seriousness, this is the wrong place to by Anonymous Coward · · Score: 0

    Oh sure, and then there is scope creep as someone mentioned.

    But one of the worst causes of projects being way behind schedule is bad design.

    I just took over a palm project that took 10 months to develop (with an original schedule of 5 months). The coder spent much of the last several months debugging her own code because she didn't understand how to separate the forms from the data. Any change (read FIX) she made forced a cascade of changes everywhere else.

    In a matter of a few weeks, I've removed the confused data-specific code out of the forms, and eliminated the bugs that were caused by duplicate code. Since the app used several forms for one set of data, there was a lot of duplicate code in these forms.

    The net result was not only simpler, more easily maintainable code that runs faster, but the added benefit of enhancements being implemented in much less time.

    I really enjoyed seeing the redisplay function that reloaded some parts of the data from the databaseses. The programmer then added an IF statement to prevent the reload on certain occassions. I could just imagine it a month or two later: another if statement in the first one that cancelled the first if another condition appeared, and then another than cancelled the second condition if a third appeared, etc.

    Gack.

  229. comment on the posts by noisebrain · · Score: 4, Insightful

    It looks like several people (well, more than several) posted responses without reading beyond the lead-in. If you're one of them, yes, the argument here is in the general ballpark of "software estimation is hard or impossible", but it actually says something more specific than that.

    The article does NOT say the following:

    1. software estimation is impossible
    2. objective software estimation is impossible therefore software estimation is impossible

    The article DOES say

    • Various software engineering authorities claim that objective software estimation is possible [paragraph 3, quotes on first page].
    • objective software estimation is in fact not possible [body of article]

    From this, it does NOT conclude either of the points 1,2 above. Instead, it concludes:

    • Software construction is inherently creative and subjective, having more in common with physics than manufacturing; software estimation is inherently subjective [conclusion, Bollinger quote].
    • Because software is used in the government, in vehicles, and other places where it can potentially have a negative on people's lives, we (software writers) have an ethical responsibility to not over-represent our ability to estimate (especially when it comes to estimation of software quality- r.e. correctness claim in the supplementary material).

    Now some of the response posts, paraphrased:

    • "The article says that estimation must be objective rather than subjective"
      No, it does not say this.

    • "The article says that subjective software estimation is not useful"
      It also does not say this.

    • "The article says that we are looking for exact answers, not estimates" or "the article doesn't understand what `estimate' means"
      No, the article distinguishes subjective and objective estimates, and specifically discusses the case of an objective estimate with bounds in detail.

    • "People/organizations can make accurate estimates, I made one last week" or "Estimation is hard, I double my estimates and still miss them".
      Ok, but slightly off topic: the article is specifically talking about those who claim objective estimates.

    • "You can do objective estimation, and I did it last week using COCOMO"
      And where did you get an objective estimate of the complexity of a new project? Read the article...

    • "I think I'm the only person who has read this far".
      Yes, you are. Your boss is monitoring you, get back to work.

    • "Software estimation needs common sense, not advanced mathematics."
      Certainly. The 'manufacturing' camp of software estimators (Humphrey quote in the supplementary material) say or hint that software construction can be made into a repeatable, fairly boring process where projects are always on time and programmers are like factory workers. This may or may not be true (I don't think it is), but regardless: to make this view seem more science than philosophy some of these people have fallen into the trap of cloaking their estimating process with formal notation and claiming or hinting objectivity. This part is wrong.

      On the contrary, [conclusions to the article and the supplementary material]:

      Good estimation therefore requires experience and judgment. The software industry should value human experience, intuition, and wisdom rather than claiming false objectivity and promoting entirely impersonal "processes".