I thought that we’d solved this problem - don’t do estimates but rather adjust what we build to fit the available time. And estimates of what is going to be shipped get more and more accurate as time goes on (because you can ship what you’ve already built), whereas estimates of time remaining can continue to be wildly inaccurate for as long as you like (scope creep etc).
Then the end of the allotted time you have a product. Maybe it’s not good enough. So you either give up or you allot more time to it. But the product should be usable as-is and solve some of your problems.
Problem I have with the above is that it requires developers to be honest and put in consistent effort, but that’s more of a leadership and motivation issue.