All work

Clinical data review · SDV and query operations

Turning source verification and clinical queries into one traceable review workflow

Connecting partial and 100% SDV, query creation, site responses, notifications, anchor links, re-review, and closure across monitor and site-user experiences.

Approached with the Double Diamond

Integrating source verification and clinical queries into one traceable review workflow

Overview

Clinical review isn't finished when a monitor verifies a field. During source data verification a monitor may find a discrepancy, raise a query, wait for the site to respond, inspect a corrected value, re-review the field, and only then close the issue. When SDV and clinical queries are built as separate features, users reconstruct the relationship between the participant, visit, form, field, entered value, source review, query, response, and verification status at every step. I worked across the connected set: partial and 100% SDV, manual clinical queries, notifications, field-level anchor linking, state management, reason capture, and failure recovery.

Role
Senior Product Designer
Team
Product · Clinical Operations · Data Operations · Engineering · QA
Scope
Workflow analysis → Role modelling → SDV strategy → State design → Query lifecycle → Notification and deep-link behaviour → Failure and audit design → Handoff
Domain
Clinical data platform · Registry operations
Define

System mapping

SDV and clinical queries were one review loop, not two adjacent features

The reframing that shaped everything else. Each capability had been specified on its own, which is why the product kept producing features that were individually reasonable and collectively exhausting. Mapped end to end they form a single loop — and the design problem becomes preserving context across every handoff in it.

The loop matters more than the line. Verification produces queries, query responses change data, and changed data sends verification back to the start. A workflow drawn as a straight path from review to resolution would have hidden the step that generates most of the real work.

Discover

Where review time went

Review slowed down wherever someone had to rebuild the context around a value

Sessions with clinical operations kept landing on the same shape of problem. To act on a single questionable value a monitor would locate the participant, find the visit, open the right eCRF, identify the question, work out whether it had already been verified, check whether a query already existed, work out whether the data had changed since, contact site staff, and come back later to finish the re-review.

None of that is review. It's the work of finding the thing to review — and it repeated for every issue, in a queue that might run to dozens.

01

Verification could go stale

A verified field could later be edited. Without a changed-after-verification state, the interface kept showing a valid-looking status for data nobody had reviewed in its current form.

02

Queries detached from their source

Created outside the field context, a query made the monitor reproduce participant, visit, form, and field by hand, and the site user reverse that to find the data again.

03

Status didn’t explain ownership

A query could exist without making clear who owed the next action, whether the site had answered, or whether the monitor had accepted the answer.

04

Partial review could look complete

A selected subset could be fully verified while the form, visit, or participant record around it stayed largely unreviewed. The boundary of the scope had to be visible.

The problem was never one bad screen. It was that every transition — verification to query, query to response, response back to review — could drop the relationship between the issue and the field that caused it.

Define

Experience principles

Every review activity should preserve context instead of forcing users to rebuild it

Five principles came out of the workflow mapping and settled most of the arguments that followed. They are deliberately about the transitions between activities rather than the activities themselves, because that is where the original product lost people.

01

Continuous context

Moving between verification, a query, and a notification should never cost a user their place in the data.

02

Progressive review

Large workloads get completed through queues and filters, not by navigating record to record.

03

Explicit ownership

Every state answers one question before any other: is the monitor or the site user expected to act next?

04

Independent state models

Data state, verification state, and query state stay separate. Collapsing them into a single badge is what makes a clinical system untrustworthy.

05

Compliance by design

Every consequential action contributes to the audit trail as a by-product of doing the work, not as a separate step.

Develop

Source data verification

The same review experience had to support both targeted verification and complete review

Registries don't share one SDV strategy. Some require 100% verification; others use partial, targeted, or risk-based review across selected forms, visits, participants, or fields. One interaction model had to serve both — without ever letting partial review look complete.

The harder problem was state. “Verified” cannot stay final once the underlying data changes, so verification state has to reflect both the review action and the current state of the data.

Scope must be explicit

Which items were selected, what sits outside scope, progress within scope, and whether the scope itself changed.

Changed after verification

An edit to a verified field re-opens it for review rather than silently keeping a stale green check.

Progress, not just checkboxes

Total required, verified, remaining, blocked, changed, and open queries — so a monitor can work through a queue instead of navigating back to a patient record each time.

