I have been thinking about how a specification concept might be implemented in an ideal world for us, and here's what I've come up with.
I would like to see the concept of an "Expansion Entity Type". This entity type would be exactly the same as a normal entity type except - if could not include any mandatory fields, and it has to specify which normal entity type it expands (no configurable inbound links beyond that). Each expansion entity can only be attached to a single normal entity and each normal entity can have 0 or 1 of each expansion entity type.
What does this give us? Fields that might normally live in specifications, and in some cases fieldsets, should be moved to an expansion entity. You can then have an expansion entity for your items including:
Chainsaws containing fields for:
Bar length
Chain length
Lawn mowers containing
Deck size,
Number of blades.
Battery powered equipment
Battery size
Battery Voltage
Internal Combustion powered equipment
Engine size
Fuel type
When I set up an item I can pick the battery powered expansion type, and the chainsaw expansion type and I now have those fields available.
Because we are limiting each item to have 0 or 1 of each expansion type the UI, the APIs, etc. can just include all the fields and outbound link types from each of the included expansion entities, so it's not confusing for users to navigate to different tabs or traverse links, and it's also easy for integrations because the fields and link types are assembled at a very low level.
But it gets better. ALSO we can assign completeness criteria to expansion entities so we only have completeness rules for these things when the expansion entity is included, and all of a sudden we have much smarter completeness rules.
Finally expansion entities can go beyond product types and include markets, add all your amazon fields to an amazon expansion entity and only include it when you are selling a particular product on amazon.
It gives us much better field efficiency, increased usability, and the migration path would be super simple as we're just dealing with field types on an entity.