Leveraging Program Commonalities And Variations For Systematic Software Development And Maintenance