Unit test to help catch regressions. If you are confident in your test catching a good portion of bugs from refactoring, at least you feel confident refactoring. Worst case, at least you ensured your code is testable. There is nothing worse than refactoring untestable code.
Self-documenting code and when it fails to self-document, comments or refer to a wiki page.
This, to a point.
Other things help :