“Design Patterns: Elements of Reusable Object-Oriented Software” written by John Vlissides, Ralph Johnson, Richard Helm, Erich Gamma
“Enterprise Integration Patterns” written by Gregor Hohpe
Before refactoring: have automated tests to ensure proper fucntionality + buy-in from stakeholders