In case of complicated workflows, build the workflow as frontend workflow first (if possible), test and debug
Build the workflow in the backend, use the logs to check the results
In case of complicated workflows add steps to write parameters, results of data transformations, timestamps etc. to a log datatype.
You can even decide to create a datatype where you can set a flag in order to enable/disable additional logging (step 3) for a workflow. Especially useful when you have to debug in Live and the log contains a lot of entries.