TL;DR: Human senses have an analog to software engineering practices. An important sixth sense of orientation in the environment is inexplicably linked to engineering velocity. This read is designed to invoke the thought of the connections.
Software engineering is a craft intractable to describe. And in a previous post, I tackled the generic construction metaphor of what it is not. This interest in describing what made me think about how. Are there facilities that constitute software engineering? So, I reflected on my past experiences. As I came up with this metaphor, I realized that individual contribution is arranged in thought processes, since our work is done in mind, writing to the machine, and with others by spoken word.
Based on anecdotal evidence, I settled on an everyday mapping to the human body - the five human senses. Seeing, hearing, tasting, smelling, and touching. We can think of each sensing facility as a separate and unique function, or as I like to think, utilizing certain parts of the mind. What follows is based on an everyday software system; primary groupings of what software engineers utilize.
With our first sense, sight, software engineers are challenged with building systems for a need. This rarely starts as a blank slate, but commonly, in an existing structure, we must solve a new problem. In this application, visualization is key to its success. The system's design is applied through typical metaphors of gluing, plumbing, bolting on, constructing, and orchestrating.
As we see the design unfold, clarity of vision is debated. We then agree on the best approaches. The abilities are attributed to an approach we decide. For instance, availability, reliability, scalability, durability. Systems and their subsystems are drawn to be seen with a line of sight.
Once the structure begins to unfold with sight, points require an intense hearing. The system will require optimizations, called algorithms, in which iterating, recursing, and listening to the riddles to form a rhythmic structure that solves a problem. And what is of interest is listening to specific points.
In software engineering, these are the system's critical points that require a recipe to step through. And why hearing? That is because this sense is tested throughout the team by speaking through the solution. It sometimes requires a back and forth with architects, analysts and their cross-functional teams.
As the system is seen and heard, it is tested for taste. Taste is a subjective sense, and there are many forms that people enjoy. For this system, we are testing by isolating, separating, and pinning dependencies. We are asserting and validating the taste of the structure. Tasting takes a few forms, whether we taste for saltiness, sweet or sour, or blend for savory. We inspect at certain levels or scales, including unit, feature, and system testing. Tasting in the system is a continuous exercise.
As we continue to see, hear, and taste the system, we also smell unusual scents within our growing structure. This includes finding foul areas of the system. And once we find these accidental complexity areas, we refactor them using sight, hearing, and taste.
We find seams by shoehorning or retrofitting items into the system by wrangling and externalizing areas that need to grow. Like taste and smell, refactoring is opinionated in nature.
Systems grown with the senses can operate for a time. They are new or decaying systems that require touch. In engineering, we call this debugging. We are at a loss of sight and hearing. In most structures, we are close to having a bland taste.
All that is left is the immediate feel of the subsystem. Strong smells guide us. This requires inspecting, injecting, locating, measuring, and monitoring to determine how we can further refactor and improve the system. Debugging is a highly tactile skill that requires touch. The skill is hard to describe to others because of its unique medium.
While we are operating with all senses, there is a sixth sense. In the human body, this sense calculates where the body is in the environment. This is called proprioception. Applied to engineering, this sixth sense determines how well we work with other engineers. How much value we deliver.
This metaphor combines orientation, coordination, and movement of the software system. It is engineering velocity. We work together by empathizing and understanding others and the customer. Some intangibles and tangibles make up the concept of velocity, as seen below.
Proprioception is tied to engineering velocity since it is a metaphor for movement awareness, with friction or ease in the system. Software is ultimately about people who develop and those who consume the value. Developing an acute sensibility of velocity requires long periods of time with experimentation throughout the organization.
Seeing, hearing, tasting, smelling, touching. These are human facilities. Software engineering has similar facilities. Designing, solving, testing, refactoring, and debugging. And in both, there is a sixth sense of proprioception and its association to system movement, velocity. Engineering is applied to everyday situations through these mechanisms.
Just like senses, engineering practices can be honed and optimized. By seeking improvement in these facilities, current systems are maintained effectively, and new systems are built well. Senses are receptors that have memory. And they control a feedback loop of continuous learning. In each practice, invisible muscles can be trained and improved with deliberate practice by the individual and the collective.
What are other facilities typically found in software engineering?
Changing the respective makes for a powerful essay.
And not many essays exist on assistive technologies which programmers with impairments rely on—such as one engineer I managed who used magnification software and voice assisted technology.
There are many assistive tools, but I haven’t read a critical review in one place—for those that seek assistance, and for those that are sponsors, such as managers.
Finding a comprehensive essay, a living document on the amplification of senses of each assistive technology, would be greatly appreciated.
Human senses have an analogue to software engineering practices -
Thanks to Arhant Jain, Hazem Saleh, and Danielle Arcuri
#softwaredevelopment #senses #softwareengineering #testing #refactoring #career #oppurtunity
- r/programming
- hackernews