Use when the user asks what could be deleted or reduced to simplify a codebase, says "over-engineered", "find bloat", "YAGNI pass", or wants a repo-, folder-, or file-wide audit for over-engineering — hunts dead code, reinvented stdlib, needless dependencies, and single-implementation abstractions, reports ranked cuts, applies only the picks. Not a diff review and not a bug hunt
Scanned 8/31/2026
Install to Claude Code
npx -y skills add vinta/hal-9000 --skill fuck-over-engineering --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Fuck Over Engineering?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vinta-fuck-over-engineering)More formats (shields.io, HTML) on the badges page.
---
name: fuck-over-engineering
description: Use when the user asks what could be deleted or reduced to simplify a codebase, says "over-engineered", "find bloat", "YAGNI pass", or wants a repo-, folder-, or file-wide audit for over-engineering — hunts dead code, reinvented stdlib, needless dependencies, and single-implementation abstractions, reports ranked cuts, applies only the picks. Not a diff review and not a bug hunt
argument-hint: "[path, module, or area — omit for whole repo]"
user-invocable: true
---
# Fuck Over-Engineering
Audit the scope for over-engineering and report what to cut, ranked biggest cut first. The best outcome is a shorter codebase with the same behavior. The argument is the scope; without one, the whole tree. Read what the scope holds before judging it, and fan out subagents when it will not fit in context.
## Tags
- `delete:` dead code, unused flexibility, speculative feature. Nothing replaces it.
- `reuse:` bespoke code that a helper already in this codebase, or an installed dependency, already provides. Name the helper or function.
- `stdlib:` hand-rolled thing the language's standard library ships. Name the function.
- `native:` dependency or code doing what the platform already does. Name the feature.
- `yagni:` abstraction with one implementation, config nobody sets, layer with one caller.
- `shrink:` same logic, fewer lines. Show the shorter form.
## Hunt
Dependencies the stdlib or platform already covers, single-implementation interfaces, factories with one product, wrappers that only delegate, files exporting one thing, dead flags and config, hand-rolled stdlib, near-duplicates of an existing helper, special-case branches bolted onto shared paths, feature logic living in shared modules.
## Evidence
Every finding cites the evidence that makes it a cut: caller count, implementation count, or the stdlib or platform feature and the version that ships it. Count callers through dynamic dispatch, entry points, hooks, and tests, not grep alone. A published package's public export stays at zero in-repo callers. Verify `stdlib:` and `native:` claims against current docs (the find-docs skill when present) before asserting them.
A finding removes lines or concepts; moving them between files is a refactor, not a cut. Fewer, bigger cuts beat a long list: a `shrink:` that saves two lines earns a slot only when it also removes a concept.
## Output
One line per finding, numbered, ranked biggest cut first:
`N. <tag> <what to cut>. <replacement>. <evidence>. [path:line]`
`delete:` omits the replacement sentence. End with `net: -<N> lines, -<M> deps possible.` Nothing to cut: `Lean already. Ship.`
- `1. yagni: AbstractRepository with one implementation. Inline it. 1 subclass, 3 call sites typed to the base. [repo.py:88]`
- `2. reuse: hand-rolled slugify. python-slugify is installed, slugify(). 1 caller. [utils/text.py:10-31]`
- `3. delete: retry wrapper around an idempotent local call. 0 callers outside its own test. [src/net.py:52-71]`
Then offer the findings with AskUserQuestion, multiSelect, in ranked batches of four per question, and apply the picks.
## Boundaries
Over-engineering and complexity only: correctness bugs, security holes, and performance belong to a normal review pass. Trust-boundary validation, data-loss handling, security, and accessibility are never cuts. A single smoke test or assert-based self-check is the minimum, not bloat. Tests enter the report only as collateral of a deleted target.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!