# Refactoring Refactoring is very important in relation to these topics. Just as important as the other topics covered here, is how to take good code and turn it into great code. We can use [design patterns](../patterns/index.md) to [DRY] up code and generalize abstractions. We must avoid [anti-patterns](../anti_patterns/index.md) while we do this. While they may be tempting to employ, their costs outweigh their benefits. > Shortcuts make for long days. We can also use [idioms](../idioms/index.md) to structure our code in a way that is understandable. ## Tests Tests are of vital importance during refactoring. ## Small changes [DRY]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself