Another problem for me was the lack of error "payloads" (i.e. you can't give some values, like even an error message, with your errors - they're just pure enums without any context) which basically means you need to invent your own custom error system if you don't want your error reporting to suck... but I believe they were going to fix that (not sure if they've done anything yet as I haven't been following too closely, would be happy to be corrected).
I just pass a "diag" struct to functions that may need to return an error context. It was weird at first but then it dawned on me how much less friction I experienced being able to create error variants on the fly. There's also something to be said for seeing all (or most) of the relevant logic inline vs jumping around trying to make sense of separate definitions.