Scope always explicitVerification reflects current dataQueue-first, not browse-first
Develop

Role distinction

Monitors and site users worked with the same data but needed fundamentally different controls

A monitor needs a review queue, SDV scope, comparison against source, and the ability to flag — read-only by default, so verified data isn't edited by accident. A site user needs to enter and update data, understand what a query is asking, and respond safely — seeing review state without monitor-only controls.

Same patient, same visit, same form, same field. Different job entirely.

Develop

Audit trail

Every change to verified data had to explain itself before it was allowed

In a regulated registry, the record of why something changed matters as much as the change. Unchecking a verification and editing a field that was already verified are both consequential, so neither happens silently.

The pattern is the same in both cases: state the consequence, require a reason, then write it to a log that can be read later by someone who wasn't there.

Requiring a reason per affected field rather than one acknowledgement for the whole save is the detail that matters. A single "this will remove SDV status" message tells someone that something is about to happen; itemising it tells them exactly what, and makes the reason they give specific to it.

Develop

Clinical queries

A query was only actionable when it stayed connected to the exact data point that created it

A query is not a message about clinical data. It is a controlled review object bound to a registry, patient, visit, form, section, field, and the field's value at the moment it was raised — plus its creator, assignee, status, and full response history.

That binding is the whole point. In the original workflow a monitor who found a problem during verification transcribed the patient, visit, form, and field into a separate query tool, and the site coordinator receiving it reversed that transcription to find the data. Attaching the query panel to the field removes both halves of the work and the transcription errors that came with them.

Assignment is to a role rather than a named person. Site staffing changes over the life of a registry, and a query addressed to whoever happens to hold the role survives that in a way one addressed to an individual does not.

Develop

Query lifecycle

Status had to answer who acts next, not whether a message exists

The state model is where most of the design work went, because the useful question is never "is there a query?" It is "does this need me, and if not, who is it waiting on?"

So the badge in a field's query list carries the responsible role — Monitor or Site-user — rather than an abstract status name, and reads Closed only when nothing is owed by anyone. Ownership is the primary signal; lifecycle position is derived from it.

01

Open

Raised and waiting on the site user, who can correct the value, explain it, or both.

02

Answered

The site has responded and the monitor now owes a decision. Answered is not resolved — it means a reply exists, not that anyone accepted it.

03

Reopened

The monitor read the answer and it didn't settle the question. The thread continues rather than a second query being raised against the same field.

04

Closed

No query action remains. Closing does not verify the field — that is a separate decision on a separate state.

Develop

Site-user response

Answering a query often meant changing data, which made the response a consequential action

A site user can reply in three ways: correct the value, explain why the existing value is right, or do both. The third is the common case and the one that needed care, because a reply that changes previously verified data is two operations wearing one button.

So the response path surfaces the consequence — old value, new value, the verification it invalidates, the reason required — before the answer submits, and then routes the query back to the monitor with the data change attached to it rather than floating separately in the audit log.

Develop

Queries at rest

The absence of a query is information too, and it had to be stated rather than implied

Most fields, most of the time, have no query on them. An empty cell in a query column is ambiguous — it could mean no issue, or it could mean the column hasn't loaded, or that this user can't see queries at all. Each of those needs a different response from the reader.

Naming the empty state removes the ambiguity at the cost of a little visual noise, which in a regulated review context is the right trade.

Naming the empty state costs a little visual noise. In a context where a blank cell might mean no issue, no permission, or no data loaded, that is the right trade.

Develop

Verification and queries as one loop

Resolving a query changes data, and changed data cannot stay verified

This is the coupling that took longest to get right, because the intuitive design is wrong. Verification state, query state, and data state feel like they belong in one status. They are independent, and collapsing them is how a clinical system starts lying to its users.

The full cycle: a monitor verifies a field, later finds it questionable, and raises a query against it. The site user answers by correcting the value — the desired outcome, and also the thing that silently invalidates the verification. So the edit is intercepted, each affected field is listed with its old value, new value, and resulting SDV status, and a reason is required per field. The query becomes Answered and returns to the monitor; the field becomes requires re-review. The monitor then makes two separate decisions: whether the answer settles the question, and whether the new value verifies against source.

