Healthcare | Enterprise SaaS

Revvity Health Sciences

Revvity Health Sciences

Revvity Health Sciences

Redesigning Datagrid Filtering for a Clinical Platform

Redesigning Datagrid Filtering for a Clinical Platform

Redesigning Datagrid Filtering for a Clinical Platform

1.5 months
Role: UX Researcher and Designer

This was a co-op project with a usability validation scope. The outcome numbers come from a live customer feedback session with formal sign-off, not post-ship analytics. The constraint of working within an existing component library and a clinical user base shaped every decision.

Introduction

What is Evoya and why does datagrid filtering matter

Evoya is a Lab Information Management System built by Revvity. Clinical labs use it to track patient specimen records from collection through to results. Every record lives in a datagrid. Lab technicians, nurses and admins return to these datagrids dozens of times a day.

Filtering is how they narrow thousands of records to the ones that matter right now. When it broke down, users had no reliable way to know if they were looking at filtered data or everything. In a clinical environment, that is not a minor inconvenience. It is a trust problem.


The Problem

Several datagrid performance issues reported

Multiple issues were open against the datagrid. On the surface they looked unrelated. Grouping them by the underlying behaviour revealed they all shared the same root: the datagrid gave users no reliable picture of its own current state.

Hidden Filter StateNo indicator that a filter was active. Users could be looking at a partial record set without knowing it.
Ambiguous reset behaviourIt was unclear whether reset cleared one filter or all of them. Users avoided it.
Full dataset load on openIn a system with thousands of records, this added real latency to a time-pressured workflow.
No visibility into active filtersEven when filters were applied correctly, users had no summary of what was set.
Challenge

Fix four compounding usability failures in a B2B clinical tool, without introducing a single new pattern clinical users would need to learn.

The constraint was the design. Any solution that required retraining had a real cost: clinical staff mid-workflow, a product team absorbing support load, and adoption risk on a platform where trust in the data is non-negotiable.

Design principles
Zero retrainingThe solution had to feel like it was always there. No new mental models for users already in a time-pressured workflow.
State always visibleUsers should be able to tell what is filtered at any point without opening a panel, clicking anything, or making an assumption.
Existing components onlyImplementation had to fit within the current component library. No new engineering overhead on a co-op timeline.
Growing Pains

The old filtering experience.

The original datagrid was functional in isolation. But as the platform grew and user workflows became more complex, the filtering system could not keep up. Users adapted by reloading the page to get back to a known state — a behaviour that showed up across every Jira ticket we reviewed.

Diagnosis

Thematic analysis before any ideation

The default move would have been to fix each Jira ticket in order. I pushed for thematic analysis first. Every open ticket went into FigJam, grouped by the underlying behaviour driving the complaint — not the surface symptom.

A ticket logged as a performance issue turned out to be a filter design problem. The full dataset was loading on open because there were no defaults in place. Thematic analysis gave us a root cause worth solving, not a list of symptoms to patch one by one.

Research

1. Competitive Analysis

I analysed six tools known for handling large datasets: Jira, Tableau, Salesforce, Amazon, Indeed and one additional tool. The goal was a single question — how does each product show users what has been filtered, and how easy does it make changing it.

I included consumer tools alongside enterprise ones deliberately. Finding the same filter visibility pattern across Jira and Amazon meant we could defend our direction as convention, not just preference.

Two patterns emerged clearly from the analysis:
1. The Table First approach loads a meaningful default view and lets users refine from there.
2. The Progressive Search approach requires users to enter criteria before anything loads.

2. Task Analysis

Using the Nielsen Norman Group framework for data table tasks, we mapped what Evoya users actually do in the datagrid and how often.

>50%
of interactions involve acting on records already in view
~30%
of interactions involve acting on records already in view
~20%
involve finding a record that fits specific criteria

More than half of all usage is about acting on data already in view. The design needed to optimise for clarity and speed, not search power. Table First was the clear fit for users returning to the same workflows every day.

Design Decisions

Six concepts. Two worth testing. One clear call.

We explored six lo-fi concepts across side panels, drawer filters, inline row controls and modal editors. Each was evaluated on three questions: does it make filter state visible without extra navigation, can a user change a filter in two steps or fewer, and is the difference between reset and clear all immediately obvious.

After a feasibility review with PM and dev, two concepts went into testing.

Decision 1 — Modal vs in-column filtering
OPTION A
Modal-based filter editor
+ Surfaces all filter options in one place
+ Scales better for complex multi-field filtering
New interaction pattern, requires onboarding
Adoption cost absorbed by the product team
Breaks the table interaction to open a modal
OPTION B — CHOSEN
In-column filtering with pills
+ Filter state visible at all times, in the table
+ Matches patterns users already know
+ Zero new training required
+ Fits within the existing component library
Less powerful for very complex filter combinations

The modal was the stronger long-term solution in isolation. But in a B2B clinical tool, adoption cost is a design input, not an afterthought. Every new pattern requires training, and that cost falls on the product team. In-column filtering landed from day one with no onboarding overhead. I documented the modal as a future direction so that decision would not have to be relitigated later.

Decision 2 — Saved Search

Saved Search came up during ideation as a valuable long-term capability. We chose not to include it in this scope.

The in-column redesign solved the immediate trust problem. Adding Saved Search would have extended the timeline and introduced complexity without addressing the root cause. The decision was documented and handed off as a defined future initiative, not a dropped idea.

Final Solution

Introducing in-column filtering with pills

The redesign surfaces filter state inline, within each column header. Active filters appear as removable pills directly in the table. No side panel. No modal. No extra navigation step.

Surfaces filter state inline
users see what is active without opening anything
Removes ambiguity from reset
one action clears the column, one clears all. Both are labelled
Loads a meaningful default view
upon loading, eliminating the full dataset latency entirely
Requires no new mental model
maps onto filter patterns users already know

High-Fidelity Prototype

I built the final interactive prototype in Figma covering the full filter workflow end to end. It was used as the live demo during the customer feedback session.

Proprietary content

Final designs cannot be shared due to confidentiality. Screens shown here are low-fidelity wireframes from the design process.

Measuring Success

Testing to see what users could trust

Before the customer validation session, we defined three signals to watch for. We were not testing for preference. We were testing for trust: could users tell what was filtered, change it confidently, and reset without hesitation.

Task completion
Participant completes filter task without guidance on first try
Restart rate
Participant does not reload or restart due to state confusion
Filter legibility
Participant states what is filtered without opening any panel
Outcomes

Validated by customers, shipped with no new overhead

The prototype was validated in a live customer feedback session. The design received sign-off and was cleared for handoff to engineering. Implementation was completed within the existing component library with no new components required.

100%
Users of platform impacted by the design changes
<5 seconds
time taken to identify the active filters in different columns
<72%
reduction in errors and consequently complains related to filtering
The What Ifs

The directions we explored but did not ship

The final product reflected real constraints like timeline, component library, adoption cost. But two directions had genuine merit and could inform a future iteration

Takeaways

Reflecting on What This Project Taught Me

Fixing the ticket is not always fixing the problemThe performance ticket was not a performance problem. Fixing it as written would have shipped a faster version of a broken experience. Reading the symptom pattern before writing a solution is now the first thing I do on any project.
Training cost is a design constraintI came into this project thinking feasibility meant engineering hours. It also means the cost of users learning something new at scale. I now ask that question before ideation, not after a decision has been made.
Deferring a feature explicitly is different from dropping itSaved Search did not make the scope. Documenting why — and what it would take to add later — meant the next team would not start from zero. Scope decisions are a form of design handoff too.