Best way to dynamically synchronise info to multiple users

I am working on a warehouse picking app for multiple pickers. Each picker can see what orders are not picked and select it for picking. The key challenge after testing the prototype in the field is synchronising of what is being picked vs what has been picked. This is because picker needs to make sure that the syncing is done every time which order is not picked yet. If I put a status change tag when an order is being picked, it adds to the sync time.

Once way of overcoming the sync issue is to allocate orders to different pickers, but this is not a flexible approach as some orders may take a short time to be picked, and it takes time to allocate orders too.

Another way that I can think of to make the order pick status dynamic is to use formulas to hide or lock some fields.

Any other ideas and methods to achieve the outcome is much appreciated :slightly_smiling_face:

The only thing that might help here is to turn off Delayed sync. This will mean that Appsheet will sync after every change. But you still have a potential [Race condition - Wikipedia](https://Race Condition) issue since 2 people could still pick 1 item within seconds of each other.

I had this same issue with one of my Apps. The only way around it for me was to create a duplicate checking Bot that ran each night. If a single item had been picked by two seperate people then this allowed an admin to go in and manually delete one of the items.

This is an issue with Appsheet, the whole matter of syncing. But we can’t get rid of syncing altogether as the App needs to be able to work to some extent offline.


Just to expand…I wouldn’t characterize this problem as an issue. It is simply the nature of how AppSheet works - and honestly, how most mobile apps work.

In order to have near-real time updating, the kind where one user is BLOCKED from, say, picking an item because another user is already in progress of picking an item, requires constant communication between the client devices and the servers - both in posting and polling. Doable, but creates a number of other issues. AppSheet is avoiding those other issues with its current design.


Thats exactly what I was trying to say :laughing:


Sorry, I know. I felt it would be good to know why its not done the other way.

1 Like

I think there’s a feature request here somewhere. Where a table could be either ‘live’ or done via a sync

1 Like

Thank you so much @1minManager and @WillowMobileSystems for the insights :slightly_smiling_face:


Another way I can think off is to put the picking information in a separate QR code that a picker will need to scan to read the QR code that contains all the picking information needed (eg order number, item code, location, unit of measure, quantity, etc…). We can have a formula in the app to split the string in QR code by a delimiter like “,” to get the order number, item code, unit of measure, quantity, etc information on get the required information for picking.

Then, we have a list of QR codes that represents a list of orders to be picked or groups of orders for bulk picking. In this way, it is flexible in that a faster picker will be able to scan more QR codes to pick. This QR code list can be on paper that can be struck off using a marker when scanned, or on another app. If it is on another app, then we need a way to indicate this QR code that represents an order or a group of orders is already scanned and picking is on the way.

Besides picking, this method can be used for putaway or any other activities that can be performed by concurrent users to overcome syncing challenges.

Welcome comments and inputs on better ways and ideas to do this :blush:

I’m just here to add my comments around the ‘live-sync’ scenario.
The nature of AppSheet relly on the SQL DB way of doing things. The ‘live-sync’ is something that apps like chating ones can do thanks to No-SQL DB services, like Firebase, MongoDB, etc.
So, AFAIK AppSheet won’t have ‘live-sync’ capabilities anytime soon. Maybe they implement something with Firebase that works internally (without the user needing to login to that service, similar to G’Maps integration) helping to make a certain column available on a ‘live-sync’ basis. But, again, I don’t think this is gonna be done. There are other solutions for no-sql apps around there.

Not entirely accurate, but also not really germain.