[PREVIEW] Users see updated data with “Quick sync”

We are excited to announce the preview launch of the “Quick sync” feature. This feature allows data updates to be available to users within 1-2 seconds of the updates. 

As of 5/24 - This feature is available to all users under Preview. Please read below for caveats.

Until now, app users needed to manually sync their app or wait for up to 30 minutes to see the latest data. Issues can arise in your business workflow when users act based on outdated information. For example, imagine a task tracking app where any app user can select a task to work on. When Lydia and Ted open the app at 8:30am when their shifts start, they both see that Task A is available. Ted assigns the task to himself at 8:35am. Because the app doesn't immediately sync the update, Lydia thinks the task is still available and attempts to assign the task to herself. Depending on how the app is designed. Lydia experiences one of the following:

  • The task is reassigned to Lydia. Ted doesn't know that Lydia has reassigned the task and ends up doing duplicate work.
  • An error message is displayed. Lydia gets frustrated by the time she wasted trying to find an available task.

With the Quick sync feature enabled, Lydia would see that the task is already assigned to Ted without having to sync the app.

QuickSyncDemo.gifMore generally, it lets users see updated data quickly and without action on their part (including after a data update by an Automation bot), leading to:

  • Faster turnaround times and less errors and unnecessary work in the process, and
  • Less wasted time and confusion among users

Additional details, including caveats, are available below. 

Preview offerings are intended for use in test environments only. This feature is not recommended for use in production apps.

How do I enable this feature?

Go to Settings > Performance (1-2) . If you are using the legacy app editor UI <link>, go to Behavior > Offline.

  1. In Sync: Cloud to Data Source,  turn on (3) Server Caching and (4) Quick Sync
  2. Save your app.

quickSyncEditor.png

Do I have access to this feature?

Feature is available on Free accounts. Based on the feedback, we will gradually release this to paid accounts in the coming months. 

When can I enable this feature? 

First, the feature currently only works for applications that do not have security filters. The app editor will enforce this. If you have a security filter and turn on “Quick sync”, the feature will be automatically turned off after you save your app and you’ll get a warning message. 

When should I disable this feature?

App creators should also consider at least the following factors to decide if they want to use this feature in their apps:

  • The individual data updates will be cached on AppSheet servers. If you have strict data residency requirements, you may not want to use this feature.
  • You should not use this feature if your data sources compute values automatically (for example, if your Google Sheets data source uses formulas) or if your app has virtual columns that require a complete sync to be computed properly. This is to make sure that your users are seeing accurate data and have a consistent user experience. 
  • If people change data directly in the data source (for example, editing directly in Google Sheets) or through another non-AppSheet system, the app will not reflect this updated data until the next sync.

Why is it not working for my users?

First, see the restrictions mentioned above (and check that you have no security filters).
In addition, users will only see changes made by other users that are using an app with the same version. This means that if you are updating your app (and the version is changed), your app users may not see updated data until their next full sync.

More technical information is shared further below too.

Where is the documentation?

See the Quick sync setting described in Offline and Sync: The Essentials.

Who should I reach out to if I see issues or want to provide feedback?

Add your feedback or report issues directly on this announcement thread

How does the Quick sync feature work?

This feature works by “broadcasting” updates directly to the open apps when the changes are done. This allows apps to show the latest data in between full syncs. An overview of the broadcast system is shown in the diagram below.

QuickSyncDD.png

 AppSheet uses the same broadcasting system that is currently used across Google Workspace products like Google Docs and Google Sheets. This broadcast system does best-effort delivery of updates and comes with a few caveats

  • AppSheet will cache updated user content in a queue for up to 6 hours. Data stored in the queue similar to what is currently stored in the AppSheet Audit History.
  • This feature will work with any of the AppSheet supported data sources. 
  • If a broadcast notification is not sent due to network issues, the updates will not show up until the next notification or full sync.
  • We do not support any security filters at this time. Support for some security filters will be added in the future, but only for filters that use data from the updated row
  • The app client (in a user’s browser or on their mobile device) does not fully re-compute all formulas with each update  and depends on a full sync for all the formulae to be updated. So the quick sync won't necessarily reflect what should be the newly computed values. This behavior is similar to what you notice when data is locally edited and the app is set up for delayed sync.

