By explicitly modeling and managing variability, software product line engineering provides a systematic approach for creating a diversity of similar products at low cost, in short time, and with high quality. This tutorial focuses on the two principle differences of software product line engineering when compared to single systems development: The differentiation of two key development processes (domain engineering and application engineering) and the explicit representation and management of variability. We characterize the two processes and their main activities and introduce the orthogonal variability modeling approach (OVM). We further illustrate the OVM approach in the product line requirements engineering and product line testing activities. Categories and Subject Descriptors D.2.10 [Software Engineering]: Design ? methodologies; D.2.13 [Software Engineering]: Reusable Software ? domain engineering, reusable libraries General Terms Documentation, Design, Languages, Verification...