A workflow is deterministic if they always produce the same results for the same inputs by executing tasks in a fixed, reproducible order—isolated from external variability like timing, randomness, or system restarts.
If the workflow fails or is restarted you would expect the same result if the activities are true functions. Eg. an activity that always produces the same output for the same input, with no side effects or hidden dependencies
Workflows can be dynamic, executing different code paths depending on workflow inputs and activity results. As @Tate_Jones pointed out the activity results are recorded in the workflow history and the workflow takes the same path given the same activity results from the recorded history.