I've always just used rsync and cron to keep backups of my user data, and clonezilla for doing a whole system image manually when big changes are afoot like dist-upgrades.
I've been a bit slack about setting it up on my current system so I finally decide to enact a backup plan. I'm using rsnapshot this time as it is primarily for incremental backups and allows you to specify how many iterations of backups to keep and how often to run it. rsnapshot uses rsync to do the actual backup.
I won't reinvent the wheel, pretty much just followed the excellent (as usual) guide on Arch wiki. This gives examples of how to run it regularly using systemd timers, rather than cron which most of the other guides use.
https://wiki.archlinux.org/index.php/Rsnapshot