/fundamentals
Verifies code quality including naming conventions, function size, and DRY principles. SUGGESTION gate that offers polish items during /own:done flow.
$ npx -y skills add DanielPodolsky/ownyourcode --skill fundamentals --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/fundamentals
Context preview
The summary Claude sees to decide when to auto-load this skill.
Verifies code quality including naming conventions, function size, and DRY principles. SUGGESTION gate that offers polish items during /own:done flow.
SKILL.md
fundamentals.SKILL.mdname: fundamentals-gate
description: Verifies code quality including naming conventions, function size, and DRY principles. SUGGESTION gate that offers polish items during /own:done flow.
Gate 5: Fundamentals Review
> "Good code is not just code that works. It's code that others can work with."
Purpose
This gate checks general code quality against engineering standards. Issues are SUGGESTIONS, not blockers — they're polish, not problems.
Gate Status
- **PASS** — Code quality is solid
- **SUGGESTIONS** — Minor improvements recommended
---
Gate Questions
Question 1: Naming Clarity
> "Would a new developer understand what `[variable/function]` does from its name alone?"
**Looking for:**
- Descriptive, intention-revealing names
- No abbreviations or single letters
- Boolean prefixes (is, has, can)
- Function verbs (get, set, handle)
Question 2: Function Focus
> "Can you describe what this function does in one sentence without using 'and'?"
**Looking for:**
- Single responsibility
- Reasonable size (under 30 lines)
- Clear input/output relationship
- No hidden side effects
Question 3: Code Reuse
> "I see this pattern in a few places. Is it intentional duplication or should it be extracted?"
**Looking for:**
- Awareness of duplication
- Appropriate abstraction (rule of three)
- Not over-engineering for one-time use
---
Fundamentals Checklist
Naming
- [ ] Variables are descriptive (no `temp`, `data`, `x`)
- [ ] Booleans prefixed with `is`, `has`, `can`, `should`
- [ ] Functions start with verbs
- [ ] No unnecessary abbreviations
- [ ] Consistent naming patterns
Functions
- [ ] Single responsibility
- [ ] Under 30 lines (generally)
- [ ] Fewer than 4 parameters
- [ ] Early returns instead of deep nesting
- [ ] No magic numbers (use named constants)
Structure
- [ ] Related code grouped together
- [ ] Appropriate file organization
- [ ] Clear separation of concerns
- [ ] Consistent formatting
Comments
- [ ] Explain WHY, not WHAT
- [ ] No commented-out code (delete it)
- [ ] No obvious comments (`// increment counter`)
- [ ] Complex logic documented
---
Response Templates
If PASS
✅ FUNDAMENTALS GATE: PASSED
Code quality is solid:
- Naming is clear and consistent
- Functions are focused
- Good structure overall
All gates passed! Let's move to code review...
If SUGGESTIONS
💡 FUNDAMENTALS GATE: SUGGESTIONS
A few polish items for consideration:
**Suggestion 1: [Naming]**
`const d = new Date()` → `const createdAt = new Date()`
Why: Descriptive names help future readers
**Suggestion 2: [Function size]**
`processOrder()` is 80 lines. Consider splitting into:
- `validateOrder()`
- `calculateTotal()`
- `saveOrder()`
**Suggestion 3: [Magic number]**
`if (status === 2)` → `if (status === STATUS.ACTIVE)`
Why: Named constants are self-documenting
These are suggestions, not blockers. The code works — this is about polish.
Proceed to code review? Or address these first?
---
Common Issues to Check
1. Unclear Naming
❌ const d = new Date();
const temp = getUser();
const flag = true;
✅ const createdAt = new Date();
const currentUser = getUser();
const isAuthenticated = true;
2. Magic Numbers
❌ if (status === 2) { ... }
setTimeout(fn, 86400000);
✅ const STATUS = { ACTIVE: 2, INACTIVE: 1 };
if (status === STATUS.ACTIVE) { ... }
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
setTimeout(fn, ONE_DAY_MS);3. Deep Nesting
❌ function check(user) {
if (user) {
if (user.active) {
if (user.role === 'admin') {
return true;
}
}
}
return false;
}
✅ function check(user) {
if (!user) return false;
if (!user.active) return false;
if (user.role !== 'admin') return false;
return true;
}4. God Functions
❌ function processOrder(order) {
// 100+ lines of validation, calculation, saving, emailing...
}
✅ function processOrder(order) {
validateOrder(order);
const total = calculateTotal(order);
await saveOrder(order, total);
await sendConfirmation(order);
}5. Meaningless Comments
❌ // Increment counter
counter++;
// Get user
const user = getUser();
✅ // Rate limit: max 100 requests per minute per user
if (requestCount >= 100) {
throw new RateLimitError();
}---
Socratic Fundamentals Questions
Instead of pointing out fixes, ask:
1. "What does `d` stand for? Would a new developer know?" 2. "What does the number 2 mean in this context?" 3. "Can you describe this function without saying 'and'?" 4. "I see this pattern three times — is that intentional?" 5. "Would you understand this comment in 6 months?"
---
Standards Reference
See detailed patterns in:
- `/standards/global/naming-conventions.md`
- `/standards/global/error-handling.md`
- `/standards/frontend/component-architecture.md`
---
Naming Quick Reference
| Type | Pattern | Example | |------|---------|---------| | Variable | camelCase, descriptive | `userEmail`, `isLoading` | | Boolean | is/has/can/should prefix | `isActive`, `hasPermission` | | Function | verb + noun | `getUser()`, `handleSubmit()` | | Constant | UPPER_SNAKE_CASE | `MAX_RETRIES`, `API_URL` | | Class | PascalCase | `UserService`, `ApiClient` |
---
When to Skip Suggestions
Not every suggestion needs addressing:
- **Prototype code** — Polish can wait
- **Time pressure** — Ship working code, polish later
- **Minimal impact** — If it's just style preference
- **Existing patterns** — Match codebase conventions even if imperfect
Fundamentals are about growth, not perfection. Note suggestions for learning, but don't block shipping.
Read more
name: fundamentals-gate description: Verifies code quality including naming conventions, function size, and DRY principles. SUGGESTION gate that offers polish items during /own:done flow.
Gate 5: Fundamentals Review
> "Good code is not just code that works. It's code that others can work with."
Purpose
This gate checks general code quality against engineering standards. Issues are SUGGESTIONS, not blockers — they're polish, not problems.
Gate Status
- **PASS** — Code quality is solid
- **SUGGESTIONS** — Minor improvements recommended
---
Gate Questions
Question 1: Naming Clarity
> "Would a new developer understand what `[variable/function]` does from its name alone?"
**Looking for:**
- Descriptive, intention-revealing names
- No abbreviations or single letters
- Boolean prefixes (is, has, can)
- Function verbs (get, set, handle)
Question 2: Function Focus
> "Can you describe what this function does in one sentence without using 'and'?"
**Looking for:**
- Single responsibility
- Reasonable size (under 30 lines)
- Clear input/output relationship
- No hidden side effects
Question 3: Code Reuse
> "I see this pattern in a few places. Is it intentional duplication or should it be extracted?"
**Looking for:**
- Awareness of duplication
- Appropriate abstraction (rule of three)
- Not over-engineering for one-time use
---
Fundamentals Checklist
Naming
- [ ] Variables are descriptive (no `temp`, `data`, `x`)
- [ ] Booleans prefixed with `is`, `has`, `can`, `should`
- [ ] Functions start with verbs
- [ ] No unnecessary abbreviations
- [ ] Consistent naming patterns
Functions
- [ ] Single responsibility
- [ ] Under 30 lines (generally)
- [ ] Fewer than 4 parameters
- [ ] Early returns instead of deep nesting
- [ ] No magic numbers (use named constants)
Structure
- [ ] Related code grouped together
- [ ] Appropriate file organization
- [ ] Clear separation of concerns
- [ ] Consistent formatting
Comments
- [ ] Explain WHY, not WHAT
- [ ] No commented-out code (delete it)
- [ ] No obvious comments (`// increment counter`)
- [ ] Complex logic documented
---
Response Templates
If PASS
✅ FUNDAMENTALS GATE: PASSED Code quality is solid: - Naming is clear and consistent - Functions are focused - Good structure overall All gates passed! Let's move to code review...
If SUGGESTIONS
💡 FUNDAMENTALS GATE: SUGGESTIONS A few polish items for consideration: **Suggestion 1: [Naming]** `const d = new Date()` → `const createdAt = new Date()` Why: Descriptive names help future readers **Suggestion 2: [Function size]** `processOrder()` is 80 lines. Consider splitting into: - `validateOrder()` - `calculateTotal()` - `saveOrder()` **Suggestion 3: [Magic number]** `if (status === 2)` → `if (status === STATUS.ACTIVE)` Why: Named constants are self-documenting These are suggestions, not blockers. The code works — this is about polish. Proceed to code review? Or address these first?
---
Common Issues to Check
1. Unclear Naming
❌ const d = new Date(); const temp = getUser(); const flag = true; ✅ const createdAt = new Date(); const currentUser = getUser(); const isAuthenticated = true;
2. Magic Numbers
❌ if (status === 2) { ... }
setTimeout(fn, 86400000);
✅ const STATUS = { ACTIVE: 2, INACTIVE: 1 };
if (status === STATUS.ACTIVE) { ... }
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
setTimeout(fn, ONE_DAY_MS);3. Deep Nesting
❌ function check(user) {
if (user) {
if (user.active) {
if (user.role === 'admin') {
return true;
}
}
}
return false;
}
✅ function check(user) {
if (!user) return false;
if (!user.active) return false;
if (user.role !== 'admin') return false;
return true;
}4. God Functions
❌ function processOrder(order) {
// 100+ lines of validation, calculation, saving, emailing...
}
✅ function processOrder(order) {
validateOrder(order);
const total = calculateTotal(order);
await saveOrder(order, total);
await sendConfirmation(order);
}5. Meaningless Comments
❌ // Increment counter
counter++;
// Get user
const user = getUser();
✅ // Rate limit: max 100 requests per minute per user
if (requestCount >= 100) {
throw new RateLimitError();
}---
Socratic Fundamentals Questions
Instead of pointing out fixes, ask:
1. "What does `d` stand for? Would a new developer know?" 2. "What does the number 2 mean in this context?" 3. "Can you describe this function without saying 'and'?" 4. "I see this pattern three times — is that intentional?" 5. "Would you understand this comment in 6 months?"
---
Standards Reference
See detailed patterns in:
- `/standards/global/naming-conventions.md`
- `/standards/global/error-handling.md`
- `/standards/frontend/component-architecture.md`
---
Naming Quick Reference
| Type | Pattern | Example | |------|---------|---------| | Variable | camelCase, descriptive | `userEmail`, `isLoading` | | Boolean | is/has/can/should prefix | `isActive`, `hasPermission` | | Function | verb + noun | `getUser()`, `handleSubmit()` | | Constant | UPPER_SNAKE_CASE | `MAX_RETRIES`, `API_URL` | | Class | PascalCase | `UserService`, `ApiClient` |
---
When to Skip Suggestions
Not every suggestion needs addressing:
- **Prototype code** — Polish can wait
- **Time pressure** — Ship working code, polish later
- **Minimal impact** — If it's just style preference
- **Existing patterns** — Match codebase conventions even if imperfect
Fundamentals are about growth, not perfection. Note suggestions for learning, but don't block shipping.
Claude Code workflow for AI-mentored development. Work efficiently with Spec-Driven Development and the 6 Gates. Built to fight cognitive offloading — for developers using AI to grow and maintain ownership.
Repo: DanielPodolsky/ownyourcode
Other skills on ownyourcode.
- /resume-bullets
Transforms completed work into powerful resume bullet points with action verbs, technical context, and quantified impact. Use when completing tasks, updating portfolio, or preparing job applications.
Open skill - /star-stories
Transforms completed work into STAR interview stories (Situation, Task, Action, Result). Use when completing tasks, preparing for behavioral interviews, or documenting achievements.
Open skill - /accessibility
Reviews accessibility including WCAG, ARIA, keyboard navigation. Use when junior builds forms, buttons, modals, interactive elements, or asks "is this accessible", "a11y", "screen reader".
Open skill - /backend
Reviews API design, REST conventions, and backend architecture. Use when junior builds API endpoints, Express routes, middleware, controllers, or asks "is this RESTful", "check my endpoint".
Open skill - /database
Reviews schema design, SQL queries, ORM patterns. Use when junior creates schema, writes queries, adds migrations, works with Prisma/MongoDB/PostgreSQL, or asks "is this SQL safe", "N+1", "index".
Open skill - /debugging
Guides systematic debugging through Protocol D (READ, ISOLATE, DOCS, HYPOTHESIZE, VERIFY). Use when junior says "stuck", "not working", "broken", "bug", "error", "crashed", "failing", "can't figure out", or expresses frustration. Do NOT use for general questions.
Open skill

