Reuse of software assets has been, and continues to be the holy grail of software engineering. In this thesis we argue that a prerequisite for reusability is variability. In order to reuse a piece of software, it needs to be adapted to the environment in which it will be reused. With the arrival of object oriented frameworks and software product lines, variability and the associated variability techniques are becoming more and more important. In this thesis, four papers are included that all, in some way, are related to variability. In the introduction we discuss object oriented frameworks and software product lines; we introduce a conceptual model for reasoning about variability; we take a closer look at so called late variability and examine the consequences of variability for the development process of software product lines and software product line based applications.