Clear Naming Discipline
SkillFiles & storageApply when naming variables, functions, types, files, or endpoints. Enforces the 6-month amnesia test, language conventions, intent-based naming, and cross-boundary consistency.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Clear Naming Discipline skill
What this skill tells your AI
The instructions your AI receives, as published by scino/fstack in skills/principle-clear-naming/SKILL.md and read by ahel’s review.
"There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton
Code is read far more often than it is written. A bad name forces every future reader to inspect the underlying implementation just to understand what a function or variable holds. A good name makes the surrounding code self-evident.
1. The 6-Month Amnesia Test
Whenever you name a variable, function, class, file, or endpoint, ask:
"If I wake up with amnesia in 6 months and read this line, will I immediately know what it is and what it does? Will a new teammate guess its exact purpose on their first day?"
If the answer is "Only if they read the function body", the name has failed. Rename it.
2. Intent Over Mechanism
Name by what problem it solves and what data it represents, not the mechanical data structure or plumbing:
| Mechanical / Bad | Intent-Driven / Good | Rationale |
|---|---|---|
dataArray | activeSubscriptions | Names the domain entity, not the memory structure. |
dictMap | cachedUserPermissions | Reveals what the lookup is for. |
processStuff() | syncStripeInvoices() | States the exact business operation. |
tempFlag | hasVerifiedEmail | Self-documenting state. |
3. Language & Ecosystem Conventions
Always adhere to the idiom of the host language unless an explicit codebase convention overrides it:
- TypeScript / JavaScript:
camelCasefor variables, properties, and functions (getUserSession,isOrgAdmin).PascalCasefor classes, types, interfaces, and React components (PaymentProcessor,UserProfileCard).UPPER_SNAKE_CASEfor immutable module-level constants (MAX_RETRY_ATTEMPTS).
- Python:
snake_casefor functions, methods, and variables (calculate_tax,user_id).PascalCasefor classes (DatabaseConnection).
- Go / Rust: Follow standard idiomatic casing (
userID,fetch_record).
4. Consistency Across Boundaries
Pick one verb per action in a subsystem and stick to it religiously. Do not mix semantic synonyms across files:
- If you use
get...for database lookups, do not switch randomly tofetch...,retrieve..., orquery.... - If you use
delete..., do not switch betweenremove...,drop..., anddestroy...for the same entity type.
5. Booleans as Clear Predicates
Booleans must sound like yes/no questions:
- Good:
isEnabled,hasAccess,shouldRetry,canEdit,isPendingApproval. - Bad:
status(ambiguous),access(noun),check(sounds like a function).
6. Ban Cryptic Abbreviations
Unless an abbreviation is universally recognized in the domain (id, url, req, res, ctx, err), spell it out:
- Bad:
usrMgrSvc,calcDiscTot(),custAddrStr. - Good:
userManager,calculateDiscountTotal(),customerAddress.
Signals
- GitHub stars
- 21
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
principle-clear-naming- Source
- github.com/scino/fstack