[darcs-devel] user experience engineering note

Alexander Staubo alex at purefiction.net
Mon Jan 14 18:24:49 UTC 2008


On 1/14/08, zooko <zooko at zooko.com> wrote:
> So this is a good example of how the problems of user experience are
> sometimes different (and "simpler") than the problems of engineering
> the actual core algorithms of your program.  "Responsiveness" is, I
> think, the most important single factor in user interaction design.

I agree. I hope, though, that Darcs won't ever emulate git (or even
Mercurial) in spitting out reams of obscure internal information when,
say, getting a repository.

What would be wonderful is if Darcs could emit a status report only
when it knows that it's taking some time to complete. I used this
trick for a recent project, where each long-running block of code
would be wrapped in a bit of context. Pseudocode:

  progress = ProgressManager.begin("Tweaking flux capacitator")
  ...
  progress.done()

or even

  progress = ProgressManager.begin("Tweaking flux capacitator")
  progress.setWork(capacitators.size);
  for each capacitor {
    ...
    progress.setWorked(1);
  }
  progress.done()

I used a separate thread to determine whether to provide any output;
if the block took more than a couple of seconds, the progress message
would be emitted. The block could also provide progress information
("3 of 5 flux capacitators tweaked"), which would be used to draw a
simple progress bar and estimate the amount of time left ("0.3 flux
capacitators per second, 15 seconds left").

The nice aspect of such "lazy" progress reporting is that simple,
quick commands don't talk much at all, whereas weirdly time-consuming
stuff can chatter about what is happening, and even how much is left
to do. For the user it's much more useful than a low-level, catch-all
debug log.

Alexander.


More information about the darcs-devel mailing list