We’ve probably all been asked to come up with a set of software estimates for a project with very little detail, very little time to do it and plenty of quizzical looks when it’s given. Writing software is very rarely like painting a room, where a person can reasonably give an estimate to the nearest day.
Between tech debt, lack of useful documentation and a new requirement never done before, it is very hard for a software team and the lead developer to come up with what the business often wants – an accurate estimate! (if such a thing were possible).
So, what is the solution? Story pointing, MVPs, spikes and an iterative approach all help towards a goal of better software estimation and so the success of a project, but the best, single most important element I have seen is the existence of trust between a software team and product owner. On the product owner that they won't make promises to the business based on estimates and on the software team that they will give an honest assessment of the work involved and not inflate estimates. When it works it is a powerful thing and is a million times more effective than the ‘them’ and ‘us’ attitudes that exist in some places and that do nobody any good.