This document discusses managing variability in software applications. It introduces generative programming as an approach to deal with software system families and reusable components. Generative programming uses a generator to automate the assembly of application implementations from configurable components based on domain-specific product configurations. This increases productivity and quality by reducing complexity and errors compared to point solutions for each customer. The key steps are domain analysis, domain design, domain implementation, and technology projection to implement the generator.