Most organizations use forms-based custom software applications that have hard-coded the business functionality. These applications are implemented on a set of specific technologies: source code in one (or more) languages, public and private software libraries, operating systems, databases, cloud services etc. All of these technologies have a shelf life and will expire. When they pass their expiry date, you can choose to continue to operate your application at some level of risk, or redevelop your application using a newer technology. As you can imagine, this is an ongoing process and given the increasing rate of change of technology, a more frequently occurring and expensive problem.

The root cause of this problem is that we hard code the business functionality into our software applications making them dependent upon the technology we use to implement them.

Most of the code (>90%) that implements our business functionality simply moves data between the user’s screen (UX) and the underlying data storage (Create, Read, Update, and Delete (CRUD)). It is possible to virtualize the UX and CRUD functionality from our applications into a set of configuration data. This approach has many obvious benefits: cheaper, faster, and safer application development; reducing the need for applications; simplifying enterprise architecture; and reducing the sources of technical debt.

We have also broken the dependency between UX and CRUD functionality and the technology that implements it.

To render the user experience on a device from configuration data, we need to have an “interpreter” application. Each different device may need its own interpreter, but all can use the same configuration data source and display the equivalent user experience with the same business functionality.

Over time, as new devices become available its simply a matter of building a new interpreter. We do not have to re-implement the UX and CRUD functionality, or any of the other business functionality exposed via microservices.