This document discusses refactoring in software development. It defines refactoring as changing code without altering external behavior in order to improve internal structure. Reasons to refactor include improving design, making code easier to understand, finding bugs, and programming faster. Refactoring involves identifying "bad smells" in code like duplicated code, long functions, and comments. It also discusses different types of refactoring like TTD refactoring and planned refactoring. The document lists examples of bad smells and provides a bibliography of references on refactoring.