The Importance of Naming in Software Development
In the world of software development, naming is a critical aspect that often goes unnoticed. Phil Karlton, a renowned figure in computer science, once stated, “there are only two hard things in Computer Science: cache invalidation and naming things.” While cache invalidation poses a genuine challenge, the problem of naming is rooted in our ability to define and interpret reality. Inadequate naming in software can compromise the integrity and functionality of the entire system. In this article, we will explore why naming is crucial in software development and how it impacts our understanding and communication within the virtual world we create.

The Semantics of Reality
Before delving into the complexities of naming in software development, it is essential to understand how our brains process and interpret the world around us. Our knowledge of reality is represented by schemas, which can be thought of as semantic networks. These networks consist of entities and relationships that help us make sense of the world. For example, when we think of a tree, our semantic network may include entities such as “trunk,” “branches,” “leaves,” “fruit,” “flowers,” and “seeds,” along with relationships such as “leaves connect to branches” and “fruits grow from trees.”
Semantic networks are not fixed; they evolve and expand as we learn more about a subject. The depth and perspective of these networks differ among individuals based on their expertise and experiences. A toddler may have a simple semantic network for fruits, comprising entities like “trees,” “branches,” “flowers,” and “fruits.” However, a biologist’s semantic network for fruits would be more complex, incorporating entities like “seeds,” “pollen,” “pollen tubes,” “ovaries,” and “pollen sacs,” along with their corresponding relationships.

Creating Virtual Worlds
In software development, we have the unique ability to create virtual worlds that emulate reality. When building these virtual worlds, we must first replicate the real-world experience or activity as accurately as possible. This involves identifying the essential steps and tasks that contribute to the experience while removing extraneous elements. For example, in an online shopping experience, browsing items and making payments are essential steps, while driving to a physical store is an extraneous task that adds no value. Additionally, virtual worlds may include concepts that are only possible in the digital realm, such as storing credit card information for future purchases.
As we construct these virtual worlds, we encounter the need to invent new entities and subsequently name them. However, naming becomes challenging when our perception of reality is unclear or unconventional. Confusing names can hinder knowledge sharing and collaboration, leading to system failures. Therefore, it is crucial to have a clear and shared understanding of reality to ensure effective naming in software development.

The Challenges of Naming in Software Development
Naming in software development presents unique challenges compared to other professions. While physicists, astronomers, and entrepreneurs may encounter naming challenges when discovering or creating new things, their frequency of encountering such challenges is relatively low. In contrast, software developers face naming decisions on a daily basis, as they constantly create new entities and concepts in their virtual worlds.
The frequency of naming decisions arises from the nature of software development as a medium for representing thoughts and concepts. These representations must be precise and referenceable by other programs. Consequently, software developers must navigate the complex landscape of naming, balancing clarity, conciseness, and the established conventions within a given domain.
Metaphors: A Double-Edged Sword
To expedite knowledge transfer and leverage pre-existing semantic networks, designers and developers often use metaphors to model or describe their systems. Metaphors serve as pre-packaged semantic networks, allowing recipients to build upon familiar concepts and accelerate understanding. For example, using a “trash” icon to represent deleting files or adopting the concept of “queues” in messaging systems are examples of metaphors in software development.
However, the use of metaphors in software development presents two significant challenges. Firstly, the familiarity of a metaphor is not universal. Just as the Star Trek episode “Darmok” demonstrated, communication can break down when relying on metaphors rooted in specific historical events or cultural context. Secondly, metaphors may not align with the depth and perspective of individuals’ semantic networks. Technical individuals may have a more nuanced understanding of a metaphor like “the Internet,” while non-technical users may perceive it as a vague concept.

Abstractions: Simplifying Complexity
Abstractions play a crucial role in software development, allowing us to group complex semantic networks into higher-level concepts. They enable efficient communication and understanding between humans and machines. As software development progresses, the need for increasingly higher levels of abstraction arises to manage the complexity of modern systems.
However, these abstractions come at a cost. With each layer of abstraction, the semantic networks become more complex and challenging to comprehend. For instance, explaining the concept of a Kubernetes cluster to a layperson involves introducing abstractions like nodes, pods, and containers. As the explanations stack, the learning curve steepens, and the comprehension of the system becomes more difficult.
Knowledge Transfer and Code Ownership
In software development, effectively transferring knowledge from one person to another is crucial. While formal methods such as design documents, component diagrams, and terminology dictionaries provide a foundation for knowledge transfer, they are not sufficient on their own. Additional techniques like frequent cross-education and pair programming can supplement formal documentation to promote shared understanding among team members.

Code ownership also plays a role in the naming process. When developers inherit codebases from others, they may feel compelled to rewrite significant portions of the code to align it with their own mental models. This rewriting activity is not merely a wasteful exercise but a means of creating an equilibrium between the developer’s understanding and the written representation of that knowledge. As a result, the names of concepts may change to reflect the developer’s interpretation and ensure a cohesive understanding within the team.
The Importance of Naming in Code Rewriting
Code rewriting is a common practice in the software industry, often triggered by developers’ need to align the codebase with their mental models. While this may seem wasteful from a project management perspective, it is an essential learning activity that helps developers work more effectively with the codebase. Rewriting code is not merely rebuilding what already exists but a process of creating shared understanding and alignment between the developer and the codebase.
During code rewriting, developers form new semantic networks to represent their interpretation of the world. These networks may differ significantly from the original codebase, leading to changes in naming conventions. This divergence in naming reflects the developer’s need to ensure that the codebase accurately represents their understanding, promoting productivity and clarity in their work.
Naming in software development holds immense importance, as it directly impacts our understanding, communication, and collaboration within virtual worlds. Inadequate naming can compromise the integrity and functionality of a system, hindering its success. By understanding the complexities of naming, leveraging metaphors and abstractions, and promoting effective knowledge transfer, software developers can enhance their ability to create and maintain robust and comprehensible codebases. The process of naming is not a static endeavor but an ongoing journey of aligning our mental models with the virtual worlds we construct.
Stackademic 🎓
Thank you for reading until the end. Before you go:
- Please consider clapping and following the writer! 👏
- Follow us X | LinkedIn | YouTube | Discord
- Visit our other platforms: In Plain English | CoFeed | Venture | Cubed
- More content at Stackademic.com






