The range of activities involved in engineering and creating software are mind-boggling in complexity. This work addresses the principles, approaches, support systems, underlying methodologies, and real case examples for re-using (and thus building on) previously existing software.