This skill should be used when the user asks to "implement", "build", "create", "add feature", "develop", "design", "architect", "plan", "structure", "refactor", "improve", "optimize", "fix", "solve", "handle", "choose between", "which approach", or discusses implementation strategies. Apply this philosophy to ALL development work as a cornerstone principle.
Applies YAGNI and simplicity-first principles to all development work. Triggers on requests to implement, build, create, add features, develop, design, architect, plan, structure, refactor, improve, optimize, fix, solve, handle, or choose between approaches.
/plugin marketplace add FlorinPopaCodes/claude-marketplace/plugin install simplicity-first@florin-popa-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/design_guide.mdYAGNI (You Aren't Gonna Need It) is the supreme design principle. It supersedes single-responsibility, DRY, clean architecture, and tool selection concerns. When in conflict, simplicity wins.
Great software design looks underwhelming. The observable difference between clever design and simple design is that simple solutions remain maintainable despite unknown future conditions—because they remain fundamentally understandable.
Real mastery involves learning when to do less, not more. Complexity is easy to add; true expertise is knowing what to leave out.
Before implementing anything, ask these questions in order:
Challenge assumptions about requirements. Often the existing system already solves the problem:
Start with the most straightforward approach:
Design for current requirements, not imagined futures:
Every abstraction adds cognitive overhead:
When building features, start simple and add complexity only when genuinely necessary:
Level 1: In-memory / direct code
↓ (only if proven insufficient)
Level 2: Local persistence / simple abstraction
↓ (only if proven insufficient)
Level 3: Distributed / external service
Example - Rate Limiting:
Common over-engineering patterns to reject:
| Don't Do This | Do This Instead |
|---|---|
| Abstract "for reusability" with one use case | Write direct code |
| Add configuration for hypothetical needs | Hardcode current values |
| Create service layers before needed | Call functions directly |
| Design for 10x scale on day one | Design for current scale |
| Add caching "just in case" | Profile first, cache proven hotspots |
| Build plugin systems for one plugin | Write the plugin inline |
The best solution is often the most boring one:
When changing code:
Watch for these signals that a solution is too complex:
Code Smells:
Architecture Smells:
Process Smells:
Complexity is justified when:
Before adding complexity, ask: "Would I bet $1000 that we'll need this in the next 6 months?"
When implementing any feature:
When reviewing or refactoring code:
For detailed patterns, anti-patterns, and technology-specific guidance, consult:
references/design_guide.md - Comprehensive examples, layered solutions, and specific anti-patterns"It is not easy to do the simplest thing that could possibly work. It requires deeply understanding the existing system and having enough knowledge to identify the right approach. Great software design looks underwhelming because complexity has been stripped away, not added."
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.