There’s an old joke in computer science:
“There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors.”
The fact that the joke itself contains an off-by-one error only strengthens the point. But let’s zero in on the second item—naming things. It may seem trivial compared to algorithms, security, or scale. But make no mistake: naming is one of the biggest sources of misunderstanding, misalignment, and missed opportunities in IT.
The Symptoms of Naming Incompetence
- Ambiguous APIs and Libraries
Ever tried to use a library where the functionprocess()
could mean literally anything? Or whereManager
classes manage… nothing in particular? Our APIs often resemble Mad Libs more than structured logic. - Overuse of Metaphors
We borrow metaphors like “container”, “pod”, “broker”, or “actor” without much consistency. One person’s “adapter” is another’s “bridge.” And don’t get me started on “serverless”—a term that manages to confuse both beginners and experts alike. - Naming by Committee
The larger the organization, the longer the name—and the less meaningful it becomes. “EnterpriseDataServiceIntegrationConnectorFactoryManagerCacheDistributorSemaphore” might tell you what it does—if you have a few hours to spare. - Changing Names Midstream
Just when people start getting used to a name, marketing swoops in and renames it. Azure DevOps was once VSTS, which was once TFS, and before that, just pain. - “Cute” Naming Gone Rogue
Some teams go the opposite route and give internal projects names like “TacoCat” or “Nimbus.” Which is fine… until TacoCat becomes a critical security component, and no one takes it seriously. Save for Octocat, everyone takes that seriously, do we?
Why Is Naming So Hard?
Because naming forces clarity. You have to understand what a thing is, what it does, what it’s not, and how it fits into the bigger picture—all at once. Naming is a test of conceptual mastery, communication skills, and empathy for your users.
It’s also political. Stakeholders want their buzzwords. Engineers want brevity. Marketing wants pizzazz. And the end result often satisfies no one.
The Costs of Bad Naming
- Onboarding Time increases when newcomers can’t intuit what modules or variables represent. Or how to find something if they don’t know the tribal knowledge they need.
- Code Reuse Drops because people don’t trust what they don’t understand. And create another FactoryManagerBean.
- Bugs Rise when misunderstood components are misused. ThisDoesntDoAnything actually does something? Oh my.
- Documentation Becomes Required Reading—not because it’s helpful, but because it’s the only way to make sense of what’s going on. Yes, we all want the fine manual, but to actually read it? Pffh.
How to (Slightly) Suck Less at Naming
- Be Precise: If your object fetches data, call it a
Fetcher
, not aHandler
. - Avoid Redundancy:
UserUserServiceManagerImpl
is not a flex. - Think in Terms of Use: Name it for what users need it to do, not how it’s implemented.
- Name for the Reader, Not the Writer: Don’t be clever. Be clear.
- Have Standards: Create a shared glossary and stick to it.
Conclusion
In the end, naming things well is an act of respect—for your teammates, your future self, and anyone who will try to build on top of what you’ve made. It’s a soft skill with hard consequences. And until we treat it like a first-class concern, we’ll keep tripping over our own vocabulary.
Because let’s face it: you can’t architect clarity on a foundation of confusion.