ON SOFTWARE ENGINEERING
The Many Senses of Software Engineering
Analogues of human facilities to engineering practices
TL;DR: Human senses have an analogue 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 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 of describing the what made me think about the how. Are there facilities which constitutes software engineering? So, I reflected on my past experiences. As I came up with this metaphor, I realized that individual contribution is arranged in areas of thought process, since our work is done in the mind, writing to the machine, and with others by spoken word.
Based on anecdotal evidence I settled, incompletely, on an everyday mapping familiar to most. They are the primary groupings of what software engineers exercise in relation to 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, its architecture and features are unimportant.
With our first sense, sight, software engineers are challenged with building systems for a need. This rarely starts as a blank slate, but more commonly in an existing structure that we must solve a new problem. In this application, visualization is key to its success. The design of the system 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 best approaches. The -abilities are attributes to an approach we decide. For instance, availability, reliability, scalability, durability. Systems and their subsystems are drawn to be seen with line of sight.
Once the structure begins to unfold with sight, there are points that require 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 with this sense is listening to specific points, sometimes. In software engineering, these are the critical points of the system that require recipe of 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 and analysts and their cross functional teams. For those engineers that are on the outside who desire to contribute, this is the sense that is tested to validate their skillset.
As the system is seen and heard, it is typically being tested for taste. Taste is a highly subjective sense, and with taste 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. The way we taste takes a few forms, whether we taste for saltiness; for 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 highly important continuous exercise.
As we continue to see, hear, and taste the system, we also are smelling for unusual scents within the structure we are growing. This includes finding areas of the system that are foul. And once we find these areas of accidental complexity, we refactor them by using sight, hearing, and taste. For those other areas that need to grow, we find seams by shoe horning or retrofitting items into the system with strangling, externalizing, or wrangling the areas required. Like taste and smell, refactoring is also opinionated in nature.
Systems that are grown with the senses can operate for some time. They are new or decaying systems that may 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 bland taste. All that is left is the immediate feel of the subsystem. 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 and is hard to describe to others because of its unique medium.
Engineering Velocity (Proprioception)
While we are operating with all senses, there is a sixth sense to recognize. 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 starts with the orientation, coordination, and movement of the software system. It is engineering velocity. We work together by empathizing, and understanding others, most importantly the customer. There are many intangibles and tangibles that make up the concept of velocity as seen below.
Proprioception is tied to engineering velocity since it is a metaphor of awareness of movement, 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 the 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. And in each practice, there are invisible muscles that can be trained and improved with deliberate practice by the individual and the collective.
What other facilities are typically found in software engineering?