A function whose name doesn't match what it does, or whose parameter list carries unused/awkwardly-ordered arguments — readers must inspect the body to understand the call.
A function whose name or signature doesn't match its behavior; the agent inferring intent from the call site gets misled and must read the body to verify.
Function names match what they actually do; parameter lists carry only what the function needs, in the order callers expect.
Names and signatures express what the function does; the agent reasons about call sites from the signature alone.
Before the refactoring
function circum(radius) {return 2 * Math.PI * radius;}
After the refactoring
function circumference(radius) {return 2 * Math.PI * radius;}
Every reader of a call site pays a comprehension cost; mismatches between name and behavior hide bugs; new callers learn the wrong abstraction from the wrong signature.
The agent must read the function body to verify call-site intent; chained edits compound the cost as the agent re-derives intent at every site.
Every caller pays for the signature change at once, even those whose call sites were already fine; other-team callers get forced coordination.
Every caller pays for the change at once; for cross-team consumers, the agent must coordinate updates or risk breaking external code.
Call sites read fluently; mismatches between expectation and behavior surface immediately at the boundary.
The signature carries the contract the agent reads at every call site; arguments that violate the contract become type errors at compile time instead of runtime mismatches generated against the old signature.
Renaming or reshaping signatures across team boundaries without coordination — forces other teams to rebuild their code on the change's PR timeline.
Reshaping signatures across team boundaries without coordination forces other consumers to rebuild — the agent shipping the change may not see the downstream breakage.