Principles
Error handling
Let failures reach the code that can handle them, without every caller checking.
Pick your language
When to use it
Use it when
A failure starts deep in a call chain, and only a caller near the top knows how to answer it.
Skip it when
The direct caller answers the failure, like a lookup that often finds nothing. No chain to skip, so a nullable result and an elvis do it. Distance decides, not rarity.
Spot it by
Constants like minus one for failure, if (code != OK) return code passed up the chain, or an else branch that treats unknown codes as success.