When a program is performing a task that is going to make me wait I want lots of communication. Imagine I ordered a sandwich in a restaurant and its taking longer than expected. I'm now faced with a decision, do I wait or do I leave? I could make a better decision about what to do if I could see how many orders are ahead of me or if I can watch the kitchen and see a stack of ingredients ready to go, but the chef paused to clean off the grill. In the case of computer it can be hard to know beforehand exactly what its going to do and how long it will take. Maybe there is some kind of issue I need to fix before the task will ever be complete. As computers and networks evolve and improve (or degrade) it can be really hard for the programmer to have a good idea of how long a task will take to complete. In light of that, I would always err on the side of giving the user <i>more</i> information about what the program is doing and how long its taking.<p>On a file transfer I'd really like to know, how much has been copied, how much is remaining and the current (5 sec average maybe) bit rate. That gives me enough information to know whether its worth waiting around for it to finish or I should find an alternative or the connection has dropped.<p>Staring at a spinner, with no idea how fast or slow things are going is the worst and I'm going to give up a lot sooner than if I knew what was happening.