Part 3 of 3 — Owning your high tech destiny in the new world Engineers must develop a deeper understanding of human behavior when building the software of tomorrow. From self driving cars to digital assistants, learning human behavior may not necessarily be top of mind for most engineers. In my first two blogs we looked at how […]
Engineers must develop a deeper understanding of human behavior when building the software of tomorrow. From self driving cars to digital assistants, learning human behavior may not necessarily be top of mind for most engineers. In my first two blogs we looked at how rapid changes in technology, including Artificial Intelligence (AI) and Machine Learning (ML), have evolved our software careers as we once knew it. In this final installment, I aim to show you why having a better human understanding is becoming very important, and give you some ideas on how to get started.
It wasn’t very long ago that learning computer science and becoming a software engineer was a guaranteed path to success. Great benefits, flexible hours, travel, and working conditions made this a career many desired. As one of them, I rebooted my career to pursue software engineering. Now as the software landscape continues to change, this time with ML, it’s time to ensure we adapt to stay relevant. The most important part on a resume for software engineers used to be their technology experience, and the ability to code in specific languages. While being able to code is still important, the ability to learn and solve complex business and everyday problems is now paramount.
In the early 2000s I worked with a colleague who had multiple job offers — one from Oracle, which was a safe bet, and back then, the company most people wanted to work for. The other offer was from a young company called Google. At the time it was surprising that he chose Google, as he saw more excitement and potential in the uncertainty. Looking back, this is an example of an uncertain choice that had a meaningful impact on his future. We all have similar choices today with the type of technology and company we wish to work for going forward. Regardless of the rapid changes in technology, the beauty of software engineering is that it allows for many options.
We all have a career choice to make — take the safe, status quo route, or embrace the high risk, innovative, choices that impact our future. If you take the business as usual approach to your career, then you are choosing the status quo route. Being an adaptable, curious, learner is now the path to success, combined with a willingness to throw off old ways and old play-books that no longer apply. As a software engineer, don’t only focus on technology, but understand the data, product, business, customer value and the company. I have seen engineers job hop by the lure of more pay, and then find themselves in a status quo company. Think longer term, and be open to new ideas, as this will help get your own innovation flowing. This leads me to a new concept for many engineers, gaining a better human understanding.
As engineers, we are trained to be logical thinkers, and that is often reflected in the way we build our software. However, the assumption that everyone thinks just like us, sometimes contradicts the realities of human behavior. I have seen many UIs (User Interfaces) and APIs (Application Programming Interfaces) that follow our software structure rather than the users intent. No, data structures do not usually make a good user experience (UX). Have you ever had to work with a documentation team to explain how to use your software? Hopefully for you, those days are in the past. As the software we develop shifts closer to the user, the importance of understanding human behavior is becoming even more important.
When the first smartphones with touch screens came on the market, UX became more prominent. Now, not only could you click around the screen, but you could touch it and have resizable screens. In just over ten years, the improvements in UX design has been amazing, driven by new hardware, the desire to make things easy, accessible, intuitive and helpful. Without good design, software users are unlikely to adopt and use your application. Now, with technology changing rapidly, gone are the days of web and mobile only development — engineers are dealing with voice, wearables, virtual reality, IoT (Internet of Things), transportation and automation. Every bit of our daily lives can now be touched and influenced by software engineers. We are at the forefront of change, impacting the lives of everyone today and in the future. Human understanding is no longer just for designers.
In 1970, Japanese roboticist Masahiro Mori first coined the term “uncanny valley” phenomena. Where cartoonish simulations and non-anthropomorphic robots are accepted, but simulations of robots that appear too lifelike are considered “creepy”. Think the Jetsons versus Westworld. Expectations become higher as we try to replicate human behavior with computers, and our tolerance for error becomes lower. Have you ever become frustrated with Alexa, Google or Siri when it doesn’t understand what you are asking? As we stray away from the status quo, we tend to be more cautious. Do you trust autopilot on a plane more than on a self driving car? Scientists are now using Artificial Intelligence (AI) in an effort to simulate cognitive human behavior and our own brain’s ability to learn, think, and perceive. As software engineers are tasked with making computers more life-like, they must be aware of the implications, and higher expectations of the software they are building.
In Don Norman’s book “The Design of Everyday Things,” he writes “with the passage of time, the psychology of people stays the same, but the tools and objects in the world change. Cultures change. Technologies change.” This is exactly the situation engineers find ourselves living every day. But how many of us actually take the time to think about the psychology of the people using our software? Do we fully understand the goal of our actions, how they will be executed and how the results are perceived and evaluated? Cognitive psychology explains how our brains can split into our fast, automatic, subconscious actions, like clicking a mouse on a screen. Versus the slower, controlled, conscious actions when navigating and learning a new technology. Human software design is generally broken down into people research, design, software development, and iterative testing to improve your application. For us logically thinking engineers, human psychology might not seem black and white, but by understanding some basic human psychology, we can begin to look at problems again in logical ways.
After briefly touching on the deep, thought provoking topics surrounding human understanding, it’s time to give the engineer in us all some specific examples. Conversational UX used by voice applications and chat-bots is a great way to demonstrate the future importance of human understanding on software development. In fact, they touch on all three ideas we talked about in this blog series. How technology is changing the way we develop software, leverage the power of data and ML, and better human understanding. The basic syntax used in most conversational UX includes:
Sounds simple enough, but there are three unseen things to consider when building a voice application: comprehension, personality and accuracy of the results. Comprehension is where you will first interact with some ML. The user’s voice will be processed by Natural Language Processing (NLP) to understand utterances, and map the intent to some action. Next, the human understanding aspect highlights the personality of your voice application. Can it understand tone, frustration, moods, accents? What about long pauses or context switching mid-conversation? Finally you need to ensure the accuracy of the results. Did it answer the requests and perform the correct action? Amazon has a competition called “The Alexa Prize” to see if a human can converse with their social-bot for 20 mins. Sounds simple enough? Not so easy, the 2018 winner lasted 9 minutes and 59 seconds. If you’re not yet convinced that software engineers need better human understanding to produce the software of tomorrow, then try it for yourself.
Being hands on is great way to learn and understand new ideas and concepts. Google’s Dialogflow framework allows you to build a simple chatbot to have an intelligent conversation, supporting many of the concepts I touched upon in this blog series. This includes software development with no code/low code, cloud, ML and human understanding. The Build your first Agent is an introduction that takes you step by step on building a weather voice agent. It’s fast and simple, and took me less than an hour to have my own basic weather chatbot up and running. Have others test it out, and you will see first hand the importance of human understanding for software engineers.
Technology continues to evolve at an incredible rate, enabling new ideas and innovation. Ultimately the software we create should make our lives better. As software engineers, we have the ability to shape the future through our craft, and ultimately impact society and humanity.
Knowing that, we all have a choice in shaping, and owning our future high tech careers. Choices include the safe, stable, “status quo,” route. Or embracing the uncertain, high-risk, innovative, “human impacting” route. The status quo route can be rewarding, lucrative and similar to what we do today. However if you choose the high risk, human impacting, route, then now is the time to retrospect your own software career. Three things I recommend that you can do today include:
Finally I want to leave you with a quote from Bill Gates’ 1996 book, “The Road Ahead.” “We always overestimate the change that will occur in the next two years and underestimate the change that will occur in the next ten.” Will this be you?