We're working on a rather large project at the moment. It's fun, it's from scratch, and it's basically engineering driven, since our internal engineering team will be using it. We have enough ideas for it that we could build for at least six to nine months.
There's no way we can wait nine months before we ship it. We need to be using this thing within about two months. Earlier would be better.
So as with any product, we have to trim down our feature set. We'll have to ship something first, and then add to it. This is causing a lot of angst because we know that our consumers will spend weeks building out file formats and changing it later is going to be hard. We don't want to have to ask our customers to scrap the work that they've done, but we can't make them wait until it's perfect.
We use the Don't Preclude Principle:
You don't have to build it yet; you just have to leave yourself room to build it later.
We don't actually have to build everything we're going to wind up needing. We simply have to decide what the format will look like when we're done. Then we build pieces of it, and make sure we leave holes for the pieces we aren't doing yet. This gives us a much cleaner upgrade path. In the case of this file format, it means that right now we have something that simply ignores the values in some places. Later, when we build those features, we'll figure out what to do with the values. It's a simple thing, and only a tiny amount of work now to ignore something, but it'll prevent us from having to migrate formats later.
Think first, trim second, build third. Don't preclude your future ideas, but don't worry about building it all now. Just think far enough ahead that you know what you're not doing as well as what you're doing.