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.
In Spring Framework 6.1, HttpExchange annotations, previously used only for declarative HTTP client interfaces now can be used also on controllers - meaning, you can use the same interface on the HTTP server and HTTP client side.
https://t.co/wlQ4CENzWp
🚀 New in Spring Framework 6.1: RestClient
Learn about the new HTTP client coming in Spring Framework 6.1 & @springboot 3.2. I love it and once released, it's going to be my go-to HTTP client in Spring.
https://t.co/J5OeO5ICbd
Effective Java is banned in Ohio prisons! I am not making this up. Thanks to @Cidmonster and the @MarshallProj for their fine investigative reporting. https://t.co/mAqsd9ia7V
Once you've fixed a bug, stop and question yourself: How did this bug come about?
You may notice structural issues in the code, tidy it up to prevent future bugs.
You may notice missing tests, add the tests.
If you're a software engineer, your main job is maintaining legacy code.
Why? Because building a system doesn't take long, in comparison to how long code will last, assuming the code/business are successful.
Here are the 10 commandments of maintaining legacy code.
🧵