Variability in Software Systems The Key to Software Reuse