What problem does it solve? Codebases accumulate unnecessary abstractions: wrapper-only functions, single-implementation interfaces, unused generics, and speculative configuration options that add maintenance cost without delivering value. This Skill provides concrete criteria for deciding whether an abstraction is justified and for auditing existing code for needless complexity. ## Core Features & Use Cases - Abstraction justification test: Indirection must enforce an invariant, serve as a genuine seam in use today, isolate a volatile dependency, or be a published API; otherwise prefer the direct call. - Language-specific pattern catalog: Flags known anti-patterns in Go (producer-side interfaces, stdlib wrapper packages), Rust (invariant-free newtypes, single-impl traits), Zig (single-instantiation comptime generics), and C (single-implementation vtables, opaque handle layers). - Tidy First workflow: Separates pure structural changes (deleting dead code, inlining wrappers) from behavior changes, keeping them in distinct commits with tidyings first. - Use Case: When reviewing a Rust pull request that introduces a trait with one implementation and no test double, apply the catalog to recommend replacing it with a concrete type until a second consumer appears. ## Quick Start Review this Go package for unnecessary abstractions and YAGNI violations, and suggest which wrappers or interfaces to remove.