Erlang / Erlang Basics Interview questions
What is the difference between gen_server and gen_statem?
Both are OTP behaviors for a stateful process, but they model that state differently.
| gen_server | gen_statem |
| State is an arbitrary term you pass between callbacks; behavior is the same regardless of what that term holds. | State is explicitly modeled as one of a set of named states, with transitions defined between them. |
| Good fit when logic is mostly "handle this request, update some data." | Good fit when the process genuinely moves through distinct modes, e.g. connecting → authenticating → ready. |
You can hand-roll a state machine inside a gen_server using a state-tagged tuple and a big
case, but as the number of states and valid transitions grows, gen_statem's explicit
state/event/action model tends to keep the logic easier to follow and harder to get into an invalid
transition.
More Related questions...