Evaluate and improve names in code using naming as a design diagnostic. Use when the user asks to "name this", "rename", "review naming", "what should I call", struggles to name something, or when a code review surfaces vague or misleading names.
95
Quality
95%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Naming difficulty is a design smell. When you struggle to name something, the abstraction is wrong. Use naming as a lens to surface confused boundaries, mixed responsibilities, and domain misunderstanding.
Every name balances four properties. When they conflict, make the tradeoff deliberate.
See references/principles.md for detailed rules and naming smells.
Examine names in recently changed code:
When naming is hard, use the struggle as a diagnostic:
Names that signal design confusion:
| Smell | Example | What it reveals |
|---|---|---|
| Generic verb | handleData, processRequest | Unclear responsibility |
Suffix -Manager, -Helper, -Utils | UserManager, StringHelper | God object or junk drawer |
| And/Or in name | validateAndSave | Two responsibilities |
| Type in name | userList, nameString | Redundant or wrong abstraction level |
| Negated boolean | isNotReady, disableFeature | Double negatives in conditions |
| Abbreviated beyond recognition | usrSvcRsp | Conciseness without understandability |
For public interfaces — APIs, library boundaries, module exports:
check should not modify stateCode names should match how domain experts talk:
For any name under review:
[ ] Specific verb (not handle/process/manage/do)
[ ] No unnecessary words
[ ] Consistent with similar names nearby
[ ] Distinguishable from neighbors
[ ] Matches domain language
[ ] Readable without implementation context
[ ] No embedded type information
[ ] Boolean reads as a question (isReady, hasPermission, canEdit)When reviewing names:
## Naming Review
### Must Rename
- `processData` → `validateInvoiceLineItems` — "process" hides
the actual responsibility; this only validates
- `handleClick` → `submitPayment` — name the action, not
the event
### Consider Renaming
- `userInfo` → `billingProfile` — more specific to its
actual contents
### Design Concern
- `OrderManager` has 12 methods spanning validation,
persistence, and notification. The naming struggle
reflects three responsibilities that should be separate
types.| Before | After | Why |
|---|---|---|
processData(input) | validateInvoiceLineItems(invoice) | "Process" hides responsibility; name the action and the domain |
handleClick() | submitPayment() | Name the business action, not the DOM event |
doStuff(items) | deduplicateContacts(contacts) | Eliminate weasel verbs; name what it actually does |
run() | pollForStatusUpdates() | Ambiguous in any class with more than one operation |
| Before | After | Why |
|---|---|---|
data | unpaidInvoices | Generic noun → specific domain concept |
temp | unsavedDraft | Reveals intent; "temp" says nothing about lifecycle |
flag | requiresApproval | Reads as a question; boolean purpose is clear |
result | validationErrors | Names the content, not the role in the function |
list | activeSubscriptions | Type-in-name smell; name the contents instead |
| Before | After | Why |
|---|---|---|
UserManager | UserRepository + UserNotifier | -Manager reveals multiple responsibilities; split them |
StringHelper | SlugFormatter | -Helper is a junk drawer; name the actual capability |
DataService | InventoryClient | Two generic words; name the domain and the role |
utils/misc.ts | pricing/discount-rules.ts | File path is a name too; make it navigable |
| Before | After | Why |
|---|---|---|
isNotReady | isReady (invert usage) | Avoid double negatives in conditionals |
disableFeature | featureEnabled (invert usage) | Positive form reads naturally in if statements |
check | hasPermission | "Check" doesn't say what the answer means |
"Use definite, specific, concrete language." The prose skill teaches this for English. Apply it identically to code:
| Vague | Specific |
|---|---|
getData | fetchUserProfile |
item | cartLineItem |
result | validationErrors |
info | shippingAddress |
temp | unsavedDraft |
/design — Hard-to-name things signal design problems/review — Code review surfaces naming issues; naming review deepens code review/prose — Strunk's rules apply to code names identically to English proseskills/FRAMEWORKS.md — Full framework index96a72fa
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.