Вопрос на подумать и на сбор идей.
Если бы вы писали машину состояний, как бы вы написали стейты и шаги по таким требованиям:
Есть воркфлоу из нескольких шагов.
Каждый шаг имеет свой набор стейтов.
Пользователь проходит по шагам последовательно, но никто не гарантирует, что шаги не могут менять свой стейт попарно и\или хаотично. (вдруг в будущем взбредет в голову)
Самое интересное, надо заложить удобное добавление и удаление шагов\стейтов. В смысле чтоб если понадобится добавить 1 новый шаг с парой стейтов на нём, или удалить что-то старое, не приходилось лазить в 100500 файлов и вычищать куски.
А самое забавное.... в БД старые завершённые воркфлоу имеют шаги и стейты какие были на момент завершения, если добавят новый шаг, то базу никто не будет мигрировать. Надо уметь обрабатывать такой момент.