CC: @preethamm  @Arthur_Rallu 

Solved Solved
29 108 10.2K
1 ACCEPTED SOLUTION

Hi All - We released this feature to all users. Thanks for your continued support. You should be able to see the toggle in the editor. Please note that the feature is still in Preview.

- If you do not see the toggle, please contact via the customer support so that we can take a look per app.

- There are few outstanding bugs and feature requests(including security filter support). We are working on these items and we will post an update in a new community post. 

 

View solution in original post

108 REPLIES 108

This is an exciting development. To help us understand how applicable it could ultimately be, please elaborate on the following. I don't understand what ongoing constraint to expect.


@preethamm wrote:

Support for some security filters will be added in the future, but only for filters that use data from the updated row.


At this point, we are thinking of supporting filters that depend on the updated row only. For ex: `[Assigned to] = USEREMAIL()`. For anything that depends on Ref columns or SELECT, server will need a copy of the data on client (for referenced tables) and we do not have that cached in the server.

Thanks for elaborating.

I'm glad this will be available to use where possible, and understand it's complex to make available in all scenarios.


@preethamm wrote:

For anything that depends on Ref columns or SELECT,


Unfortunately, this will be pretty limiting. Straightaway various typical scenarios make an app ineligible--e.g., any use of roles/permission tables (even if those are read-only and, therefore, maybe cached on server?), utilizing a Current User slice to reference a user's current selections, maybe even referencing a parent table's security-filtered results in security-filtering a child table.

I look forward to seeing how the feature evolves and learning from innovative community experts how to maximize its use.

Acknowledged. I agree there are lot of legitimate usecases that this will not address. We definitely would like to support these usecases as well. Our next immediate focus is to implement the simple row based filter and then look at ways to expand the coverage.

Perhaps now with this new function, it may be possible to create a real-time GPS tracking system. For example: I have a transportation application in the hospital area for patient transport, and I would like my application to track the vehicle's location in real-time during its journey without the driver needing to manually update the information

Perhaps now with this new function, it may be possible to create a real-time GPS tracking system. For example: I have a transportation application in the hospital area for patient transport, and I would like my application to track the vehicle's location in real-time during its journey without the driver needing to manually update the information.

Currently, AppSheet changes are made sending the whole row to the server, and we count on that behaviour.

  1. Does the new Quick sync feature send the whole row when pushing changes or just the field that was update?
  2. If the second, it will consider as "changed" the fields with AppFormula that are not virtual?

1) It still operates at the row level. We sync physical columns of the row only and let the client recompute the virtual columns on the device.

2) Anything that updates the row in the origin data source. So this needs physical column data to be updated.

 

Was so jazzed as I just got through implementing a workaround for this EXACT conflict/race condition issue involving an update key, an appscript, a temp table, and a confusing set of actions/workflows.  It works, but it could be better.

Then I read this part:


@preethamm wrote:

Do I have access to this feature?

Feature is available on Free accounts. Based on the feedback, we will gradually release this to paid accounts in the coming months. 


and now...  😢

 

Very exciting!

