Пожалуй лучше всего это всё на сегодня формализуется с помощью state machines, которые позволяют немножечко управлять неопределённостью в поведении (например, через вероятностные переходы между состояниями). Добавляем специальные состояния -- "ожидание подтверждения", "требует ручной проверки" или даже "множественные возможные состояния", и т.п.
Полезно также "обратно" порассуждать в стиле логик Хоара по кванторам существования: например, если функция findValidUser возвращает не-null / не эксепшен, то в системе должен гарантированно существовать пользователь с заданными свойствами (чтобы не анализировать все возможные пути выполнения после).
В современных сложных системах без
