I'm genuinely surprised and more than a little shocked and concerned that there are developers out there who are unfamiliar with state machines and their use. I think of state machines as being foundational knowledge, like sorting algorithms, b-trees, etc.