Depending on SWF and using workflowId
for unique execution as a state persistence and arbitration layer (whichever comes in second gets rejected) is definitely not bad design - that's exactly what the service is for.
Yes, both workflowId
and activityId
are enough to ensure unique execution.
Now, for activities within the workflow, the activityId
does not necessarily have to be unique, as it is up to the decider to schedule work in a task-by-task fashion. See boto SWF tutorial for examples of serial and parallel workflow executions.