Tasking developers with creating detailed estimates is a waste of time (2020)
iism.org
iism.org
Regardless of what you think your process is, somewhere near the top of the leadership pyramid, it all boils down to a customer promise upon which hinges your organization's reputation.
In non-dysfunctional organizations people at all levels can understand and adapt to curveballs that cause deadlines to slip. In such places you make estimates to the best of your ability with limited time and resources and communicate constantly with stakeholders on how things are going.
The hard thing is it all requires honesty.
Probably the most angry I ever got at work was once when, at the end of a project, I was on one of those bullshit status update conference calls with 20 people on the line. Throughout the project the team was I was on was led to believe that we were constantly behind and the deadline was from the beginning impossible to meet yet magically got pushed out several times to give us "grace-time". We cut corners like mad-men, amassed insane levels of tech-debt, and all but put a midget in the machine to make it work. What happened on the call? The product management team congratulated the PM for delivering so far ahead of time. I was so angry I couldn't even talk. Basically, the PM got accolades, the customer got shitty product, and we hated our jobs.
> Regardless of what you think your process is, somewhere near the top of the leadership pyramid, it all boils down to a customer promise upon which hinges your organization's reputation.
First, I see the same sort of dysfunctions driven by The Date™ even when no customer promise is involved. Even when no customers are involved.
Second, if honoring customer promises were the number one priority, organizations wouldn't make them so casually and without figuring out what is possible.
Third, they would use management approaches that make it maximally likely to really hit customer promises, not just in terms of date but features and quality. If I have a date that really matters, I'll aim for first MVP by 50% of the schedule. Then we use customer feedback to iteratively improve every week, so at the deadline we have something polished and proven to satisfy.
Fourth, they'd try to hit dates in ways that build capacity to make good on future promises. Instead, the panics I see around The Date™ mean technical debt, strained processes, and burnt-out staff, all of which diminish odds of satisfying promises in the future.
Second, profitability is usually the number one priority.
Third, they DO use management approaches that make it maximally likely... ...that they achieve profitability.
Fourth yes, they would and they do. Unfortunately most don't understand that it is impossible to estimate a fixed period of time in which an unknown problem can be solved.
This always comes full circle to Steve McConnell's book Software Estimation. In my 34 years in IT, across three continents, in industry sectors ranging from insurance and telecoms to aerospace and defencee, and Nokia Maps, that book will take you closer to the grail than anything else on earth. And you'll still remain light years from an accurate estimate until the day you ship.
Long-term profit is not the number-one actual priority of American management methods. Not even close. As an example, look at Toyota versus the big 3 American car manufacturers. Toyota is much more profitable [1] and has been for decades. That's because for Toyota profit is an outcome, not a holy grail. The actual priority of American management methods is making executives look/feel smart, in control, and dominant so they can justify extracting lots of cash.
I do agree that they use management techniques likely to achieve those feelings. And that includes making up bullshit dates and then insisting everybody make them happen. But that's part of the problem.
[1] https://www.detroitnews.com/story/business/autos/2015/02/22/...
Edit: And that definition of customer is not uncommon in the industry. It helps to know who your customer is.
Profit is the holy grail for all companies. It's not an accidental outcome that Toyota is profitable. The quest for profit is the basis for everything they do, even if it doesn't seem like it. They just picked their heads up a little compared to their US peers so they can see farther down the road.
But reductionism is helpful sometimes. The integral of a complex equation can add up to an integer. Modeling planetary movements in a way that's similar to a spherical cow in a vacuum may not be perfect, but it is possible, and tells you quite a bit.
Reductively, companies pursue profit, in the same way that people pursue money. It's not all-consuming, but if you want to model behavior, that's probably the place to start.
The Date(TM) can have a slew of dependencies that chain react down the line. Perhaps your client's training was booked months in advance with flights and stand-in schedules all based all on some dev feature being available in class. Or hard to reschedule subcontractors were booked six months ago for Pen-Testing and The Date(TM) is slipping. Things like this have costs and consequences beyond technical software debt and in many cases come with enforceable penalty clauses which you don't want to trigger.
Yes, there is always a tension between the hands down best guess of what was possible when you made the commitment vs the actual critical path as revealed by experience over time, but you live with those unknown risks and degrees of certainty and proceed. You Meet The Date(TM).
I also think Radical Transparency plays a role here that was lost on the 'successful' PM referenced in GP's story. If you cancel weekends and duct tape together things you need to fix later to meet a date then everyone involved should be 100% clear on why it is so important. And agree. There is a reason some activities are called Sprints. You can't do them all the time. A Sprint is a defined burst of energy- maximally applied. Anything else is a different kind of race. Business as Usual, is a marathon for instance. But, occasionally, you need to produce a Sprint to Meet The Date (TM). Point is that the GP's PM-in-question might have accomplished more with better honesty relationships including a well thought out & generous TOIL [1] program that could compensate for the off chance that some institutional shortsightedness at an earlier planning stage- where commitments were made that may have seemed like a good idea at the time- proved more difficult than anticipated and resulted in a need for Sprints.
[1] https://citrushr.com/blog/leave-absence/what-is-toil-and-how...
But The Date™ also is a BFD when none of that is true. And if things like client training and penalty clauses were all that important, people would be extremely careful about picking dates that are realistic. Instead, frequently The Date™ is made up and people get fetishistic about Meeting The Date™ in ways that are untethered from actual circumstances or consequences.
That's a sign to me that the real purpose of The Date™ is not the nominal purpose.
> There is a reason some activities are called Sprints. You can't do them all the time.
This is a perfect example of how distinct the nominal purpose and the actual behaviors are. In the Scrum framework, things are structured as an unending series of Sprints, back to back from here to eternity. Whereas in reality, a sprinter like Usain Bolt runs, what, 10 or 20 officially timed races per year at under a minute each? And the rest of the time recovering, prepping, and training.
I can't tell you how many times I asked, "who came up with this deadline?" and I get "someone in the sales team," or something like that.
1. Focus on flying the plane in a manner that uses as little fuel as possible not bothering to even glace at the fuel gauge, watching the air currents and gliding where possible.
2. Turn on autopilot and spend time and effort trying to calculate the fuel you have to see if you make it to shore before going back to flying as conservatively as possible.
Number 2 feels better. Number 1 is more likely to end with a safe landing.
If you have a deadline and won't be getting new resources any time soon, and what purpose does a estimate serve if you are already committed?
I didn't commit, the sales person did. I'm not in trouble, he and the company is. I can just leave, it is their fault if they make bad deadlines. The only reason they can continue is that engineers don't push back and quit when it happens. You work hard so that the sales person can get his juicy bonus, why should you do that?
With it, sales departments can spend more than they have, because they sell for X and need to pay production, IT and project management Y1, Y2 and Y3. An unrealistic deadline would put them in the negative due to overtime payments, attrition, etc. So would unclear requirements, failing to do their due diligence, selling science fiction...
An estimate serves the purpose of allowing you to say “well the deadline is in 3 weeks and our best estimate is that this will take 9 weeks. Lets save ourselves the effort, cancel the project, and do something more profitable with our time.
In your analogy, that would be the equivalent of… jumping out of the airplane mid-flight, confident that you can just ride brooms to Iceland because thinking of this as a life-or-death decision is incorrect.
So if it helps you, just imagine here that we're talking about the 99+% case, rather than the extremely rare "real" deadline.
I believe it, but I've also seen the reverse too. In a situation where no customers are involved, at a non-profit enterprise. When we have a launch date, it helps provide focus on distinguishing what's truly necessary from what's not, and using our development resources responsibly. The launch date needs to be reasonable, and it needs to be understood that it can slip (especially if new requirements show up), but it provided a lot of focus. Having no launch date, sometimes everything but the kitchen sink ends up being thrown in, anything that anyone ever thought was a good idea, and we lose focus on the mission or the end-user, and the project can stretch on forever never being done.
This allows you to set dates that force you to prioritize (don’t delay shipping forever to add random features) without burning people out or shipping software that’s not ready for prime-time.
One problem in large organizations (especially ones that grow fast) is there is no common understanding of what deadlines/targets/The Dates mean. New engineers and management come in from environments where missing The Date is met with unpaid overtime or being fired, getting yelled at, etc. This causes problems when people with the opposite understanding - The Date is flexible and just a loose target - set Dates without padding or fully scoping something, or the opposite when those people become beholden to dates set by people who take them extremely seriously.
Did we do that? Shall we do it again? We've got another The Date in two weeks. What do we intend to ship?
Repeat until everyone gets acquihired and vanishes into the bowels of AmaMetaFlixgle.
In some cases, especially in the "enterprise", it's literally not possible to have something you can actually deploy in production (not just a proof-of-concept demo) after a single two-week sprint.
In some cases, you only get so many chances to get press and public attention for something, and have to decide at what point it's going to be sufficiently impressive to do so.
I agree that focusing on getting something live as soon as possible is a good idea, in almost all circumstances. There may be some stakeholders whose idea of "as soon as possible" is not as soon as yours.
In some cases stakeholders deciding "shall we do it again" are basically always going to say "yes", until someone says "enough" and sets a date at which it will be cut off -- which then forces management to be really serious about figuring out the most important thing to go in every sprint until then.
It is always very important to realize "you can have a fixed date OR a fixed feature/requirements set, not both." In some cases, the focus of a fixed date and "now what's really important to get in there if we can't get everything in" is more useful than a fixed feature set "and let's see how long it takes" stretching on forever with diminishing returns and nobody saying "you know, actually, it would be more valuable to the organization to work on something else now?"
In my experience, working in certain kinds of organizations!
Yes, it does, because:
> Regardless of what you think your process is, somewhere near the top of the leadership pyramid, it all boils down to a customer promise upon which hinges your organization’s reputation.
Right. So if the process of coming up with those promises – of what to deliver at what cost in $ and time – isn’t aligned with what goes on below, there is a problem. So, the process below matters intensely.
> In non-dysfunctional organizations people at all levels can understand and adapt to curveballs that cause deadlines to slip.
“Understanding and adapting to curveballs” in a large organization is itself a matter of process. And a big factor in it is identifying those curveballs with time to understand and adapt. Which is, also, a matter of process, and particularly the processes of estimating, re-estimating, and delivering, exactly the processes you said don’t matter.
> The hard thing is it all requires honesty.
That is among the hard things, sure. But even before honesty, it requires openness to accepting facts, including facts that have been established fairly solidly about what does and doesn’t work when it comes to estimating intellectual labor instead of implementing rote project management processes derived from physical infrastructure work where the bulk of work is easily-quantified construction, not intellectual labor.
Whether that is an estimation or popular ways of organizing: Scrum, kanban, waterfall.
If you have good honest people who care more about the project goal then their personal position it works, if you have a culture of "my position" means more then the end goal and the people I work with, nothing works.
An experienced solutions architect and technically experienced project manager are the key to success in mission-critical and time sensitive projects. Company cost cutting is the enemy, whereas roles are under-funded, where interviews are not accountably performed by knowledgeable recruiters and staff. You won't be able to hire and retain efficient and effective staff if you do not properly fund your roles. Attrition is your fault as a manager, not a betrayal from an employee as it's often portrayed. Employees are not indentured servants, they are free people, who can and should always be able to make decisions in their best interests.
A company should survive based on it's reputation for delivery and quality, NOT based on it's ability to "underbid" everyone else.
Projects fail a lot these days because so many tedious activities to maximize billing hours are conducted and weaved into daily processes by them, because too much attention is paid to padding individual egos and to the ideal of phony "corporate culture" kool-aid. Honesty these days goes a lot farther in meeting goals of project success, AND OFTEN A COSTLY "HOLE IN THE BUCKET" TO YOUR DELIVERY BUDGET.
Hire experienced people to lead and mentor teams with a track record of success that communicate well. I have seen entire IT companies overrun with people that don't have a clue about development in management positions... They often win contracts also based on connection to friends elsewhere, but they frequently miss the mark in business, because the staff dedicated to actual delivery is too often a poorly-funded afterthought.
Stop hiring people just because they're "your buddy"... If they aren't qualified, competent for, and educated on the requirements of their role, they're "dead weight" towards meeting your project's success goals.
Pay each employee well, and hold them properly accountable for their delivery and their attitude, but don't frustrate or work to control/restrict them beyond what threatens the project and productivity of others.
Plan religiously for everything to be done within business hours, quit imploring of your employees to put in extra hours. Make sure your contract bid covers proper staffing to not let burnout and attrition become a factor.
If delays arise, tell customers quickly, and let them negotiate trade-offs or extensions early and decisively. Hold customers responsible for being reasonable, stop the trend of putting your teams at the mercy of abusive customers.
You cannot force a team to subscribe to and uphold Agile Methodology while you yourself as the program director does not uphold your role and responsibilities as well.
A manager's primary role is to remove all the barriers to team success.
Everyone should be accountable to their roles in a project/company setting... Everyone. A vast majority of project and delay-related problems occur because accountability and physical work is too often only done at the ground level of a company, while the top stays isolated only makes decisions and measures results.
The incentive for a PM or tech lead isn't to help developers do their job well but to make their boss happy. By the developers themselves not being more closely involved with product owners, using a PM as an interface and shield from the rest of the company, they give sole individuals the opportunity to crack the whip for fun and for profit. If a PM is particularly good at what they do, they make everyone believe they are a hero and that nothing would get done without them.
Guess who's getting a raise for the project getting done ahead of time? It probably ain't you.
On the other hand, "on time and on the budget" means a lot, that all lies got aligned at the end to make it all look like truth - that's a success!
"We took on some technical debt in Q1."
Vs
"We didn't finish the project in Q1, but we kinda have something in place that sort of works, as long as you don't look at it funny."
Unfinished does not communicate the same. You can have an extremely clean and polished product that is unfinished. You missed the deadline but you're in a good place to deliver future requests.
I think a lot of the problems with software dev could be resolved by being more honest with ourselves.
Devs are pretty honest, management simply does not listen.
You assume a lot about management/product there. The term -should- make it clear that debt has a cost to carrying. But the thing is -they aren't paying that cost-. From their perspective, they're getting free money while the devs pay the interest.
It's like having a factory with poor lighting or unmaintained equipment that breaks down a lot. There are metaphors that capture that aspect of technical debt better, imo.
Then any new feature that touches that component increases this "interest". You're now losing 6%, 7%, etc. Only on interest.
The longer this goes on and the more debt you accrue the worse it gets. Getting debt to have something now that you fully intend to pay back is not a problem.
Constantly increasing your debt till you go bankrupt (total rewrite) is though. Problem is management is blind to tech debt. It doesn't show up in their calculations, it's just that thing the devs always complain about but somehow the product still gets delivered, just with more "irrelevant" complaints each time until half the team has quit.
I've worked on a project with 200 devs, and one year of rushed history. The entire project was technical debt, which was never "paid off". When I said it needed refactoring, I was told to refactor it myself. After two weeks' work, my effort failed, I got dinged, and my reputation suffered.
We didn't have CI, or a test-suite, not even a decent RCS. I didn't have a chance. I should have kept my mouth shut.
Every hour the Senior Engineer wastes putting out fires is $100+ down the drain. Management simply refuses to include these costs in their calculations.
We should start keeping track of this time expenditure very accurately and repeatedly show it to higher management: this is how much tech dept has cost this project this month.
Unfortunately, they still won't listen. We're just whiny little babies in their eyes.
They do think about those bonuses longer than the next quarter.
Please don't use this phrase.
I'm sure you don't mean it badly, just a reminder.
Would it be OK to say "put a little/small person in the machine"? If not, please kindly suggest a better replacement so that we can learn. :)
> When we surveyed our community about the usage and overall impact of the word “midget”, over 90% of our members surveyed stated that the word should never be used in reference to a person with dwarfism.
From https://www.lpaonline.org/the-m-word which is a dwarfism organization. But as other comments stated it's best to not hinge your metaphors on ridiculing others.
For many people there is one characteristic that strangers always notice or call them out on and seeing that trait brought up in odd metaphors or jokes would likely feel off.
I think the actual reference might be to a Calvin and Hobbes strip, but adding that it's a little person in the atm vs just a person -- an unnecessary addition.
Yep, this is exactly how I think about it as well, no matter how hard you try to train people to adapt to scrum with story points, at some level it turns into time estimates and deadlines anyway. So it's always going to be more or less pointless. Even if you do scrum with story points and estimates perfectly, just the fact that it is detached from time makes it useless anyway so it's just wasted paperwork that nobody wants to see.
IIRC each item is described by a poisson distribution. (Have I got that right, mean, long tail). Nobody models estimates as a sequence of dependent, poisson distributed events, that I've heard of at least. If you did you might at least get a range on the estimate. Between 2 and 20 days. That would be more accurate. Useful to anyone much? Unclear.
For example, what (I think) McConnell calls "picking the first non-impossible date". An exec asks how long project Magic Pony will take. A manager asks the team and the team comes up with a number. If the number is higher than what the exec imagined, or even higher than what the manager imagines the exec imagines, pressure is applied on the number. "Are you sure? That seems like a lot." A negotiation ensues, and often the number lands on the first date that engineers can't absolutely prove is impossible. Or the first date that engineers won't quit their jobs over.
For an estimate, we in theory want one where the team has a good chance of hitting it. Say, a 75% chance of success. But iterative pressure from the powerful will shift the distribution to 25%, 5%, 1%.
I'm dealing with this at my company right now. Our clients, and even our internal teams, will always refuse to estimate according to our past behavior.
Us: "We estimate your build will be functional in prod in five months."
Client: "Unacceptable. That's way too long. We need it in three."
Us: "Okay, we technically can do that, but that relies on a big internal release that we think is risky to base estimates on."
Client: "All I'm hearing is that you can do it in three."
Then we get to three months and hit delays over and over again until finally, five months later, the build is functional in prod.
The thing that really frustrates me is that when we deliver the initial estimate, the clients always refuse to accept our medium-case estimate, with the implication that they'll drop us as a vendor if we follow that. So we give them our best-case estimate, fail to hit it, and then they buy more from us anyway, complaining the entire time.
Why don't we all just look at the past 10 builds we delivered for them, admit that the best-case never happens, and stop pretending like it's unacceptable to take longer? The point here is that they keep accepting it. Everyone complains, but we all keep selling and buying to and from each other. Let's just admit it's harder than we're saying to get software built and accept longer estimates, given that we're all going to keep selling and buying anyway.
It's theater, mostly. I think some people think they have to do this. How did they get you to keep delivering when you did? It was their threats/complaining! If they stopped doing that... there's no telling how long it might take you to deliver.
Given that every project you've called at 4 months has delivered in ... 4 months, for the past 7 years... your estimating/delivery ability is still tangential to their managing of the delivery by regular barrages of threats, complaints and haranguing.
It reminds me of the dynamics with walking down the sidewalk past a dog. If I walk too close to his yard, he decides I'm a threat. He barks! I walk away. It's easy for him to do post hoc ergo propter hoc and conclude that his barking chased away a dangerous threat. In reality I didn't do a thing different, but his lesson is that barking works!
Of course, that would require backbone, fortitude, accurate forecasting, integrity, and management support.
But every PMP (tm) certified PM I've worked with thinks if you can just break the project into granular chunks, estimate those, then sum the estimates, there's your final deadline. The fact that it never works doesn't dissuade them on the next project is the depressing part, it's all just theatre for the execs.
And that client behavior you describe is what I think of as "Kirk-style management". An executive thinks that the way to get technical things done is to be demanding and shouty toward the technical person, insisting that the number given isn't good enough. Scotty's pathological response to the pathological situation was to lie his ass off about estimates: https://wiki.c2.com/?ScottyFactor
Whether your company makes money on the change order is a matter for your boss.
1. How long it will take if everything goes well and according to plan.
2. How long it will take if everything goes wrong and we uncover further problems along the way. Probably getting those risks listed.
3. How long it is likely to take.
I imagine we tend towards doing just one of the first two, but having to do both should lead to more agreement on the third.
That said - its been about 30 years since I was taught this as part of critical path analysis, and I've never seen it used in the wild.
The reason is the underlying distribution: because the probability distribution is usually heavily skewed to the left, with a long tail to the right and lots more room for things to extend than to contract, the day which is "most likely" when looked at in isolation is actually well to the left of the median date, the date with a 50% probability of being before or after completion.
If you want an 80% chance of being right, say, you need to do some more maths with the three numbers to figure out what the right date to use is.
I would very much like to see this done. The problem is that estimation isn't seen as work. It's seen (or, more accurately, framed) as something devs should be able to just magic from thin air with perfect accuracy, so why would we bother adding complexity? Very few organisations bother tracking estimation precision, I think because the incentives are aligned such that it's actually to the advantage of the people writing the cheques that developers under-estimate. I think the power over the developers that a missed estimate gives to an adjacent organisation is a real factor in ensuring this never gets improved.
We did this all the time at a previous job. We had a spreadsheet in which we put in the three estimates. They were combined in some ratio (I think it was 1 part each for the outliers and 2 parts for the most likely). Then some time was added on for testing, test remediation and project management at a set additional percentage. Worked out pretty well, we seldom ended up with issues when using this method.
Mind you, these days Excel's got the distribution function formulae in it that you'd need to do it "properly" with a lognormal distribution, but I like the way the three estimation points have a direct and obvious link to the result with the triangle method.
... and then the estimate is no longer an estimate, it's the outcome of a negotiation.
> Are you sure? That seems like a lot.
"No, I'm not sure, boss; it's an estimate."
It's applicable where the randomness has a multiplicative rather than additive effect. For example, the work may double or be halved. Lots of natural processes work this way.
I think what's useful is thinking about the problem, and communicating in group/ disseminating the information (this is required in order to do the typical "planning poker" or whatever planning technique the team happens to use). Whether you end up with L/ S /M or 7/13/21 points or whatever else you use - it's irrelevant, so no need to sweat it; what is relevant is that you discussed the tasks and everyone has some understanding, and maybe they're a little bit better spec-ed now.
Your second point rings closer to what we should be doing instead. We should put more effort into analysis and refinement. In my experience, estimation meetings where all tasks got estimated were almost useless in the end; and the most valuable meetings where when we didn't finish to estimate, but instead gained a deeper understanding of the requirements and of the domain.
I've found the following system to work well. Estimates are always given as the following: hours, days, weeks, months, quarters. That's it, not numbers attached. It means "some small number of _______". This allows for discussion without everyone feeling trapped. If a feature takes "weeks" and Product thinks it should take "hours", then that is a discussion that can allow for a change in scope or requirement clarification or just education about how the system works. Of course, PjM systems only work if everyone buys in and that is always the bigger challenge.
I think implicitly most estimates are the 50/50 case. "I'm 50% sure I can do it in this time". Much of the time I don't think this is very useful, and isn't very well thought through.
In design and code, customers need to be consulted and asked what they wanted and made to feel important but not about anything actually mission critical. That's what you're hired for. At least a few times in any long project you need to come up with a meaningful sounding but essentially empty aesthetic decision for the customer to make. This allows you to both show progress and let them feel they're in control. It also allows you to extend the deadline if you feel yourself behind.
This, too, is not very useful.
Real world tasks are likely to take longer if they have already gone on for longer; maybe a Pareto distribution would be more appropriate.
What's frustrating is I've articulated these thoughts clearly to managers in the past. They nod their head and agree and then ask for the hourly estimate again and we all collectively share our disappointment when our estimate is inaccurate after the fact.
Nothing like running head first into a wall and expecting a different result.
My management suggestion? Frequently identify and advocate for simplifications, and modulate the degree of simplification based on progress to date. If people enjoy their work, they will work hard regardless of timeline hawking. So the variable factor is really the volume and complexity of work, not worker intensity or motivation.
I’m also unclear how the dependency you mention is going to come in. That said I agree with you in general that some statistical reasoning should be brought to this problem. Maybe just showing people the way variances are additive and the impact that has on the overall variance of a project made of many small projects. You could pick a plausible gamma distribution for individual task duration and play around with seeing what the sum of a number of IID gammas looks like —- the sum is a gamma distribution also; see wikipedia but the formula.
If you're the leader/manager/person in charge, do you want to see reality, or do you want to keep your head in the sand so you can have a simpler planning process? If you want reality, and that's what the most accurate view of reality, then by definition it's more useful than anything else.
I broke it down into components and individual tasks, then put estimated hours against each one, then put it all into a giant spreadsheet, to track planned vs actual times.
If I remember rightly, it totalled about three months of elapsed work time. And it took me over a week to compile the estimate.
I also remember that I hit the predicted end date to within two days.
But the interesting bit was each individual task was inaccurate - lots were wildly underestimated, balanced by those which were wildly overestimated. Stuff like things I thought would take a day taking 15 minutes, other things I thought would take an hour taking a week.
I've seen the same thing play out in Agile processes - we are asked for story points, and while many are accurate, some are way bigger than we thought, some smaller. But the overall time to complete a project tends to fall right about where the devs thought it would before the pointing exercises.
All the estimation in the world will still put the same answers into the hands of your project managers - "Pick a date, or pick your scope. Not both."
I truely believe that developing software is a creative process that you are always doing for the first time (unless you did it wrong the first time). Why does everyone expect us to know how long its going to take.
The basic rule of thumb I use is to take my best guess and multiply by PI. (answer: because 3 isn't usually enough).
As a general contractor you can’t expect me to provide a timeline of when it will done. This house has never been built this way before.
…
That way of speaking would fly in no other engineering discipline. Software, while it possesses some interesting differences from other fields (eg mechanical, electrical) has some massive growth to do in terms of actually developing engineering skills.
The biggest problems I see with sw engineers who complain about estimating work are (1) lack of experience (2) lack of rigor and (3) lack of effective teamwork.
A mature sw team with good disciple around getting user input and estimating work is totally possible. I’ve seen it.
This who think software is un-estimable compared to other engineering fields are just giving themselves an excuse from accountability.
What I often see in software that you're expected to give estimates on the spot before there's a design. You're expected to be the designer and implementor, and you're expected to say how long it'll take before you've started designing.
"I need features X, Y and Z" isn't a design.
And if you think other engineering disciplines are different, please go ask an EE how long it'll take -- or what it'll cost -- to make a board with a 2 GHz SoC and 8GB of LPDDR4 and PCIe. (That's not a design, and if you don't get laughed at, you'll learn that the answer depends massively on the design)
It's like what happened to the home building industry with the pandemic. Suddenly the cost of materials has shot up, the availability has dropped, and everything went up in the air. That's simply the default state in software, because every bit of software -is- unique. It would be like if every housing project was using unique materials. Literally a new material, that has to be fabricated, whose properties are unknown. Sure, it might be an alloy of something that previously existed, but it still brings in a bunch of unknowns.
House construction is usually only started after a massive amount of detailed design and planning is done. This is priced in. This is almost never true for software.
Even with the above houses often take longer to build than expected and unforeseen issues can arise. Even the weather can screw things up.
The amount of unexpected issues that can come up in software is huge. Everything from a bug on a library that you use to differences in the exact machine that the software will run on vs where it was developed.
The reasons for that?
There's thousands of years of experience in humankind of various types of construction and in-depth knowledge of the materials. Whereas in software we've only got 60-odd years of experience and the materials we use are generally untested.
On top of that, when they use new materials in construction, there is a legal and engineering requirement to test those materials before they are used generally. In software we just go "ooh, look new Javascript framework" and dive on straight away.
Someone is given a house building estimate of 6-8 months.
They they proceed to have business cards printed up, and start ordering materials to be shipped to their house for their new home business, and they slated everything for month 5. And they've already invited their family to come stay with them on month 6 day 2 to stay in the guest bedroom in the basement. ("Yes, I told you I needed a basement last week! Someone on your team was in the room and they didn't say no!").
The house building analogy is pretty far off in many many respects.
There are codes and inspections you have to comply with. You want to change X? That will mean new inspections and new codes to follow. There are essentially no codes to follow in software (I wish there were).
It is different with software estimates; I've never given an estimate to a customer, it's always been to a PM or a salesman, who then imagines a quote to give to the customer.
In the early days, devs were "given away" by the salesman as part of the hardware deal. As a consequence, dev work was a cost-centre. I'm glad that stopped happening!
When I first encountered "Project Managers" in the 80's they were still trying to fit this model to software development.
and every time i've seen people try to correct for this it results in different layers of management adding arbitrary fudge factors to the time estimate which inflates the actual time that it takes to do something. these corrections build inefficiency into the beginning of the project and bake them in.
it's an answer to "how do we not be wrong about when things will be done?" over "how do we move faster?"
If we say that we don't know how long its going to take or how much its going to cost - can you blame them?
Lots devs like me have a comms issue. We would love to deliver stunningly brilliant complete package on the first attempt and we come across as secretive. We need to made to think about delivering an MVP and building a product up incrementally. This way those nervious bosses and investors can see that something is happening. I think the question is often not "how long is it going to take?", but rather "will you ever deliver something I can sell?".
This is absolutely true. And that's because when we find ourselves doing the same thing repeatedly, we abstract it into a library, a framework, or a service so that we don't have to do it again.
The easiest thing to predict is something that has been done a zillion times. So if you're building 100 houses in a subdivision, you can get really good at estimating and hitting those estimates. But the more novel something is, the harder it is to predict. And software by its nature is novel. If it isn't, we're doing it wrong.
But boy did we succeed at allocating a heap of VC cash into devs pockets.
They ask for X, I think X involves A, B and C, when actually it involves A, D, E, F, G and H.
I think often these over-estimates are caused by tasks where you just know the requirement but not yet how to realize it. For example, estimating the requirement "setting up TLS certificates" might yield an estimate of one week if you have never done that before. After researching how to do it you might end up with one hour of work, e.g. because you learned that you can use ACME to auto-generate certificates. Does that sound right?
You broke the task down into (I think) five elementary components: inputs, outputs, processes, inter-process exchanges, something. You rated each component out of 5 for difficulty. Each type of component has a weight, so you can get a sum of the weighted scores of the components, apply some kind of fiddle-function to the sum, and that's your function-point count.
You can then use intrusive management to measure the function-point output of each developer per day, so that after some months, you can make accurate estimates. Because the task estimate is denominated in function-points, not days, you can use the FPs-per-day rates of individuals or teams to estimate the elapsed time for a task.
I tried to use it a few times. What I learned is that it's not possible to make accurate estimates.
Actually, that was one of the observations of the FPA training: that you are supposed to keep on doing it all through a project. Well, you really needed a whole corporation to commit to supporting something like that. I'm not surprised it was no use to me.
Typically, at least in the fields I've worked, at the beginning you may have answered the question "is this even possible"? (but not always), but your task breakdown consists of a small set of "figure out how to approach X" tasks, and a scattering of "well-understood thing we know we need to do sometime". In this context, it's impossible to estimate the project. The best you can do is to plan roughly what work to do in the next few days/weeks, then re-group to see what comes next. I believe Agile incorporates some of these insights.
This is called random luck. Something tells me that if we repeated the same experiment with different projects, that distribution of errors wouldn’t cancel out most of the time.
I’ve given price estimates for complex PCBAs before designing them within 0.5%, but I don’t attribute that precision to talent, I probably get the estimates in the +/-10% and got lucky in that case.
I believe this has only happened to me once in my career. My employer had recently switched from flat rate project bids to time and materials. A data transformation project that looked like it would take five or six weeks turned out to have repetitive tasks that could be automated easily. My estimate of three days, which was already padded, wasn't appreciated by the PM what wanted a month of revenue. After being told several times to account for contingencies and not budging much on my estimate, the project was taken from me and given to another engineer who gave the PM the estimate she wanted. While this was going on, I had already written the necessary code. My coworker had a month of mostly relaxed days as I turned the code over to him and he got busy finding ways to look like he was doing work for a month. Maybe I should have done that instead.
But now I view it as: your goal isn't to perform the best on your term. It's to perform the best on terms of whatever your management says you should do. Hopefully, that's in alignment. If it isn't, then keep on searching for a job while working there, or simply have peace with it.
The client wanted something done but they only had some time/budget to work on it. The developer looked into it and was able to get the project done. It's great.
The other way is: imagine how much your client is going to trust you forevermore if you tell them you did it in half the original estimate. The next time you slip they will happily pay you because they know you are honest. They might like you so much that they will do referral calls for other clients. Etc.
Reputation matters.
Half being contingent on how much originality went into the automation process. If you just did away with 300 hours of work for yourself in one hour, charge 150 hours.
[edit] How many hours they were expecting is also key here.
[edit2] but you morally did the right thing, and your colleague who took the summer off is a jerk. Hopefully you spent the time doing something more useful than repetitive work, and that is a reward in itself.
And if that estimate isn't within 10-15% (the usual error bars) of the actual project duration/billable hours, there's going to be a problem.
What's more, while the developer(s) involved should have some input into that SOW, they shouldn't be writing that document. Rather, they should be writing code for other projects already estimated and sold.
As for in-house projects, that's a whole different story and is really dependent upon the processes of that particular organization.
All that said, developers should be spending their time developing, and their managers/managing consultants/salespeople should be doing all the other non-development tasks.
Edit: Fixed grammatical errors.
Alternatively, if you’re doing project-based billing instead of hourly billing then getting your estimates wrong can result in a lower effective pay rate for the job.
In other words, bad estimates can cause the consultant to lose money.
Doing freelancing work is one of the quickest ways to force yourself to learn how to do good (and fast) estimation of projects. Estimation skeptics into believers very quickly when it’s their own money at stake.
Freelance work has never once worked for me like this. Coz it's my own money at stake I bill by the day.
Even if I could provide 100% accurate estimates (impossible) the following assumptions never hold true:
* The client has a clear picture of what they want up front.
* The client won't change their mind about what they want along the way.
* Circumstances won't force the client to change their mind about what they need from you.
* Hidden traps won't suddenly spring up (regulatory, technological, etc.).
I quickly learned in my early 20s that offering a client a fixed price for almost any kind of project was sheer insanity as A) you inevitably end up taking on risk that belongs to them and B) they'll be forced to lock in their requirements from day 1.
I always tried to pressure clients to get to MVP and then iterate on a quick a cadence as possible. Unfortunately it's rare that clients fully embrace this and there's always a tendency fatten up MVPs and create "plans" 9 months out for a project that hinge upon a nest of assumptions many of which will almost certainly be invalidated.
Unfortunately the most common outcome is some sort of uneasy truce where I give wildly inaccurate estimates which I say are probably wildly inaccurate.
That's orthogonal to what the parent was talking about.
You can't just say "I bill by the day" until the MVP is complete. Whoever is contracting you out will want a ceiling on how many days it's going to take. They don't have unlimited money or time. And once you give them that initial number of days for the MVP, congrats, you just made an estimate.
If the MVP is truly an MVP and the client isn't chronically short of cash it should be at least an order of magnitude below what their initial budget is.
I tend to find that when a strong emphasis is put on estimates it's because:
* The client simply can't conceive of reality in a non-waterfall way. This extremely common, but, in which case they're putting themselves at a competitive disadvantage in the software business to those who can. If you've ever wondered why big business can enter the tech market and spend 100x as much as a scrappy startup and still get completely thrashed in the marketplace, well, this is a large part of why.
* There has been some breach of trust.
Unfortunately, I find a breach of trust caused by missed estimates tends to spiral into an even greater emphasis on estimates in a kind of negative feedback loop ending with big balls of mud, stressed developers, development velocity that grinds to a halt, buggy releases, etc.
On the other hand, you can cause a positive feedback of trust and decreased reliance on estimates by delivering reliably.
>Alternatively, if you’re doing project-based billing instead of hourly billing then getting your estimates wrong can result in a lower effective pay rate for the job.
Exactly. That's certainly a problem, just not one that the the client is going to complain about.
Except that's not the only reason why. As a consultant you're more likely to be allowed to pick your tools to fit you, reducing the amount of unpredictable gotchas, plus you usually have a lot less red tape than FTE.
It’s one of the biggest variables that have to be considered when scoping out consulting projects.
You are absolutely right. The caveat there is that a SOW (which includes an estimate) is the meat of the contract between the client and the consultant.
Assuming that the SOW clearly defines the scope and functionality, if the consultants can't meet the terms of the contract, they screwed up.
Alternatively, if the client changes the requirements or doesn't provide clear guidance as to what exactly it is they want/need, then it's the client's fault. That said, it's the consultants' responsibility to makes sure everything is clearly defined (they are, or are at least supposed to be, the experts).
There are certainly circumstances where, even with clearly defined tasks/goals, the project can't be completed within the strictures of the contract. At which point the contract needs to be renegotiated.
Which is generally bad for everyone.
If you're doing that then accurate estimates become even more important. If you are billing by time and things take longer than you expect then after a while your customer is going to get angry and that's going to have consequences. But if you are billing by value then if things your employees are working on take longer, you're eventually going to make a loss on the project as a company. So you need to price the value right, and that involves knowing how long things will take in advance.
That's certainly possible, and many contracts are done on that basis. Others are done on a time and materials basis.
Generally (as I'm sure you're aware), that's negotiated by the parties involved. I'd posit that while it may be a good idea to perform some services at a flat rate, it's not always the right call and is highly dependent on the work being performed.
Edit: Fixed awkward usage.
'How many fingers, Winston?'
'Four! Stop it, stop it! How can you go on? Four! Four!'
'How many fingers, Winston?'
'Five! Five! Five!'
'No, Winston, that is no use. You are lying. You still think there are four. How many fingers, please?'
See, I knew this comment would show up here, as it does on any discussion of software estimates. It goes like this:
"Accurate software estimates are impossible, here's empirical proof and reams of evidence."
"But we need estimates, therefore they are possible. I win."
If you're consulting, you absolutely need to have
estimates -- because that constitutes the bulk of
the Statement of Work (SOW), that is, the
contract.
Please don't quote me out of context. That fairly screams bad faith.Context matters. That you chose to ignore it in this case says more about you than the topic at hand, IMHO.
If you disagree with what I actually said, please feel free to make a relevant argument.
In fact, please do explain exactly how one might draw up a legal contract for services that contains no goals, milestones or time/cost estimates. At least one that any client with half a brain would sign off on.
This is a very exciting prospect, and I'll be awaiting your response with bated breath, as you could revolutionize the consulting business with that.
>"But we need estimates, therefore they are possible. I win."
You seem to be under the misapprehension that I'm somehow trying to one-up some unknown other person or persons. Nothing could be further from the truth.
I merely shared my (decade plus) experience providing professional services. If you are uninterested, that's fine. If you disagree, that's fine.
However, your comment didn't add anything to the discussion, nor did it provide useful information of any kind. Please try again.
Edit : Fixed formatting.
That's the whole point of Agile, you need regular interaction with a customer to slowly build the software to a state they are happy with. And they should keep paying for the work until it is done or accept whatever state was delivered by the time the budget ran out.
If that is not how you are doing Agile you have missed the point. It is not possible to predict software development because unlike a bridge the requirements are never fixed and there are too many unknowns.
If you get your requirements fixed at the start, they never change, and you are not going to suddenly have to deal with some library/framework change in the middle of everything, then you can estimate, but you are not doing the software development 99% of the world is.
Customer B asks for a dashboard like that of customer A. However, unlike customer A he keeps nitpicking the design to the pixel, and forgets to mention the company is in the process of migrating database providers.
Meanwhile the senior dev who put out all the fires that allowed the first dashboard to be done on time quit due to burnout. The team has no idea why the Jenkins machine keeps crashing.
Good luck with your estimate.
I think you need to discuss everything that is going to be done as part of a ticket anyways. Asking at the end "Is everyone ready for estimation? 3, 2, 1 go" takes an extra minute.
A wide range would spark a brief discussion (the senior would bring up the points that the junior is missing - yay knowledge sharing) and high estimates would usually result in breaking down.
The key is to keep it short, if need be timebox.
This helps in all kinds of ways. Engineers don't have to think about time when estimating, which tends to make estimates freer and thus more accurate. PMs/POs don't have to deal with too much uncertainty, because the distribution of time to completion over a given estimate is right there. It's easier to know how much can fit into a given sprint, and as soon as all the tickets in a given epic are pointed, you can know about how long the epic will take to get done.
Engineer time remains nonfungible, of course, but if the team is well balanced that seems to average out, and I don't (yet) know a better method of squaring a team's need for looseness with an organization's need for legibility.
I like this approach because time is such a weird thing to try and figure out beforehand. You either overpromise and look bad or over deliver but the thing you're delivering could get delayed because another team isn't ready. This other team will likely not be developers too, it could be a timeline imposed by the product team.
Time still has importance tho because something can be easy but still take a decently long time. You could rate something 1 story point but it could still take 3 hours all-in from dev time to do because it involves making a very straight forward change to 8 services which entails maybe creating an epic Jira ticket to explain the situation and then 8 individual tickets (1 for each service repo) + 8 PRs + 8 code reviews + updating 8 release docs.
2nd Splitting it in smaller parts forces you to examine all the parts and inner workings. Sometimes you will realise entirely different solution is needed, sometimes that there is an api call that will incur costs… and some of these things definitely have to be communicated to stakeholder, ideally before you spend significant times in development.
The problem isn't really seniority or juniority it's that doing this usually requires buy in all the way up to the CEO.
If it doesn't then the CEO pressures the CTO for estimates, the CTO badgers the middle manager for estimates, the middle manager badgers the project manager on your team for estimates and he comes nervously to you asking if you could please give him something resembling a date while he nervously wonders how much to pad it.
Each one has their asses on the line for the date.
You can be as "agile" as you like on a team but this wave of estimate badgering reliably turns on the waterfall every time.
The the oh-so-common 2 hour+ full team meeting scoping session, where half the team dosen't care what the other half is talking about since it's irrelevant to them - it tires everyone out and produces very little value for the impression of "we're now aligned".
Things only need to discussed if, when and only by as many people as required, everything else can be followed up later, it's really okay. Personally, I've always found things like 3 amigos to be much more time effective.
That is, by thinking about how to solve it, in order to estimate time taken, one can come up with alternatives which might achieve the same or a similar goal with less work involved.
Maybe the customer doesn't need such a bespoke solution after all? Maybe we can ask the customer if a slightly different solution is suitable?
For example, recently a customer asked if we could make a new web API that they could query for some data. While estimating the point was brought up that just transmitting a xml/json file with the data once a day might be just as good and less error prone for the customer. After all the underlying data doesn't change more than once a day anyway.
So we ask the customer and once they think about it they agree it's a better solution all around. So they get what they wanted for a much lower cost, and we didn't have to commit a lot of resources to make a new API.
Budgets are built on it, deliveries agreed. Doesn't matter how much you decompose the task - unless you've coded that exact same thing many times before in the same way under the same conditions then it's just a guess. Been estimating for industry for about 20 years (although not the last 6 because we're agile in the truest sense) and most of the estimates have been wrong - sometimes over, sometimes under. Tech estimates are a lie that loads buy into.
It took me a long time to internalize that. See, there's an implied threat - "esitmate correctly or we'll replace you with somebody who will." And believe me, given the mentality of your average project manager, it would be "we'll have you executed first" if executing people who didn't do what you told them to do weren't against the law. What I finally realized was that the implicit threat was a hollow one - there's nobody out there who can do it either, and they know that, as much as they ball up their fists and gnash their teeth when you deliver "late".
And lo and behold, we price for a 30 day project that ends up taking 50...
So ridiculous.
Happily those days, for me, are long ago :-)
The problem is not to ask for estimates, companies need to budget, plan hiring, and inform clients. The problem is that many companies do NOT ask for estimates but create delivery dates out of thin air.
So, I agree that estimates are a waste of time if they are not used. But they should be used as are part of any reasonable-managed engineering project.
Every.single.time - the answer comes back as “no, don’t worry, just a best guess” aka made up useless estimates which are invariably wrong.
Maybe this is something software engineering professors can research.
To get a real date, you run a feasibility study - you do PoCs, you deep dive on features etc. Then, you freeze the requirements and implement based on the study.
This will probably take around a quarter of the total time of the project.
Alternatively, you stick to rough estimates, and you will get roughly the features you asked for in roughly the timeframe estimated.
There's a bit more upfront work here that goes into the estimation, but it won't be like 25% of it is pure waste. Maybe 5 to 10%, depends on what the quality of the estimate must be.
Somehow this never works in practice though, I suspect the initial guesstimate will prime the expectations of everyone involved and will be seen as a target. Clients will be disappointed if the project takes longer and frame it as such (it's late, takes longer, over budget, etc.). I suspect that in order for this to work, the initial range must be large and the adjusted estimates in the project as well as the delivery date must fall within this range.
I think this is a basic function of trust: will these people do as they say or not?
Last time I broke it down into about four pieces, two of which I had a firm grasp on and could give a fairly solid estimate, "about half a day", and one part which I said "this might take a day, it may take a week, I'll know once I've worked on it for a bit".
I'll state what my assumptions are for the estimate so he can red flag things if the customer changes their mind, and I might offer some alternative estimates for different scenarios if I sense the goal is not entirely set in stone.
This gives my boss what he needs, which is a rough idea on the scope of the project and whether it's a slam dunk or "here be dragons".
That is not unreasonable. What is unreasonable is falling into the same trap every single time, and then doing it one more time expecting a different result.
Good idea.
We should also ask them how long that research will take so we can have a rough idea of how long we'll have to wait.
Which makes sense for open ended research projects, I don’t have any sympathy for a CEO complaining that no one can tell him how long to fully autonomous cars. It’s less fine for build me a website type projects.
I can't wait to fix this mess. PMs should never put down any date themselves unless the task has 0 engineering dependencies.
The former is a business need. The latter is not.
After some high level analysis and decomposition, I can say a project will take 3 months. But there’s no need to spell out every minor widget or method with hours.
And this is separate from any t-shirt sizing a team does internally to plan their own time. This should be strictly internal and used as much to generate design discussion as anything else.
The utilities are heavily regulated, often beholden to taxpayers, lawmakers and public utility boards and working on use it or lose it budgets with hard cutoff times for delivery and go-live dates.
It's not just budgets and time constraints that make it impossible to do flexible estimates. Their internal personnel all have their regular work duties to attend to while supporting the migration and they can't drop everything for years at a time to dedicate support for the project. Add in the coordination with multiple vendors and you need to be hitting your time estimates, planned years in advance, within a week. Sometimes budgets don't matter that much, once they are a year into a three year project, they will find the money if it's needed, but the coordination alone requires this kind of accuracy.
It's amazing what necessity does to your estimates. We have become really good at it. This includes things like "Oh we're working with Oracle, add 3 weeks to that integration just because" or "this is a mobile app for the service techs who tend to be resistant to change, add another week for training and a month for revisions". Yes this is just "padding" but it's very specific padding that's tailored to the type of work being done and has so far been accurate and continually getting better for us.
edit: I should add that our estimation process involves multiple week long workshops with all parties. We go over every tool, process, integration and technology currently in use and then write a detailed design document that goes through 2 rounds of review with the customer before being signed off on. These design documents become the basis for a secondary contract to do the actual work and the customer understands that if it's not in the document, it's not getting built or migrated. Any additions require a contract change order.
The bigger the project, the more likely it is that some small thing - something in the original spec, maybe, or more likely, an unforeseen interaction of its pieces - will be missed and will take an inordinate amount of time to deal with. All it takes is one of these to thwart the entire estimate.
In software, it's hard to do estimates at all if you're a blue-sky environment. Once you have a codebase you're working on, it can be possible to give a better estimate of what it will take to implement a new feature, but the more elaborate the feature, the softer the estimate.
We have just shipped a very big change to our product, and we thought it would be a 3-6 month effort to do so. It took 3 years, because it was VERY invasive and VERY complex, and we just didn't understand the underlying challenges enough when we set out to do it.
That's not an estimate; that sounds like the outcome of a negotiation. If someone demands an estimate from me, they get one - if it's not the one the manager wanted, he's free to substitute his own.
I'm accustomed to managers upping my estimates by 10%, and I've known them to increase them by 100%. For small jobs, requiring an estimate instantly doubles the estimate, because it takes longer to produce a good estimate than it does to do the work.
If you reduce my estimate, or try to talk me down, the new estimate is your estimate, not mine. And if you think it's fair to try to nail me to my estimate, then you obviously don't know what "estimate" means, and I need a new employer.
See, you're missing the point of the estimate game. It's not to figure out how long it's going to take - they already know nobody knows the answer to that (and they've already decided how long it's going to take anyway). The point of the estimate is to bully you into making a completely unrealistic promise and then use that promise to bully you into working nights and weekends to keep it (one of the reasons they love work visas that are tied to a specific employer). It usually works on young naive developers for a while, until they either ulcerate themselves into an early grave or develop a healthy cynicism about estimates.
Actually trying to deliver quality software is, incidentally, never one of the goals, just getting promoted by abusing people below them.
Here is what works at a project level:
* When estimating, never go any step beyond the Feature level (don't split tasks, most of the time not even stories – just Epics or milestones are enough)
* Do RELATIVE COMPLEXITY estimate. Not time. If <epic1> is a medium, then relative to it, is <epic2> large or small? Stop at that level. Don't split it down any further.
Now compare just one of the epics to past history. That's all you need to estimate the rest of the scope, as it's all relative. It takes not more than a few hours for due diligence.
So often, management wants a certain outcome, but needs the estimates as cover for making the decision. Just demand a detailed estimate, fool around with the estimates details--no matter what the estimate ends up being, and finally say "Estimates indicate that we should do this.", which is what they wanted to say all along.
1. A daily standup bot pings us with the tickets assigned to us. We respond with a gut-level "percent complete" number for each ticket.
2. The bot tracks these estimates and over time, each team member can see whether they tend to over or under estimate.
The point is that we don't try to cram accuracy into developers, we just let them guess and let them see over time how good they are at gut-level estimation. The hope is that they'll eventually improve their estimations, but we're not going to tie it to performance or anything.
Without trust everyone is trying to cover their own ass, and in the case of large projects most of them will easily succeed since you only need one scapegoat. This is the type of environment where detailed estimates are demanded so that management had a paper trail, or where engineers implement the letter of a PRD and never propose changes to inconsistent or awkward requirements because it's too much energy and they'll be gone before they have to deal with the tech debt anyway. Often times in these type of environments someone will propose a process such as scrum to address particular pain points, but layering a process on a dysfunctional team doesn't address the core issue; at best the routine can shield individuals from chaos, but it won't actually improve throughput in any meaningful way.
At the end of the day, the best you can do with large scale estimation is get a handful of your best engineers who can roughly envision what needs to happen and have them chalk out a rough plan at a very coarse granularity and with key assumptions enumerated. Then with your best product people chalk out a strategic roadmap showing where they believe the product should go over the next 5 years so they can take that as input into account for architectural strategy. The key thing is that everyone understands that all long-term plans are subject to unknowns and change for all sorts of reasons—the point is not to pin people down but to leverage individual expertise to develop a best guess at what is possible. This is where trust is at its most tenuous and stands on a razor's edge; all it takes is one bozo to treat these things as guarantees and start throwing people under the bus when things go wrong, and before you know it trust is gone and everyone is in cover-your-ass mode. Now the group has lost the ability to accomplish the most ambitious goal of which they would otherwise be capable.
Estimates for tasks/apps/games/projects that have NOT been done before, or known from previous work are usually wildly incorrect. Like for instance making the first version of a puzzle game with new everything. Even more so for a new game type that you haven't done before.
Software estimation is like 65% correct (2/3rd) usually. There are so many internal, external and just unknown areas that usually these are underestimated greatly. The estimation is off by more when there are third parties or components/frameworks that get you 90% of the way but make the last 10% more tasking than custom sometimes.
The nature of software design and development is usually creating new value, in that case lots of those projects are unknown or the first time through something, estimation is almost useless in those areas. It is better to do prototypes to help refine and break it up into parts that can better be estimated.
Anyone doing an estimate on a new area that hasn't had a prototype will always be wrong. Estimates more than a month out are also wildly wrong. When you are asked to estimate something big, always just do an estimate for a prototype first before you ever begin to try to estimate the rest.
I'm not sure the prescription given fits the disease described; it feels more like passing the problem on to a different role than actually changing the approach.
At least then you should have some data to look at - but when it comes to boutique products, with new clients, new teams, etc. who knows - you could easily get stuck on something for weeks to months, with no obvious resolution.
http://www.smashcompany.com/business/the-worst-project-manag...
About this:
>There is back-and-forth as the estimates are questioned for being too high, almost never for being too low.
Sonia did not allow us (the engineers) to talk to upper management, so she handled the translation herself. In some cases she was worried about macho engineers who competed on how fast they could do something:
"I can do that in a day"
"Oh yeah? Well, I can do that in 4 hours!"
"Ha! You two suck! I can do it in 2 hours!"
Perhaps Sonia's greatest ability was to figure out exactly how much each engineer tended to overestimate or underestimate tasks, and then to weight their answers accordingly. For the upper leadership, she was the only one who continuously offered accurate estimates of how long big new features would take.
That strikes me as incredibly condescending. Normal estimates and processes already do quite a bit to erode developer agency, and seems like this attitude just doubles down on that dynamic.
"There are moments when it is useful to have the engineers (or any kind of staff with specific skills) talk to upper management and talk to outside clients. But those discussions need to go through a specific process, they can not be allowed to happen randomly."
"That's another thing we've learned from your Nation," said Mein Herr, "map-making. But we've carried it much further than you. What do you consider the largest map that would be really useful?"
"About six inches to the mile."
"Only six inches!" exclaimed Mein Herr. "We very soon got to six yards to the mile. Then we tried a hundred yards to the mile. And then came the grandest idea of all ! We actually made a map of the country, on the scale of a mile to the mile!"
"Have you used it much?" I enquired.
"It has never been spread out, yet," said Mein Herr: "the farmers objected: they said it would cover the whole country, and shut out the sunlight ! So we now use the country itself, as its own map, and I assure you it does nearly as well."
from Lewis Carroll, Sylvie and Bruno Concluded, Chapter XI, London, 1895
from Wikipedia: https://en.wikipedia.org/wiki/On_Exactitude_in_Science#Influ...
It got to the point of such ridiculousness that we finally started trying to flex the scope because the dates were so unrealistic.
Management's response? Add another row and column in the matrix of "resources" (that is, it's ok to add people if you need to) and "somewhat flexible". So after that all of our requirements were "date least flexible", "scope somewhat flexible" and "resources most flexible".
It was pretty crushing to have to constantly explain that my tickets were bigger than the average to a guy who obviously only cared about getting his KPIs down. I left.
Do you need developers to do the detailed estimates? Yes, for two reasons. Politically/socially/culturally, having someone else telling you how long something is going to take you to do is... not received well, given normal human nature. Functionally, the developers have to be the ones to do the detailed estimates, because they're the ones who actually know what the details are.
All that said... overly detailed estimates are a waste of time. Don't break it down into a series of tasks, each of which take one hour or one day.
I've always had a strong feeling that my strong feeling about when something will be done is fairly accurate. Decomposing that into ?+?+?+Contingency for the client tends to be the hard part.
mpg * terrain factor * safety factor
it's pretty important to him to get his estimates right, so he is rather serious about this.
Assuming your 'gut feeling' is pretty accurate (I suspect it is), you could probably break it down into:
- these components will take X days,
- getting them to work together is an extra Y,
- contingency factor is Z
I honestly don't understand how your gut feeling could be accurate unless you had a well developed sense of those factors, or some similar breakdown of what it takes to deliver a project and where the complexities/unknowns are.
It's like cooking.
Okay... yes, ingredients, preparation, bake time... you have to take each into account. It can be hazy when you're estimating 6 months or 8 months, because you're not sure how it will come together after the first 4. That's true, for something that large.
Time estimates are still useful even if the range is large. If a high-bound estimate is still acceptable - great, ship it. If a low-bound estimate is barely good enough, that is a huge risk. If you get multiple estimates from multiple developers and they are wildly different, there's a conversation (i.e planning poker)
https://www.joelonsoftware.com/2007/10/26/evidence-based-sch...
The biggest bottleneck for me is usually other stakeholders.
Estimates are best done by the team as a whole as it is the only way to rely on everyone's collective judgment ("I don't think we need this requirement," "we are going to run into this problem," "this is similar to task X we completed 2 years ago"). If done in this manner, the process also serves as training opportunities for the more junior employees.
At the end of the day a business is always going to need some sort of idea of what's being built and when it might be ready so that they can get a rough schedule together. No matter what games developers and project managers play with story points, or t-shirt sizes, or the myriad of other coping strategies they come up with, someone in the chain is going to try and map those to time scales.
In my experience, a reasonably senior developer can give a rough estimate of how long something is going to take in any case that isn't a complete unknown, if they really can't then you need an investigation project and that can be given a set time. But for almost everything else you can roughly say if it's an hour, or a day, or a week, or month. As long as everyone accepts that sometimes that will be over, and sometime under. If its an hour that doesn't mean you can do eight of them in a work day, but it means you can prioritise work.
That's the key I think, if you have a fixed date or a fairly fixed date, then it's often a good constraint. What you need to do is prioritise the work, and the only way you can do that is if you know that the things in your list could reasonably be done in that time. You can't have no estimates, and task three means your entire team needs to invent an AI or something stupid that will burn the whole timeline down.
If you've put a rough estimate of a week on something and you're reaching the end of week two, it's a great time to reassess. What technical people often don't get told, or don't understand is that sometimes something is only valuable if it can be done in a certain time. The business might want a feature that could be done in a week, but have no interest in it if it'll take six months.
If both sides can admit to their fears then it shouldn't really be too complex. Business is scared you'll get to the deadline and have 20% of the work done, with a good prioritised list they'll probably be happy if you're 80% of the way there. Developers are scared you'll hold it over them and berate them if their one day estimate becomes two days, but they probably know their one week estimate is bullshit and they just want to cover their ass a bit.
Our estimates have become far more accurate not only because we all understand that they _are_ estimates but because engineering is able to creatively come up with solutions that meet the business needs, not just the outlined "requirements." Most importantly, any potential shifts in our estimates are communicated every week and we have built in float time to account for these shifts. We haven't missed an estimated date in over a year.
The by-product of these discussion may be summed up as a number. But oh yes its unit must not be time.
What is so magically different about it? All other professions can do it. And not just the other professions, our company is one of many software shops that sells projects. We need to be able to make good estimations to be profitable, and we are.
Maybe it's all the VC and BigCorp money that is stopping you.
And all other professions regularly overrun costs and dates of delivery just like software. Let's stop acting like other engineers actually hit their deadlines regularly - just last year was there a news about a miraculous Swiss tunnel project which, as a very notable exception, actually hit its target deadline.
The wildly inaccurate stuff seems to come from new work with loose definitions, manic developers, or situations where the work is billable hourly and outsourced.
Sometimes it's good to have an old, graybeard developer on the team :).
those lines made me laugh out loud the first time I heard them
https://www.brightball.com/articles/reality-driven-developme...
As long as the middle ground between rough-as-toast and perfection is found when developing something, and that something is delivered, then it takes as long as it takes and that's that.
However, PMs weaponize estimates against the engineers and that ruins the whole exercise.
Also, teams should use a betting market with real money. People deserve to be paid extra for being right.
on one hand, estimating essentially requires architecting, and that's never a waste of time. on the other hand, you could argue that even w a good plan you won't know where the 1-2 rabbit holes will be (some subtly critical facet of my use case not jiving with the proposed toolset).
So i'd say get a decent plan (weeks, not hours) in place and give yourself a 50%+ buffer.
I worked this way for most of my career. One of the big reasons, is that I spent a lot of my career, writing software in support of hardware devices, and coordinating parallel development efforts was crucial. Lots of critical paths.
Also, hardware people tend to be very "waterfall-y," so I was often never given a choice.
As a result, we learned to give fairly accurate estimates, for pretty long-term projects.
The main problem with this approach, is that it delivers yesterday's technology, tomorrow. By the time the project is released, no one wants it. Also, it's quite possible to deliver features and algorithms that aren't useful, inherently flawed, or actually detrimental to the user's workflow.
Once it has been written into the lists, it is set in stone; even if it is found to be a mistake.
After leaving my last job, I started experimenting with more flexible development methodologies. I think I've had some success[0]-[4], but the scope of the projects has been much more humble than my previous works (out of necessity).
In the project that I'm developing now, there has been almost no "up front" plan at all, and no set schedule. I've been working on the frontend app (a native Swift iOS app) for over a year. The backend is a couple of servers that I wrote years ago. One has since become a standalone open-source initiative, run by a different team[5], and the other was one that I made as "practice," several years ago[6].
In developing the frontend, I created a TestFlight-ready app, almost immediately (I made my first TestFlight release about a month after I started coding). This has been a "running prototype," ever since. The entire team gets releases, quite quickly, and gives feedback and testing. Additionally, the app is continuously being vetted by Apple, so we are unlikely to have the "App Store Approval Brick Wall" problem.
This has allowed the specification to "morph," throughout the life of the project. I have actually thrown away months' worth of code, as we have decided to pivot direction, many times, throughout the lifecycle.
We're all very happy with where it's at, now. We are in the home stretch (but we still have at least a couple more months of work on the frontend app). It is almost entirely different from the original, unworkable, "idea man" concepts, that were presented to me, over a year ago.
I've also been doing this for free. I can't imagine any company that wanted to make money, doing it this way. I would have been forced to deliver a crap hack, six months ago.
[0] https://littlegreenviper.com/miscellany/thats-not-what-ships...
[1] https://littlegreenviper.com/miscellany/forensic-design-docu...
[2] https://littlegreenviper.com/various/evolutionary-design-spe...
[3] https://littlegreenviper.com/various/concrete-galoshes/
[4] https://littlegreenviper.com/various/testing-harness-vs-unit...
[5] https://bmlt.app
[6] https://riftvalleysoftware.com/work/open-source-projects/#ba...
TDD is exactly not this. The main tenet of TDD is refactor early and often as you expand on the supported features. You do not write out all the tests up front, because some of those tests depend on the implementation (eg. the way you integrate components). TDD actually requires a very specific approach to testing, and some of the tests that you end up with are completely unexpected because they depend on how did you structure your code.
TDD allows you to achieve an excellent level of quality, but it does not presuppose any "detailed and complete test matrix", because that defeats the purpose.
If you do have very precise requirements, they'd usually be expressed in end-to-end tests that are commonly not done as part of a TDD workflow (even though they are crucial when it comes to scaling your team size). TDD only ensures that "internals" of your codebase are healthy, and that it's easy to refactor when requirements change. If requirements don't change that often, TDD might not win you much.
We may not be able to write them all, up front, because of the "implementation not ready" thing, but we still need to have a plan for that point.
Also, keep the tests forever. In my experience, it was a fairly rigid (and rightly so) process.
I like the idea behind TDD. I desperately want software, in general, to have drastically higher quality.
Might want to take a gander at [4], above. I take Quality very seriously.
That said, I don’t think they do a “legal” review, but they do seem to look for things like private API use, general stability, and other things like that. In one instance, they ran into an obscure crash, that I missed, in my testing.
If it’s just the build, it’s almost instantly approved.
During this project, I have made hundreds of TestFlight releases.
Also, they are constantly logging in (my app has user accounts). That is probably bot-driven. The profile photos are weird. There doesn't seem to be a real pattern to that. I do think that some of these logins were by humans, though. This was because of the type of information that was changed.
I also see the user logins for testing from Apple networks. I'd be surprised if they're bots due to the annoyance of setting up and maintaining BrowserStack-like tools. I watch the Apple logs carefully, and some of them definitely behave like humans, at least!