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.
Use Clear Naming Discipline in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Clear Naming Discipline and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Clear Naming Discipline skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
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