Intro
Overview
The Challenge
Solution
Design
Outcomes
Next Steps
Try It
raffle.stjude.org/dashboard
Raffle
VS
Veruca Salt ▾
Ticket Source Tester
📍 Memphis, TN · Dream Home GiveawayJuly 10 – July 28138 Days Left👥 Volunteers
Tickets:ActiveTime Left: 138 days · 19 hours · 55 min.Ticket(s) Sold: 5/400
15Remaining
18Item 1
35Item 2
10Item 3
20Item 4
30Item 5
14Item 6
26Item 7
13Item 8
Constituent Look Up
All ▾
🔍 Search
Search
Scripted Credit Card Purchase
Purchase Ticket
Credit Card Purchase
Purchase Ticket
DepositsCreate New DepositOpen Deposits: 1
IDDeposit DateDeposit AmountRemaining Tickets
16/19/2024$600.004Resume
312/4/2024$400.176Resume
45/30/2024$200.9020Resume
TasksCreate Task⌄ New: 2
Date InquireCreated ByType
6/19/2024vorchheimeraEvent InfoView Task
12/4/2024vorchheimeraCall BackView Task
Receipt Books: 13
Available2
Checked Out3
Used4
Audited4
Paused Ticket Sales
Ticket SourceTicket Sales
PhonePaused
MailPaused

UX Case StudySt. Jude Children's Research Hospital

St. Jude
Raffle

EDC (Enterprise Dream Campaign) is the internal platform behind the St. Jude Dream Home Giveaway. It manages every part of a raffle, from event setup and ticket sales through drawing day, across 40+ markets nationwide.

Lead UX Designer
Internal Web App (EDC)
Field Research · Shadowing · Prototype Testing · Flow Mapping
Redesigned the enterprise platform behind a $700M+ fundraising program over three years of continuous iteration

Overview

Project Overview

The Short Version

EDC was generating more operational failures than it solved. Over three years I redesigned it around three decisions: validate eligibility before anything else, link every ticket to its deposit by design instead of by memory, and keep one record per person. Purchase errors dropped ~60%, and the workarounds that held the old system together disappeared.

The Problem

When I joined, EDC was generating more operational failures than it was solving. Staff had built workarounds for everything, and that told me the real problem was not the interface. It was the flows and the process.

Business Goals

Give directors live operational visibility so in-event decisions run on real data
Cut purchase errors and the hours of manual correction that followed every live event
Launch new raffles and markets quickly with a consistent, trainable experience

User Goals

Complete every key task from the home screen, with fewer clicks
Always know which raffle you're working in
Trust that a ticket links to the right deposit and the right person the first time

My Role

I owned design end to end. I partnered with my PO, BA, and territory leads to keep decisions grounded in real operational needs, staying in the problem through build, QA, and launch. Three years of continuous iteration: research, design, test, ship, repeat. The platform went from broken workarounds to the backbone of a $700M+ program.

Working Across the Org

Territory leads & volunteers

Shadowed live raffles in their markets and turned their workarounds into requirements they could see themselves in.

Call centers

Wrote the purchase scripts and moved zip validation to the first step after hearing the calls it was causing.

Engineering, PO & BA

Built the shared component library together so every design decision was defensible in development cost.

Dream Home leadership

Gave directors live raffle visibility, which kept a three-year redesign funded and prioritized.

Discovery & user researchFlow mapping & permissionsPrototyping & user testingUI & interaction designContinuous testing in dev & QAPrint materialsCall center scripts

Design Constraints

The objective was a clean, uniform experience that could launch quickly. We built a shared component library with reusable elements that sped up coding, simplified developer onboarding, and kept every screen feeling cohesive. For the dashboard, a widget-based architecture made the five-level role hierarchy practical to implement.

Launch fast

New raffles open in new markets on tight timelines. Reusable patterns like the stepper appear across multiple pages, which meant faster coding and easier training.

One system, five roles

Directors, leads, volunteers, and two call centers all work in the same product. Every screen had to show each role exactly what it needs and nothing it doesn't.

