In 19 February 1946 Alan Turing designed the first well known software for a stored program computer.  Seventy years later, each of us are 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, even recognize the human voice and translate them on the fly. Today’s mobile apps like Microsoft Word or Facebook are more complex than entire software stack that powered Apollo 11 spaceflight. 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 have been exponential. Last week, over a cup of steaming hot Madras Kaapi (Coffee) I was thinking about all this.

Platform & SDK toolkit that are available today have put unprecedented power in the hands of Software Engineers. You can take any modern program language/environment, say Microsoft C# (.NET) or Java or Python or even the humble JavaScript, they all provide access to Cloud resources, read & write huge volume of data in real time, produce life like graphic animations and so on with ease. Each of them have hundreds of third party frameworks for any task that you can think of. All of them can run in pretty much any platform/device.

That led me to ask myself, whether all this development has changed the way engineers write software?. Answer will be “not really”. The way an engineer today creates a software program has remained more or else the same to what her father did 25 years back. Code-Generators, RAD tools, LOB application builders like Microsoft LightSwitch continue to remain as 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 abundance of skilled talent pool. But I am at 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 physical world into virtual, but software especially enterprise software are still being designed for 1960s environment.

Let us look at few bad examples which we all encounter on our daily usage of computers.

  1. A shopping app sends me 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?
  2. 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 1980s. Why can’t I voice operate my phone while driving – dictate a message, take a notes, take a picture, record an audio all using my voice?
  3. 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
  4. The Antivirus in my PC keeps telling me when it finds a file it can’t decrypt or infected with virus. How do I as an average user expect to know about threats better than the billion dollar that makes the Antivirus. Afterall I am paying them money to handle this, take decisions when it sees a threat, not to bother me every time when the PC catches a bad cold.
  5. I was visiting a news site and it encountered an error saying technical trouble, please retry after sometime. 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 that I should reload/retry. The software powering the site could have simply shown me cached data and then refreshed after sometime.

Of course, it’s not all gloom. One good example is how Google Now works. It knows that I frequent different places during weekdays and few other places during weekend. It automatically shows me traffic details corresponding to that day without me doing anything.

We can see the change in 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 to 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 setup 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 predicted and pre-downloaded. They get irritated when an app sends mindless number of notifications. They don’t want to do repetitive tasks, the apps user interface should adapt to an individuals usage – which means gone are one uniform menu & workflow for every user of the app; instead the user interface adopts to usage.

Recently in a piece in Bloomberg Businessweek, Maria Giudice (VP for experience design at Autodesk) has 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 tool sets 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 gets unsupported by the vendor. Should we have tools that make the new system learn and port the logic and data automatically. When a freeapp like WhatsApp can automatically update itself with new features without losing my data, what’s wrong in 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 an Enterprise software, I feel learnings from one should be applied more freely to other.

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 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 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.