Case study · Barbara Perkowski
BP
← All work Project {{ c.num }} / {{ total }}

{{ c.titleA }}{{ c.titleB }}

{{ c.category }} · {{ c.company }}

{{ c.short }}

{{ r.intro }}

{{ m.v }}

{{ m.l }}

{{ readTime }}

{{ m.l }}{{ m.v }}
Read{{ readTime }}
{{ m.l }}{{ m.v }} {{ readTime }}
01Patient · iOS app
02Patient · mobile web
03Staff view
{{ m.l }}{{ m.v }}
Read{{ readTime }}

Introduction

{{ r.intro }}

{{ r.intro2 }}

At a glance

The case at a glance

{{ g.h }}

{{ g.t }}

  • {{ li.b }} {{ li.t }}

To protect confidential information, some figures are rounded and some screens are recreated. Happy to go deeper in conversation.

Impact

{{ m.n }}{{ m.v }}{{ m.l }}

The decision

One test, two numbers

Copays collectedCompleted visits
Existing
Optional ✓
Required

Required collected more. Optional kept more people in care. I recommended optional.

Relative values · not to scale

Where it started

{{ r.storyH }}

A member on a One Medical video visit with a clinician, on their phone

{{ r.storyFirst }}

{{ p.pre }}

{{ p.pre }}{{ p.b }}{{ p.post }}

Where it broke

{{ t }}

{{ journey.introA }}

Examples of discovery artifacts

01 · Why patients don’t payThe votes clustered on one answer: patients assumed insurance would cover it.
02 · Where insurance problems pile upCoverage problems start months before the visit and stay invisible until check-in.
03 · How patients paid (before)Paying meant a separate portal and a separate login.

{{ journey.introB }}

{{ c.n }}
{{ c.label }}
{{ c.h }}{{ c.t }}
{{ b.n }} {{ b.where }} {{ b.h }} {{ b.t }}
{{ b.n }}
{{ b.where }}{{ b.h }}
{{ b.t }}

{{ p.t }}

{{ p.n }}

{{ p.s }}

{{ jPanel.n }}

{{ jPanel.pos }}

{{ jPanel.t }}

{{ journey.ownerA }}

{{ journey.ownerB }}

The reframe

And after the bill, paying was a maze: a separate portal, a separate login. {{ journey.reframe }}

{{ s.v }} {{ s.l }}
{{ s.k }} {{ s.v }} {{ s.l }}

9% of hotline calls were people just trying to pay.

{{ journey.hmw }}

My role

{{ t }}

{{ r.roleText }}

{{ r.roleText2 }}

{{ r.partners }}

How we judged every option

{{ p.n }}

{{ p.h }}

{{ p.t }}

{{ r.frameworkNote }}

How I led

{{ p.n }}

{{ p.h }}

{{ p.t }}

Alignment

From nobody’s problemto everyone’s plan

Billing was a major driver of support calls, and leadership made it a core problem. But the problem cut across billing, care, support, data, product, engineering and a vendor, and no one owned it. My first job was to make it visible and turn it into one plan.

01 Get everyone in the room Skip this section ↓

The clearest answer came from a workshop. With my PM partner, I asked billing staff, care teams and executives one question: why don’t patients pay? The votes clustered on one answer: they assumed insurance would cover it. Not unwillingness. An expectation we never corrected.

With a copywriter, I turned the research into three rules:

Insurance

Submitted is not verified.

Price

An estimate is not a bill.

Payment

A card on file is not consent.

Each broken handoff became a step, in the order members meet them, prioritized with RICE:

What brokeRoadmap step

ServiceBilled care looked free

01Make billable care explicit

InsuranceMissing or unverified at the visit

02Capture insurance while intent is high

Price and paymentNo estimate, no checkout

03Prepare for a copay, honestly

The maze after the bill

04Surface unpaid balances

Staff chasing and digging

05Improve resolution

We started upstream. Verified insurance made an estimate possible, and an estimate made consent meaningful. I turned the roadmap into the first requirements docs, paired with my mockups.

Three designers worked with me, on billable care, copay collection and check-in research. I scoped and reviewed their work weekly, steered the research, and trained all three on billing, so the domain didn’t live only in my head.

  • Onboarding adopted the insurance card pattern.
  • Engineering turned insurance capture into a reusable service for other teams.
  • When other teams’ flows touched billing, I sketched with their designers, so the three rules showed up in work I didn’t own.
  • I wrote the decision doc that aligned product and design leadership on manual entry for web.

Design vision

The vision: one financial state,carried across the visit

The member from the opening had a name in our research: Virtual Vickie. Budget-conscious, remote-first, managing all her care from her phone. For her, a surprise bill isn’t an inconvenience. It breaks her budget.

The insight told me what she needed. Not a better bill, but the truth, earlier.

First, consistent meaning. Billed versus included would become Step 01 of the roadmap. The other three broken handoffs became three rules, written with a copywriter and held on every surface:

×Insurance

Submitted is not verified.

×Price

An estimate is not a bill.

×Payment

A card on file is not consent.

Then, a sequence. Most of the pain showed up after the bill, in systems we didn’t own. But it started with that uncorrected expectation, before the visit, in our own product. So I ordered the work along Vickie’s journey, beginning where the surprise begins. Each step unblocked the next, so we could measure one before building the one after it.

01

Make billable care explicit

02

Capture insurance while intent is high

03

Prepare for a copay, honestly

04

Surface unpaid balances

05

Improve resolution

Vickie

Sees billed vs included while choosing care.

Adds or confirms insurance while booking.

Sees an estimate or honest pending state, and picks how to pay.

Finds what she owes in the app.

Gets a clear answer on the first try.

Staff

Fewer “wasn’t this included?” calls.

Coverage on file before the visit.

Copay authorized at the visit, not chased after.

Fewer “where do I pay?” calls.

Balance and bill context in Patient EHR.

{{ r.visionH }}

{{ r.visionP }}

MomentMember-facing experienceCare-team and billing experience
{{ v.m }}

{{ v.a }}

{{ v.b }}

{{ r.visionQ }}

{{ r.visionBy }}

{{ r.visionNote }}

Member journey map: where billing readiness fits across joining, care and renewal.
Remote appointment journey map: patient, MSS and provider, from needing care to receiving the bill.

Solution

What shipped

{{ r.solution }}

Vision / Ideal E2E experience

Alongside the roadmap, I designed the whole journey in one set of mocks. It got the work funded, shaped every step of the roadmap, and became the spec for the balances API.

App home: Schedule an Appointment labeled Billed to you or your insurance, and Get On-Demand Care labeled Included in membership.
01Billed vs. includedShipped
Insurance has been submitted for review: pending until verified.
02Insurance, pendingShipped
Your insurance requires a copay for this visit: $25 estimated copay, with Add copay payment method or I’ll add it later.
03Copay before bookingShipped on web
Pay my bills: $270.55 due with Pay now, bills listed by date with Unpaid, Paid, Pending and In Collections states.
04Bills in the appBecame the API
Appointment text message with a link to update insurance and payment method before the visit.
05Improving billing communicationPartially shipped
North Star · conceptWhere it could go next

Concept mocks for the full flow: scan the card, know the price before booking, an honest self-pay estimate, a bill that explains itself, and an AI assistant that answers bill questions before handing off to a person.

How would you like to pay: scan, search, or self-pay
How would you like to pay: scan, search, or self-pay
Scan the card: we read it automatically
Scan the card: we read it automatically
Check your details, pre-filled from the card
Check your details, pre-filled from the card
You’ll pay $25: checked with your insurer just now
You’ll pay $25: checked with your insurer just now
Paying out of pocket: a good-faith estimate
Paying out of pocket: a good-faith estimate
Why you owe $112.40, explained from your claim
Why you owe $112.40, explained from your claim
Lock screen: no amounts or names, details after unlock
Lock screen: no amounts or names, details after unlock
Contacts: AI Assistant as the fastest response
Contacts: an AI Assistant answers bill questions first
Health AI: why did I get a bill
Health AI explains what’s included vs billed
Health AI: balance breakdown and Pay $25 now
The bill, explained line by line, with Pay now
Health AI: pending claim and Billing Specialist handoff
Pending claims aren’t guessed; hand off to a specialist

Roadmap

Designing the billing journey

{{ r.roadmapNote }}

How might we help people arrive financially ready for care, without making care harder to reach?
One connected system Financially ready for care
{{ l.t }} {{ c.n }}{{ c.h }}

{{ m.a }}{{ m.b }}

Chapter {{ ch.n }}

{{ ch.h }}

{{ ch.q }}

{{ ch.lead }}

Why it mattered

{{ ch.stat }}

{{ ch.probLabel }}

  1. {{ p.t }}

{{ ch.storyH }}

{{ p.q }}
{{ p.by }}

{{ p.b }}{{ p.t }}

{{ p.q }}
{{ p.by }}

{{ p.b }}{{ p.t }}

{{ b.b }}{{ b.t }}

  • {{ li }}

{{ p }}

{{ g.tag }}

{{ g.h }}

{{ g.t }}

{{ g.h }}

{{ g.t }}

Result

{{ ch.resultQT }}

{{ p.h }}

{{ p.t }}

“{{ p.q }}”
{{ p.by }}

{{ p.after }}

{{ p.q }}
{{ p.by }}

{{ p.t }}

Explorations with my team · where to ask

Book Visit screen with an orange alert: we don’t have your insurance on file
Option ABefore booking, as an alertWhy not: it read as a blocker.
Book Visit screen with a soft blue note about missing insurance
Option BBefore booking, as a noteWhy not: easy to scroll past.
Android visit booked screen with an Add your insurance card
Option CRight after bookingWhy not: people tapped Done.
Visit details screen with an insurance alert
Option DIn visit detailsWhy not: too late to verify.

