When you define too much work up front, you add unnecessary management overhead. More importantly, you create a bias and stifle a team's creativity to solve the problem.
No one defines all the work up front. That's a fools errand. Assuming you know too much up front is the best way to find out you're wrong in the end. Instead we define the direction, the purpose, the reason, and a few specific "must haves" up front. The rest — all the rest, which is mostly everything — is determined during the project, by the people on the project.
Timeless advice from Derrick Reimer:
Not all projects are inherently small, but you can always break them down into smaller chunks. […]
Each incremental task brought us one step closer to a functioning v1. By shipping these tiny branches to production as we go, we became increasingly confident in the “bones” of the feature. As soon as a slice of the project was ready to test, the whole team hammered on it in production – an effective way to tease out bugs and rough spots in the user experience.
Ryan Singer talked about how they (don't) deal with roadmaps on the Signal v. Noise blog.
In short: roadmaps are a bad idea because they can create uncertainty, false expectations, and guilt. My favorite argument against long term roadmaps is the uncertainty.
We don’t have a crystal ball. Say we have features A, B, and C we want to build. We don’t know if A is going to work out as planned, and what that would mean for B. We don’t know if we’ll have a eureka in the bathtub one day, and new idea X will suddenly feel much more important than B or C. Or we might start building out B, only to realize that it’s not what we want or it’s harder than we thought and want to bail on it.
That means no explicit promises and no implicit promises either. A list on the wall or in some official strategy document is an implicit promise: “this is what we’re doing next.“ There is no official list of what we’re doing next anywhere in the company.
I strongly believe in not writing down big ideas for a product, because if it really is a good idea it will resurface, preferably multiple times.
That said, client projects are different beasts than homegrown software. Clients expect roadmaps, and there's less wiggling room for features. You can't really skip expectations, clients expect them. Mapping client projects is a different puzzle to solve.