If you --delete-after, then your backup can fail with a “write failed — no space left on device” type of error under certain circumstances.
If I (say) have a 1TB backup drive, which has 800GB of backups on it, then there’s only 200GB of free space on it prior to rsync running. If I’ve made in excess of 200GB of changes on the source drive, then the backup drive will fill up, run out of space, and rsync will fail to even reach the --delete-after phase.
If you just --delete(-during) then you delete files (free up space) as you go — making it far less likely that you’ll run out of space on the backup drive.
The --delete-before option deletes files and frees up space before the copy — making it virtually impossible to fill up your backup drive (assuming source and backup are the same size).
So, those three options (–delete-after, --delete(-during), and --delete-before) primarily map to resource constraints. If you have very little headroom on the backup drive you’d use --delete-before, if you have a reasonable amount of headroom you’d use --delete(-during), and if you have a large amount of headroom you’d use --delete-after.
What constitutes ‘very little’, ‘reasonable’ and ‘large’ amounts of headroom is up to the user to decide. Earlier this year, when I built my system, I took the opportunity to bring back a pile of archives for review. As a result, my first backup was ~925GB and I only had ~6% free space on the backup drive. Since I knew for sure that I’d be moving 60GB/6%+ directories around on the source drive, rsync --delete-after would have been guaranteed to fail. That’s why I went with --delete(-during).
I normally don’t even bother considering --delete-after until my backups are below 50% of drive capacity and most of my spring cleaning/reorganising is done (i.e. source contents are well structured and unlikely to change in a significant way).
Since my backups take less than 60s (on average) the ever-so-slight performance advantage that --delete-after enjoys over --delete(-during) is not a compelling-enough reason for me to use it at this point. I’d rather encounter fewer (preferably no) “no space left on device” errors, and have fewer (preferably no) backups fail, rather than have backups complete a few seconds faster.
Finally, a --delete-after backup that fails can orphan obsolete data in rarely-modified directories and eat away the free space on your backup drive. If you don’t religiously monitor your backup logs that can easily snowball into something that’s messy (time consuming) to clean up. I have better things to do.