Yana Tarnovetska
← All work

Unblocking a quarterly risk review

A redesigned first step for the bank's AI risk review tool: an uploader that shows users which files are still missing and tells them when they're done.

Iteration

Previous upload screen. A single centered card has an "Input Name" dropdown, set to control_effectiveness, and a drag-and-drop area below it showing one uploaded file, control_effectiveness.xlsx. The screen doesn't show which other required files are still missing or how many are done, and "Start status check" is disabled. Before
Redesigned upload screen. A table lists the required files, and each row shows its own status: Uploaded, Uploading or Failed. The selected file, impact_score, shows "Upload complete" in the side panel, with options to replace or remove it. At the top, a counter reads 6 of 20 files uploaded, and "Start status check" stays disabled until every file is in. After
Role
I owned the diagnosis, flows, hi-fi screens and success measures, from the failed test to launch.
Team
The product manager, a project manager, 1 frontend and 2 backend engineers, and me.
Timeline
1 week
Method
User feedback from Teams, user interviews, flow mapping, heuristic analysis, unmoderated retest.

Confidential project. Same layout and flow as the shipped tool; file names, column labels and data are changed. Results are from the real test.

Context

Every quarter, the bank checks where it stands against its risk limits. 16 departments each write about 30 conclusions, so almost 500 get reviewed by hand, in scattered places. The team built an AI tool for this review. The tool pulls in some files on its own, but users upload the other 20 by hand before they can start. We were running out of time, so we reused many components from our design system, the uploader among them.

An unmoderated usability test, where users try the tool on their own without a facilitator, was meant to validate the core flow. Most users never got past the upload. My task was to find out why and fix it before the next quarterly cycle.

5 of 6
users couldn't start
7 months
of core-flow work blocked from validation

Actions

How I got there

  1. Found where users got stuck, in their own words

    During the test, users posted their feedback in our Teams channel. They couldn't tell whether their files had uploaded, and one wrote that they waited 12 seconds before retrying. The project manager and I then interviewed those users, to see how they worked with the uploader and what was going wrong.

    I mapped every upload step, including the retry loop, up to "Start status check". The break was at the very first step, not in the AI review.

  2. Named the root causes

    I found four. Users picked each required file from a dropdown, one by one. The uploader reset after every pick and hid the files already uploaded. Feedback was weak, with no progress. And there was no "all done" state.

    I turned each cause into a "How might we…" question, which frames a problem as an open design challenge.

  3. Looked at other products, then designed every state

    I reviewed how other products handle uploads and ranked the ideas on an impact vs effort chart. Then I designed hi-fi screens for every state, from no file selected to upload complete.

Board in three parts. Left: user feedback notes, such as "Did it upload? I can't tell if anything happened." Centre: the upload flow from opening the setup page to starting the check, with retry and next-file loops, and question marks where users got lost. Right: three "How might we" questions about upload progress and completion.

Key decisions

Fix the way in first

Uploading files was the only way into the tool. Until users got their files in, they couldn't start the status check, so nothing else in the workflow could help them.

So I put all 20 files in one table, where users see every file they need at once, each with its own status. The rest of the tool stayed the same: the whole fix was one new screen.

I looked at two other ideas. The first was to let users drop all their files at once and have AI put each one in the right place. But many of our files look alike. If the AI put one in the wrong place, the risk review would run on the wrong data, and nobody would notice. Users would have to check every file anyway, and we'd need an AI model plus a screen to fix its mistakes. The second was to add clearer messages to the old uploader. It was the easiest, but users would still pick each file from a dropdown, one at a time, and still couldn't see which files were missing.

The downside of my choice: the frontend and backend engineers had to pause other tasks to build the fix, which delayed that work by 4 days.

File table with columns for number, file name, template, uploaded by, status and last uploaded. Each row has its own status: most show Uploaded, compliance_rating shows Uploading, and exposure_value shows Failed. Rows further down have no file yet.

Show the status of each file and a clear finish

Users couldn't tell whether their files had uploaded, and nothing told them when they were done.

So each row now shows its own upload status, with Retry and Replace. Users see which file failed, fix only that one, and know when they're finished. A counter next to "Start status check" shows how many files are left, and the button turns on only when every file is in. Then an "Upload complete" state appears.

I looked at two other ideas. One progress bar for the whole upload was quick to build, but it shows how much is done, not which file failed. Pop-up messages after each upload disappear, so users can't check them later.

The downside of my choice: a busier table, with a status on every row.

Three parts. Top: three table rows with the statuses Uploading, Uploaded and Failed. Middle: the counter next to "Start status check" at 0/20 and 6/20, with the button disabled, and at 20/20, with the button active. Bottom: the drop area's four states: drag and drop with Browse file, Uploading with Cancel, Upload complete with Replace file and Remove file, and "All files have been uploaded".

Checking my own design before the retest

With only a few users available, I didn't want the retest to find problems I could find myself. A Figma agent skill did a first pass against Nielsen's heuristics. I reviewed every finding, dropped the ones that didn't fit our context, and ranked the rest by severity.

  1. 10

    findings from the agent

  2. 7

    kept after my review

  3. 2

    high severity, both my own choices

  4. 2

    fixed before the retest

#FindingWhy it mattersWhat I changed
01No warning for a misplaced fileIn a risk review, a file in the wrong row means wrong numbers.The screen now flags it.
02A cancel button in the file tableThe table shows status and the drop area handles actions. The button broke that split and gave users two places to cancel.Cancel lives only in the drop area.
Try the final prototype

Every upload state, with both fixes in.

Results

We set three measures upfront, then ran the second test with the original users, unmoderated as before.

Measure 01

Do users get into the workflow?

1 of 6→6 of 6
test users completed the upload
Measure 02

Do users feel clear and confident about the upload?

4.5 / 5
average rating, self-reported in a Teams poll
Outcome

Did it make the next quarterly review?

70+ users
across 11 teams. The core flow was validated, and the tool was used in the next quarterly risk review.

It’s a small sample, and these users had seen the task before, but they were real users doing real work.

Learnings

This project changed how I see my design system. I used to treat a component that worked in one product as safe in the next. I learned it's only proven for the task it was tested in: a new task means new users, new files and new ways to fail. Now I test every reused component in the new task, with real users, before the team builds on it.

Most importantly, the uploader was my miss. It had worked so well in another project that I didn't check it in this one, and a first step that fails hides everything behind it. Now I give entry and setup steps the same attention as the core experience, and I put them in the first round of testing.