Of all of the interface elements on an application that I’ve built, the one that users have the hardest time with is batch uploads. This system, which processes transactions, can accept transactions in batches. The system is very simple, the batch files are CSV files which can be easily created in Excel. There are no optional fields and the order of fields isn’t flexible.
Even for this relatively simple use case, people have an awful time trying to use it. Even people who use the batch facility frequently often upload files that the batch processor cannot deal with. Being a programmer, my first temptation is to blame the users, but in the end it’s my responsibility to make the application easier to use.
I think that a big part of it is something that should be a basic law of user interface design:
The bigger the input, the more likely that users will screw it up.
When you ask users to enter their first name, almost everyone gets it right. Ask them to enter their street address, and typos become more common. Ask them to prepare a spreadsheet with thousands of transactions and export it as CSV and upload it, and you’re flirting with disaster.
The most important step was writing a killer batch file validator. At first, uploading a batch file was a pass/fail exercise. Either all of the records were imported, or an error message was returned indicating that the import failed. Needless to say, users were having a hard time figuring out that the reason their upload failed was a missing value on line 583 of a batch file without any guidance. The validator makes it much easier for users to fix problems with their batch files themselves.
Unfortunately for me, it’s time to add some new features to the batch upload facility. Figuring out how to add complexity without causing even more problems for users is going to be blast. Maybe I can apply the “convention over configuration” maxim from the world of Ruby on Rails to come up with something creative.