The Programmers Who Want To Get Rid of Software Estimates
An anonymous reader writes: This article has a look inside the #NoEstimates movement, which wants to rid the software world of time estimates for projects. Programmers argue that estimates are wrong too often and a waste of time. Other stakeholders believe they need those estimates to plan and to keep programmers accountable. Is there a middle ground? Quoting: "Software project estimates are too often wrong, and the more time we throw at making them, the more we steal from the real work of building software. Also: Managers have a habit of treating developers' back-of-the-envelope estimates as contractual deadlines, then freaking out when they're missed. And wait, there's more: Developers, terrified by that prospect, put more and more energy into obsessive trips down estimation rabbit-holes. Estimation becomes a form of "yak-shaving" — a ritual enacted to put off actual work."
Good managers get my best guess.
Bad managers get my worst case.
Horrible managers get my resignation.
Tag: WORKS4ME
Live today, because you never know what tomorrow brings
so, estimating time is a waste of time, but complaining about estimating time is not?
GET BACK TO WORK, MONKEY.
or Scott Adams quote goes here.
Business can't plan or talk to customers or have any strategy whatsoever without at least some estimate...that's just the real world. If devs don't give estimates, managers have to make estimates. If managers don't make estimates, business makes estimates. You want devs to do the estimating.
Because you have things that don't work as you expect, you have feedback to change the program, you have writing documentation and test suites, and your first gut instinct guess will expect very little of this, if you've been programming a long time. I've never overestimated with that rule, but I've only ever been really lucky to be within spitting distance of the time I thought it would take (just a little longer than I thought).
It really is a very inaccurate science, however, and management really don't understand it very well, in the main.
Estimates are useful for planning. It does not matter if it they are wrong when you use a tool like Fogbugz or another schedule forecasting tool. The tool adjusts the forecasts and allows planning 4-6 months ahead. Now when managers start holding developers accountable to their estimates in spite of any tool showing 15-40% underestimation, it is time to quit and find a shop that does not sacrifice as much morale and quality for making sure people predict perfectly of suffer. People do not predict well and it is not smart to use it against them.
If you can't, based on the available facts (the design, requirements, etc.) , determine how long it will take to implement a project then you need to find someone who can. And you have to understand that there ARE external factors you can't control and if they change, the estimates change.
And management needs to know that your estimates are based on specific things (the requirements not changing). Any changes to requirements, etc. will impact schedule
If your company puts the budgets into stone, that's a different issue.
UPS Sucks
Estimating is a crucial skill for developers. If you don't have it, you'll make bad decisions. For example, answer the question, "should I use framework A, or should I write some code myself?" If you can't estimate how long it will take to use the framework and compare it to how long it will take to write the code yourself, then it is impossible to make a realistic decision. Similarly, "should we write the code using method A, or write the code using method B?" If you don't know how long they take then you can't make good decisions.
This is a trick I learned from agile (although I'm sure it's been around longer than that). Each time you make an estimate, pay attention to how accurate it was, then next time adjust and make a better estimate based on that. Estimating shouldn't take much of your time.....if it does, then you're doing it wrong.
These guys seem to be complaining that their managers aren't doing anything with the estimates. Which probably means they don't understand what the managers do (but it could also mean their managers are bad).
"First they came for the slanderers and i said nothing."
Seems more like a problem with shitty managers thinking they know tech because they bought an iphone than a real issue that needs discussing. Competent dev leads will give good estimates, and competent managers/higher ups will know that sometimes things take longer than initially thought at the outset of a project. If I told my boss something will be done by thursday, and it takes til friday, it usually isn't a big deal. But If I told him it was going to be done thursday and its done in 4 months, either he didn't understand the scope of the project, or Im a shitty dev that needs to be fired. Have communication skills about work really devolved so rapidly?
The same thing can happen in any line of work. If a business presentation is taking too long, why is it?
Estimates are necessary, so that you can determine project cost and (sometimes) duration. However, most projects succumb to my amended Parkinson's Law which states "work contracts or expands so as to fill the time available for its completion" .
My UID is prime!
Joel Spolsky has a take on this problem, called Evidence-Based Scheduling, which tracks past estimates against their deliveries, and uses that to improve future estimates.
I've worked on a lot of software projects that delivered the original specified product on time. Sometimes the target changes, and the stakeholders need to be willing to give developers the extra time they request to meet the new objectives. Too often I hear, usually from upper managers, "We are still shipping on schedule. Tell the developers to work harder." Of course, that's not realistic, and the result is a predictable "failure to deliver." Alas, the developers get blamed, when it's really management's fault.
On the flip side we have so-called "agile" development teams who simply define a deliverable as whatever they've completed on delivery day. These developers rarely tell management until the 11th hour that what they're going to deliver is below spec. Agile development has its strengths, but this aspect is a giant weakness. The solution is not to eliminate schedules. It's to adapt them to changing conditions and be proactive about slippages.
The amount of time it will take to complete a project is inversely proportional to the perceived difficulty of the project. This also applies to tasks and deliverables within the project. The project that you think will be easy and fast will be neither. The project that you think is going to be a tangled nightmare will turn out to have some surprising shortcuts and simplifications that make it not so bad.
Part of this is the stupid human trick factor - if we think something is going to be difficult, we approach it differently and with more caution. As a result we're more able to identify things to make the project go smoother. Conversely, if we think something is going to be easy, it's because we've only determined one path to approaching it, and if that path turns out to be non-viable, we have an immediate delay as we scramble to find other solutions that will work.
There's also the psychological factor at play for the customer - if we say something is going to be ghastly and difficult and will take us a long time ( because we think it will) but then turn around and deliver it ahead of schedule and under budget, we look good and feel good. This does not work if you say something will be ghastly and difficult but secretly think it will be easy and fast, however.
Occasionally living proof of the Ballmer peak.
i take half of what i think it will take, then up the units.... 4 hours = 2 days.... 4 days = 2 weeks. 4 months = 2 quarters.
1. Wild Ass Guess
2. Disappoint You Now (overestimated)
3. Disappoint You Later (underestimated)
The key problem I see are that devs in general don't use waterfall whereas managers do. Reconciling those two mindsets is not possible.
Devs working like maniacs to meet an arbitrary deadline that may or may not leave time for critical path objectives is just as bad as a manager stuck at a user conference with nothing to show for the 2nd year running.
How could it ever be possible to we bring those two things together?
https://www.youtube.com/watch?...
You didn't tell them how long it would REALLY take did you?
your thin skin doesn't make me a troll
...Software project estimates are too often wrong, and the more time we throw at making them, the more we steal from the real work of building software...
...developers' back-of-the-envelope estimates...
From the above two quotes, it looks as if the author does not even know if too much or too little time is spent on estimates.
.
No wonder his managers are frustrating with the time estimates provided. The guy has not a clue.
Programming is basically research and development You are building something which has never been built before. As such how do you estimate something if you have nothing to compare it to?
Actually though I have a limited amount of experience using Function Point Analysis. Some of the aspects of it are old, it was created before web apps became pervasive, but that doesn't matter. The principles are the same and there are dimensionless constants you can use to tune the FPA model to your organization. Eventually you end up with an empirical model of your programming team, development environment, tool suite, management efficiency, complexity of the problem domain, people quitting or dying, etc. You need to avoid over fitting however and recalibrate from time-to-time.
Agile keeps story points and velocity which serve the same purpose as the dimensionless constants of FPA. Unfortunately managers try to translate them to mythical man hours. But if you keep velocity or function points, whether you are using Agile or not, you should be able to get some idea. You have to be a bit scientific about it.
That and 'T-Shirt Sizing' is about as good as it gets.
putting the 'B' in LGBTQ+
Almost all project that I've done in Agile are on budget, on target.
The trick ? Prioritize the most value added feature and do so until the end of the backlog. When the time's up arrives, you got the most valuable feature on the product. Even the bugs caught while developing are prioritized.
The end product will be near of what the customer was expecting. As a bonus, the modification asked by the customer in the middle of the dev is also prioritized by the value added to the product.
Totally agree. I got so fed up of having to give estimates on things that can't be estimated that I just started giving ludicrously large ones to get them off my back. Turns out they just accept whatever I tell them and my life is now really easy. They don't complain if I deliver early either so it's a win-win. It's not like they can say "It shouldn't take you that long" - I'm a programmer and the one doing the work and even I don't know how long it'll take so bugger knows how they're supposed to know. Just tell them "well if you want it done right..." And then if they say they don't care, ship the rushed buggy pile of crap. You told them so and they'll accept any estimate you give in future.
I have similar feelings about estimates in my work: It's never accurate, so why bother. Of course, I understand we need estimates.
I wish I had some training in how to make good estimates.
Recentely, I've been giving my managers a range: between 1 and 3 weeks for this feature. Half a day up to a day for this bug fix. Of course, manamament just takes the average, add ups the numbers and doesn't tell the client about the probability distribution.
assignment != equality != identity
I always here that software projects are often late and over budget, but I don't think it's worse than any other industry. I've seen countless examples of construction projects that ran over budget and took longer than expected. Often the reasons for this are the same. Either the requirements changed halfway through, or the project was made more complicated than it needed to be to accomplish the task. There's a few bridges in my area that have been huge boondoggles in the past decade, and they all try to look impressive, where a much more conservative design would have be easier, cheaper, and faster to build, and still would have solved the transportation problem. But everybody wants a bridge that looks pretty.
Projects that deal with a small workload and don't have changing requirements are much more likely to stay on budget and on time. This is how things should be broken up. Build small pieces and deliver the pieces as they become complete. Don't set out to build an entire 5 year task as a single project.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
wait... you're not an idiot? this site is for idiots only. maybe try out hacker news instead.
I've got to have 30 minutes! -- Scotty
(Of course, that's really 15 minutes, since a good engineer always allows some slop.)
On the one hand, it's pretty much impossible to do any project planning with no estimates.
On the other hand, some things are impossible to estimate until you do them.
Years ago I worked with a manager who kept repeating that bad estimates were a project risk and we should give good estimates. We kept telling him that an estimate is, by definition, based on incomplete knowledge and before you have done the work and that if he had a time machine we could give him better estimates.
If I knew exactly how long it would take, and what unforseen things I'd be running into ... it wouldn't be a frickin' estimate, now would it?
People treat estimates like you're expected to have perfect knowledge of the future, and then build their world around those estimates.
I have seen a tremendous amount of bullshit and stupidity from people who do not understand what an estimate is, and how it's done.
I don't think you can get rid of estimates entirely ... but management needs to stop being so stupid about how they interpret them.
If we could tell you for a fact exactly how long it would take, it wouldn't be a fucking estimate.
I rank how people do estimates right up there with how some PMs want you to track your time ... once had a PM say he wanted me to account for my time in 5 minute increments. And I told him in no uncertain terms that would mean 2 out of every 5 minutes would be spent documenting what I'd done the last two minutes, and there would be an additional 1 minute of lost time in each 5 minute increment doing to context switch back to what I was working, and that effectively 60% of my time would be wasted on his stupidity.
And then I told him to piss off.
Lost at C:>. Found at C.
Research into procrastination has noted that people have much less concern about their future selves than their present selves and are willing to sell their future selves down the river for the sake of present ease. But when the present marches into the future, and we are confronted with the work that our past selves refused to do, we pay the price in unmet deadlines, all-nighters and general torment.
http://www.nytimes.com/2015/01...
The result becomes one of people providing estimates that allow them to screw off in the present and postpone the agony of late nights, weekends and looming deadlines for taking it easy today. This seems to always happen in our organization. A current project has had the hardware in place and ready for the teams to load their software on and configure the system for 6 months, but they waited until 3 weeks before the project is due to start and now they are changing the project design to make it easier on themselves in the present as well. Estimates = wasted time. Just do it.
[Bad] programmers argue that estimates are wrong too often and a waste of time.
FTFY
Part of being a software professional is understanding how long it takes for you to do things
If you don't know how, go read a book. It's not hard. The money that's used to pay you depends on your estimate being somewhat correct.
Imagine how upset you would be if you asked for your paycheck, and payroll said "we're not sure when we're going to pay you, but it should be sometime soon."
I used to tilt at this very windmill myself. It took me a long time to realize that people really, really need to hear an answer to "how long?". When we were in startup mode a long project was a matter of a few weeks. Everything had to go into production immediately. So we got used to banging stuff out in small chunks and doing it as quickly as possible. Entire project timelines were completed in less time than it takes to draft a proper requirements document.
But as we grew in size, the new people were not happy with our development team. Even though they would ask for a new report at 10am and have it in production before they returned from lunch, they still felt like we were not responsive. It was one of those reports that began to help me understand the psychology.
There was a problem with a very complex Crystal Reports document one morning. The Director of the department called to let us know about it. I told him we were already working on it and would have it fixed as soon as possible. "When will it be fixed?" he asked. Well, I had no clue. We had only learned about the problem 10 minutes before and hadn't figured out what was broken. So I explained this to him and told him that we had this as our top priority and it would be fixed as quickly as possible. I certainly thought that should make him happy. Well, it didn't.
He was rather pissed that I wouldn't give him a timeline. The day before we had made some changes for him that took about 2 hours, but he was upset that we didn't let him know how long it would take. Being an engineering type, when I hear "how long will this take?", I hear a request for a certain degree of precision. The problem with short projects like this is that by the time you have enough information to give an honest estimate, you are pretty much done. Maybe you have 15 minutes or an hour to go, but nothing worth reporting to anyone. Well, after explaining my position a few times and just making him more angry I finally gave up and just gave him a made-up deadline of Thursday afternoon. He was perfectly happy. I had just spent 15 minutes trying to explain to him that we were working feverishly and would be done as soon as we could (which would likely be a couple of hours, but who knows) and he hated that answer. "We'll have it for you in 3 days!" made him very happy. Even though his production was impeded by the lack of this particular report. From a human psychology standpoint he would rather know that it will be done in 3 days, barring delays, than not know when it will be done and have it in two hours. I personally think that is a dumb way of doing things, but I am the outlier, not the director.
After that learning experience we began implementing a more comprehensive SDLC process and providing timelines for projects. Everyone was much happier with the development team after this. Even though their projects went into production much more slowly. They loved the perceived control that having a timeline gave them. We developers know that these things are basically fictional documents - just educated guesses really - but it provides real customer satisfaction, so we keep with it. In fact, we kept evolving this idea into more and more involvement from the business unit as we moved into Agile and SCRUM methodologies.
I would say that unless you are working in an organization of less than 25 people, providing timelines is an absolute requirement from a purely human standpoint. This comes from hard experience - even though I think that everything about a timeline is probably B.S. and all of the effort that goes into preparing one would have been better spent solving problems and building something useful. In the real world you can't ignore the psychological needs of the group.
Just make sure you multiply your estimates by a factor of four...
If you need an estimate real bad, you'll get a real bad estimate.
The real problem with "time writing" is that people end up lying on the reports to meet goals or metrics and then the estimates created from that data are useless. Managers want both though. They want accurate estimates AND time tracking that meets productivity goals. Sadly their productivity goals would require robots to meet...
Yes it's an anecdote! Were you expecting original research in a Slashdot comment?
I was a manager and never missed a deadline. It really isn't that hard. Most people fail because they do it the wrong way. First give no estimates until you have developed a good picture of the global architecture and have some bare bones functionality running. This takes about 1-3 months of your team, but well worth the effort. Then keep an eye from the very beginning on who's falling behind, and move resources around to support the people who ended up with more than their fair share. Assign a medium size portion of the project to your senior developer(s) so that they are available near the end to go and help in those areas that turned out to be gorier than predicted. You cannot bring people from outside since it takes them too long to ramp up as obseved by Fred Brooks. This is why you use your senior people: they know the whole system and can jump in in any part***. Stand firm in your refusal to add features and lastly, near the end, drop any minor feature which gets postponed to version X.1.
Most costumers are happier with a version in time with 95% of the features than a complete version three months late.
Also be realistic with what means to be in time. If you take three years to develop a system and you are five days late, you were off by 0.5%. Any one who tells you in this case that you were late is just mathematically innumerate. I was never more than a week late, but I'd dare say that even an error of 5% (which for a three year project is seven weeks) should not be considered late. Forecasting is an imprecise science afterall.
Oh and one last thing, there is one estimate you tell the team and there is another one in your head. So the goal is "we run as hard as we can to finish by May 10th, so that when sh*t happens (which always does) we make the real June 1st deadline (which you always keep secret so programmers don't budget for it.... you know, work expands to fill allotted time).
*** Stu Feldman, a Unix principal was used this way, according to Ritchie. Stu didn't fully own a single component of Unix but his code is everywhere, doing central things that had fallen behind and were passed on to him.
Let's say you've figured out pretty well how long something will take and you give your realistic estimate. The game from the managers then becomes, "That's too long, you need to give a more realistic deadline."
This pressure on the other side is often why developers set deadlines that are too short and then miss them. The penalties for that are less of a problem if you come off as sandbagging (even when you aren't). Managers who have no clue what the complexity of the problems trying to be solved not trusting developers are the real problem.
but the changes that aren't considered "features" or "are in scope" that some how get approved into the project time - without any care to the impact it has on the overall timeline that was laid out. Everyone whose been in the industry knows this scenario all too well.
Time to read Edward Yourdon's Death March again (in one right now)....
They have to cover every detail and be iron clad. But by the time you've come up with all of these specifications, most of the work is already done. So how do you recover the cost of an estimate if the other party says no?
I came from the web development world as a one-man department of a larger computer store. Quoting projects was an absolute nightmare and the specifications always changed even when they somehow manage to fit the definition of the words in our estimate.
Estimating the time to complete a programming task is simple, if you have any experience with programming.
Estimating the time to complete a programming project is almost impossible, unless you have a clear understanding of what tasks make up that project, and requirements that do not change throughout the project lifecycle.
having done this for a bit I can say this:
when I know what the scope of work is very well or exactly (e.g. add another module similar to the 30 others in the system to support a new model of x) I can estimate correctly 99% of the time,
when I am given a vague hand wavy requirement from a manager or user who really doesn't know what they want my estimates are WAG's at best
sadly the latter are far more common the the former, knowing this I am always very pessimistic on the estimate (double or triple what I really think). As a result the managers always say - that's way too long, we'll give you (roughly what I actually thought) and then they are surprised that it's never "done on time" after the scope creeps and requirements change a dozen times during development. I may give them exactly what they asked for, on time or early, but since that's not whats really needed it's not "done", then I'm the idiot for getting the estimate "wrong". The problem is less an inability to estimate than it is an inability to correctly identify the problem and spec a requirement to solve it. In those cases estimates are a fools game. I have tried to explain this over the years with mixed success.
It's not about estimation, but about the odds of being on schedule:
P=(1/(2+2M+3PM+4D))
Where P is the chances it will be on schedule, M is the number of managers of other areas involved, P is the number of project managers involved, and D is the number of directors involved.
You might adjust your schedule accordingly, but the equation oddly seem to be time-independent.
Is this real or maybe my english reading skills are not good enough to understand it.
Incorrect estimates are the problem. When non-experience people estimate, or when management force to under-estimate that is the real issue.
Estimates are necessary in software development, but of course that "estimating" sucks just like "deadlines", "taxes", "death", "breaking up with your girlfriend in person", "no wifi", "cancer", "divorce" and many other things.
I have a solution, why don't you go to your boss and say "Estimating sucks, and I would not do that because I don't want to compromise any time. So you can "Estimate" my monthly salary according to whatever deadline we will never accomplish".... that sounds fair.
Take your best guess. Multiply by 3. Done.
It's just an excuse to get rid of deadline.
Peter Molyneux is that you?
By definition. When you look at our current corporate culture, you know it has to be. For a simple reason: Companies bidding for jobs. And more often than not, the cheapest offer gets the deal.
Who is the cheapest? Usually the one that cut the most corners and underestimated his cost (i.e. time) to deliver the most.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
He was a wise man...
Serious? Seriousness is well above my pay grade.
Often the estimate includes an estimate of how many times the client will change something or whatever. And really THAT has to be made a part of the estimation system.
Estimate a time if they basically don't say anything more and provide required information promptly.
Then say ANY change to that what so ever is going to change the estimate in UNPREDICTABLE ways because you don't know what they're going to do.
Here someone is going to say that this is well understood and that developers deal with this all the time. I'm not saying anything else. I am saying that you can't estimate projection completion times with that variable because it is totally unpredictable.
I've decided to stop wasting my time responding to AC trolls/sockpuppets... so if you want a response from me... login.
As many have already said, you need estimates in order to plan and strategize. How can you even begin to assume that a work effort is worth undertaking without being to calculate even the simplest economics related to the project?
Having said that, the problem is what seems to happen to the estimate after it's made: it magically becomes a guarantee in many of the minds of those that want to do things like hold people/vendors/etc. accountable. An estimate is not a guarantee. It's a reasonable and educated guess which may be wrong. It's a target that you should try to achieve, but not at the expense of compromising the intent of the project itself.
Rather than avoid estimates, also develop a 'bail point'; the point at which exceeding the estimate (or the increasing risk thereof) becomes too expensive relative to the benefit the project is intended to bring. Initial estimates are often time revised with better information as the project rolls along and doesn't need to be a terribly expensive process in its own right so long as proper perspective is kept. It is absolutely fair game to then investigate if the failure and overages are due to legitimate unknowns and circumstance or just incompetence; something that blowing the estimate won't tell you by itself.
Engineers think project managers and deadlines are a waste of time and a pain in the ass, while project managers think they are essential. Now that's what I call news! Whodathunkit!
This is business. Management wants to quantify everything to manage resources, manage spend, control cost, maximize profit, etc. It makes perfect sense at the same time that it doesn't really jive with how engineering works a lot of time. One thing for developers to keep in mind, though, is that *doing* something is never as important as *telling people* about how you did it. Metrics mean way more to the people who sign your paycheck than the code you write does and you should design your metrics accordingly.
The other component is PMs themselves. How many really good PMs have you worked with in your life? Grand total of 1 for me. Most PMs are people who don't really understand technology and have created a whole system of super-important metadata to "add value" to the process. When it's done properly a PM can help a lot, but mostly its just blustering and wasting everyone's time. These people want to protect their jobs, and their jobs are defined by timelines and metrics.
Estimate how long it'll take, multiply it by 4 then you'll be a miracle worker when you get it done earlier.
I tell my clients that every project is a voyage into the unknown. The alternative is off-the-shelf software. We wouldn't be doing a project if we could just buy a solution.
I have found that experience is the best foundation for correct estimates. After a few dozen projects, it gets a lot easier. I guess that's not much comfort to people who are just getting started.
When I was new to the development life style, I found that the best result came from doing the best job of scoping that I could, estimate that, then double it and add 20%. I know this sounds like a joke, but it's not.
I estimated 40 hours once for a complex vision system project. After completion manufacturing went from a 5-10% SHIPPING defect rate on a display to no defects. I completed it in about 55 hours. Our customer was very happy. Our accountants were not. I was called in and repeated asked why it took so long.. and I had to answer to an accountant. I had to repeat over and over again that "it took 55 hours to complete". There is no other answer. This was also in the early 90's when vision systems were in its infancy. Management could have probably examined my work and filed a few patents on it. Instead I was forced to waste my time with an accountant.
To be honest I probably programmed less than 40 hours on the project but I was also responsible for procuring the camera equipment and getting the mechanical details correct and I thought I should charge it to the project - there was no way to break parts of the project out - and I am not great at mechanical details so I am not surprised that I did not do that instantaneously like management would have liked.
How does somebody doing complex technical work answer to some pen pushing dimwit that is probably spending its time reading Facebook and exposing the company to fishing viruses???
I've lived Dilbert and it still makes me puke when I think about it all!!
I have found that the best middle ground is to work with the developers and project team to set deadlines and project milestones. While down to the tenth of an hour estimates are not necessary, there have to be goals to hit.
The best managers are going to let the developers provide their own estimates, and then calibrate the timelines accordingly. Some people are good at estimating time. Others are horrible at it. The project manager needs to know their team well enough to account for those factors.
The of thumb that I have always worked with is double the estimated time. Under promise and over deliver. This does lead to some grumbling up front, "It is going to take HOW long?!" But after successfully delivering ahead of time, enough times in a row, people come around.
The biggest challenge is keeping people honest. Some people have a hard time admitting that they are not going to make a deadline. It is important to give those people room to fail, so long as they are responsible about it. "This deadline has some flexibility, as long as you give me 48 hours notice that you are going to miss it. Don't come into my office the day I am expecting a deliverable and tell me that you need another week."
The other side of that is having to be a good manager, and push back on the business team to give the developers room to work. "We told you we would deliver it by X and we are still on track to deliver it by X. STFU you about your cranky client whose expectations you cannot manage despite us being explicitly clear with you about what our timelines are. And no, we are not going to add that extra feature that you promised them but failed to include in the scope."
The city announced work on a new interchange involving the major arterial road running through the city, significant delays are expected while construction is underway.
When asked for a timeline on when the construction would be completed the lead engineer answered "Who knows? We generally underestimate these things by months or years so I might as well not bother."
Work is expected to commence sometime after they finish their current set of maintenance roadwork.
Good night, this was your 11 o'clock news at 11:23 because we needed a little more time to finish writing our stories.
I stole this Sig
Use your estimate precision as a bargaining chip for things your need. Typically what impacts my estimate is requirement uncertainty. So give an estimate with an error +200/-10% error. If we could just finalize these particular requirements my estimate would improve. This way a manager will focus on getting the requirements fixed.
I was once given a "project" and I asked for the requirements document. They said there are no requirements so I happily said great I'm done designing!
I love Jesus, except for his foreign policy.
I've been programming for about 30 years and it took me at least 20 years to learn how to make good estimates. If you can't estimate how long something is going to take, then you probably haven't been doing it long enough. I don't care what your field is, or even if it's engineering or not.
Programming is just like any engineering endeavor. Be a professional and admit that not every job is a weekend hack. If you work somewhere where you have to lie about work taking less time than it takes, then quit that job and go work somewhere else.
One difference between a so-so programmer and a great programmer is someone who finishes his or her work when he or she says he or she will. There are other differences, such as communication skills or lack thereof, but having people be able to trust you is pretty key.
Another way of looking at is this. Programming cannot be rushed. That doesn't mean tell people it will be done when it's done! What it does mean is learn to estimate the worst case scenario. You will not be punished for writing a great piece of software and finishing it a few weeks early. You will be punished for saying it will be finished by a date assuming that nothing will go wrong at all and that you are some kind of programming genius, better than every other programmer out there.
Consider this example. I think I might be able to finish something in a week. The estimate I give is two weeks. Another programmer typically says a job of roughly the same magnitude will be done "in a few days." I have given myself plenty of time to do the job right, and extra time to fix bugs and possibly deliver the project early. The other programmer screwed up and it does take him a week. After a week, his work has tons of bugs. It goes out to production and every one of those bugs is embarassing and takes man days to resolve, rather than a few man hours. I've seen this scenario happen many times. Programmers fall into this trap of their own making. Maybe it has something to do with machismo. Stop pretending to be more manly or smarter than you are and be a professional.
Find a compromise between predicting too much of the future and just managing a project by the seat of your pants; get into a rhythm where you check how good your estimations and learn to get better at them.
Of course you can't develop every project this way; I've used Agile and it's worked for me. I've used waterfall and it's worked for me too. You have to try to be sensible; you can't completely wall of other people's need to know when you'll accomplish certain things, nor can you build a solid plan based on pure speculation. You have to have an intelligent responsible way of dealing with future uncertainty, a plan to cut it down to size.
I've even had the good fortune at one point of winning a $750,000 grant to build a system for which no firm requirements had been established. It was kind of an uphill-flowing waterfall: we knew how long it would take us and how much it would cost but we had no firm idea of what we were supposed to build. If that sounds like a recipe for disaster, it was; but my team was *successful* and built a product which was still be used and supported over a decade after the grant finished.
What's missing from many programming estimates is honesty. It's a matter of ethics; you can't take people's money and say maybe someday you'll deliver something useful to them. People don't have unlimited time and money to accomplish all the things that need to be done in the world. It's an honor being entrusted with people's aspirations, and a serious responsibility. It's hard, even nerve-wracking, but you've got to care enough about the impact of your planning on other people to make the effort to do the very best job you can.
And what I've found is that if you do make the effort you can do a surprisingly good job of estimating a project if it's in an area and with technologies you're reasonably familiar with. If you look closely your specific predictions will often be way off, but if you care enough to be brutally honest the pleasant surprises tend to balance out the unpleasant ones.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
I run into this all the time.
The company I work for makes lump-sum-bids for design, construction, programming, and commissioning projects.
We define supplier scope, purchaser scope, explicit exceptions, cost, and schedule.
And we deliver it. The Clients are happy and we make a profit.
We also do T&M work: We offer excellent folks who will do--within the bounds of ethics and competence--whatever the Client asks.
And we deliver them. The Clients are happy and we make a profit.
Mixing the two is not a good idea. If you need to know the cost and schedule but haven't nailed down scope, (or can't take the time to do so) something is wrong. Either you want something for nothing or you're looking for a fall guy for the project you've already driven into chaos.
In the rare instances where I've tried to "help out a guy estimate something", it's come back to me as "We Agreed..."
There's no profit in that for me; and it pisses off the Client when they discover no, you can't have a pony.
There's just no reason to do it.
My favorite estimating tool of all time; it was going to solve all of our problems.
My manager explained it to me: I was to tell her how many lines of code it would take to complete the project and tell her what our lines of code per hour productivity would be during development, then she would use this amazing tool to calculate how long it would take.
Estimates are easy. First you have to be familiar with the code base and business process. That takes neighborhood of a year. That's why most programmers are bad at estimates. Coincidentally it's also why so many projects fail.
Give your estimate, but also give the variance on that estimate. If it's low, they will ask why. This will lead into the technical barriers and uncertainty discussions, which is really what the business types and PMs need to do and don't do enough of.
In debates about Christianity, there are two groups: those looking for answers, and those looking to just ask questions.
This is a matter of communication. These numbers should serve less as a prediction and more as an allotment. Instead of "what is the estimate for this task?" the question "what is the budget for this task?" is far more accurate and manages everyone properly.
Any initial estimate will go to hell quickly. The important thing is good communication between managers and developers to mitigate the effects of slip and to continually update the estimate.
If the developers know by the 2nd week that they're already behind because difficult things were glossed over initially, then they need to feel comfortable telling the managers rather then pretending that they'll catch back up. And the managers need to understand this type of communication is beneficial and not just get angry about schedule slip, disincentivizing further communication.
Correspondingly a good manager will aggressively probe intermediate milestones.
Manager: "Feature X should be be done now. "
Developer: "Yes."
Manager, "Show me."
Developer: "OK! But we first need to update the front end to reflect the new data model."
Manager: "So Feature X is not done."
Developer, "Well, no."
You can't have an estimate without knowing exactly what you will be doing. Finding out exactly what you are doing is also known as the design phase. It is the highest paying part of the project and can easily be 50 to 90% of the whole project. But they want the time estimate up front...
Once given, they will want to stick to the estimate as if it was carved on stone tablets by Moses.
If the project involves replacing of interfacing with a legacy system, or for that matter gathering requirements from people you don't know yet even estimating the design phase timeline can be a problem.
If it requires anything that can be described as experimental, you need to perform the experiments before you can commit to a timeline. The estimated time to do the experimentation will be even further out of the question if there is any possibility that one result could lead to an additional experiment.
Kirk: How much refit time before we can take her out again? Scotty: Eight weeks, sir. But ye don't have eight weeks, so I'll do it for ye in two. Basically, we will be violating every safety standard in star-fleet, and there is a 20% everything will blow up completely leaving us stranded in deep space w/o power.
HA! I just wasted some of your bandwidth with a frivolous sig!
Precise estimates in my opinion are a farce. I found myself ritually padding my estimates by 20% just to add in a bit of time should things not functions. In some cases, this bought me time I could use on my own projects are just checking out the scenery at the companies I worked with (I love women). Other times, it bought the time I needed to complete what I did and fix unexpected problems which arose.
In any case. For personal projects and 'the engine'' type projects - things like Operating System work - having no estimates works out perfectly, right? With no deliverable other than increase performance and make the thing 'more fun' for you and others to drive and/or work with, it works out well.
If I were running Microsoft, for instance, I would throw some developers and pay community members to support prior versions of the OS - by tweaking and playing with what they want to - the goal of 'having fun' and working with community members - and convert incremental updates into a monetized subscription based revenue stream based on 'best of' releases' and services that can be offered for it. And ANYTIME I saw a new area to shift into with a truly revolutionary OS model - Virtual Reality offers precisely this game changing model , that's when I would throw my development staff into developing a new OS, and work with the community to plan out an upgrade path. This evolution would most definitely require deliverable dates and estimations, for the simple reason the community may be committed to the change.
Outside of Operating Systems though - for a real tangible deliverable. Estimates don't have to be evil. But they do make it easier for others inside and outside the organization to 'play nice with developers' - particularly in team based environments where there's clear dependencies.. Not only that, when dealing with customers, it's especially nice to have a solid timeline established for alpha/beta and release versions so the PR people talking to the community don't find themselves backtracking because of poor time management decisions..
It's a clever balance, right? But in my opinion, as a homeless guy I can easily function without dates and times because - let's face it - no one depends on me nor does anyone seem to really care. Now I burned out of IT because of mismanagement - I blame mostly myself. I am actually working on my own development project - and have created my 'realistic' personal development estimate to 7 years for development completion.
Now if I was dependent on money, which I am not and don't care about it anymore, or if I had any external pressures - that time for production might actually shorten. but now that i have 'all the time in the world' and NO financial responsibilities nor desires to enter the madness of the corporate world again, I can develop this project on MY timeline.
But to be sure. I STILL have dates and times for my own deliverable. To function without personal dates and times is an exercise in insanity in my opinion.
My experience has been that management comes to the developers for estimates. They provide those estimates to the end users. The end users bitch, whine, and complain that they need it to be done in half that time.
Management then comes back to the dev team and tells them they've agreed to get the project done in half the time that was estimated.
Then both management and the user community bitch when their "estimates/targets" aren't met, and who is blamed for the issue?
The developers.
The developers always are to blame for computer problems, never the bad specs, the conflicting specs, the unknown variables, the use of "new technology" that some vendor flim-flammed onto the department/team, or anything or anyone else.
Screw 'em. Now that I'm retired, I'll never have to give anything more than the most vague ballpark estimate of how long it will take me to do something ever again. Instead, on my pet project, I just bullet point some of the things I intend to work on next -- and even that is subject to change. The lack of stress and the freedom to live my life according to my own whims and needs has proven an invaluable source of improvement in my "quality of life."
What a shame I've never encountered a job that would let you do that.
I do not fail; I succeed at finding out what does not work.
nt
I doubt management will blink an eye when they demand a ferrari built from scratch for $5000.
Humans don’t want accuracy; they want reassurance. The Nobel laureate and retired Stanford University economist Kenneth Arrow did a tour of duty as a weather forecaster for the U.S. Air Force during World War II. Ordered to evaluate mathematical models for predicting the weather one month ahead, he found that they were worthless. Informed of that, his superiors sent back another order: “The Commanding General is well aware that the forecasts are no good. However, he needs them for planning purposes.” Source: JASON ZWEIG, WSJ http://www.wsj.com/articles/le...
If you want to call yourselves "engineers" without everyone laughing at you there is a need to do things like be able to schedule projects and not be afraid to put in conservative estimates for unknowns instead of what you think the boss would like to hear. If what it takes is a small pilot project to get even a vague idea of how long the real project will take then that's often a more acceptable option than stumbling in the dark until whoever is funding the project runs out of patience.
So, do you guys want to be like (or actually be) engineers or do you want to "shrug" on the job you are supposed to do and leave the time estimates to people with far less of a clue than yourselves. The latter way leads to "death march" projects and nasty ambushes where dismissal for lack of performance can come at an unexpected time simply due to others having no way to measure whether the progress to date is up to expectations or not.
Don't be afraid to take so time out to plot out a timeline and list dependancies instead of giving your boss an instant guess. An answer of "I'll have an extimate by time X" is far better than an instant wild guess of "finish the project by date X" before you've even checked who is available to do the work.
I disagree - no budget is going to help with time dependant issues or bottlenecks that cannot be "bought off". The most famous and trivial example is bringing a child to term - not happening any faster with ten mothers. Seasonal conditions are another. Production capacity of suppliers is another. Availability of staff is another. I'd say it's only really a major factor when comparing with projects with inadequate budgets.
Run three shifts and some time problems go away but not all of them.
"On the flip side we have so-called "agile" development teams who simply define a deliverable as whatever they've completed on delivery day. These developers rarely tell management until the 11th hour that what they're going to deliver is below spec. Agile development has its strengths, but this aspect is a giant weakness. The solution is not to eliminate schedules. It's to adapt them to changing conditions and be proactive about slippages."
The PO is supposed to be aware of this at least on the sprint level, and if necessary communicate with the client. Furthermore one of the tenet is that the team is responsible,m and responsibility is to warn that the spring goal may not be reached and draw consequence on it for next sprint goal (make them less big etc...). Which also means since you are delivering on the atomar level of a sprint, that it is known sprint after sprint how the evolution of the project is by the client. Now if you are speaking of telling on the 11th hour on a SPRINT level, well Yupi-doo. Compared to most project which tell goal will not be met at the 11th hour before delivery of the FULL project ?
C. Sagan : A demon haunted world:
http://www.amazon.com/gp/product/0345409469/
visit randi.org
It just takes a little training and practice. The trick is to divide a project into pieces (bullet points are sufficient) where each item takes two days or less to do. If a line item is estimated to take longer than two days, it needs to be broken down some more. At that level of granularity, it's possible for most programmers to make a reasonable guess as to how long that item will take.
Put another way, it's more important to count the line items, than to count the hours. The trick is to get the line items the right size.
Steve McConnell's book does a good job explaining how this works.
There are definitely times when estimates are appropriate in programming, but the more unknowns there are inside a project, the more you need to nail those unknowns down before estimating is worthwhile. Sometimes, prototyping should be done without estimates.
set softtabstop=4 shiftwidth=4 expandtab nocp worlddomination
But it's so easy to make a good estimate, takes less than 10 seconds:
Take your instinctive estimate.
Double it.
Increase units by one (if you think "hours", make it days. If you think "weeks" make it months, etc.)
So if you think it'll take 2-3 days, tell your manager it'll be ready in 4-6 weeks. Don't forget that in management school, they teach these fuckers to under-promise and over-deliver. He understands.
Assorted stuff I do sometimes: Lemuria.org
Getting rid of estimates is the wrong approach - of course. What companies need is a clear product, pipeline and system strategy. Have that, and estimates are trivial.
If I know I have a set of servers and they all run system X and toolkit Y and management process Z and I'm hired to handle XYZ and we/I have optimised my skills and toolset for said chain because we've chose it as our strategy, I can give estimates that are precise to a margin of half an hour per week of project time on the drop of a hat.
However, give me deciders and/or co-workers who don't have a clue and make decisions way out of their league that I have to follow on, shitty testing and deployment, 10$/hour students making core system decisions, local servers I have to salvate from a junkpile and decisions on what system we're going to use in the next project based on what software the custmers drinking buddy had heard of and was rambling about after 7 beers half a year ago on their last pub tour and my estimates will be just as shitty as your decisions.
Leave me out of the loop until the very last moment and then barge into the door with some system I've only looked into for 15 minutes in the last 10 years and my estimates will be based on how true the vendors describe their product in the flyer. And we all know how true that is.
We suffer more in our imagination than in reality. - Seneca
I'm not sure what all the fuss is about. My estimates are usually defined by our bid team before they ever get to me.
Except what usually happens is that a feature change will come along *AFTER* the design phase has already started, or else the requirements weren't unambiguous enough in the first place. Oh... and in the real world, at least in my experience, a developer isn't often in the position of being able to say "we can't do that", unless the developer is also very amenable to finding a different employer in the extremely near future.
This usually puts the programmer in the position of having to be a sort of prognosticator, and anticipating what the most likely types of design changes are going to be while doing development, and designing software that will be robust enough to accommodate such changes with only a modest increase in time spent, without losing any work on design that has already been completed. Sometimes, particularly with an experienced programmer, or one who really knows the people who are likely to make design change requests, and so may be able to predict what they are liable to really want beyond what was stated in the functional requirements documentation, this kind of forecasting is within the grasp of a human being to accomplish But it's never easy.
File under 'M' for 'Manic ranting'
Get an experienced developer and you will get a very good estimate in no time. But maybe they are NOT taking about estimates but absolute numbers? Those you can not get no matter what. I think the biggest problem is that the developer gives a good estimate and the project manager/customer/manager hears absolute facts and gets pissed when the numbers are a week off.
Start using version control, and at least undoing becomes trivial.
Bingo Dictionary - Pragmatist, n. A myopic idealist.
This post gets repeated about once a year here.
... or whatever your particular organization and SDLC model supports. And then, when asked to provide an estimate, communicate clearly as to which class of estimate you are providing. This isn't rocket science.
News Flash Developer types -- you are never going to see this in your lifetime. Estimates are a fact of life. Deal with it.
If you are in an organization that has a problem with turning WAG estimates into hard deadlines and then bitching when the inevitable unfolding of the project changes the situation is a large way, then protect yourself by learning to speak to the project managers in their own language.
Define some rough "degrees of certainty" around your estimating, and guidlines to the degree of accuracy you feel.
Class "0" (when the project is in the approval stages) +200% / -50%
Class "1" (when the requirements have been documented) +100% / -25%
Class "2" (when the work packages have been built out) +50 / -10%
Reason why there is hope for the future generation #364:
"I wish my grass was emo so it could cut itself."
Me: Because I'm not making a fucking cheese sandwich!!
Give me a range for each task and I can tell you how long the project will take with high certainty.
"This is a cultural thing. Asian cultures are strongly hierarchical: you always agree with the guy above you. Never argue."
That's an important insight. I often talk about that with friends.
Interesting.
You said, "... poor program management, lack of requirements management, and often also marketing-driven decision-making."
Overall, that is poor management of technical projects. The biggest single problem? Dishonesty, on several levels.
The first step in improving management is to get everyone to understand that there is poor management.
Any chance you are willing to share your SOW template?
I may do so at some point in the future, since there seems to be some interest in it. I would want to run anything like that by an attorney first, since I'm fairly certain it does constitute legal advice.
APK quotes people (including myself) without context and should not be trusted. Just thought you should know.