Data feeds from outside

An external call center processes purchases in its own UI that feeds into EDC. Flows had to stay correct even for data EDC didn't create.

How the Giveaway Works

Since 1991, local builders have donated a fully built home in each participating market. The community buys $100 raffle tickets, one winner is drawn on live TV, and 100% of ticket proceeds go to St. Jude. The platform I redesigned, EDC (Enterprise Dream Campaign), manages every aspect of a raffle from event setup through drawing day.

How It Works

Builders donate the home

1991Est.

Community buys $100 tickets

40+Markets

One winner on live TV

700+Homes given away

100% goes to St. Jude

$700M+Raised total

Children get free treatment

8,600+Kids/year

Who Uses EDC

Dream Home Director
Leads the Dream Home team
Monitor live raffle performance
Raffle event setup
Zip code management
Territory Lead
Manages volunteers and runs the campaign for their area
Mail-in ticket purchases
Audit deposits
Pause ticket sources
Add receipt books
Main Volunteer
Helps run the raffle day to day
Mail-in ticket purchases
Ticket outlet purchases
Print tickets
Radiothon Volunteer
Volunteers at a radiothon
Phone ticket purchases
External Call Center
Handles inbound calls for all live raffles
Uses an external UI, data feeds into EDC
Internal Call Center
Handles ticket buyer callbacks
Name corrections post-purchase
Can also process purchases in EDC

The Challenge

The Operational Failures That Defined Scope

Before any wireframe, I needed to understand how the system worked under live conditions, not just what stakeholders said was wrong. Working alongside staff during live operations, three structural failures kept surfacing.

01

No Operational Visibility

Directors were making critical in-event decisions without real data. There was no visibility into what the system was capturing, and without knowing what data existed, there was nothing meaningful to surface or display.

What research revealed

1

Fewer clicks

The #1 request across every user I spoke with. I used it as a hard constraint on every flow.

2

Always know which raffle you're in

Same interface, different live events. During shadowing I encountered the error firsthand: the interface gave no signal about which event was active.

3

One-stop shop

Users were context-switching between screens to complete one task. Every key action needed to be reachable from the home screen.

4

Role-based, easily configurable

Five distinct roles, one system. The permission model needed to flex without developer involvement every time.

EDC Home Screen · Before
02

Error-Prone Ticket Purchases

The purchase screen was creating problems faster than users could fix them. Observational research during live events revealed a consistent pattern of avoidable entry errors, and every wrong deposit ID meant hours of manual correction after the event.

Entry errors found

1

Typing errors

The #1 request on this page was address autofill. Users were mistyping addresses constantly and had no assistance to catch it.

2

Deposit ID linking

Users struggled to remember which deposit a purchase was against. Linking was manual and easy to get wrong, and a wrong deposit ID meant hours of correction after every live event.

3

Unused fields

The form had many input fields that served no purpose in the actual workflow. The clutter added confusion and slowed users down.

4

Late zip code validation

Users completed most of the form before being told the ticket buyer's zip code was ineligible. Zip code validation needed to happen first.

EDC Purchase ScreenCall Center Interface · TopCall Center Interface · Bottom
03

Fragmented Constituent Records

Ticket buyers often purchase multiple times, creating many separate profiles. Records were scattered across disconnected systems with no way to reconcile them, so keeping track of a single buyer was nearly impossible.

What research revealed

1

No single source of truth

Constituent records existed across multiple disconnected systems. Getting a complete view of any one person required checking each system separately.

2

Duplicate records

The same constituent could exist as multiple separate entries. There was no duplicate detection and no way to merge records once created.

3

No purchase history or change tracking

Purchase history couldn't be viewed alongside contact info. There was no record of what changed, when, or by whom. Once edited, the original data was gone.

Constituent Record · Original System

Solution

What We Built

Role-Based Dashboard

A widget-based home screen where every key action is reachable in one place. Widgets show or hide based on the user's role, so a director sees live raffle performance while a volunteer sees purchase tools. A persistent context banner always shows which raffle you're working in, ending the wrong-event errors I saw during shadowing.

