Omnichannel Services Should Deliver Functionality, Not Only Data

In design of omnichannel services that touchpoints (like apps) access (I prefer to call them front-end services), I think it’s important to focus on delivering functionality, and not only data.

As you can see in the figure in the video, there are services that are supply data and those that implement a function. The data-oriented services can be queried (with CRUD operations), just like a relational database. In fact, many of the things that you can do with SQL, can often be achieved with these data-oriented services, and this is really useful for some services on the server-side. On the other hand, we have the functional services that works like a function, which takes a number of parameters, performs some logic, which usually include data operations, and return a consolidated result. There are two different ways to implement these services, and either they are using light-weight data formats like JSON or they using heavy-weight formats like XML. In the figure you see where to find most RESTful services, and also where to find traditional Web Services based on SOAP (which is a heavy way of using the already heavy XML, and OData is an example of a heavy-weight data-oriented service). What we want to achieve are light-weight functional services.

When a device accesses a service on a low bandwidth, it’s important to do as much as possible with as few requests as possible and that is really difficult with data services. Also, some calls don’t even map to a relational data structure. Let me take an example of searching prices for flights (which I worked with recently), where you want to make a single request with all parameters (from, to, dates, oneway/roundtrip, number of passengers, currency, etc) and get a simple answer with just the information needed to show in the user interface.

This example also show that there is often a need to implement logic for the data (validation, calculations, etc), and if you only have services that deliver data, you have no other option than to implement the logic on the client side (in the app). That becomes a real problem when you have multiple client using the same service, which is the case for most omnichannel services, because then you would need to implement the same logic on each client platform. Not only would that mean extra work in both initial implementation and maintenance, but it would be really hard to make sure the logic is the same in all channels.

So, the conclusion is that you should put as much logic as you can on the server side, and create light-weight functional omnichannel front-end services.