Software is a field littered with tough problems. One of the hardest and most hated problems arises when handling mutable state. This becomes especially complex when we try to mirror the real world objects, which are constantly changing, as objects within our code. Dealing with the state of an object can be a slippery slope, particularly if we don’t know what tools to reach for. This talk will delve into one of the most elegant (but often ignored!) solutions for tackling mutable state: state machines. We’ll break down the theory behind state machines and learn how they’re not nearly as complex as they seem to be.