What is the hardest thing in software development?

Naming, but not in the way you think.

An iceberg floating in the ocean. The sea has a label of “Reality”. The submerged portion of the iceberg has a label of “Knowledge”. The portion of the iceberg above the waterline has a label of “Names”. A sticky figure sits on a tiny canoe to the right of the iceberg, representing what could be a software developer.
Our knowledge represents a minute portion of reality. Names are the visible portion of that knowledge.
  1. Replicate the experience or activity as-is.
  2. Identify and remove extraneous steps and tasks that do not contribute to the experience
  3. Add helpful features that do not have counterparts in the physical world.

The semantics of reality

Before understanding why naming is hard (and crucial), we must understand how our brains “translate” the world around us into knowledge.

  • An entity represents a distinct artifact type, whether actual or conceptual. If we are talking about trees, some recognizable entities would be “trunk,” “branches,” “leaves,” “fruit,” “flowers,” and “seeds.”
  • A relationship describes the association between two entities. For example, a leaf “connects to” a branch, and fruits “grow from” trees.
A diagram on the left shows a graph with a few circles connected by lines. Circles are labeled “entities” and the lines connecting circles are labeled “relationships”. The right-side shows a graph with specific entities and relationships, resembling how one would memorize the parts of a tree. That graph has nodes labeled like “tree,” “branches,” “leaves,” and “fruit.”
Semantic networks (on the left) identify and connect entities. Semantic networks become increasingly denser as we learn more about a subject, with new entities continuously added to the network. Our brains also reorganize those networks as we learn more about a topic.
Drawing of three pears. On the center there is a reasonably decent drawing of a pear, with some shading and some detail around the stem and leaves. On the left, there is a crude drawing of the pear, mostly an outline. On the right, there is a detailed drawing, with a cutout showing the location of seeds, and a more detailed representation of the leaves. There are also multiple callouts on the detailed drawing, showing tables of information about planting seasons and vitamins.
The lifelong study of a subject makes different individuals see the same object differently. A simple fruit may evoke increasingly sophisticated and unrelated concepts depending on the observer’s expertise.
  1. Different skill levels mean different depths of semantic networks. Some people can see more nuance in a customer scenario than others. It does not mean the extra perception will always have a material effect on the final solution, but it is there.
  2. Different priorities influence how we classify the same sensory information. Software developers may recognize entities that underpin the entire system in a complex physical and logical web of servers, connections, and rendering engines. For the user, maybe all they see is “an app,” a minor entity in their daily routine.

A virtual world where everything is new

At this point, you can tell the hard part is not the final act of naming something.

A software developer may interpret reality in more or less obvious ways to another observer. Some concepts may be simple and shared across different developers. Other concepts may require complex explanations and the formation of new semantic networks across the team before people can collaborate around it.

Knowledge transfer, from theory to practice

Once everything new is named, it is time to introduce those new worlds to the rest of the development team.

Metaphors: Beware the “off-the-shelf” semantic networks.

Different people form semantic networks in different ways. In software development, that is especially true of situations where you deal with abstract concepts fitting multiple possible categories.

Metaphors are the canned version of a new semantic network. The recipient could build a new semantic network “from scratch” but may be able to build a little faster, if not less perfectly, from a pre-existing fragment of a similar semantic network.

Metaphor issue #1: Well-known by whom?

The first problem is that a familiar concept is not necessarily universal.

Metaphor issue #2: Depth and perspective.

Once again, we face our semantic network villains.

Abstractions. It is abstractions (almost) all the way down.

Think of abstractions as grouping entire semantic networks into fewer entities in a new semantic network.

Three-tier diagram. The top-third shows a computer screen showing a clothing item with a price and a “Buy” button next to it. The middle tier shows a semantic network modeling an online shopping process, with entities such as “store,” “consumer,” “goods,” and “merchant.” The bottom tier depicts a real-world street view of a clothing shop.
A system designer observing reality must make informed decisions about what portions of that reality are essential in a new reality: the new system. That new reality is an abstraction of the original reality.

From ubiquitous to unique

Semantic networks grow in number and size as we learn. They also grow like trees, with new concepts attached to existing ones. We can reorganize portions of semantic trees in our brains, but complete “rewrites” are not easy or common.

Two different developers with similar training and confronted with the same abstract definition of a simple task may arrive at solutions that look very similar. That agreement may dissipate when the same developers deal with higher-level abstractions.

Rewriting reality through code

Redoing someone’s work is a uniquely common practice in the software industry.

If the source code does not match how the developer thinks about what the code should do, many developers may find it easier to rewrite the code than rebuild their mental structures and reasoning about the problem being solved.

Conclusion

Naming (something) in software development is the culmination of a complex process of creating abstract worlds.

References

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Denilson Nastacio

Operations architect, corporate observer, software engineer, inventor. @dnastacio