Dynamically Adaptable Software is all about Modeling Context Variability and Avoiding Failures