State machines are known for a predilection to use `goto` extensively, but that does not make them 'spaghetti code'.
A state machine is, in fact, a well-understood method of applying structure to spaghetti.
A state machine is, in fact, a well-understood method of applying structure to spaghetti.
Typically, we'd see the code that implements the logic for each state gathered together. Since this is where the outgoing transitions get decided, the transitions end up being distributed across their originating states.
you define a function with a clause per state (and some other args including the incoming message), and each clause returns a tuple with the new state and some other stuff. the loop is part of the framework, and handles generic otp stuff like updating code in a running system.