Bulk upload experience

Company
Project
Role

At its core this was a data-integrity problem: how do you let someone drop a large, messy batch of tax documents into a system and guarantee each one is read correctly, classified accurately, and applied to their return, or fails in a way they can understand and recover from? The tax context was incidental. The hard part was resilient handling of high-stakes, high-volume, error-prone input at scale.

2.5

min/doc saved

97

%

error reduction

95

%

ML classification accuracy

Define (problem)

Current Reality
  • Users were uncertain about what documents to gather before beginning, causing interruptions midway through tax prep
  • Many were unaware of TurboTax’s document import capabilities and ended up converting or scanning unnecessarily
  • Uploading documents one at a time was tedious, error-prone, and discouraged users from completing the process in one session
  • High friction in the document stage led to support tickets, drop-offs, and reduced trust in the system
The Goal

How might we help customers get organized before they start, and handle every failure state gracefully during bulk upload?

Team collaboration & edge case planning

As part of our early discovery and planning phase, we facilitated a focused Bulk upload edge case brainstorming workshop using FigJam. The goal was to collaboratively identify real-world failure points, anticipate technical limitations, and explore solutions ranging from practical to imaginative.

My cross-functional team of six:

  • 2 designers
  • 1 frontend engineer
  • 1 product manager
  • 1 researcher
  • 1 strategy partner

My role

I partnered with a second designer through discovery and edge-case workshopping, then owned all design through delivery, collaborating tightly with engineering, ML/data, and product strategy.

Key responsibilities
  • Research design and framing
  • Flow & interaction design
  • Error state and edge-case modeling
  • Cross-functional alignment (ML/data and infrastructure)
  • Measurement and iteration post-launch
Design philosophy (the systems core)

I started from the failure states, not the happy path. We defined the ideal state (100% of documents uploaded, classified, and applied without manual correction) and then enumerated every way reality falls short of it, each needing its own UI path, messaging, and fallback logic.

Edge states & design logic

Edge & failure states to handle
  • Single document upload failure
  • All uploads failure (none succeeded)
  • Extraction failure (file accepted, but parsing failed)
  • Document type supported but not classified (“Other docs”)
  • Document applied with low classification confidence (needs review)
Edge Case Distribution

Design decisions

Each failure state got a specific, recoverable path rather than a dead end:

Challenge

Unsupported format

Solution

Pre-upload validation rejects invalid types before the user wastes time. (e.g. “Only PDF, PNG, JPG accepted”)

Oversized files

Enforced limits up front, with chunked/resumable uploads so one big file doesn’t fail the whole batch.

Duplicates

Dedup logic with clear UI warnings.

Corrupted/unreadable

Flag the parse failure early with a plain-language message and a remediation path.

Partial extraction

Show extracted fields against missing ones; let the user correct inline.

Low confidence classification

Surface a “please review” prompt and let the user override the machine.

The through-line

Partial success plus correction beats all-or-nothing

A batch where 9 of 10 docs land and the 10th is clearly flagged is far more usable than a batch that fails silently.

Prototyping happy path & edge case error states

Results & impact

2.5

min/doc saved

97

%

error reduction

95

%

ML classification accuracy

Business & Strategic Benefits
  • Faster progression through tax prep, especially for power users
  • Lower support burden around document upload errors
  • Increased user confidence, reducing drop-offs
  • Foundation established for further automation
  • Strengthened brand perception of robustness & intelligence
Post-launch Learnings
  • Edge states are inevitable, design them early
  • Allowing partial success + correction is often more user-friendly than strict “all or nothing”
  • Clear error messaging (what failed, and how to fix) is as crucial as UI design
  • Infrastructure (backend, scaling, retry logic) must align tightly with front-end capability

Reflections & next phases

What I'd Push Forward Next
  • Live / background processing
    Letting users move ahead while extraction runs in background
  • Smarter merging & deduplication
    Merging different document scans into a unified form view
  • Cross-product reuse
    Applying import logic beyond tax docs (e.g. financial statements, receipts)
  • Foreign language detection
    Auto-detect language, warn gently, offer extraction with disclaimer.
  • Predictive document reminders
    Suggest “You may be missing a 1098” based on prior years.
Challenges & Trade-offs
  • Over-handling rare error cases adds UI complexity, we needed to balance coverage vs simplicity
  • ML confidence thresholds had to be tuned carefully to avoid misclassifications
  • Infrastructure demands (throughput, retries, scaling) were heavy, we prioritized reliability
  • Time & budget constraints meant some fallback UI states were deprioritized in V1