Earlier quoted context omitted.
The ubiquitous waiting/loading/error(msg)/success(data) Lots of frameworks and state management libraries already lean towards helpful design, in languages with async and ADTs as first-class citizens you've got a real leg up, but at the end of the day it comes down to preventing impossible states. You can't have an error message when in the success state, you can't have success data while loading or waiting. By preve…
I think a switch or an if/else expresses this really clearly though and also prevents impossible states.
But once you start having much more than that, or nested states, Statecharts makes it really easy to build reliable, performant and easy to change flows.