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.
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.
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.
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."
...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+
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.
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.
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.
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.
Peter Molyneux is that you?
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.
Lets see... What would they say? This is the one-sided conversation, since it doesn't matter what you say anyways.
"Ok, we can accept that estimate."
"Ya, ya, ya, whatever."
"We'll have that information to you by the start of the project."
"The information isn't ready yet, we'll have that by the time you need it."
"I thought we had that to you already. We'll have to check with the information source."
"The PMs have some changes."
"Here's the information, but there are some small changes."
"No, those are small changes, they won't impact the timeline."
"No, you can't have more time, we already made commitments."
"The PMs have some changes."
"What do you mean you won't have it in on schedule? You agreed with the initial estimate."
"You're going to stay here until it's done, I don't care how long it takes."
"I don't care that you've been in the office 30 hours straight, this is your fault."
"We're hiring an off-shore company to help you with the project. Get them up to speed."
"The PMs have some changes."
"Since we have the off-shore team, we need to cut your department back."
"I read an article saying Java is the future. Redo it in Java."
"What do you mean we're waiting on the off-shore company?"
"We fired the off-shore company. You're good, you can get it done in time."
"Ok, hire more people into your department, but we're only offering half the salary, and no more bodies."
"Why is this project so far behind? Don't you know what you're doing?"
"The PMs have these changes."
"Why aren't you done? We're weeks from the deadline!"
"You didn't meet the deadline. Don't you know deadlines are firm. We have commitments."
"I don't want excuses, I want results."
"You and your idiot team are fired. Get out of my building."
[2 months later]
"We need you to come back and finish the project. We need it by next Monday, that should be plenty of time."
"Here's all the new specs. They should be easy to do."
"What do you mean total rewrite, it's only a few chances. You are an idiot. Get out."
[1 month later]
"We need you to come back and finish the project. We need it by" {click}
"We need you to come back and finish the project. We need it by" {click}
"We need you to come back and finish the project. We need it by" {click}
"Why do you keep hanging up on me?" {click}
Serious? Seriousness is well above my pay grade.
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.