The Hardest Problem in IT

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

  1. Ambiguous APIs and Libraries
    Ever tried to use a library where the function process() could mean literally anything? Or where Manager classes manage… nothing in particular? Our APIs often resemble Mad Libs more than structured logic.
  2. 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.
  3. 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.
  4. 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.
  5. “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

  1. Be Precise: If your object fetches data, call it a Fetcher, not a Handler.
  2. Avoid Redundancy: UserUserServiceManagerImpl is not a flex.
  3. Think in Terms of Use: Name it for what users need it to do, not how it’s implemented.
  4. Name for the Reader, Not the Writer: Don’t be clever. Be clear.
  5. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *