Be water, my friend – the evolution of computing and its flexibility

  • 13th January 2022 at 10:54AM
  • Written by Manish Jethwa, CTO & Head of Product, Yotta
Featured Image

Looking back at the evolution of computing over the past 200 years, right from the invention of Babbage’s Difference Engine, I see that each step change has coincided with the introduction of greater flexibility. The Difference Engine was built to tabulate polynomial functions, but being entirely mechanical, its role was limited to solving this one problem. Fast forward to the mid-20th century and the introduction of mainframes and we find punched cards providing an early form of software, a way to hold information that could alter the machine’s behaviour and therefore be made useful for more than a single purpose. A few decades later, operating systems delivered another extension to flexibility, allowing software to run on any machine with the same OS by abstracting away differences in hardware. More recently, during the now-famous iPhone launch in 2007, Jobs described the limitations of smartphones around at the time with the following:

 

“And what happens if you think of a great idea six months from now? You can’t run around and add a button to these things. They’re already shipped. So, what do you do? It doesn’t work because the buttons and the controls can’t change. They can’t change for each application, and they can’t change down the road if you think of another great idea you want to add to this product.”

― Steve Jobs

 

It may not have been obvious back then, but Jobs was saying that the ability of the device’s user interface to change for each application was at the heart of what made the iPhone different.

 

As we gaze into the near future, many believe Artificial Intelligence will be the next step in this evolution. One of the key strengths of AI, from a Machine Learning perspective at least, lies in its ability to adapt to solve new problems based on learned information. The algorithms used by Neural Networks are designed to process data to solve a general type of problem as opposed to a specific one.  ​​

 

Our mission to build Alloy, the world’s first Connected Asset Management System, has led us to a similar conclusion. At a glance, the versatility offered by Alloy comes entirely from the data model which allows each customer to mould the system structure to their own specific requirements. Designs, like database tables of old, can be created dynamically by the user to hold custom data. Interfaces provide an extra layer of meaning to Designs by holding shared data and signifying shared behaviour.  This capability is a big differentiator for the product, but when offered in isolation, it can present a daunting challenge for the user who has to configure the system from scratch. It is the role of modular Blueprints to provide some structure to an otherwise completely flexible model and lessen the burden.

 

That said, the flexibility of Alloy extends far beyond just the data model. Firstly, SaaS inherently provides flexibility to the user in how users access the system, especially when united with Mobile applications. Our Workflows offer the ability for customers to model their own business processes, that would otherwise have to be hardcoded into the system making them difficult, time-consuming and costly to change. Workflow Computations promise to give users the ability to literally write code in the application, and in the world of software, it doesn’t get much more flexible than that. The User Interface is designed to adapt to the Blueprints you have installed, and the introduction of Report builder sees us add another form of flexibility to the system where users can create their own reports without relying on Support, Consultants or Developers to perform this task. Finally, our Meshes can be used to more easily build connections to other systems and share information.

 

To summarise, Alloy provides flexibility to users in how they manage, access, process, present and share information. I’m not aware of any other system that does what Alloy does and we should be immensely proud, not only of what we are building but also of how we are building it. Our software is being developed with the principle of Separation of Concerns (SoC)* at its heart where we try to ensure we split the application into distinct functional layers that communicate with one another through well-defined interfaces. Alloy is, therefore, more modular making it easier to maintain today and upgrade in the future. A colleague at Yotta recently reminded me of a quote by Robert Martin of Clean Code fame that describes the benefit perfectly:

 

“Software has two types of value: the value of its behaviour and the value of its structure. The second of these is the greater of the two because it is this value that makes software soft.”

― Robert C. Martin

 

Hopefully, I have gone some way to convince you that greater adaptability goes hand in hand with technological advancements and this is fundamental to Alloy and its success. This flexibility has incredible value and our challenge now is ensuring we deliver on the potential the system holds to change the industries we work in today and others in the future. Meeting this challenge will only be possible if we all focus on building a system that further augments this flexibility with every enhancement being considered through this lens.  ​​​​​​​

 

I’ll end on a quote from Bruce, which is probably overused when talking about adaptability, but it is so good that I can’t resist including it here. His words can certainly be interpreted in many ways, but the goal of flexibility is definitely central to them all.

 

“You must be shapeless, formless, like water. When you pour water into a cup, it becomes the cup. When you pour water into a bottle, it becomes the bottle. When you pour water in a teapot, it becomes the teapot. Water can drip and it can crash. Be water, my friend.”

― Bruce Lee

 

 

 

 

 

 

 

Manish Jethwa, CTO & Head of Product, Yotta

 

 

*In computer science, separation of concerns ( SoC) is a design principle for separating a computer program into distinct sections. Each section addresses a separate concern, a set of information that affects the code of a computer program.