For a good number of years, I've used a LS wrapper class around some C API calls to display a progress bar, which is handy when progress steps are knowable. Ideally, this should be available essentially as-is to display a client-modal (or task-modal, if the client gets better threading) progress bar when doing a foreground task.
Similarly, there should be an indicator for when a task could take a while but it's either indeterminately long or progress can't be updated mid-stream. For example, a long-running NotesHTTPRequest call will freeze the client, but there's no indication to the user that this is expected. Even a basic "please wait" overlay accessible via, say, NotesUIWorkspace would make this palatable.