A "full backup" seems to be a very overloaded term in the Android world. Allow me to first define it (paraphrasing a comment):
## A full backup is anything that will restore your system state to when you made the backup. ~Izzy (OP)

So the obvious follow-up question should be: *restore your state from what?*

- Scenario 0: Your phone is physically broken.
- Scenario 1: Your entire drive (eMMC) has been blanked. 
- Scenario 2: You can only boot into a USB flash mode like fastboot/ODIN.
- Scenario 3: You can boot into fastboot AND your (custom?) recovery
- Scenario 4: Your phone has been reset to factory mode. You have normal unrooted functionality.
- Scenario 5: Your accidentally deleted your favorite cat wallpaper image.
- Etc. 

Each of these scenarios can have a different backup solution. A **full** backup would have to be able to address all of them. Of course I'm trolling a bit with the broken phone scenario (0), but it points out how ill-defined this canonical question is. This reflects the fact that many people and companies tend to oversimplify backing up and ignore the most important part: restoring.

Consider that in the Android community it is implied that hardbricks (0 & 1) are paperweights; you're expected to get a new phone. So let's divide the remaining backup solutions into 2 categories: 

1. Developer restores (2+).  
Typically involves using a Nandroid (sector copy of most partitions) and maybe re-flashing a custom recovery. Bit technical. May affect the warranty.
2. Consumer restores (4+).  
Typically restores apps and data, including your cat photos. Partial restores could work across different models. 

Both can be considered full backups for their use cases. Let the context determine if someone asking for a full backup wants option 1 or 2. There's a bit of gray area (3.5?) between scenario 3 and 4, e.g. if a user deleted files from the `/system` partition the restoration method may depend on what is missing. 

### Beware consumer restores
The current most highly voted answer based on `adb backup` is a consumer restore that can restore apps and data, with a few caveats:

- Seems to omit some files
- Variable results depending on the ROM (e.g. doesn't work on some Sony models, omits different items on CyanogenMod vs TouchWiz).

Though recently in Oreo there have been small improvements [(XDA news)][1] I still can't confirm if it can copy all user files like photos and music copied from your pc.

### For a dev restore, you want a Nandroid. 
You *can't* get a full Nandroid without either rooting OR using a recovery. An exception is perhaps an image of your SD card, giving you a partial Nandroid. So you have to risk installing an image or temporarily rooting, or wait until OEMs offer better recoveries.

Remember to name your backups with important information like date and partitions included.

### You don't have to back up what you don't mind recreating
A Nandroid typically doesn't include a recovery, because they are usually applied from a recovery so it is redundant. But if your device is messed up and your recovery is gone you might panic, thinking you didn't back it up so there's nothing to restore. But it is often simple to download and then reinstall the recovery with a USB flash tool (e.g. fastboot).

Similarly, if you store your contacts in the cloud, there is usually no need to back them up. Just sync again after restoring.

Remember, a full backup depends on what you want to recover from. There is no perfect solution at the 'consumer level' I've described. In EU/Asian countries, where people aren't so worried about denial of warranty, there is little reason not to install a custom recovery if it exists. 


  [1]: https://www.xda-developers.com/android-oreo-adb-backup-better/