software evolution path