I would argue the opposite here. Because structs don’t have a fixed identity your entire document will update whenever you change anything. The initial solution I suggest is having a class for each cell that wraps its current value and formula. Then you can choose when you want to update the values of the cells, and only the parts of your app that try to read a particular cell’s value will need to update when that cell updates. I do think it’s reasonable to have a struct at the top level that holds the current collection of cells, assuming you don’t expect cells to be created or destroyed very often.