Defining RefactoringThe Two HatsWhy Should We Refactor?When Should We Refactor?Problems with RefactoringRefactoring, Architecture, and YagniRefactoring and the Wider Software Development ProcessRefactoring and PerformanceWhere Did Refactoring Come From?Automated RefactoringsGoing Further