Before

{{ ch.phoneBeforeCap }}

After

{{ ch.phoneAfterCap }}

{{ ch.gMob }}

{{ k.n }}

{{ k.h }}

{{ p }}

  • {{ li }}

{{ p }}

Payment portal in four balance states: new balance or none, in collections or not. Synthetic data.
Four balance states, one layout: the screen always matches where the bill is.

After

v1 · Shipped first

Pick a slot, say you have insurance, type three fields. Verified in about 3 seconds, then booked.

v2 · Upgrade

A searchable carrier list replaces guessing, and the check now prepares a copay estimate. Most checks took 3 seconds; some ran 9–12, so the wait tells members what’s happening.

{{ ch.gWeb }}

{{ ch.gBoth }}

{{ ch.bothIntro }}

{{ p }}

  • {{ li }}
{{ t.v }}
{{ t.v }}

{{ p }}

The experiment, side by side

Payment: test, don’t argue

Then came the payment question. Billing wanted every copay. The business feared losing bookings. I feared people not getting to care. Instead of arguing, I proposed a test.

01

Decide what’s reversible first

First, before any code, I locked the calls we could undo:

No hold on the card
The saved card reconfirmed at every booking
With product and engineering, web before mobile

Senior leadership approved them, which left one question: required or optional?

02

Test it

New web members got one of three flows.

03

Required collected slightly more.

Both flows cost some completed visits, and required cost a little more. On the numbers alone, it was close. So the numbers didn’t decide it; the principle did. We couldn’t ask for a card before we could tell people what they’d pay. Without a real estimate, “required” isn’t consent. A card on file is not consent. I recommended optional.

04

Shipped as a sequence, not a verdict.

Copay collection rose 32 percentage points.

Web · shipped
On web, members verify insurance, see their copay estimate, then choose whether to save a card before booking.
Mobile · next
Mobile waited on photo accuracy, and was still waiting when I left.

In healthcare, a better payment metric can’t be the only definition of a better experience. People still have to get to care.

{{ ch.baL }}

{{ ch.beforeProtoCap }}
{{ ch.beforeProtoCap }}
Confirm self-pay sheet on mobile web with a typical price of $245 to $915
Self-pay shows a typical price range before booking. The care tech team built the cost-estimate API, so we could bring it to members.
{{ s.ph }}
{{ s.ph }}
{{ s.ph }}
{{ s.ph }}

{{ ch.baR }}

{{ ch.afterProtoCap }}
Web after: verify insurance, see the $25 copay estimate, then save a card before booking.
{{ ch.afterProtoCap }}
{{ ch.afterProtoCap }}
{{ s.ph }}
{{ s.ph }}
{{ s.ph }}
{{ s.ph }}
After: the Appointment Scanner. Hover a balance for the breakdown, or open the account from the row menu.
After: the patient account lists unpaid bills, ready to collect. Open a bill to see charges, insurance, and the EOB.
At check-in: copay and previous balance in one place, collected before the visit.

Result. 3 steps and about 2 minutes per patient, rolled out to all staff. I co-drafted the requirements doc and tied it to the cost of collecting each dollar, which came down with the balance view as a major driver.

“One specialist forwarded the design to her whole team, saying it addressed every step we had discussed.”
Support Specialist

Future

Home with a $25 balance due
Home surfaces the outstanding balance, with a link to the patient portal.
Outstanding balance widget links to the patient portal: bills due, bill details, pay, and a confirmation.

{{ ch.futureCard.h }}

{{ p }}

{{ ch.futureCard.imgAlt }}View full size ↗

Process

{{ ch.process }}

Options weighed

{{ ch.alt }}

Decision

{{ ch.decision }}

Trade-off

{{ ch.tradeoff }}

Experiment

Required or optional? Results for new web members

{{ t.v }}
{{ t.v }}

{{ ch.tableNote }}

{{ e.h }}

{{ e.a }}copays collected{{ e.b }}bookings completed

What changed

Members

Copay collection rose 32 points, more members added insurance before the visit on web, and fewer called surprised by a bill.

Staff

Balance prep went from 8 steps and 5+ minutes to 3 steps and about 2.

On purpose

The insurance step traded some bookings for more completed visits. For payment, I chose the gentler option, with completed visits as the guardrail.

Not yet shipped

Copay on mobile and bills in the app. The bills design became the balances API instead.

What I learned

Set guardrails before the test

One number shouldn’t decide access to care.

Count the work a shortcut moves

Saving members a field created staff tasks.

Consistent means the same meaning

Not the same input.

Where it landed

Same member,
a year later

You wake up sick and book from your laptop. The visit says it’s billed. Your insurance is verified in seconds, and you see your $25 copay before you confirm. When the bill comes, it’s no surprise.

Book with the price shown, get a bill that matches, pay it in one tap.