Если вы можете смоделировать поток управления вашего приложения как конечный автомат, то IMO вам следует . Как уже говорили другие, конечные автоматы довольно легко визуализировать в форме блок-схемы. Однако, что более важно, наличие конечного автомата в качестве модели значительно упрощает проверку правильности вашего кода, поскольку вы можете подтвердить, что код охватывает каждое состояние и каждый переход между состояниями.
Код, написанный для микроконтроллеров, часто разрабатывается и реализуется с использованием этого подхода именно по этой причине.
Имея риск спровоцировать огненную войну, я также констатирую, что любой, кто находит конечный автомат "слишком отвратительным или трудным для понимания", не имеет делового программирования. В конце концов, регулярное выражение - это конечный автомат.