elliotjlt/claude-skill-potions/keep-it-simple

Claude Code and agent skill by elliotjlt/claude-skill-potions

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Before adding abstraction, asks "do we need this now?" Activates when proposing factories, abstract classes, config-driven behavior, or "for future extensibility." Resists over-engineering. Three similar lines are better than a premature abstraction.

Install

npx vskill@latest install elliotjlt/claude-skill-potions/keep-it-simple

SKILL.md

Keep It Simple

<purpose> Claude loves elegant abstractions. User asks for a button, Claude builds a component factory with theming support. The problem: abstractions have costs. They obscure intent, add indirection, and often solve problems that never materialize. This skill enforces YAGNI - You Aren't Gonna Need It. </purpose>

When To Activate

<triggers>

  • About to create a factory, builder, or abstract base class
  • Proposing a config-driven solution
  • Using phrases like "for flexibility" or "in case we need"
  • Creating a utility for something done twice
  • Adding parameters "for future use"
  • Building infrastructure before the feature

</triggers>

Instructions

The YAGNI Test

Before adding abstraction, answer honestly:

markdown
## Complexity Check
**I want to add:** [describe the abstraction]
**Because:** [your justification]
**Is this solving a problem we have TODAY?**
-[ ] Yes, we have 3+ concrete cases now
-[ ] No, but we might need it later
**If "might need later":** Don't build it. Stop.
The Rule of Three

Abstract when you have three concrete cases, not before:

SituationAction
1 caseJust write it
2 casesCopy-paste is fine. Note the duplication.
3 casesNow consider abstracting
// With 1 button: just make the button
<button class="blue">Save</button>
// With 2 buttons: copy-paste is fine
<button class="blue">Save</button>
<button class="red">Delete</button>
// With 3+ buttons: NOW consider a component
<Button color="blue">Save</Button>
<Button color="red">Delete</Button>
<Button color="gray">Cancel</Button>
Abstraction Warning Signs

Watch for these phrases in your thinking:

  • "For flexibility..." → Flexibility for what? Do we need it?
  • "In case we need to..." → We don't need to yet.
  • "This could be configurable..." → Is anyone asking to configure it?
  • "To support future..." → Future isn't asking for support.
  • "For extensibility..." → Extend it when you need to.

Watch for these patterns:

  • Factory that produces one type
  • Config object with one option
  • Abstract class with one implementation
  • Utility function used once
  • Parameters that are always the same value
Simplest Solutions
Instead ofTry
Factory patternDirect instantiation
Abstract base classConcrete class
Config-driven behaviorHardcoded behavior
Dependency injectionDirect imports
Custom event systemCallbacks
Generic utilityInline code
When Abstraction IS Right

Abstraction is warranted when:

  • You have 3+ concrete, existing cases
  • The pattern is stable (not still changing)
  • The duplication is causing actual bugs
  • You're building a library for others

Output Format

When resisting complexity:

markdown
## Keeping It Simple
**Considered:** [the abstraction]
**Rejected because:** [only N cases / speculative / etc.]
**Instead:** [simpler approach]

When complexity is warranted:

markdown
## Abstraction Justified
**Adding:** [the abstraction]
**Because:** [3+ cases / causing bugs / stable pattern]
**Cases:** [list the concrete cases]

NEVER

  • Build factories for single types
  • Create abstract classes before concrete ones
  • Add config options nobody asked for
  • Build "infrastructure" before the feature
  • Say "for future extensibility" as justification
  • Create utilities for one-time operations

ALWAYS

  • Start with the simplest thing that works
  • Wait for three concrete cases before abstracting
  • Prefer duplication over premature abstraction
  • Let patterns emerge from real usage
  • Ask "do we need this TODAY?"

Example

User: "Add a way to send notification emails"

Over-engineered approach:

NotificationFactory
├── EmailNotification
├── SMSNotification (might need later!)
├── PushNotification (could be useful!)
└── NotificationConfig
├── templates
├── retryPolicy
└── queueSettings

YAGNI approach:

python
def send_notification_email(user, subject, body):
email_service.send(
to=user.email,
subject=subject,
body=body
)

Why simpler is better:

  • User asked for email. Just do email.
  • SMS and Push aren't requested. Don't build them.
  • Config can be added when there's something to configure.
  • If we need SMS later, we'll add it then.

The 5-line function solves the actual problem. The factory solves imaginary ones.

<failed-attempts> What DOESN'T work:

  • "Just in case": Building for cases that don't exist yet. They may never exist.
  • "It's more elegant": Elegance is not a requirement. Working is a requirement.
  • "This pattern is best practice": Best practices are context-dependent. A pattern for 100 cases is overkill for 1.
  • Abstracting after 2 cases: You don't know the pattern yet. Wait for the third.
  • Config files for one setting: Hardcode it. Add config when there are multiple settings to configure.
  • "Future-proofing": You can't predict the future. Build for now.
  • Dependency injection everywhere: Direct imports are fine. DI is for when you actually need to swap implementations.
  • Generic utilities from day one: Write the specific code. Extract utility when you have 3+ uses.
  • "Flexibility": Flexibility without a use case is just indirection.
  • Building the platform before the product: Ship the feature. Build infrastructure when you need it.

</failed-attempts>

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
61
Repository forks
2
7-day trend score
20

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 9 Apr 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/elliotjlt/claude-skill-potions/keep-it-simple/badge)](https://verified-skill.com/skills/elliotjlt/claude-skill-potions/keep-it-simple)

Something wrong with this skill or its page? Tell us.