If you’re using both linux and windows you’re likely using ntfs. And that works really well on linux, but has one very important non-standard setting and a few other quirks. This is nothing authoritative, for that consult https://jp-andre.pagesperso-orange.fr/advanced-ntfs-3g.html and as usual ArchWiki is pretty informative too: https://wiki.archlinux.org/index.php/NTFS-3G.
This is a fuse thing that stops it from splitting all i/o into small chunks. This reduced cpu load (or just wait?) a lot for me.
invalid argumenterrors if a given name is not accepted by windows. Ntfs itself allows everything, but if you want to prevent windows madness it’s probably a good idea to use this.
Regarding permissions: The default option is basically “don’t care, allow all”. That’s often fine and you should enable ignore permissions in Syncthing. Otherwise there’s full blown permission handling, either just posix or with ACL, but that requires some setup (see links above).
If you have any additional tips, please write them up too.