Immediately write submission log entry on button press at earliest technical opportunity. Preferably immediately after guard clauses.
Set hmrc_request_state {'not_sent', 'sent', 'replied_success', 'replied_failure', 'timed_out'} on response from HMRC (timed-out iff we can detect that).
Set 'complete' flag at very end.
Remember to commit() at those key points.