I spent some time this morning on the demo site. The workflow is horribly confusing and there is no real flow when creating a new product that will use variations. I strongly suggest when one creates a new product (click the + icon) that you ask them up-front whether it's a standard product or a variation based product. Then have the flow be applicable for that type. Having to create, save, then bounce between tabs trying to get options and features defined/configured is not very intuitive and you can't see the "picture" of what you've done or are doing. You can leave the tab based approach for "editing" a product, but to create a new one, you should have a workflow.
On the features tab, why is it asking me to select the feature value after I've defined the product as a variation? Shouldn't it just be a checkbox for each feature that I want to use for that variation? I would enter feature values for non-variation features. Thought this was supposed to be inclusive. I.e. if I selected Color that it would create a variation for each color based on the feature values for color. I could then delete the variations I don't want for this particular product.
The implementation is muddled and really looks like it was scabbed onto the object type "product".
See my concerns above for the requirement of things to be global. Defining variations to use Features is going to make feature management a huge support nightmare.
Seems that the best approach to doing variations would be to have the products table use product_id/type as the primary key and have a completely different workflow and presentation in admin for the two very different types. If you're going to do variations with the restrictions you have in place for all this global data, then you certainly want to separate it from the main product process/definition.
Since you're trying to model what Shopify does, you should make it simple and easy like Shopify (though the have significantly less capability) to establish the options that make up the variations.
But if you really wanted to do it right, you'd make variations based off options and support modifiers for the variations. Price would be a computed value based on modifiers. Then you could really leverage the power you have over your competition. It would only take adding a name field to the option combination (for customer side display) that could be defaulted based on the combination values.
I only got involved in this discussion because I'm working with a client on a Shopify integration for their MVE clients. Converting between Shopify and option combinations is awkward, but quite doable. Shopify as well doesn't have the concept of a base product unless there are no options defined. You also can't edit options once they're in place, you have to recreate a product to redefine it. But all "variants" of a Shopify product are local, not global.
So you can be "better" or "me too". But your current "me too" is 20X harder to understand/implement than Shopify.
Not trying to be overly critical, but when you take a major step like this, you should really get it right and get lots of feedback before you start developing anything so you know what to build.