What is refactoring?
Process of altering source code so as to leave its functionality unchanged
Why refactor?
Improve maintainability, reusability, legibility, extensibility
What are code smells?
an indication that there may be a deeper problem or design flaw in your code
not technically a bug, but if “left untreated” may lead to bugs later
What are code smells examples?
Duplicated code
Method too big
Classes have too many instance variables
Subclasses very similar
Classes with too much code: God Class or Blob anti pattern
Shotgun Surgery: change something, you have to make lots of other little changes throughout the code