On 19 February 1946 Alan Turing designed the first well-known software for a stored-program computer. Seventy years later, each of us is carrying numerous apps (software) in our pockets and wrists. Software today can be incredibly powerful, they contain millions of lines of code, can guide nuclear missiles to their target, and even recognize the human voice and translate them on the fly. Today’s mobile apps like Microsoft Word or Facebook are more complex than the entire software stack that powered Apollo 11 spaceflight. The technology powering Apple’s Siri, Google Now or Microsoft’s Halolens were impossible even ten years before. The growth in areas like Cloud Computing, Big Data, Machine Learning and Predictive Analytics has been exponential. Last week, over a cup of steaming hot Madras Kaapi (Coffee) I was thinking about all this.
That led me to ask myself, whether all this development has changed the way engineers write software. The answer will be “not really”. The way an engineer today creates a software program has remained more or else the same as what her father did 25 years back. Code-Generators, RAD tools, and LOB application builders like Microsoft LightSwitch continue to remain niche tools with over 95% (in my opinion) of software being written by humans. In 2009 IT Services veteran Phaneesh Murthy, accused Indian tech giants to have stalled growth in this area due to the abundance of the skilled talent pool. But I am at a loss what’s been holding companies like Google & Apple to change this status-quo.
I feel the root cause for delay is in how we perceive a software solution and how we design applications. The behaviour pattern around Human-Computer Interaction has changed considerably with the Gen Z being born digital. For them, Touch is a seamless extension of the physical world into the virtual, but software especially enterprise software is still being designed for the 1960s environment.
Let us look at a few bad examples which we all encounter in our daily usage of computers.
- A shopping app sends me to alert every time it ships an item to me by SMS, App Notification and by email. Why do I need to be notified of the same event three times?
- Have you tried to get your car audio system to connect with your phone? It takes anywhere between 10-15 minutes. Car systems seem to be stuck in the 1980s. Why can’t I voice operate my phone while driving – dictate a message, take notes, take a picture, record audio all using my voice?
- My bank website asks me for every transaction I do with them to select my account from a drop-down especially when I have only one account with them. Unpardonable stupidity
- The Antivirus on my PC keeps telling me when it finds a file it can’t decrypt or infected with a virus. How do I as an average user expect to know about threats better than the billion-dollar that makes the Antivirus? After all, I am paying them money to handle this, take decisions when it sees a threat, and not bother me every time when the PC catches a bad cold.
- I was visiting a news site and it encountered an error saying technical trouble, please retry after some time. The same thing happened when I was updating many items in my LinkedIn profile. Looking at the error I got in the news site example I guessed the front-end app couldn’t talk to the backend database for some reason. Redundancy is a function of cost, so these failures do happen but why is it that I should reload/retry? The software powering the site could have simply shown me cached data and then refreshed after some time.
Of course, it’s not all gloom. One good example is how Google Now works. It knows that I frequent different places on weekdays and a few other places during the weekend. It automatically shows me traffic details corresponding to that day without me doing anything.
We can see the change in a few other apps if we care to look and learn from them. With billions around the world for the first time exposed to computing (through Mobile Apps), people have grown comfortable with using software for their daily communication, information needs and even entertainment. They deserve their apps to be always available and working seamlessly.
Users don’t have the expertise to set up an app, the app is expected to already know about the user and auto-configure itself. They don’t understand why an app crashes, the app has to be self-healing. They don’t want to wait for something to get downloaded, the app should have been predicted and pre-downloaded. They get irritated when an app sends a mindless number of notifications. They don’t want to do repetitive tasks, the app’s user interface should adapt to an individual’s usage – which means gone is one uniform menu & workflow for every user of the app; instead, the user interface adapts to usage.
Recently in a piece in Bloomberg Businessweek, Maria Giudice (VP for experience design at Autodesk) nicely put this when she talks about how to create business products that produce emotional connections.
Enterprise products can be so disrespectful to the user. The message is, “You gotta use these products, so screw you, suck it up.” There’s this assumption: “Oh, our products are so complex, they can’t be simpler to use.” It’s all about being serious, stable, performance-driven. Hey, that’s table stakes! We have this opportunity to really think about those products in a new way and not hide behind the complexity. Our job is to make the complex clear. This is where we need to go.
I grew up in a time when we were just grateful if things worked. We live in a world where a whole population expects good, fluid experiences. This is where consumer and enterprise are meshing. We always saw a line between enterprise products that were powerful and consumer products that were lightweight and emotive. There’s a whole population that doesn’t see that. They work at home; they play at work. That’s why I’ve been thinking about emotions and product design.
It’s nice to dream all this, but how do we get all this done? For that engineers need new toolsets to build software. Here let us look at a scenario that needs to change. Many enterprises abandon their legacy codebases and choose to rewrite from scratch when their current platforms get unsupported by the vendor. Should we have tools that make the new system learn and port the logic and data automatically? When a free app like WhatsApp can automatically update itself with new features without losing my data, what’s wrong with me expecting a million-dollar Enterprise software to do the same without any rewrite? I agree it’s not the same to design WhatsApp and Enterprise software, I feel learnings from one should be applied more freely to others.
The change for it to happen we need to start with the way a software engineer looks at a problem, change her mindset on how she designs the interaction with the user, change the way he constructs the program’s flow and more importantly the toolsets that she uses for development.
I dream of a world where I can dictate the requirement for my Line of Business App to Microsoft Cortona, and she should be able to automatically design, build and deploy for me an app in the cloud in minutes.
In the meanwhile, we are stuck in a world where the bulk of the code gets written by human engineers, the least we could do is to make them sensitive to the pain the users go through using their app.