I'm creating a shared todo list/checklist application with flutter and for the database I use Firestore. The user belongs to a group and each group has a list of todo-lists. Each todo-lists contains to-do items.
As of this moment, a todo-list is a document that contains a list of documents with a todo-item. If a todo-list contains 50 todo-items for example, I will be charged for 50 document reads when the user opens the todo-list. The users also subscribe with snapshot to changes to any of the todo-items. Each change will be charged as an update and a read.
My concern is that the initial 50 document reads will be too much every time the todo-list is opened. I'm considering making a todo-list document with an array property or a flat list with todo-items inside. When the todo-list is opened, I will only be charged 1 document read. But this list is also real-time and my question now is what does this mean? Will, the todo-list document be downloaded once again with the 50 items or will it only download the changes to the array? My concern with this approach is that the user will download too much data even with a simple change to a single todo-item or am I wrong with this? Does someone know a better approach or do I make these trade-offs?
Also, users are limited to 100 todo-items in a single list.