I'll try to give an answer for a more generic question: **how to avoid a user making a mistake which leads to disaster or something which cannot be canceled or undone** (like wasting paper by printing several pages the user didn't expect to be printed). As said in the original question: > The users are in a high-pressure, time-critical environment. Each process is measured in minutes or even seconds, which means that I have to minimize processing time as much as possible. This means that: - **The software product must make its best to increase the productivity of the employees.** When every second counts, user experience and productivity is even more important than for general products, where a loss of a few seconds on some feature the person don't even use too often is acceptable. - **The users are too busy to pay attention to the software product.** When, in a calm environment, I use some feature of Microsoft Word I used the last time a year ago, if Microsoft Word asks me a question, explaining what would be the consequences of my choice, I can afford spending a minute or two reading the question, and maybe even going to read the documentation. In your case, you can't afford that. Your users don't have time to read. Message boxes: no, no and... no! -- As already explained [in my other answer][1], message boxes are evil in most cases, for two reasons (see About Face 3 by Alan Cooper for more details): - The dialog that cried “Wolf!” principle incite the user to dismiss repeatedly a dialog without paying attention if the application shows the same dialog too often. - The dialog disturbs the workflow: the user can't stay focused on the application, because the dialog grabs this focus away and the interaction with the application is suspended until the dialog is dismissed¹. This means that dialog boxes are an absolute evil *in your case* from the UX point of view: they will be dismissed and they will decrease productivity in an environment where every second counts. Other means -- According to the question: - *"The input consists of a date range, route range, and sales order range."* - There are no wrong values (for example the user can enter a previous date, a future date or today in the first field), so validation is not possible. - *"The print routine, when fed nothing as an input, will attempt to print everything, resulting in reams and reams of printer paper being wasted on a high-speed printer."* - It's totally possible to ask to print with default data used. In more generic terms, it means that: - You have a default value, which can actually be valid, - You don't want the users to hit "Print" button with default values kept by mistake, while they intended to change them. Here's a few techniques you can try: **1. The magic undo** Yes, the users are in a time-critical environment. Yes, once the printer starts printing, it cannot be stopped. But there is still something you can do. Even in a time-critical environment, chances are that printing right now and printing in five seconds will not change anything. When the user clicks "Print", **display a small "Undo" button**, just like GMail does when you ask to remove, by mistake, all your mail. **Wait for five seconds**². Hide the "Undo" and only after that, print. Now, the user has a chance to notice the mistake and cancel it before the harm is actually done, while the stuff is printed only with a small five seconds delay. **2. The discrete "default value" background** Is having default values suspicious?³ With one value, it's rarely suspicious. With three, there are chances that the cases when the user has to keep all three values by default are quite rare. In this case, you can: - **Highlight the value when it has its default value.** Not in red: red is for invalid values. Set it to yellow-orange, and back to white when the user alters the default value. - **Or disable the "Print" button until a value is changed.** Add a checkbox nearby, which the user can check to confirm that his intent is to print with default values. **3. Enhance the UI of your controls** We are Friday, 6<sup>th</sup> of January 2012 today. What will be the date the next Thursday? Quick, quick, you're under pressure, you have only one second for your answer. Also, you're tired and there is a lot of noise all around. Not easy to answer, isn't it? People can't manipulate dates easily when it's written as `1/8/1012`. `Saturday, 7th of January (tomorrow)` is a bit easier. A **graphical view** which highlights Saturday and Sunday, shows today and the offset is even better. Nothing is as ugly as "Location: NYC". Those three letters are meaningless when you're tired and work in a stressful environment; mistakes are easy. Instead, a **graphical map** of United States showing a red dot for New York city is much more appealing, and the user has much more chances to notice that, while he wanted to select San Francisco, the red dot seems to appear in a wrong place. Would you enjoy if your GPS told you that you have to move from 38.90403, -77.04878 to 38.90568, -77.04665, then turn right and move to 38.90565, -77.04345, then turn 90° left and move to 38.90660, -77.04345? Would you be able to concentrate on your work (the road)? Showing 1/8/2012 and NYC to busy users is as friendly as a GPS that throws raw coordinates instead of a 3D view of a map full of color. By providing **richer controls and richer visualization of data**, you can decrease the level of mistakes of your users in a stressful environment. --- <sup>¹ This, by the way, applies to other variants of dialog boxes. You previously asked a question about the dialog boxes where the buttons will be random and which will make it difficult to dismiss. Sadly, such approach will not help, but only hurt: the users will still dismiss what is said by the dialog, but waste more time trying to close it to return back to work.</sup> <sup>² I say five seconds as an example. You have to monitor the activity of the users for a few months to see how fast they click on "Undo". Chances are it will be below one second. If you see that the delay is from 0.6 to 1.8 s. with an average of 1.1 s., you can show the "Undo" for two seconds, and then print.</sup> <sup>³ Please, please, please, say no! Because if it is, it means that there is something wrong with your default values. For example if the default value for the date is today, while in 75% of cases, the users have to set it to tomorrow, in 10% to yesterday, and in 10% to the day after tomorrow, you should rather set the default value to tomorrow.</sup> [1]: http://programmers.stackexchange.com/a/106039/6605