This page was originally just titled 'Register to vote' - because that was the action you were about to do. We saw a significant number of people think that the transaction was over - saying things along the lines of "OK that's it". They saw it more like a receipt - playing back the information you had submitted. Changing the title to "Check your details before sending your application" seems to have solved that issue.
Let users upload .csv files, .xls files, .xlsx files, .ods files, etc. – but convert them to CSV internally before you start trying to read the contents.
Not everyone has Excel, and the tools that people are already using might not export to Excel. Also, it’s not an open standard.
File upload UI
Put a button on the page that opens the system file picker. As soon as the user has chosen the file, submit the form for them and redirect them to a page that shows the contents of the file, along with any errors. There’s a little GIF of this here: https://github.com/alphagov/notifications-admin/pull/424
On the page where you show the contents of the file, have a re-upload button (in case anything is wrong).
Give users a single, clear error message that tells them what to fix. This is the most important thing. It’s better to make users step through each potential error one at a time than bombard them with all the errors at once. You can see screenshots of various examples here: https://github.com/alphagov/notifications-admin/pull/646
It’s much easier to do this when users are uploading one file at a time.
We're in the process of designing our search for vacancies at SFA Apprenticeships, we've tested a first iteration with candidates (17-18 year olds) and the filter/sort part of it is proving to be quite tricky.
This has tested pretty well, with most users understanding what the control would be used for, the pattern is similar to what is used here https://www.gov.uk/cma-cases
If the average time to complete a transaction is more than you can reasonably expect your users to spend in a single session, then you'll need to provide a way for them to save their progress.
The same goes if the session is likely to be interrupted for some reason. For example, if the user is suddenly asked for information which they might not have immediately to hand (a way to mitigate this is to warn users if they're going to be asked for that kind of information).
Saving progress does not necessarily mean you require user accounts, logins, email validation etc. For simpler transactions that don't store personal information you might be able to store the data in the URL itself. The user then simply has to bookmark that URL.
For more complex transactions that don't store personal data, you might be able to offer users a unique and hard-to-guess URL that they can use to get back to their session.