Which option did you choose? I also encountered this situation. I use a third-party API that I cannot control. And, for example, I request a list of available devices. The API sends me a list of devices, but does not indicate their status (online, offline). You can make a request to the API for each device (by id). In this case, I get the device state. I decided to make the second request only when the user performs some action with the device (for example, turns it on). As a result, I get a situation where I have a list of devices without a state, and one device with a state. Accordingly, I need to update the list and notify the Ui layer about the change (and, in a good way, block the ability to act on the device). If we implement the cache simply as a list, as is done in the documentation, then when replacing a device in the list, we will not receive the changed data until we explicitly request it from the data layer. At the moment, I keep all the data on the ViewModel layer. For this reason, I have one ViewModel instance for several screens.