Modular policy tool for faster eligibility matching

Upland Advocacy

Speed and clarity for policy input, when every second counts on a call

Patient advocates often scrambled to find eligibility rules during support calls. I designed a modular input system that breaks down complex policy logic into clear step-by-step actions for faster processing with fewer errors.

*Partial UI shown due to NDA. These illustrate structural decisions behind faster rule entry and easier validation.

The Team

Me (Lead Product Designer)

Ibadat Shaney (Product Owner)

Suhail Amhed (Lead Business Analyst)

Aswhin Kumaar (Business Analyst)

Sana Ru (Lead Frontend Developer)

Shardha Sapra (Senior Frontend Developer)

Timeline

2023 Feb - June (4 months)

Challenges

Eligibility rules were hard to find, verify, and trust—all during live calls

Fragmented Workflow

Advocates jumped between tabs and spreadsheets mid-call, slowing them down when patients needed a faster answer

Mismatched Rules

Inconsistent rule formats and vague criteria often lead to wrong matches and missed financial aid

No Single Source of Truth

Policy details were scattered across files, versions, and notes, making it hard to verify anything

Goals

I aimed to turn scattered, inconsistent policy data into a modular system, so advocates could search, edit, and apply rules mid-call and scale the setup as policies evolved

01

Make Policies Searchable

Structure policy data into searchable fields to speed up rule matching

02

Define Eligibility Clearly

Break vague criteria into reviewable logic to reduce uncertainty

03

Prevent Errors at Scale

User validation to catch mistakes and onboard new rules faster

Understanding the Context

To streamline matching, I needed to understand the real-life constraints advocates faced on calls.

Designing in lockstep with real-world call chaos

To design for messy, mid-call workflows, I held daily syncs with two client leads and checked in regularly with their internal support team. This tight feedback loop surfaced fuzzy edge cases, shifting policy rules, and pain points we hadn't anticipate, all while operating fully remotely.

Daily Syncs, Remote First

Kept alignment despite shifting priorities and no in-person context

Live Feedback from Clients

Helped flag gaps and break unclear assumptions in real time

Support Team Insights

Uncovered messy edge cases and call-specific blockers

Critical care moments are slowed down by undefined rules and scattered systems

I interviewed 10 active users to uncover where policy lookup and decision-making broke down. Their stories revealed recurring breakdowns in clarity, speed, and reliability.

Confusing or Missing Rules

"Requirements keep changing. Sometimes I'm not even sure what counts anymore."

Application windows and eligibility criteria varied widely—some provided 30 days, others 90. Many policies didn't define any rule at all, forcing advocates to guess or cross-check with others.

Lost in Tabs

"I'm busy flipping tabs instead of helping."

Mid-call, advocates scrambled between multiple Excel files to verify coverage details. This slowed responses, introduced stress, and increased the risk of errors.

Frequent Mismatches & Delays

"I once gave someone the wrong info. Now I double-check every single time."

Unclear formats and fuzzy logic often caused missed matches. One advocates misreading an income rule that said "usually qualifies under 60% FPL", which the system couldn't apply.

System-level Solutions to Reduce Advocate Friction

I transformed recurring user pain points, such as disjointed inputs, loosely defined rules, and policy mismatches, into a modular system designed for speed and accuracy during live support calls.

Solutions focus

Guided Rule Builder

Combined eligibility rules into one structured form to prevent jumping between tabs or interpreting vague logic manually

Smart Policy Filter

Let advocates instantly filter applicable policies using defined criteria, instead of combing through fragmented spreadsheets

Live Validation Alerts

Flagged incomplete or non-standard rule entries, like open-ended dates or loosely written income thresholds, as the user typed

Designing for frictionless matching

I mapped out key flows and experimented with form structure and logic to turn ideas into actionable solutions.

  1. Guided rule builder

