Refactoring versus Working Effectively with Legacy Code.
Both show up on every "best" list. They're not competitors. They're a sequence. Here's which one to read first, and when.
Reviewed by Ashish Sheth · Updated July 2026
Author
Martin Fowler
Michael C. Feathers
Pages
448
456
Published
2019
2004
Publisher
Addison-Wesley
Prentice Hall
Level
intermediate
intermediate
Amazon Rating
4.7/5 (1,199)
4.2/5 (702)
Goodreads Rating
4.24/5 (8,860)
4.14/5 (4,682)
Refactoring
Strengths
+ The definitive catalog: a reference you return to for years
+ Second edition uses JavaScript, widening its reach
+ Each refactoring has clear mechanics you can follow step by step
+ Reframes refactoring as economics, not vanity cleanup
Caveats
− Reads like a reference, not a cover-to-cover narrative
− Some find the JavaScript examples less rigorous than the first edition Java
− The catalog format can feel repetitive read linearly
Working Effectively with Legacy Code
Strengths
+ The single most recommended book for taming legacy systems
+ Dozens of concrete, named dependency-breaking techniques
+ Its definition of legacy code reframed how teams talk about it
+ Techniques port across languages even where examples do not
Caveats
− Examples are in older Java, C++, and C
− Dense and reference-like rather than a light read
− Predates modern test tooling, so some mechanics feel dated
The verdict
Refactoring is the stronger pick overall, but Working Effectively with Legacy Code may suit you better if you're a developers stuck maintaining large untested codebases.
Refactoring
Check Price on Amazon →
Working Effectively with Legacy Code
Check Price on Amazon →
Frequently asked
Which is better, Refactoring or Working Effectively with Legacy Code?
Refactoring is the stronger pick overall, but Working Effectively with Legacy Code may suit you better if you're a developers stuck maintaining large untested codebases.
Is the 2nd edition of Refactoring worth it over the 1st?
Yes for most readers. The second edition modernizes examples to JavaScript, refreshes the catalog, and reflects two more decades of practice. Keep the first edition only if you specifically want the original Java mechanics. The core principles are unchanged.
Is Working Effectively with Legacy Code still relevant in 2026?
Yes. Most engineers spend more time changing existing code than writing new code, and the dependency-breaking techniques here are language-timeless. The examples use older Java and C++, but readers consistently say the seam and testing ideas outlast the syntax. Around 4,600 Goodreads readers rate it 4.14.