| UI or UX | UI + UX - Structured file import workflow with mapping, validation, repair, and result reporting | UI + UX - File selection and attachment control | UI + UX - Drop-zone file upload enhancement with file input fallback | UI + UX - Multi-page transaction with saved step state |
| UI guidance | Show the import as a staged workflow: template or requirements, file upload, detected headers, column mapping, sample row preview, validation results, duplicate review, confirmation, progress, and final report. | Render a visible label, persistent hint, native file chooser or equivalent button, accepted file formats, maximum file size, selected filename, uploaded status, remove control, and field-specific error message. | Render a large labelled drop zone with clear copy that says users can drag files there or activate a normal file picker, plus visible format, size, and count requirements. | Render each step as a focused page with a clear heading, progress context when useful, Back and Continue controls, local validation, and a final review page before submission. |
| UX guidance | Use bulk import when users need to create or update many structured records from a spreadsheet, and make them prove mapping and validation before the product commits data. | Use file upload only when the service needs the original file and make expectations clear before the user opens the file picker. | Use drag-and-drop upload as an enhancement for users who can drag files from a file manager, while preserving an equivalent click, keyboard, and mobile path. | Use a multi-step form when a transaction is too long, conditional, high-stakes, or hard to recover from as one page, and users need manageable saved progress. |
| Good UI | A contacts importer starts with a downloadable CSV template, then shows Email mapped to Email address, Role mapped to Access role, three sample rows, and a warning that Phone is optional and unmapped. | An evidence upload field says Upload bank statement, hints PDF, PNG, or JPG up to 10 MB, shows statement.pdf selected, displays upload progress, and offers Remove. | A drop zone says Drag bank statements here or choose files, shows PDF/PNG/JPG up to 10 MB, highlights when files hover over it, lists two dropped filenames, and keeps a Choose files button visible. | A benefit application has Eligibility, Contact details, Documents, Review, and Submit pages, with the current step named in the heading and completed steps shown from saved data. |
| Bad UI | A page has a single Upload spreadsheet button and a spinner, then says Import failed without row numbers, column names, or a corrected-file path. | A button labelled Browse sits under Documents with no hint about accepted formats, size limit, or whether the selected file was uploaded. | A dashed rectangle says Drop here but has no label, no click fallback, no accepted formats, and no state change while files hover over it. | A five-screen flow shows all steps as complete after users only viewed them. |
| Good UX | A user uploads contacts.csv, reviews suggested mappings, fixes Department to Team, filters to rows with errors, chooses Import valid rows and export invalid rows, confirms 1138 new and 20 skipped records, then downloads the error report. | A user selects bank-statement.pdf, sees it queued, watches progress reach uploaded, removes it to choose another file, then submits after reviewing the rest of the form. | A user drags two PDFs over the zone, sees the target activate, drops them, reviews both filenames, removes the wrong one, uploads the remaining file, and then continues. | A user completes eligibility and contact details, goes Back from documents, sees contact details still filled, continues, and returns to the same documents step. |
| Bad UX | A user uploads a file, the product commits immediately, and only afterward shows that 300 rows were skipped with no file explaining which rows failed. | A user selects a 28 MB scan, clicks Continue, and the page reloads with File failed but the selected filename and other answers are gone. | A user drags a file over the page, misses the small target, and the browser navigates to the file, wiping unsaved answers. | A user changes an early answer and the form silently submits later answers that no longer apply. |
| Best fit | Users need to create, update, or merge many structured records from CSV, XLSX, TSV, copied spreadsheet data, or another system export. | The service needs a document, image, scan, spreadsheet, media file, or other original file. | Users often upload files from a desktop file manager and benefit from dropping one or more files into a visible target. | A transaction spans several ordered pages or sections. |
| Avoid when | The task needs one document or image attachment rather than parsed record data. | A typed answer, reference number, checkbox, or declaration would satisfy the task. | The main audience is mobile-only or cannot reasonably drag files from the operating system. | The fields are short, related, and easier to scan together on one page. |
| Required state | Pre-import requirements state with template, accepted file types, encoding, row limit, column limit, required fields, and side effects. | Empty labelled state with requirements hint and choose-file action. | Idle drop zone with visible label, requirements, and choose-file fallback. | Not-started state with clear start point and expectation of the steps or sections ahead. |
| Accessibility burden | Use a real file input or button for selecting the import file, even when drag-and-drop is also available. | Use a visible label that names the file purpose, not only Browse or Choose file. | Keep a visible label and instructions that name both drag-and-drop and choose-file paths. | Use a clear page heading on every step and keep it synchronized with route and progress context. |
| Common misuse | Treating a spreadsheet import like a generic file attachment with no mapping or row validation. | Asking for a file when a typed reference number or simple answer would be enough. | Replacing the normal file chooser with a drop zone that only pointer users can operate. | Using a multi-step form to hide a short related form that users should review on one page. |