For some work types, % complete isn't that meaningful. I prefer to think of, and define, a few (5? 10?) maturity levels of each major component, and then concentrate on the work to obtain the next level of maturity. At least one of these level will correspond to the component being deliverable. But each one is externally meaningful somewhere else in the project. An engineer working on a rocket nosecone doesn't need the engine to be in a finished state, but it's helpful to know how the Prototype went. So there's a dependency between Engine = Prototype and Nosecone (Concept --> Sketch).
So you could have a list like this:
- Concept
- Sketch
- Prototype
- Beta
- Polished
Management of progress includes estimating and tracking the effort to get to the next level, and ultimately the deliverable one. And then communicating these statuses around so that decisions can be made in the whole product.