Redesigned Purchase & Audit Flow

Validation order was the core design decision: zip eligibility first, so buyers are never walked through a purchase they can't complete. Each purchase type got its own flow carrying only the fields it needs, with address autofill catching typos at entry. Cash and check purchases now start from the deposit itself, so tickets link to the right deposit ID by design instead of by memory, and leads audit inline with every change logged rather than exporting to Excel. The full flow map below shows how much work this removed.

Unified Constituent Record

One profile per person, with purchase history and contact info side by side. Duplicate detection catches repeat buyers at entry, and a full change log records what changed, when, and by whom, so original data is never lost.

Configurable Permissions

A five-level role hierarchy that admins manage themselves. Adjusting what a territory lead or volunteer can see and do no longer requires developer involvement, which meant new raffles and new markets could launch without engineering in the loop.

Solving Deposit ID Linkage, Mapped End to End

Cash and check purchases split into two flows once the deposit lands. I mapped them side by side to see where the real pain points were. A few jumped out fast: deposit IDs that never linked, fields no one used, and audits that pushed leads into Excel just to find what went wrong.

Both Flows · Same Start
USER
Fill out physical deposit slip
Currency, coins & checks
Fill out physical deposit slip
USER
Deposit at bank
Money first, always
Flows diverge
EDC Cash/Check Ticket Purchase Flow
SCREEN
Create deposit in EDC
Create deposit in EDC
NAVIGATE
Navigate to purchase screen
CC, cash & check
SCREEN
Purchase screen
Purchase screen
USER
Submit purchase
Ticket may link to wrong deposit
SYSTEM
Ticket emailed to buyer
SYSTEM
Back to dashboard
Auto-redirects on submit
repeats for every ticket purchase
EDC Deposit Audit
USER
Export to Excel
Filter by Deposit ID
USER
Find error
Wrong deposit, name, etc.
NAVIGATE
Return to EDC
Leave Excel, go back in
USER
Search constituent
Find & update manually
USER
Make corrections
Remember to resend
SYSTEM
Resend email
Buyer gets multiple emails
Pain pointsBuyers receive multiple conflicting emailsLeads leave the system to audit in ExcelNo tracking, no record of who changed whatPurchases frequently linked to the wrong deposit
Raffle Cash/Check Ticket Purchase
SCREEN
Create deposit in Raffle
Create deposit in Raffle
SCREEN
Multi-step purchase flow
Multi-step purchase flow
SCREEN
Totals match
Totals match
USER
Submit
Moves to Needs to Be Audited
Raffle Deposit Audit
SCREEN
Deposit overview
Deposit overview
SCREEN
Lead reviews
Lead reviews
USER
Edit inline
Changes logged
USER
Click Done
Audit complete
SYSTEM
One email sent
Correct ticket, no duplicates

Design

Before & After

Each area went through the same loop: research under live conditions, an Axure prototype tested with real system users, then refinement before any build. Prototype testing with live users was the right call before committing to a full build. It validated the direction and surfaced specific refinements every time.

EDC Dashboard

Every widget on the new home screen maps to a research finding. Role-based visibility decides what each person sees, and the persistent event banner came directly from an error I hit myself while shadowing across two live raffles.

Why this, not thatThe obvious ask was one unified dashboard for everyone. I went with role-scoped widgets instead: more build effort up front, but each of the five roles gets a home screen showing only what they act on, and permission changes became configuration instead of code.
What testing changedThe first Axure prototype validated the navigation model but missed my own fewer-clicks bar. Testers still left the home screen to finish tasks, so key actions moved onto the widgets themselves before build.
Before
No real-time view of ticket sales or campaign performance
Sales by channel buried in a static table
No filters, no live data, no way to act from this screen
Getting basic info required digging across multiple screens
Dashboard · Before
After
Live ticket bar shows real-time breakdown by source
Sales by channel visible at a glance on the home screen
Active event always labeled. The same interface ran multiple concurrent raffles, and event confusion was causing real data errors
Deposits and tasks surfaced without any navigation

