Designing systems as a set of discrete states and transitions between them, often used in embedded systems.