Refactoring: improving the design of existing code