I've been writing a program called PerfectTIN, which has a progress bar indicating how much area, at each stage, is within tolerance. The last 1% of a stage usually takes a very long time. I'm adding contour drawing to it; when it's drawing contours, the progress bar advances for every elevation it finishes, and when it's pruning or smoothing contours, it advances for every contour, but it has no idea how long each contour takes, until it does it.