In general, we should not assume starting a program is a fast operation.
For pre-5.0, starting is relatively fast (mostly involve talking to YARN and setting up the launch context), although is not guaranteed. However, in 5.0+, starting involves uploading files to remote cloud and it could exceed the tx timeout.
Since program start is not a transactional operation, it can't be rollback. If there is TX timeout that happened, it could result in multiple launches of the same program.
As discussed before, generally we should log the intention inside a tx, commit the tx, execute the task, and then update the state in another tx.