Some notes on the talk Get a Whiff of This by Sandi Metz.
Code Smells are indicators to common problems. They are very specific and have names (e.g. Speculative Generality). Refactorings are recipes (solutions) for Code Smells. They are like a cookbook for code. Recipes use other recipes to refactor code.
You should not always refactor. If code does not change, you might not need to refactor it.
Think of objects as players of a role not as instances of their class. Use Dependency Injection. Try to remove mocks/stubs from your tests.
I should read Martin Fowlers book about Refactoring.
She mentions a Tool to identify Code Smells (for Ruby?): Reek
Looking at your old code and hating it is awesome. It shows that you learned and improved in the last years.