Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software