A field can be changed, unverified, and carrying an answered query all at once. Those are three facts about three different parts of the workflow, and a reader who can only see one of them is being misled about the other two.

Three states, never one badgeVerification reflects current dataRe-review is routed, not remembered
Develop

Notifications

A notification had to say enough to be actionable and no more than that

Notifications are the entry point into most review work, which makes them a privacy surface as much as a navigation one. They carry the patient identifier, visit, form, priority, and status — enough for someone to judge urgency and sequence their day — while name, date of birth, and contact details stay out of the payload entirely.

Separating clinical queries from site operational actions in the notification surface matters more than it sounds. They are different jobs on different clocks, and a single merged list means the urgent clinical item competes with routine account housekeeping.

Actionable without identifyingClinical and operational kept apartPriority visible before opening
Develop

Anchor linking

Field-level anchor links removed the search work between a notification and the affected data

Before: notification → registry → patient → visit → form → section → field → review. Seven steps, six of them clerical, repeated for every item in a queue that might run to dozens.

After: notification → the exact field, highlighted, with the query open beside it. One authenticated click.

That compression is the single largest efficiency change in the project, and it is also why anchor linking was the hardest interaction problem in it. The link sits at the intersection of navigation, permissions, privacy, and state: it has to resolve six levels of hierarchy, check authorization before it reveals that a patient exists, keep PHI out of the URL, and still land somewhere useful when the world has moved on since the notification was sent.

01

Query already resolved

The destination still opens, with the resolution visible rather than a dead end.

02

Record archived or field removed

A fallback that explains what happened instead of failing silently.

03

User no longer authorized

Permission is checked before data is revealed, not after the page renders.

04

Form version changed

The link resolves to the current version, or explains why it can't.

Permission before payloadNo PHI in the URLEvery failure has a next step
Develop

Failure states

A verification that silently fails to save is worse than one that never happened

Per-field verification autosaves, which means the failure modes are per-field too. A monitor working through a form can't be left believing a check landed when it didn't — that is how a record ends up marked verified in someone's memory and unverified in the database.

Each failure names the specific field it affected, distinguishes a recoverable problem from a system-level one, and gives a next action rather than an apology.

Future concept — not shipped

AI-assisted review

AI could prioritise clinical review without touching clinical judgement

The obvious application is automating verification decisions, and it's the wrong one. Verification is a regulatory attestation by a named person; a model cannot hold that responsibility, and a system that appears to share it is worse than one that doesn't try.

Where a model does help is upstream of the judgement — deciding what a monitor should look at first. Risk-based SDV already assumes not every record needs equal attention, and that prioritisation is currently done by protocol rules rather than by what the data actually looks like.

Direct attention

Surface the records most likely to need review, and suggest an SDV scope rather than setting one.

Surface contradictions

Flag values that conflict across forms and visits — the pattern a reviewer finds by reading everything.

Draft, never send

Compose query text from the patient, visit, and field context for a monitor to edit, approve, or discard.

Summarise the backlog

Report unresolved issues across participants and sites, and flag what needs re-verification after changes.

The boundary is the same one that made the tone work in Kids First defensible: the system can direct attention and prepare documentation, while the monitor remains accountable for verification, query decisions, and regulatory compliance. Nothing here has been built.

Reflection

The most important decision was preserving context across every handoff. Clinical review becomes inefficient not because any single screen is bad, but because each transition — dashboard to record, verification to query, notification to field — quietly drops the relationship between the issue and the data that caused it, and the user rebuilds it by hand. Designing the state model first, rather than the screens, is what made the workflow traceable. Verification state, query state, and data state are independent and have to stay that way; collapsing them into one badge is the shortcut that makes a clinical system untrustworthy.

Outcome

Verification to closure

SDV, queries, responses, notifications, re-review, and closure connected as one traceable path.

Two roles, one dataset

Monitor and site-user experiences differentiated without duplicating the underlying structure.

Navigation replaced by context

Field-level anchor links collapsed a seven-step hunt into one authenticated click.

Audit as a by-product

Reason capture built into the actions themselves rather than added as a separate compliance step.

Reusable review patterns

Queue, status, and reason-capture models established for later clinical review features.

Designing something complex?

I'm interested in senior product design opportunities involving enterprise platforms, healthcare, AI-enabled workflows, and complex systems.