To address frequent mismatches and confusion, I replaced the fragmented rule entry with a structured form that groups logics by type—like income, residency, and insurance. Using checkboxes, logic prompts, and drop-downs, the tool encourages clarity i how each rule is applied, not just where it's written. This format enables advocates to move faster and avoid interpretation errors that can be buried in spreadsheets.

One advocate misread a policy that said "usually qualifies if under 60% FPL"—a rule too ambiguous for the system to process. I addressed this by requiring clear cutoff values and validation inputs as they're entered.

Early Concept

Final Design

*Want to see the full eligibility form? Expand full view

  1. Eligibility logic variation (step-based breakdown + real-world framing)

To support real-world policy registration, I designed a flexible input form for administrators to add policies with varying eligibility conditions. Instead of creating rules in a vacuum, I grounded each step in real eligibility data from hospital requirements to state program formats.


The final structure balances complexity and clarity. Each step shown below mirrors a real-world rule pattern from single cutoffs to multi-factor combinations.

Early Concept

Final Design

Eligibility Logic Variation 1- Qualifying Buckets

Step 1 - Set a basic eligibility threshold

Use case: Programs that offer general aid under a fixed income cap (e.g. FPL ≤ 200%)

Start with a basic income condition like "FPL ≤ 200%." This step ensures even simple aid programs can be configured in seconds.

Step 2 - Create additional income brackets

Use case: You want to set up different coverage tiers based on income bands (e.g. FPL ≤ 200% gets 100% discount, FPL ≤ 300% gets 75%).

Add additional income bands to map different discount levels. (e.g. FPL ≤ 200% → 100%, FPL ≤ 300% → 75%.)

Step 3 - Combine different condition types

Use case: Programs that require multiple eligibility factors beyond income (e.g. FPL > 200% AND Age ≥ 65)

Mix income with other qualifiers like age or residency using AND / OR logic—flexible yet structured.

Key benefit: Adds flexibility when income alone isn't enough to determine eligibility

Step 4 - Finalize complex qualifier group

Use case: Programs with particular eligibility needs (e.g. Income > 200% AND Age ≥ 65 in same group AND Residency = NY)

This step lets advocates group multiple conditions into a single, structured logic block, ideal for layered rules based on income, age, and region.

Key benefit: Reduces duplication and supports high-impact programs with narrow eligibility criteria

Following this, I also structured how layered discounts can be defined using the same logic framework

Eligibility Logic Variation 2 - Discount Rules

Layered logic with contextual automation

Why this discount setup works

This logic auto-applies discounts and scales with complexity without adding extra steps

This setup lets advocates define both general and scoped discount rules with optional clarity.

Discounts are applied automatically based on input fields (e.g. service type, visit date), reducing manual work and minimizing errors, even in complex edge cases. When needed, advocates can layer additional rules without adding clutter, making the system flexible enough for even the most complex programs.

  1. Preventing errors with real-time validation

Early mistakes, like mismatched brackets or unlinked systems, often went unnoticed. I tackled this by embedding validation directly into the workflow, guiding advocates to resolve issues as they build, rather than after they submit.

Income Range validation - Eligibility Requirements

Inline prompt catches income range gaps before submission, helping users define clean brackets.

If a 100% discount looks off, the UI suggests checking it to avoid mistakes.

System Linkage Check - Add Policy Form

If no linked health system is detected, users are prompted to create one directly, avoiding downstream policy errors.

Outcome

Structured validation cut errors by 18% and sped up patient matching

Real-time validations and rule structuring helped reduce policy errors and speed up patient matching

18%

Fewer policy errors

25%

Faster match setup

52%

Fewer downstream fixes

1.4x

More policies supported

Takeaway

What this project taught me about designing for complex systems:

Guidance Beats Flexibility

People moved faster when I offered just enough structure, not too much, not too little

Scale Starts with Patterns

Reusable logic wasn't just for dev. It helped me design with consistency and adaptability.

Outliers Expose Gaps

Outliers weren't noise. They showed me where my system logic needed to stretch