I realize this has happened to me many times, from different people and different places. So I believe this is not problem that's only happening to me, but the whole development industry in general.
Warning: Rant post ahead.
To illustrate, I'll give a fictional story. Kind of like a story I guess? Kind of fictional too?
Often when people plan a schedule, they will ask the domain expert, how much time do you think this needs. Suppose you say 1 week, with some luck, they'll put it down on paper and expect delivery in a week. Meeting's done and everyone leaves the room satisfied.
Here's the problem. We are making hidden assumptions.
We are assuming, that the person working on it will be available throughout the week.
We are assuming, that there will not be problems encountered along the way.
We are assuming, the path to delivery is one straight nicely paved road.
We are assuming, that the person can work at 100% efficiency the whole week.
We are assuming, that the person will work on this task, and only this task.
We are assuming, there will be no change to specifications.
See the problems now?
This is the reason why people miss schedule.
This is the reason why people get burnout.
This is the reason why the product doesn't function perfectly.
This, is the reason why projects get delayed.
I often break task down so I can give a better estimate. Based on that, I'll do a perfect multiplication to estimate the project. I conned my own term "perfect multiplication" to mean, that the task is 100% the same, and that humans doen't make mistakes, there is not delay in loading speed etc.
To put it in perspective, if a marathon runner can run 400m in 1 minute, a perfect multiplication means he can run 24km in an hour. Which is quite possible for the top runners, but you get the idea.
Unfortunately, we don't live in a perfect world. If someone can sprint 400m in under a minute, it's pretty insane to assume he can continue that record for an hour. And here we are thinking about weeks, months and years.
Good thing that bigger projects do get more relaxed estimates. At the same time, this probably enforces the mindset that simple projects shouldn't be taking too long.
Time lost that are unaccounted for. Lunch time. Phone calls. Emails. Adhoc tasks. Bug fixes. Research. Page reloads (trust me, this adds up). Poor internet connections. Multitasking (this is particularly annoying). Meetings. Changes to specs or designs. More meetings. More discussions, so on and so on.
As a developer, multitasking is the most taxing in my opinion. It requires you to switch your mindset from one project to another and another, and another, then back to where you left off.
"Hey, there's a call from client asking how to do this something. Can you take the call please?"
Oh wait, one more thing before you get back to where you left off.
So in order to meet the deadline, which I kind of gave myself, I worked double hard, triple hard, bringing the work back if I didn't get to work on it much during the office hours, pouring in all the knowledge, shortcuts, and tips gained over the years of experience, to work at maximum efficiency.
After 1 week. Day of delivery finally came. The product is probably 99% done, less a few minor bugs here and there. Nevertheless, its good enough to be sent to the client. I thought well, good job. Finally I can do other tasks in my backlog. Everyone is satisfied.
Client feedback came, they experienced some bugs (some are real, some are just the behaviors of the software).
But nothing beats...
"We're so sorry, could we add ...".
"Can we make some minor change to the design?"
"This xxx feature shouldn't work like this, can you please change it to ..."
"Hey, we've got some client's feedback, just some minor changes, please get it done ASAP, and don't forget we're behind time for project xxx"
I've tried giving estimates with some
x factor considered. But people will be like, "You need that long for that simeple stuff?".
I think most people can understand a marathon runner's limitation because most people have tried running at some point in their lives, and they know and understand the amount of effort and it will take to perform unconditionally for an hour at 100% efficiency.
But project mangers or business owners, who hasn't sat in your seat, who hasn't had to solve that weird CSS flickering thats only happening in Safari, or that pesking weird space thats only appearing in iOS, this is not something they will ever understand.
Why are you still reading?
Again, this is a rant post. The above is a fictional example, but very much a possible scenario that can happen in real life.
I don't have a solution. But that's fine. People have been trying to solve problems for millions of years. After million of years of evolution, the world is still plague with problems. It's much much better, but never perfect.
If there's anything to take away, I'll recommend getting to know the word "grit". Learn as much as you can. Drink more coffee and keep coding. Peace 😇.