The operations related to program status (waiting for compilation) and pipeline status (e.g., starting, stopping, pausing) should all have a timeout associated to them
Timeouts should be set with a reasonable margin
Debug logging should be printed showing the elapsed time so far