Purchase Flow

Validation order was the key decision: zip eligibility first, identity second, payment last. Splitting the flow by purchase type means each screen carries only the fields that type actually needs.

Why this, not thatOne universal purchase form would have been cheaper to build and maintain. Splitting into three flows by purchase type cost more screens, but it was the only way to strip unused fields without breaking edge cases, and it let zip validation run before anything else.
Before
Manual typing errors
Purchases linked to the wrong deposit ID
Unnecessary fields cluttered the form
Zip code validation happened too late
Purchase Screen · Before
After
Address autocomplete reduces typing errors
Deposits linked and visible on the purchase screen
Unnecessary fields removed, flows separated by type
Zip code validated before the form loads

Constituent Record

One record per person was the constraint everything hung on. Duplicate detection runs at the point of entry rather than as cleanup, and the change log preserves original data instead of overwriting it.

Why this, not thatBatch-merging duplicates after the fact was the easier engineering path. I pushed for duplicate detection at the point of entry plus a change log that preserves originals, because a cleanup job can't recover data that manual edits have already overwritten.
Before
Records split across multiple disconnected systems
Duplicate constituents with no way to identify or merge them
Purchase history not visible alongside contact information
No audit trail, no way to see what changed or when
Constituent Record · Before
After
Unified constituent record accessible from a single screen
Duplicate detection surfaced at point of entry
Full purchase history visible within the constituent record
Change log visible on every record, a full audit trail

Outcomes

What We Delivered

Three years of continuous iteration shipped a platform that powers a $700M+ fundraising program across 40+ markets. The workarounds that defined the old system are gone.

~60%
Fewer purchase errors
Correction tasks in EDC, before vs. after
Zero
Ineligible zip code calls
Validation moved to the first step
5
Roles served by one system
Permissions managed without developers
$700M+
Program powered
Cumulative raised since 1991
~60%Reduction in purchase errors

Tracked by comparing correction tasks in EDC before and after the redesign. Address autocomplete, zip validation upfront, and deposit linking eliminated the most common failure points.

ZeroAwkward calls about ineligible zip codes

Call center staff personally thanked me for moving zip code validation to the start of the flow. Buyers were no longer taken through the full purchase before being told they were ineligible.

100%Stakeholder pain points resolved

Every issue raised in discovery was addressed. Reusable components also meant faster launches, and stakeholders were happy with both the output and the speed.

Next Steps

What's Next

Key Takeaway

"The workarounds were the research findings. Every workaround staff had built was a map to a broken flow."

Staying embedded with the people running live raffles meant I saw the Excel exports, the sticky notes, and the shared logins for what they were: precise descriptions of where the system failed. Designing against the workarounds, rather than the stated requirements, is what made three years of iteration land. Since this project, I start every redesign by cataloging the workarounds before I touch the interface.

1

Extend the shared component library beyond EDC so other internal fundraising products can launch with the same speed and consistency.

2

Bring the external call center interface into the same design system, so inbound purchase data follows the same validated flows as everything else.

3

Build audit reporting that surfaces error patterns across events, letting leads spot recurring problems instead of fixing them one deposit at a time.

4

Automate duplicate merging on constituent records, moving from detection at entry to cleanup of the historical database.

Interactive Prototype

Try the Purchase Flow Yourself

This is a working model of the redesigned flows: run a scripted credit card purchase with live validation, or create a deposit and watch tickets link to it by design. Every field behaves the way it shipped, down to zip eligibility checking first.

Scripted CC
CC Purchase
Deposits
Create Task
Purchase Ticket05:00
Welcome
Thank you for calling about the Memphis, Tennessee St. Jude Dream Home Giveaway
My name is Amy.
Would you like to reserve tickets to win the house and other great prizes?
Next
Validation
Ticket
Contact Info
Payment
Purchase
0 Tickets:$0.00
Amount Being Charged:$0.00
Purchase