Rename Symbol Safely — Refactoring Patterns, Part 6
Refactoring Patterns · Part 6
A bad name taxes every future reader, but renaming feels risky — which is why so much code keeps a name that stopped being accurate three features ago. It doesn't have to be risky. This walks through renaming a symbol safely: using your IDE's rename (not grep-and-replace), handling public APIs and database columns that can't just change, and doing it as a routine habit instead of a scary event.
Names compound interest. Wrong name today = confusion tomorrow.
Step 1: Why It Matters (15 min)
Code reads more than it's written.
A misleading name:
Wastes reader time
Misleads new engineers
Hides intent
Encourages bugs
Renaming = high-impact refactor.
Step 2: Use IDE (15 min)
F2 (most IDEs)
Right-click → Rename Symbol
Or:
VS Code: F2
IntelliJ: Shift+F6
Vim/LSP: <leader>rn
IDE updates all references safely. Strings + comments: ask before changing.
Step 3: Don't grep-replace (15 min)
❌ sed -i 's/orderTotal/total/g'
Why bad:
Hits unrelated strings
Doesn't respect scope
Doesn't handle dynamic references (reflection)
No type checks
Use language-aware tooling.
Step 4: Public API (15 min)
Internal symbols: safe to rename freely.
Public APIs (used by callers outside your code):
Deprecate old name; add alias
Migrate callers over time
Remove old later
Breaking renames = broken consumers.
Step 5: Database / Migration Concerns (15 min)
Rename a column / table: not refactoring; it's a schema migration.
Add new column
Backfill data
Migrate writers
Migrate readers
Drop old
(Data migrations covered separately.)
Step 6: Multi-Repo Renames (15 min)
Symbol crosses repos (e.g., gRPC service name):
Coordinate across teams
Long deprecation window
Use codemod tools
Atomic rename across many repos: not realistic.
Step 7: Naming Tips (15 min)
Verb for functions / methods (calculateTotal)
Noun for types / vars (order, customer)
Avoid abbreviations (except super common)
Domain vocabulary (ubiquitous language)
Length proportional to scope
Loop var i ok. Class var i: wrong.
Step 8: Boolean Naming (15 min)
isReady, hasPaid, canShip.
Not: ready, paid, ship (ambiguous).
Helps reader parse conditionals.
Step 9: Reverse Engineering (15 min)
Bad name from history:
Investigate: why this name?
Often: legacy concept; meaning shifted
Update name to current reality
Add domain glossary entry
Renames teach you about your codebase.
Step 10: Routine (15 min)
Rename as you go:
Spot misleading name
Rename via IDE
Commit
Continue
Small, frequent renames > big sweep refactors.
What You Just Did
Rename Symbol Safely: why it matters, use IDE, don't grep-replace, public API, database / migration concerns, multi-repo renames, naming tips, boolean naming, reverse engineering, routine.
Common Failure Modes
grep-replace. Catches strings; misses dynamic refs.
Rename public API without deprecation. Break callers.
Cryptic abbreviations. Renamed but still bad.
Don't update docs. Inconsistency.
Big-bang rename. Risk + review pain.
Continue the Refactoring Patterns path
Previous — Part 5: Move Function or Module
Part of the Refactoring Patterns learning path.


