Software estimates are one of the oldest lies we tell ourselves.
We all know they don't work, but pretend they mean something and later feel enraged when shit hits the fan.
I focused a big part of my undergrad on software estimation.
After graduating, I wrote plenty about the topic.
Then, I started working for a company where I spent years researching how to make better estimates. We sold multiple millions of dollars of software using the tools I built.
I read everything there's to read. I could recite Steve McConnel's "Software Estimation" book from top to bottom.
Here is the most important lesson I learned:
People can't estimate software. It doesn't matter who they are or how much experience they have.
Estimating software reliably is science fiction.
And the best part:
They will ask you to estimate something. They will tell you they understand it's not exact. They will promise they won't hold you accountable.
And then they will. They always do.
There are two solutions for this. Let's start with my recommendations for those who don't have a choice:
1. Remove "quick," "simple," "straightforward," "easy," and every similar word from your dictionary. Never use them. Don't let others use them when referring to your work.
2. Never volunteer an estimate. Everything you say will be used against you.
3. When forced, estimate work you know you can complete today. Always estimate with a range: "It will take me 2 - 4 hours."
4. Estimate anything you won't do today in days and weeks. Say, "I should finish that feature sometime this week." Do not estimate future work in hours.
But we all know your manager will force you to give an estimate. Here is what you should do:
1. Estimate how long you think it will take you to complete the task.
2. Multiply the number by 3. This will be the lower range of your estimate.
3. Double the lower range of the estimate. This will be the upper range.
Example: If you think something will take you 1 day of work, say "between 3 and 6 days."
Here is the funny part:
It won't take you between 3 - 6 days. This is as much bullshit as any other method you can think of.
The true solution for this problem:
Work for a company that doesn't care about estimates.
"If the train leaves every 5 minutes you don't care about a timetable. If it leaves every 2 days you want to know *exactly* when it leaves"
Great analogy from @hamrin reflecting on planning, estimating and software delivery.
@alberto_souza@mauricioaniche Eu li o artigo. Talvez o que explica um pouco esse fenômeno é o efeito Drunning-Kruger. Fica a sugestão desse tópico para exploração posterior, acho que ajudaria
Sometimes people ask me which computer science papers they should read and I can't really answer that question, but I can list the papers I've enjoyed reading over the past years.
[CONTEÚDO TÉCNICO] Dívidas técnicas de naturezas similares podem ter impactos muito diferentes na produtividade dos times de desenvolvimento. É importante que tenhamos bons critérios de priorização sobre que dívidas pagar primeiro.
https://t.co/cHXmpzbz8r