We have a few things in the UI that could take many minutes to process, and a few things that we avoid doing because of this. For example:
- Moving a Phriction document. We have to move all the children too, so this could take an arbitrarily long amount of time.
- Maniphest batch editing. A user can apply an arbitrarily large number of edits to an arbitrary set of tasks.
- Deleting a column on Workboards. We avoid his for now and might not want to actually implement it, but it can be arbitrarily slow.
- Deleting other objects. I like that this can't be done from the web UI at all, but a technical consideration is that it may be slow.
- Downloading a zip/tarball of a repository (to generate the file).
- In Wall of Shame at FB, there was a queue-generation workflow where you'd basically run a query over 10 milion objects or whatever. This could take a few minutes. We might have something similar in Nuance.
In all of these cases, it would be nice to have a workflow like:
- Your task is queued.
- You get taken to a "Your task is processing, please wait. You can continue working, stuff will happen in the background and you'll be notified when it's done." screen with a progress bar and such.
- There's some UI way to check/review your background tasks.
- You get a notification when one finishes.
From a technical point of view, this probably looks like:
- Add some kind of new "UserBackgroundTask" sort of object.
- Allow a normal queue task to be associated with one when the queue task is scheduled.
- Allow the daemons to publish updates/progress to the task explicitly.
- Publish logs implicitly?
- Publish error/failure/restart/completion implicitly.
- UI to check/review.
- Notification on completion.