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.
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."
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.
People do not predict well and it is not smart to use it against them.
You can improve. Most programming we do is boring, and similar to something we've done before. For things like that, you should be able to make your estimates reasonably accurate.
Sometimes projects have large unknowns, and it's impossible to know how long it will take. In that case you need to propagate that information up to the people who need it, either managers or salespeople or whatever.
"First they came for the slanderers and i said nothing."
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.
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.
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?
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.
If non-trivial problems could be solved within a guaranteed time frame, then you'd have already have a doorstep delivery date for your starship. Good management can make sure that core features are delivered on a schedule and help ensure that the schedule is not actually impossible to meet. If the schedule is not lenient enough, then the best management in the world can not guarantee delivery while also providing a guarantee for stability, security, and performance. Were this a simple matter, then the service of software development would not be worth so much.
You have three choices. You can give me enough time to finish the project correctly and receive an awesome result, but you will pay for that extra development time. You can give me too little time to deliver a quality result, but you will pay me for patches. You can give me too little development time and opt out of paying for updates, but you will pay for it when there are problems. Choose well.
There's a very old, very over-used saying about technology that people must be forgetting. It comes with three possible qualities: good, fast, and cheap. You may choose two.
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.
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.
No, it's a very common problem in engineering in general, and not unique to software. But the reaction "let's eliminate estimates" appears to be.
As an engineering manager, I learned the hard way many times how estimates turn into deadlines. Your estimate is reported to the manager's manager and so on up the line, and someone uses it in planning their shit.
Your estimate, in which you did not build any schedule margin, then becomes an item in the critical path of someone else's plan, someone who didn't build in any margin either, or —worse— who was pressured to make a completely fictional "plan" which is really just a backwards-calculated paper justification to "prove" that a job could be completed in an impossibly short period of time by assuming nine women can make a baby in one month and things like shipping, reproduction, and quality assurance take place in zero time. This "plan" makes upper management happy. Temporarily.
You, leader of a small team that is working merrily away, accomplishing real work and solving the occasional unexpected problem (OEM pinouts were wrong, widget zeta delayed in shipping, amplifier stage behaving like oscillator, etc.), are asked for a status update. Because of your unexpected problems, your estimated completion date is now two weeks later than your previous estimate.
Now the middle manager, who knew he wasn't going to meet the "plan" he was forced to develop, now has someone to place the blame on. He knows he's going to be in the path of a metric fuckton of shit, but he's placed himself uphill of you.
It's clear even in TFS that the real problem isn't estimation, it's poor program management, lack of requirements management, and often also marketing-driven decision-making.
In other words, the same old shit.
I can see the fnords!
If you penalize me for going over time and budget, my next estimate is 30 eons and 200 trillion USD.
Watch me come in well inside the budget.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Take your best guess. Multiply by 3. Done.
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.
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.
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.
You must be working in a shop that does the same thing over and over again, year after year.
No. I don't think many people work in that kind of shop.
No excuses. Don't use that as an excuse for bad estimates, it's something you can improve.
"First they came for the slanderers and i said nothing."
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.
If you penalize me for going over time and budget, my next estimate is 30 eons and 200 trillion USD. Watch me come in well inside the budget.
So we aren't talking a government project?
Reading code is like reading the dictionary - you have to read half of it before you can go back and understand it.
I'm out of mod points, so I'll just say: Good post.
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.
Agreed. The problem is, they don't listen.
You are not responsible to meet any estimates you don't make. If your manager makes your estimate, let him meet it.
"First they came for the slanderers and i said nothing."
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!
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.
If you know that not providing a margin will eventually lead to a manager making a decision that everything is your fault and you choose to not provide a margin anyway, then the situation really is your fault. You have the power to stop it from happening but choose to walk in front of that bus anyway only to blame the bus driver for it. Be a professional, use your excellent brain to fix problems not just in your discipline but your workplace also. You will prosper if you do. If you don't, well you already know how it's gonna go.
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...
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
Great post. This then doubles with EVMS -- the new government way of creating estimates and schedules. You have to hack out the software development so fine that at the proposal or initial program startup phase, you better know every class and architectural detail, because you're not allowed to add anything without an expensive replan, but you're also not allowed to have non-specific tasks, or tasks that take longer than 44 days -- but that's the baseline task, so typically the software portion of it can't be longer than ~10-20 days. I do pretty good with getting the schedules in, but that's because I'm a PM that writes lots of code too, and does EE/RF work, so I can hack it in. But in a lot of other schedules from other people, it's really just GIGO -- garbage in, garbage out.
In the real world though, there's a whole lot of penalizing that gets done. Thus a whole lot of stress.
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.
But there are so many managers up the chain that take all these estimates as the truth. Before the project starts, before any data sheets have even been read, we're asked to come up with all tasks we think will be needed, then give an estimate for each task. This all gets put on a chart and managers stare at it. Then you'll be asked what percentage of time you can work on each one, and you'll say 50% maybe because they get really mad at you if you are honest and say 10%. Then the chart gets printed and put up on some walls.
The problem then is that the chart is not updated. The developers are too busy to figure out some goofy planning software so that they can budge their estimate and the managers don't always do it. Along the way half those tasks you thought were needed either vanish or are replaced by something else and some new ones are added (because now you have some datasheets and requirements, you thought of something you forget, etc). We open and close tickets that aren't on any project plan. The planning and actual work just don't coincide, they're done by different groups of people with completely different sets of motiviations.
I have been at one place though that managed to estimate things well and had some good planning. I honestly don't know how they did it, except that they moved slooowly. They weren't developing a brand new product from scratch (like I am now) but just adding incremental features, lots of time spent planning before starting by people who are engineers and not managers, a set of bug-fix releases were pre-planned, and there was a multi month back end for QA. They spent more time on documentation than some entire projects I've been on. And it was waterfall. But that was only for two years of my career.
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
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'
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."
Oh, I agree, I could have prevented a metric fuckton of shit landing in my lap. I know that now. That's just how i learned it the hard way.
Now, any estimate I give includes plenty of margin. Like the top post says, poor managers get worst-case estimates, plus a healthy margin for the inevitable negotiation that will take place.
The same applies for cost estimates. I learned the hard way the first time I was asked to present an estimated cost to complete forced by an unexpected 16-week delay in critical long lead part from an overseas supplier. I made a diligent effort to present an accurate ETC to the customer. No margin, no padding, just my honest, well-documented estimate of the cost to complete the project.
I was expecting to be dealing with the engineers and project managers I'd been working with all along, who were competent technically and I got along with well. But instead, the customer (major aerospace prime contractor) sent in their best hard-ass negotiator who was an MBA with no understanding of the technical side.
Mr. Hard Ass refused to accept that I wasn't bullshitting him. And the engineers I got along with so well didn't do a thing to back me up. They just sat there looking uncomfortable. After two days of going over the schedule and estimate line by line, and me refusing to cut anything other than the slightest costs, Mr. Hard Ass went over my head to the CEO, who agreed to a 25% percent reduction in the estimate across the board. He just ate the cost.
I got dressed down hard for not padding my numbers, but he was decent enough to understand that the ultimate blame lied with the suppliers who waited until 4 weeks before their agreed delivery date to notify us they'd be 16 weeks late. And it was a lesson I will never forget.
I can see the fnords!
"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.