A couple of years ago, I wrote that The Builder pattern is a finite state machine!. A state machine consists of states and transitions between them. As a developer, I want to make illegal states unrepresentable, i.e., users of my API can't create non-existent transitions.

My hypothesis is that only a static typing system allows this at compile-time. Dynamic typing systems rely on runtime validatio