The classic cognitive trick--people, unless specifically trained not to, will always estimate the best possible scenario, even if past experience has told them that the best possible scenario never happens.
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.