Anti-Slop
Generic AI output has tells. Catch them before the user does.
Procedure
The five categories
- Filler prose. "It's worth noting that...", "In this implementation, we...", "Let me explain how this works..." — delete on sight. If a sentence doesn't add information, cut it.
- Over-commenting. Code that explains what it does (
// loop through arrayabovefor (const x of arr)). The code is the comment. Comments should explain why, not what. - Defensive over-engineering. Try/catches around things that can't throw. Null checks on values that just got validated. Validation of external API inputs you control. If a failure mode can't happen, don't code for it.
- Unnecessary abstractions. Helper functions called once. Config objects for two settings. Factory classes with one implementation. If it's only used once, inline it.
- Emoji headers. "🚀 Quick Start", "✨ Features", "💡 Tip" — emoji in docs screams "AI wrote this." Strip them.
The test
Before declaring done, read your output and ask: "If a human wrote this, would their coworker assume they were trying too hard?"
If yes, cut.
When in doubt
Show your output to a fresh pair of eyes (a subagent with no context). If they say "this is generic AI," trust them and rewrite.
When to skip
- The user is asking for a specific style and slop is what they want (rare, but it happens — internal brainstorming, first drafts).
- The output is throwaway (a debug print, a test).
Worked example
One review note, before and after the five categories.
Before
// Loop over each row and push it into the result array
// It's worth noting that this implementation is straightforward.
for (const row of rows) result.push(row);
After
for (const row of rows) result.push(row);
Anti-patterns
- A sentence that restates the heading without adding information.
- A comment that narrates the next line of code.
- A helper, config object, or factory used once.
- Emoji headings or "Get started in seconds" filler.
Verification Checklist
- [ ] Every sentence adds information or a decision. (step 1)
- [ ] Comments explain why, not what. (step 2)
- [ ] No abstraction exists without a second caller. (step 4)
- [ ] No emoji headers or marketing filler remain. (step 5)
- [ ] Error handling covers failures that can actually happen. (step 3)