Dlaczego potrzebne jest „𝚞𝚜𝚎 𝚜𝚝𝚎𝚙”? Ktoś zauważył, że kroki w przepływie pracy są jak „punkty kontrolne” w grze wideo. Dobre porównanie. Interesującą konsekwencją oznaczenia funkcji jako „𝚞𝚜𝚎 𝚠𝚘𝚛𝚔𝚏𝚕𝚘𝚠” jest to, że nie wolno ci wykonywać operacji I/O poza krokami. Przepływy pracy muszą być wolne od efektów ubocznych i deterministyczne. Za każdym razem, gdy 𝚊𝚠𝚊𝚒𝚝, ta funkcja musi być krokiem. Te wywołania funkcji można traktować jako serializowalne kontynuacje. Wejścia i wyjścia tych funkcji są zapisywane w logu. Pomyśl o JSON. Jeśli masz przepływ pracy z 3 krokami, a ostatni z nich zawiedzie, musimy być w stanie „ponownie uruchomić” całą funkcję i mieć doskonałą kontrolę nad stanem świata. W ten sposób „𝚞𝚜𝚎 𝚜𝚝𝚎𝚙” jest w rzeczywistości bardzo podobne do „𝚞𝚜𝚎 𝚌𝚊𝚌𝚑𝚎” lub „𝚐𝚎𝚝𝚂𝚝𝚊𝚝𝚒𝚌𝙿𝚛𝚘𝚙𝚜” — funkcji, które mogą być zewnętrzne i izolowane w przestrzeni i czasie, działające na różnych „komputerach”.