Usually good software is robust – it can tolerate some deviations in the environment. For example, if user presses character keys while entering numeric data the software can be designed to ignore such incorrect key presses. While robustness to the software can be added at the design or even the implementation stage, adaptability requirements cannot be added at such late stages. Adaptability differs from robustness in the scale of environment change – adaptable software can tolerate much larger deviations in the environment than a robust one. Adaptability can be enforced only if it is considered at the architecture development stage.