CtrlK
BlogDocsLog inGet started
Tessl Logo

naming

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

SecuritybySnyk

Passed

No known issues

SKILL.md
Quality
Evals
Security

Naming as Design

Overview

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.

Benner's Four Principles

Every name balances four properties. When they conflict, make the tradeoff deliberate.

  1. Understandability — Describe the context it represents. A reader should know what it does without reading the implementation
  2. Conciseness — Use only the words necessary. Longer is not clearer if the extra words add no meaning
  3. Consistency — Same word means the same thing everywhere. Different things get different names
  4. Distinguishability — A name must be distinct from its neighbors. Similar names for different things cause bugs

See references/principles.md for detailed rules and naming smells.

Two Modes

Review Mode

Examine names in recently changed code:

  1. Read the changed code
  2. For each name, ask:
    • Does it pass all four principles?
    • Could a reader understand this without context?
    • Is the verb specific? ("process", "handle", "manage" almost never are)
    • Does it match the domain language?
  3. Surface violations with specific alternatives

Design Mode

When naming is hard, use the struggle as a diagnostic:

  1. What does this thing actually do? List its responsibilities
  2. If the list has more than one item, the naming problem is a design problem — split it
  3. Who calls it? What do they expect?
  4. If it disappeared, what would break? That's what it is
  5. What would the domain expert call it?

Naming Smells

Names that signal design confusion:

SmellExampleWhat it reveals
Generic verbhandleData, processRequestUnclear responsibility
Suffix -Manager, -Helper, -UtilsUserManager, StringHelperGod object or junk drawer
And/Or in namevalidateAndSaveTwo responsibilities
Type in nameuserList, nameStringRedundant or wrong abstraction level
Negated booleanisNotReady, disableFeatureDouble negatives in conditions
Abbreviated beyond recognitionusrSvcRspConciseness without understandability

Bloch's API Design Maxims

For public interfaces — APIs, library boundaries, module exports:

  • Names should be self-documenting. If you need a comment to explain what a function does, rename it
  • Same word, same meaning. Don't use "remove" in one place and "delete" in another for the same operation
  • Principle of Least Astonishment. A method named check should not modify state
  • If it's hard to name, the design is wrong. Rename the design, not just the symbol

Evans' Ubiquitous Language

Code names should match how domain experts talk:

  • If the business says "order" and code says "purchase", one of them is wrong
  • Naming mismatches between code and conversation reveal domain misunderstanding
  • When renaming, update tests, docs, and conversations — not just code

Naming Checklist

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)

Output Format

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 Examples

Functions

BeforeAfterWhy
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

Variables

BeforeAfterWhy
dataunpaidInvoicesGeneric noun → specific domain concept
tempunsavedDraftReveals intent; "temp" says nothing about lifecycle
flagrequiresApprovalReads as a question; boolean purpose is clear
resultvalidationErrorsNames the content, not the role in the function
listactiveSubscriptionsType-in-name smell; name the contents instead

Types and Modules

BeforeAfterWhy
UserManagerUserRepository + UserNotifier-Manager reveals multiple responsibilities; split them
StringHelperSlugFormatter-Helper is a junk drawer; name the actual capability
DataServiceInventoryClientTwo generic words; name the domain and the role
utils/misc.tspricing/discount-rules.tsFile path is a name too; make it navigable

Booleans

BeforeAfterWhy
isNotReadyisReady (invert usage)Avoid double negatives in conditionals
disableFeaturefeatureEnabled (invert usage)Positive form reads naturally in if statements
checkhasPermission"Check" doesn't say what the answer means

Strunk's Rule 12

"Use definite, specific, concrete language." The prose skill teaches this for English. Apply it identically to code:

VagueSpecific
getDatafetchUserProfile
itemcartLineItem
resultvalidationErrors
infoshippingAddress
tempunsavedDraft

See Also

  • /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 prose
  • skills/FRAMEWORKS.md — Full framework index
Repository
tslateman/duet
Last updated
Created

Is this your skill?

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.