So many of the comments I hear about estimation boil down to "but we have to plan and meet our goals." That's a deep failure to grasp the concept (of agile ways of working). We plan strategically, and our goals are strategic. The details of what we have to build to meet those strategic goals are discovered incrementally by releasing small bits of valuable software and getting feedback on it. We defer details, in other words, to the last responsible moment. Defining those details too early doesn't really work because the customers themselves won't know what they need until they have something in their hands. The details are invariably wrong. Too-early focus on details also often leads to building things nobody wants or needs.
There are occasional exceptions, of course, in the corners of the program where regulations, or the actual behavior of actual hardware, or necessary algorithms apply, but those bits comprising the entire system are exceedingly rare.