TL;DR
In general it should be enough to leave your phone on charge, with Wi-Fi available overnight to trigger backup.
Unfortunately, bug reports from users indicate that google have had issues for some time with backups not being scheduled. We might guess that these issues have either not been prioritised, have been too difficult to fix, have been fixed and reoccured due to poor quality code or whatever.
Google cloud backup has been broken since 2016
My best guess is that my particular problem is a bug from 2016 that is still to be fixed (see this post). The answer in the linked post from a google employee says,
We have been investigating why some devices are rarely (or never)
attempt to back up and have identified a bug within the backup
scheduler. We're working on fix for upcoming Google Play Services
release. We are not sure yet if this is the only issue, so will
continue the investigation.
There are no further updates.
Meeting backup criteria (excluding the condition that bugs need to be fixed)
Regarding my question about what conditions will allow backup to continue, the same answer from the google employee provides some useful information:
Meeting backup criteria
Our main backup mechanism (K/V Backup)
covers call history, device settings and a small subset of apps and
will upload over any network connection and without requiring the
phone to be idle and charging. However, our newer mechanism (Auto
Backup for Apps) covers SMS and apps (~25% covered) is restricted to
the device being on Wifi, idle and charging. The reason for that was
that we theoretically can get up to 25MB of data to backup per app and
that would not have a terribly positive effect on your data usage (for
those who don't have the luxury of an unlimited data plan). We are
working resolving this, in all likelihood by:
a) providing an option in settings to be more aggressive to backup,
e.g. allowing it even when the device is not charging (but on Wifi)
b)
allowing manual trigger of a backup in settings
c) providing warnings
when backups haven't happened for a number of days
It seems that neither the bug fixes nor the proposed improvements have materialised, and so we might conclude that google gives cloud backup relatively low priority. Or I guess it could be that the backup code is horrific and takes an inordinate amount of time to modify and debug. Your guess is as good as mine.
On my new phone most items eventually got backed up (after about 24 hours). Now only Contacts are waiting for backup, so obviously something still isn't right, but for best results you could do worse than:
- Make sure you're device is on Wi-Fi
- Make sure that the charger is connected
- Make sure your phone is idle
This last point is a little ambiguous. I imagine it to mean that you shouldn't be actively using your phone for some unspecified amount of time, but it's not clear to me whether stuff running in the background using CPU might affect the "idle" determination.
Without any better information available, you would imagine that leaving your phone on charge, with Wi-Fi available overnight ought to be enough to trigger backup.
Untested workaround
For those who feel sufficiently motivated, a workaround (one that I have not attempted myself) is to use adb to force a backup:
adb shell
bmgr run
bmgr backupnow --all