Great job on this post too, I love the detail, especially the "how it works" part. The link to the help article seems to be broken (or maybe the article just doesn't exist yet?)

@Marc_Dillon - Thanks for raising this.  Link is fixed! 🙂

Tested the function, it's a great undertaking!

The time for the appearance of changes is only 3-5 seconds!

Thanks to the AppSheet team

I noticed that when activating "Quick sync", the names of downloaded files are displayed incorrectly:

Screenshot_38.png

 3-4 minutes after performing the "forced synchronization", the name returns to the usual

Screenshot_39.png

 Please pay attention to this

Thank you for pointing this out. We will take a look into this 

Created a new app under a free account to test this some, and unless Im crazy, I seem to be seeing the behavior of QuickSync working without having it turned on within the app yet.  Can anyone else confirm Im not crazy?

Is your data source all AppSheet Databases ? AppSheet Databases has a similar version of this turned on by default. This feature is a complimentary option that applies across all data sources. 

AHH. Thanks @preethamm . Correct, it was only a Appsheet DB.  Added a Google Sheet as a source and behavior was as expected on it.  Apologies, I had no idea that was an existing feature of AppSheet databases.

Thanks for confirming. Tbh, it is something we missed on our end. I looked around and sync with Databases is not explicitly advertised. 

Well that makes me feel better about not being able to find anything about it. 😀

Is the AppSheet DB analog to QuickSync similarly limited to apps without security filters or without security filters that use certain types of expressions, such as dereference and SELECT?

No, it supports all the security filters. We own the data source infrastructure and can afford a  "smarter" sync. However, please note that this is a preview feature and I am not sure when it will land.

@ShirleyN 

 

🎉🎉🎉!


@aneville wrote:

I seem to be seeing the behavior of QuickSync working without having it turned on within the app yet


Make sure to test with two clients. Apps will push changes in the background, but won't download them unless Quick sync is on

I am.  Have the app open with two different accounts on my PC (one in incognito mode) as well as up on my phone.  When I make a data change, I see it within seconds in all the other places.

Its about as vanilla of a "new" app as there is.  Just created an appsheet DB, and attached a new app to it.  Created a few actions to update a DateTime record and an Assignee when clicked.  Server caching is OFF, QuickSync is OFF.

Awesome feature

great


@preethamm wrote:

the app will not reflect this updated data until the next sync.


 

Why not automate this part too if an update can be sent almost instantaneously to all devices? Syncing should not be done manually by the user. Would it be possible to trigger an auto sync at the end of a couple of updates? It's just a question. 

It looks promising after using it for a while. I also noticed that even server side automation bot updates are reflected in the UI almost immediately, which is amazing! You do not have to wait until a sync is complete to see a bunch of rows being added or updated. Looks nice to see those automation triggers and multiple rows keep adding and updating in the UI itself. Impressive and great work !

Yes. That's the logic ending we are working towards: users should not worry about when to sync. However, we are not there yet. There are couple of big items we need to resolve like client does not compute all expressions, some users have external formula in google sheets, security filters do not fetch all the data and will need to go back to data source.

Th


@preethamm wrote:

users should not worry about when to sync


 

Hello @preethamm I liked everything but there a issues in scenarios when update is ongoing. 

Ex.

I have two action that switches column to true/false for a single row inside a detail view.

When the action is clicked and row is set to false it should not allow/show any other actions.

Right now if someone click 3-4 times between true/false the data change reflects in detail view also and as a result even if user set the row to false it keeps showing actions on and off till the sync is complete.

This is an issue when we use looping actions also. Each time the rows are updated using and Update count action it keeps turning on and off. I can explain you better with a video if you are not able to understand the issue.

 

There is a fix rolling out and should be available on Monday. It basically disables any incremental updates for the client that made the changes till all the updates are pushed/sync is triggered.
Could you please see if this is resolved on Monday and let me know?

Okay thanks. I will check and let you know. It was good actually but unfortunately for all changes it keeps switching the UI Causing inconsistency.

My sincere compliments!!! 👏👏👏

There's a way to show the changes during the editing process ?

I mean: if user1 and user2 are working on the same record in EDITING MODE (using Google Sheet) is it possibile for user2 to see the editing of user1 while he's editing the record (and not only after the record is saved) ?

(like happens for example on google doc / sheet when the same document is editing from 2 users at time)

Agree. Definitely a nice feature to consider. We need to play a balancing game of not sending user data on notifications which workspace products do not have to deal with.

@Arthur_Rallu 

@preethamm Hi, I am getting the error -  "failed with exception Object reference not set to an instance of an object" for some of my BOTs since two days. I have also enabled the Quick Sync two days before. Can the error be anything related to this. Just a doubt, since both the events coincides. 

jyothis_m_0-1678683449220.png

 

I tried disabling the Quick Sync option and then tested again. This time the BOT does not throw any error. 

Again re-enabled Quick Sync and the error shows up again.

So i think the error has something to do with the new feature

Thank you for the heads up. I was not aware of this issue. We will look into this.

Thank you 😊

Thank you for providing me the reproduction details. It helped me identify the issue and put a fix in. As you observed, this was an issue with Automation triggering another Automation. This should be fixed everywhere by the end of this week.

Thank you @preethamm