Offline POS - Week 1 Topic for Business Domain Discussions

This discussion originated on a Telegram Group. The discussions are being shared here to invite interested people to join the discussions. Once this topic is discussed threadbare a final summary will be posted. Hopefully the community will find these discussions helpful and useful.

The crux of the matter with Offline POS is the following:

Imagine you are a company with many retail outlets. Imagine you are on ERPNext. Imagine that some of your outlets are in remote locations where internet connection is spotty.

Now imagine there is a customer in one of your retail outlets. S/he has one of your products in her/his hand. A wad of money (or plastic) in her/his other hand. And the counter sales person at your remote store goes, “Jeez, sorry I cannot check you out”.

Any business person (or sensible person) will immediately recognize that’s a dumb thing for the company to do. The right thing for the company to do would be to take the money, give the customer her/his product, and ensure that the product is billed at the correct price.

Do we agree on this? That it makes sense to fulfill the customers’ need for your product, subject to some boundary conditions of course. Or is there anther perspective that goes: No system. No billing! Sorry too bad! Rather than focusing on one transaction, let’s put the company’s focus on ensuring that, going forward, such exceptions are not required to fulfill customers needs and expectations?

This part addresses the perspective that we fulfill the customers’ needs even when the system is down. Let’s examine the boundary conditions. Here’s a list:

  1. The customer needs to get an authentic, legal bill/receipt/invoice. This bill needs to be at the correct amount including all promos and discounts that are applicable
  2. The transaction needs to be non-repudiable (meaning the counter sales person making the transaction should not be able to deny making the transaction in the first case)
  3. The transaction needs to be regularized once the system is back up & running- The invoice recorded. The payment recorded. And stock updated.
  4. Loyalty points, if applicable, should accrue to the customer
  5. Please add any other boundary conditions

Now, let’s examine the reasons for the unavailability of the system:

  1. Server issues
  2. Internet connectivity
  3. Local network issues (like internet is up, but there are local network - LAN - issues)
  4. No power
  5. User training and forgotten passwords

Of all of these, the only part that you could consider making an exception for is #2 - Internet Connectivity. The rest are all larger issues that the company needs to address as it could be affecting multiple retail outlets

And in this day & age - in this connected world, is this really worth trying to come up with a Offline POS solution? Does it not make more sense to find other options: Dongles, Mobile Phone Pairing, Satellite Internet, Wireless Internet. Or even letting the counter sales person complete the transaction on her/his mobile phone.

For a moment let’s assume that it is necessary to have a Offline solution.Now let’s look at the options for a system that can work even when the internet goes down:

  1. Offline POS
  2. Local Instance of ERPNext

A local instance of ERPNext will make the implementation supremely complicated unless each retail outlet is a large outlet supporting a local IT staff. Okay let’s say we have a local instance of ERPNext. How does the company aggregate transactions: What are the options?

  1. Event Streaming
  2. Customisations to send just the relevant information to the central system: Customer, Tax Information, Amount, Cost of Goods Sold (or other expenses)

Event Streaming is a great thought, and will need significant investment in energies to design it in a practical way and make it work.

Event Streaming Lite is the second option where transaction specific customizations send just the relevant information to a central console.

Now let’s look at offline POS: How does Offline POS work? Browser caching is unreliable. So what other options exist?

How about a standalone app, that takes the relevant information like:

Item Codes, Pricing, Promos, Discounts, Customer List, Loyalty Code and keeps a local copy of that information that’s synced up with the central system every X Minutes/Hours.

If ERPNext is not accessible from the location, the counter sales person fires up this app (it could be a protected Spreadsheet after all), and makes the transaction. And the app is configured to sync up automatically when the link/system is up again.

Plus the system generates an original, authentic Invoice/Bill/Receipt for the client.

So assuming you can build a system (that could just as well be the ERPNext POS with browser caching that keeps a local cached copy of all the relevant data. Or it could be at the simplest avatar a protected spreadsheet which, using Rest APIs or Webhooks maintains a local copy of all the relevant data.

Making transactions offline and then regularizing transactions is fraught with the possibility for errors and inconsistencies. Where can the errors/inconsistencies occur. Any of the attributes of the transaction:

  • Invoice Number (This can perhaps be addressed by having a separate series for each retail location)
  • Item Code(s)
  • Selling Price
  • Customer Details
  • Promos/Bundles/Discount
  • Stock Quantity

The Stock Quantity would be for a warehouse that’s tied to the specific retail outlet, so the quantities should be undisturbed between the time the Counter Sales person handed over the Item to the customer and took her/his money. And even if there are conflicts, that’s a standard problem in a retail deployment - with the complexity of aligning physical stocks to system stocks, most retail deployments will have a standard operating procedure to manage such disparities and it’s best to run such conflicts through those standard operating procedures.

The rest are things that may have changed after the last sync of the local cached copy. Like the price of the item was 20 when it last synced, but the price got changed to 21 when the link was down, the system will have a conflict when the retail location can establish a connection to the ERPNext instance to regularize the transaction.

While the instances of such conflicts occurring are pretty remote, implementing organizations will have to establish standard operating procedures of managing such conflicts - the simplest of which could be that the last synced values will be respected and allowed to stand.

If the syncing has occurred with any manual involvement and interference, the synced values are valid values that the organization should respect.

So, in summary (you guys can disagree - please disagree and shred this to bits):

  1. Local instances of ERPNext will make the implementation too complicated. But in certain situations it can work well - like it’s a large retail presence in a remote location - so it has local IT personnel to support the local instance of ERPNext

  2. In this connected world an organization is better served solving the connectivity issues than trying to get to an offline mode

  3. If an offline setup has to be supported, organizations can pick between the local instance and an option of a cached copy. The cached copy could be browser caching. Or a Protected Excel. Or another specific app developed for this purpose.

Either way, such an implementation is likely to be very intense and involved and organizations are really better served if they focus on connectivity issues rather than pursuing complicated options.

Olamide Shodunke had the following comments to make:

As an implementation company I can confidently confirm that we are having to use ALL of the three suggestions in your summary.

For large multi location supermarkets, with each location having over 40 users, we have had to settle for option 1 …local instances.

For business owners who are IT savvy themselves we have sorted out Internet connectivity for each store location by having backups for backups of Internet devices .

And then we have the middle ground, business owners who insist on having offline access. For now I have been turning down these clients, because I need a specific app to solve this problem…I cannot rely on browser caching.

So we need to make sure that

  1. Event Streaming becomes more reliable and easier to use

  2. We have an offline capable app that can work online when Internet is on and automatically offline when Internet is down. This may require having location specific invoice numbering (can be achieved by attaching naming series to PoS profile ?) And some other nitty gritties.

Let the conversation begin

Nofal Mami had this to add

I recommend a local instances with synchronization jobs for integration with other instances, since each entity it has it’s scope of data and interest, for example headquarter will not care on detailed transactions for sales or inventory but more interest for summary values and so on, so let it be an autonome entity if it’s accepted by client. option 2 is event streaming, last browser caching to be excluded