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.