It's a sign of a thorough approach when a coder actually measures the times each step takes several times, averages it out and provide a user with more or less accurate info about the progress.
Well, we can always show him a spinning wheel or smth if we're not sure of how long does it take.
An ideal solution for a long waiting process is to entertain a user with some little game like tetris or arkanoid