I think one issue here is that it is very hard to predict domain-specific problems until you encounter them. If you're working in a domain you are already experienced in, a top-down approach will likely work fine. However, if you are attempting something new, you're bound to run into unforeseeable implementation problems. This is why I believe improving your skills related to iteration speed is just as important as planning.
People often think that the top-down approach is just better than the bottom-up approach, but I think there are lots of cases where the bottom-up approach is just as important as the top-down approach. See the "Top Down versus Bottum Up" section from The Art of UNIX Programming book. [1]
[1]: https://www.arp242.net/the-art-of-unix-programming/#id289955...