Unpredictability is becoming the pattern for modeling and testing complex software systems. Model-driven engineering (MDE) aims to manage variability at both design-time and run-time to support unpredictable changes. Feature models are used to represent variability and manage configurations. The Common Variability Language (CVL) provides a standardized way to describe and resolve variability models. MDE supports adapting systems dynamically in response to changes by automatically re-weaving aspects of models.