A Philosophy of Software Design versus Refactoring.

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
Option A
A Philosophy of Software Design
A Philosophy of Software Design
John Ousterhout · 2021
READ FULL REVIEW →
Option B
Refactoring
Refactoring
Martin Fowler · 2019
READ FULL REVIEW →
Author
John Ousterhout
Martin Fowler
Pages
196
448
Published
2021
2019
Publisher
Yaknyam Press
Addison-Wesley
Level
intermediate
intermediate
Amazon Rating
4.6/5 (1,320)
4.7/5 (1,199)
Goodreads Rating
4.19/5 (4,100)
4.24/5 (8,860)
A Philosophy of Software Design
Strengths
+ Short and punchy: most engineers finish it in a long weekend
+ Reframes everyday design decisions with sharper language
+ Quietly contradicts several popular Clean Code rules with stronger arguments
+ 2nd edition adds three new chapters and tightens the original prose
Caveats
Examples are small and educational — some readers want bigger real-world systems
Disagrees with Robert C. Martin's Clean Code, which can be jarring if you've internalized that book
Light on coverage of distributed systems or concurrent design
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
The verdict
Choose based on your specific needs: A Philosophy of Software Design focuses on complexity as the fundamental problem of software design, while Refactoring emphasizes what refactoring is and why it is an economic activity.
A Philosophy of Software Design
Check Price on Amazon →
Refactoring
Check Price on Amazon →
Frequently asked
Which is better, A Philosophy of Software Design or Refactoring?
Choose based on your specific needs: A Philosophy of Software Design focuses on complexity as the fundamental problem of software design, while Refactoring emphasizes what refactoring is and why it is an economic activity.
Is A Philosophy of Software Design better than Clean Code?
They disagree on several specifics — Ousterhout argues for deeper modules and longer functions where Martin argues for shorter functions and tighter classes. Most engineers benefit from reading both, then trusting Ousterhout's framing on disagreements: it's the more rigorous of the two.
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.