>that pattern actually forces you to think about errors and "design" them to give meaningful messages
Doesn't Rust's Result type(s) force you to do the same? Sure, you can pass them on with the ? operator, but it's still a choice you have to make.