The backup module should provide a simple central API for a backup or restoring data from other modules. Not all data from all modules should be saved as backup, so let each module decide what to backup and what not. E.g. cached data should rather be cleaned than saved in a backup.
To end successfully, the backup *must* be validated after finishing. Every time. Mandatory. Can't stress this enough. The success status must be fed back to the user.