From code-review
Code review guidance based on Russ Cox's philosophy of simplicity, orthogonality, and anti-bloat. Use when reviewing code in any language, conducting design reviews, dependency audits, or complexity analysis. Emphasizes the four root causes of software bloat - feature creep, wrong-layer fixes, dependency explosion, and low quality standards.
How this skill is triggered — by the user, by Claude, or both
Slash command
/code-review:code-review-russ-coxThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Apply Russ Cox's engineering principles to build maintainable software through vigilance and discipline.
Apply Russ Cox's engineering principles to build maintainable software through vigilance and discipline.
Maintenance cost vastly exceeds implementation cost. Every decision optimizes for long-term sustainability, not short-term convenience.
Orthogonality principle: Programming features should be basis vectors in a high-dimensional space. They should:
Simplicity is complicated: Simple solutions require more thought than complex ones. The goal is to make the problem simpler, not just move complexity around.
The useful fallacy: A feature can be useful but still not worth the permanent maintenance burden.
Review questions:
Red flags:
Good patterns:
The wrapping trap: When facing a problem, we often wrap/patch at a higher layer instead of fixing the root cause at the correct layer.
Review questions:
Red flags:
Good patterns:
Example: Instead of wrapping validation errors three layers up, add proper constraints at the data layer and validation at the input boundary.
The transitive trap: Every dependency brings its own dependencies. You're responsible for maintaining all of them.
Review questions:
Red flags:
Good patterns:
Dependency audit checklist:
The technical debt lie: "We'll clean this up later" almost never happens. The debt compounds with interest.
Review questions:
Red flags:
Good patterns:
Can you explain this to a smart junior developer in 2 minutes? If not, it's probably too complex.
What happens if we delete this? If "nothing bad", delete it.
Can existing primitives combine to solve this? If yes, don't add new ones.
Will I understand this code at 2am during an outage in 6 months? If no, simplify.
Do we have 3+ concrete use cases for this abstraction? If no, it's premature. Solve directly first.
Before detailed review:
Architecture & design:
Code quality:
Dependencies:
Instead of: "This is too complex" Say: "This has X layers of indirection. Could we solve directly: [sketch]. Benefits: [list]. Trade-offs: [list]."
Instead of: "Don't add this dependency"
Say: "This adds N dependencies. Alternative: [standard lib / 20 lines of code]. For our use case, simpler approach wins because [reason]."
Instead of: "This abstraction is wrong" Say: "We have 1 use case, this adds abstraction for future needs. Suggest: solve directly now, abstract when pattern emerges (3+ uses)."
Instead of: "Rewrite this" Say: "Current approach: [analysis]. Maintenance implications: [list]. Alternative: [sketch]. Which approach better fits our long-term goals?"
The kitchen sink: Adding features "because we might need them someday"
The golden hammer: Using familiar pattern even when inappropriate
The framework fever: Adopting frameworks for simple problems
The perfect system: Over-engineering for hypothetical scale
The busy work: Changes that increase code size without proportional value
Legitimate reasons:
How to compromise well:
Never compromise on:
Go: Strong standard library, explicit error handling, small interfaces, composition over inheritance
Python: Rich standard library, avoid Django for simple needs, prefer composition, type hints for clarity
JavaScript/TypeScript: Beware npm dependency explosion, prefer standard APIs, TypeScript for maintainability
Rust: Strong std lib, cargo minimizes dependency pain but still audit trees, zero-cost abstractions are fine
Java: Rich JDK, avoid framework soup (Spring for everything), prefer simple servlets for simple needs
C/C++: Minimal dependencies by culture, STL/standard library first, avoid NIH but also avoid dependency hell
The philosophy applies universally - adjust tactics per language ecosystem.
A good review achieves:
Remember: Perfect is the enemy of good. The goal is sustainable, maintainable software - not theoretical perfection.
"A little copying is better than a little dependency." - Go Proverbs
"Make it correct, make it clear, make it concise, make it fast. In that order." - Wes Dyer
The essence: Build software that humans can understand and machines can execute, not the reverse.
npx claudepluginhub wilbeibi/claude-toolkit --plugin code-reviewAudits entire codebase for structural quality, file sprawl, thin wrappers, leaked logic, spaghetti growth, and dependency freshness via context7. Encourages code-judo simplifications.
Reviews diffs for over-engineering: reinventing stdlib, unneeded deps, speculative abstractions, dead flexibility. One line per finding with suggested replacement. Complements correctness review.
Reviews code for design smells, tight coupling, missing abstractions, and architectural risks using principles from 12 classic software engineering books like Clean Code and The Pragmatic Programmer. Use before refactors, onboarding, or design reviews.