Most of my designs have been ultimately constrained by the resources available *in* the design (which, in turn, is usually dictated by price, power and/or size constraints).
I've been discussing this with colleagues who have invariably had similar experiences. None of us could "upgrade" a product after release. You might change the feature set or fix bugs but the complexity of the product is effectively limited by the design that is first "sold".
This differs from things like the desktop market or even high-end commerce/industry (e.g., where you could install a larger disk, faster processor, additional peripherals, etc).
A pleasant consequence of this constraint is that the product/system is constrained in complexity, as well. You don't start out with a microwave oven and end up evolving (creeping featurism) to become a space shuttle!
How have folks working with more "unconstrained"/open-ended designs addressed this problem?