Nila Gao, Product Designer

Hey, I'm Nila

I design the AI experience @ Klaviyo. I like making models feel intuitive, trustworthy, and a little bit human.

CanvasRubricNotesDriveSlackYouTubeDocsZoomSpotifyCanvas WorkspaceAssignment 3: Market analysisSubmit9 tabs openAssignmentSubmitRubricLecture 7NotesTeam MANHATTANBROOKLYNQUEENSBRONXNEW JERSEYSite 14 · Harlem92Est. fundingscore Spring launchAll subscribersOptimized52,400 recipients47,960 recipients · −4,440 at risk, +1,120 likely buyersMRMaya R.maya@mail.comIncludedBLBen L.ben.l@mail.comIncludedRemovedPSPriya S.priya@mail.comIncludedAKAna K.ana.k@mail.comIncludedRemovedJTJordan T.jt@mail.comIncluded+ 52,395 moreDKDiego K.diego@mail.comAddedLWLena W.lena.w@mail.comAdded Data XRay3 sources connectedHow are my sales vs last year?Searching 2 spreadsheetsorders_2024.xlsxorders_2025.xlsxSales are up 18% vs last year.Monthly revenue20252024+18%JanFebMarAprMayJun Welcome to our brandWelcome to our brandSuggested subject linesExplore Our Brand JourneyWelcome Aboard!Meet Our Brand Family!Regenerate Same AI copy for every storeWith Brand VoiceTrailheadStep into style.Shop our newcollection today.Shop nowTRAILHEADMud’s not aproblem. Neitheris mile 12.Hit the trailMaison LuneStep into style.Shop our newcollection today.Shop nowMaison LuneHandmade inFlorence. Madeto last decades.DiscoverKicks ClubStep into style.Shop our newcollection today.Shop nowKICKS CLUBDROP 07 IS LIVE.SIZE 9s GOFAST.COP NOW Email · To all subscribersOur spring collection is hereShop nowSame channel for 48,210EmailPriya S.Our spring collection is hereShop nowSMSMaya R.Today 9:41 AMBloom: spring drop is live.20% off ends tonight.bloom.co/springPushJordan T.bBLOOM · nowBack in your sizeThe Runner 2 in 9.5 is here.WhatsAppDiego K.Hi Diego! New arrivalspicked just for you.9:41 Smart Send TimeActiveMRMaya R.Opens early mornings6:40 AMJTJordan T.Opens around lunch11:15 AMPSPriya S.Opens late evenings9:05 PM In progressSMS · To all subscribersSPRING SALE: 20% offeverything, today only.Same offer for 48,210Discount DecisioningActiveMRYour 20% off is waiting20% offJTNew arrivals picked for youFull pricePSBack in stock in your sizeFull price In progressCampaignsFlowsSegmentsA/B testsCreateStatusChannelSend timeTagsDate rangeNAMESTATUSSEND TIMECHANNELAUDIENCESpring launchSent9:00 AMEmail4 segmentsWelcome seriesLiveTriggerEmail + SMSNew subsAbandoned cartLive+2 hrsEmail + SMSCart > $50VIP early accessScheduled10:30 AMSMSVIP, 2 excl.Back in stockDraft11:00 AMEmail3 segmentsWinback 90dLive+90 daysEmailLapsedWeekend flashDraft6:00 PMEmail + SMS5 segmentsPersonalizationSend timePer personChannelPer personAudienceOptimizedDiscountWhen neededApplied to every campaign and flow
Featured

All projects

CampaignsFlowsSegmentsA/B testsCreateStatusChannelSend timeTagsDate rangeNAMESTATUSSEND TIMECHANNELAUDIENCESpring launchSent9:00 AMEmail4 segmentsWelcome seriesLiveTriggerEmail + SMSNew subsAbandoned cartLive+2 hrsEmail + SMSCart > $50VIP early accessScheduled10:30 AMSMSVIP, 2 excl.Back in stockDraft11:00 AMEmail3 segmentsWinback 90dLive+90 daysEmailLapsedWeekend flashDraft6:00 PMEmail + SMS5 segmentsPersonalizationSend timePer personChannelPer personAudienceOptimizedDiscountWhen neededApplied to every campaign and flow
The Personalization SystemIn progress
Orchestration · packaging
Welcome to our brandWelcome to our brandSuggested subject linesExplore Our Brand JourneyWelcome Aboard!Meet Our Brand Family!Regenerate
Subject Line Assist
1.2% → 8.9% adoption, open rate flat
Smart Send TimeActiveMRMaya R.Opens early mornings6:40 AMJTJordan T.Opens around lunch11:15 AMPSPriya S.Opens late evenings9:05 PM
Personalized Send Time
1.8B+ messages · +2.97% click lift
Spring launchAll subscribersOptimized52,400 recipients47,960 recipients · −4,440 at risk, +1,120 likely buyersMRMaya R.maya@mail.comIncludedBLBen L.ben.l@mail.comIncludedRemovedPSPriya S.priya@mail.comIncludedAKAna K.ana.k@mail.comIncludedRemovedJTJordan T.jt@mail.comIncluded+ 52,395 moreDKDiego K.diego@mail.comAddedLWLena W.lena.w@mail.comAdded
Audience Optimization
~15% → ~34% of companies in six months
Same AI copy for every storeWith Brand VoiceTrailheadStep into style.Shop our newcollection today.Shop nowTRAILHEADMud’s not aproblem. Neitheris mile 12.Hit the trailMaison LuneStep into style.Shop our newcollection today.Shop nowMaison LuneHandmade inFlorence. Madeto last decades.DiscoverKicks ClubStep into style.Shop our newcollection today.Shop nowKICKS CLUBDROP 07 IS LIVE.SIZE 9s GOFAST.COP NOW
Brand Voice
+8.3% lift with no interface change
Email · To all subscribersOur spring collection is hereShop nowSame channel for 48,210EmailPriya S.Our spring collection is hereShop nowSMSMaya R.Today 9:41 AMBloom: spring drop is live.20% off ends tonight.bloom.co/springPushJordan T.bBLOOM · nowBack in your sizeThe Runner 2 in 9.5 is here.WhatsAppDiego K.Hi Diego! New arrivalspicked just for you.9:41
Channel Affinity
+5 to 10% engagement lift in concierge tests
SMS · To all subscribersSPRING SALE: 20% offeverything, today only.Same offer for 48,210Discount DecisioningActiveMRYour 20% off is waiting20% offJTNew arrivals picked for youFull pricePSBack in stock in your sizeFull price
Discount DecisioningIn progress
In flight · design toward a limited beta
Data XRay3 sources connectedHow are my sales vs last year?Searching 2 spreadsheetsorders_2024.xlsxorders_2025.xlsxSales are up 18% vs last year.Monthly revenue20252024+18%JanFebMarAprMayJun
Data XRay
+18% activation · BMW acquired
CanvasRubricNotesDriveSlackYouTubeDocsZoomSpotifyCanvas WorkspaceAssignment 3: Market analysisSubmit9 tabs openAssignmentSubmitRubricLecture 7NotesTeam
LMS Canvas
One workspace instead of a dozen tabs
MANHATTANBROOKLYNQUEENSBRONXNEW JERSEYSite 14 · Harlem92Est. fundingscore
SiteMatch
Pre-development cut to under 12 months
Playground

I love exploring diverse experiences

Installations, branding, exhibitions. Fun work outside the day job.

Nila Gao

Coffee or tea?

I’m a soup girl. I grew up in my family’s Chinese restaurant in New York, and working there taught me that small details shape how people feel. I still design that way.

Now I’m at Klaviyo, designing AI features that help marketers send smarter. The goal is always the same: make the complex feel effortless.

← Back to playground
Playground · CMU Futurist Club

People’s Vertex

An interactive installation built for New Sun Rising, a Pittsburgh nonprofit. We designed an experiential future: a scenario where small nonprofits have been pushed underground, and People’s Vertex is the secret hub where they keep each other alive.

The People’s Vertex installation
Problem
Nonprofits under pressure
Hard to feel from the outside
Insight
Make the future inhabitable
One scenario, not a forecast
Solution
A speakeasy installation
Six artifacts, one world
Outcome
Hopes and fears, collected
Fed back to New Sun Rising
Challenge

How do you make people feel what a nonprofit is up against?

How might we communicate the need to empower small community organizations to collaborate and thrive, despite significant pressure from government and institutional opposition?

Research

Signals and drivers

We interviewed nonprofit leaders about what they hope for and what they fear in Pittsburgh’s future. The signals we found were local initiatives, elderly engagement, technological shifts, and tightening funding. Those became the reflective questions we asked participants afterward.

Mind map of signals and drivers

Building the future world

We committed to one scenario: nonprofits forced into clandestine, speakeasy-like spaces where people work around the rules. The world has its own details, like the tech acronym drifting from MAMAA to DADAA and climate migration reshaping the city, which is what made the room feel inhabited rather than staged.

The future world the team built
Craft

Six artifacts, one world

ID keychains

Participants got an ID modeled on a government-issued EBT card, carrying six sectors on one piece of plastic: health, education, technology, arts, culture, environment, and social work. You chose the identifications you cared about.

ID keychains

Police tracker

A security alert that warned of hostile entities nearby, doubling as a futuristic smart home panel. It read climate temperatures and raised an alarm when police proximity threatened the venue.

Police tracker panel

Menu of services

Digital and physical menus carried the speakeasy storytelling. Tablets ran a Figma prototype that guests drove with their ID keychains, and the services were personalized: scan your ID and the menu asked how you would bring vibrancy back to your community.

Menu of services, physical
Physical menu. Printed and left on tables like a bar menu.
Menu of services, digital
Digital menu. A Figma prototype on tablets, unlocked by the ID keychain.

Posters

Outdoor posters warned visitors in somber tones and several languages to disable location tracking. Indoor posters sold the optimistic version of the future: 3D food printing, robotic child care, lab-grown superfoods. Hung eclectically, so the walls looked lived in.

Poster set

Photobooth

A reimagined job search service. Underground, you could still get a corporate headshot.

Photobooth

Branding

The identity had to travel from repression to hope. A grayscale, minimalist logo with playful edges, bold blocky type, and a palette of deep aqua, lime green, and neon pink for the speakeasy’s own diversity.

Branding system
The space

A gym, turned speakeasy

String lights and a large sign set the tone. Spray-painted boards split the room into People’s Vertex and the reflection room. Electro swing played underneath. Role play did the rest: we took on bartender, bouncer, and photo booth operator so participants had someone to be in the world with.

The physical space
Reflections

What participants told us

Two stations caught people on the way out. The first used pink and blue stars to read the room: most found the future dark, with the real work happening at local scale, around institutions rather than through them. The second used double-sided cards for hopes, fears, and expectations, which fed New Sun Rising’s own research.

Reflection station one
Station one. Stars to gauge the first reaction.
Reflection station two
Station two. Cards for hopes, fears, and expectations.
Takeaway

Constraints stretched our thinking further than open briefs did. Narrowing to one specific future produced stranger, better ideas and much better conversations. We were never trying to predict what happens. We were trying to ask whether it should.

← Back to playground
Playground · Sponsored by P3R

4RUN2

P3R runs Pittsburgh’s premier races, including the DICK’S Sporting Goods Pittsburgh Marathon. This project built the branding and sales strategy for 4RUN2, their in-house apparel line, with the Health & Fitness Expo during race weekend as the main point of sale.

4RUN2
Problem
Runners meet the brand too late
At the expo, after registration
Insight
Start at registration
Where the traffic already is
Solution
Starter kits, a site, a booth
Plus the buggy cart on course
Outcome
A brand that starts earlier
Sales strategy for P3R
Challenge

Runners meet the brand too late to buy it

How might we grow 4RUN2’s online and in-person sales through marketing that starts earlier, and through the point-of-sale moments P3R already owns at its events?

Today a runner registers, picks up a bib, and races. Almost none of that touches the P3R brand or its products, and beyond the occasional email and a single website mention there is nothing else carrying it.

Current expo journey
Strategy

Redesigning the experience

Most runners discover the brand at the expo, which is far too late to turn into a purchase. The redesign introduces it earlier through starter kits, social, and a booth you cannot walk past.

Registration and starter kit

A package option offered at registration, with apparel choices, customizable colors and sizes, and room to add more to the kit.

Starter kit concept
The kit. Offered at the moment of registration.
Starter kit options
Options. Colors, sizes, and add-ons.

Reach

Partnerships were judged on three things: willingness to actually engage with 4RUN2, real passion for the products, and social following. Coverage runs March through May and June against targets for engagement, visibility, and sales, including a local tour through favorite pizzerias, the Carnegie International, and Steelers games.

Partnership and reach plan

Attend the expo, take something home

Runners and supporters leave with something: keychains, tote bags, or digital assets like brochures and branded wallpapers. Small objects, but they are what carries brand recall past race weekend.

Take home items
Website

One link, a lot of traffic

The Pittsburgh Marathon registration page links to 4RUN2 exactly once. Given the traffic that page already carries, the redesign uses it to position 4RUN2 clearly as P3R’s premium in-house brand and send people straight to shop.

To justify the price, the site had to look like it deserved it: a luxury, pride-driven aesthetic that signals quality through visuals, typography, and storytelling.

Current 4RUN2 site
Before. The existing shop.
Redesigned 4RUN2 site
After. Premium positioning, clearer path to purchase.
Luxury visual system
A design language that reinforces premium positioning and brand pride.
Shopify and SEO
Plugins and search improvements to raise discoverability, traffic, and sales.
Stronger product pages
Size charts, more imagery, fuller descriptions, reviews, and color options to cut friction and returns.
Customer insights
Session recordings and surveys to show real behavior and keep informing the work.
Website update detail
Moonshot

The buggy cart

An advertisement nobody expects, because it is actually useful. Supporters stock supplies and snacks at checkpoints, marathon tracking helps them arrive on time, and they follow their runner along the course instead of waiting at one spot or the finish. Two or three buggies carrying pace teams keep the middle of the race from going quiet.

Buggy cart concept
← Back to projects
Case study · Klaviyo · Sole product designer

Subject Line Assist

Klaviyo's AI wrote good subject lines, but only 1.74% of senders used it. I moved suggestions into the field people already type in, and adoption rose 7.4×.

Live interaction Field focused · suggestions from recent sends
Subject line
Problem
Good AI, almost nobody using it
1.74% of senders, steady since 2022
Insight
People do not write prompts
They write subject lines, or steal a keyword
Solution
Suggestions before you ask
Three words plus a two-second pause
Result
7.4× adoption
1.2% to 8.9% of messages, open rate flat
Background

Great AI. Nobody using it.

The AI subject line generator had been in the product since 2022. Almost nobody used it, because reaching it meant leaving the field you were typing in.

Usage
1.74%
of messages used the AI subject lines. Fewer than 2 in 100.
Flat since 2022. Even the top tier only reached 2.8%.
What it took to use it
1Start typing in the subject line field
2Leave the field and open the AI panel
3Write a prompt describing the email
4Copy a suggestion back into the field
The detour
And nothing showed whether a suggestion was used, or how much it was edited.
Research

People don't write prompts. They write subject lines.

Across calls, tickets and a five-person prototype test, nobody handed off the writing. They checked their own line against the AI, or borrowed a keyword.

Users use our AI tool to either confirm “my subject line is better than AI,” or take keywords and phrases from their already-in-progress subject lines.

My note to the project channel, September 2024
Key insight

The feature expected a well-formed prompt. Nobody writes those. Real input looks like “10% black friday chocolate sale,” so I designed for keywords and stopped asking for the prompt at all.

Design thinking

Three concepts, five customers, one experiment.

I ideated wide, tested with customers, refined with data science and engineering, then let an experiment decide.

1Ideation: three concepts, each borrowed from outside the domain
Concept exploration using keyword tags to give the AI context
Keywords. Tags give the AI context. No tester could tell whether keywords were the input or the required output.
Concept exploration using a toolbar of AI actions
Toolbar. Refine, tone, A/B test. Research ranked A/B first and called the rest too many steps.
Concept exploration surfacing past subject lines with open rates
Performance-informed. Past lines with open rates. Liked for transparency, feared as an echo chamber.
2User testing: five customers across the US, UK, Germany and Pakistan
KeywordsNo one could tell if keywords were the prompt or the output.Confusing
ToolbarA/B testing ranked first. Refine and tone took too many clicks.Too many clicks
Open ratesLiked for data, feared as an echo chamber. Rates depend on the email type.Echo chamber
RegenerateA must-have, ideally with room to steer it.Must-have
Customers were already using ChatGPT to refine lines and find ideas, outside Klaviyo.
3Refining the design with data science, engineering and design
Data scienceTrigger on three words and a two-second pause, so suggestions follow real input.
EngineeringGenerations weren’t stored, so history was cut. Two loading states instead.
DesignLive in the field people already type in. Three clicks, maximum.
4Running an experiment: the current modal against two new versions
Control · A
Modal
Click the icon, fill in context, generate.
Variant · B
Reactive
A sparkle in the field triggers inline suggestions.
Variant · C · chosen
Proactive
Already there, refreshing after three words and a pause.
Recording of the original modal subject line assistant
Control. The existing modal.
Recording of the reactive variant triggered by a sparkle icon
Reactive. A sparkle summons suggestions.
Recording of the proactive variant with suggestions updating as you type
Proactive, shipped. Already there as you type.

Side by side, the third is the only one where nothing has to be summoned.

Shipped

The shipped design, in context.

Huge sale! Lots of new things...
Message
Last saved: 8:18 amExitNext
Email message
Subject line *
Enter a subject line
Use as reply-to
Suggested subject lines
Regenerate
Saved templatesView template libraryCreate blank email
SearchEdited: newest first
Template name
Template name
Template name
How it works today. Rebuilt in Klaviyo’s UI, playing the real interaction.
Interaction details. The small decisions that made it feel like part of the field.
10% black friday
Two loading statesA skeleton on the first generation. On refresh, lines are replaced in place, because a skeleton mid-typing reads as a reset.
TypePickDone
Three clicks, maximumFrom an empty field to a generated subject line. The constraint I set and held.
‹ 2 of 3 ›Cut
Cut: generation historyA way to step back through past suggestions, cut once I learned generations weren’t stored.
10%🍫⌫⌫ + 1
Edge cases I went looking forWhat counts as a word, whether an emoji counts, and backspacing two words then typing one.
Impact

7.4× adoption, and a guardrail that held.

Messages using a generated subject line, by arm
1.2%
ControlModal
1.8%
ReactiveInline on click
8.9%
ProactiveShipped
7.4×vs. control
χ²=9154, p<0.00001
24.4%
of accounts used itfrom 3.7% · 7,318 of 29,958
38.9%
came back twice or morefrom 28.5%
Flat
open rate, the guardrail heldno significant change at account level
The finding I didn't expect

Messages in the proactive arm that used no generation at all also improved, about 0.3 points. People took the idea and wrote their own line, which the adoption metric cannot see.

← Back to projects
Case study · Klaviyo · 0→1 design lead

Brand Voice

AI drafts felt generic and “too much like AI.” I designed a system that learns a brand's voice from its own campaigns, then lets people edit it. Subject-line adoption rose 8.3% with no interface change.

Live interaction Edit a descriptor or a rule, then update the preview
Brand voice settingsBetaUpload style guide
Voice descriptors
Define your brand’s communication style or personality.
Writing rules
Specific guidelines that give structure to your messaging.
Preview
This preview is generated from your previous messages. If it does not look right, refine your voice descriptors and writing rules.
Problem
Drafts sounded like AI, not like you
So marketers edited by hand, or stopped using it
Tension
Zero interaction, and full control
The requirements asked for both at once
Solution
Voice inferred, then editable
Your words outrank the model’s, permanently
Result
+8.3% acceptance
No interface change, five surfaces served
Problem

Two jobs that contradict each other.

Drafts came out generic, so marketers edited by hand. The brief then asked for two opposite things.

Job oneMake it invisible

“Drafts should sound like my brand, without me editing them.”

vs.
Job twoGive me control

“Let me define and review my brand’s tone.”

In a four-person study, no one found the entry point, and no one recognized the descriptors as their own voice.

Challenge

Six things in the way.

Nuance
Voice into logic a model can act on
Generic output
Drafts read as too much like AI
Friction
The last assistant failed on clicks
Data sourcing
Which campaigns, and whose words win
Scale
Millions of reads a month, through BFCM
Trust
Will it repeat my old lines back at me
Research

Eight findings, scored by severity.

Customers
Gong calls, tickets, four participants, two prototypes
Competitors
Mostly a form nobody fills in
Data science
A whiteboard on what can be inferred
5
Nobody found the entry point
Four of four never touched the brand voice setting on their own. The modal popover was the suspect.
4
Whose tone is this?
People read the descriptors as a default, or as some other customer’s voice, not a description of their own.
4
Upload silently overrides
Nobody expected that uploading a style guide replaces the analysis of past email rather than joining it.
4
No target audience field
Three of four said tone cannot be set without saying who it is for. The earlier study said the same.
4
No place for industry lingo
Two of four wanted a list of words to always include.
3
Account or campaign?
Two people could not tell whether they were changing one email or every future one.
3
Why is this here?
It was mistaken for the brand library they had already filled in, with no stated relationship to Email AI.
3
What does the upload fill in?
Unclear whether a parsed document populates every field or only the tone description.

Severity as scored in the report, January 2025, run with our researcher on two prototypes I selected. The top finding is the one I could not design my way out of: a system built to be invisible had succeeded.

Design thinking

The answer lives in a data model, not a screen.

Key insight

Control isn't a mode you switch into. It's a silent escalation. The instant someone edits a descriptor, their words outrank the machine's inference for that field permanently. No settings, no toggle, nothing to discover.

Decisions

A deadlock I was handed.

Option A
Infer from recent campaigns
Drift risk. The voice moves without anyone asking.
Option B
Freeze at creation
Staleness risk. The voice stops when the brand does not.
Shipped
Most recent, plus Freeze
Default moves, with an escape hatch for people who set it once.

An engineer called it a UX question and tagged me. I brought a customer’s own words: they would expect to set this up once.

Craft

Teach the model with examples. Teach the person with labels.

Name (for the person only)
Opinionated
Voice
Description (this is what the model reads)
We assert an informed point of view, grounding that POV in proof and truth. We never go so far as to feel bossy, accusatory or know-it-all.
Like this
“Your life is your business, not ours.”
Not like this
“Do the work to protect yourself online.” (sounds bossy)

The label is for the human, the body is for the machine. The name does nothing to the model; it exists so a person can trust the row. Examples are scoped to long-form only, since the subject-line path is high-volume and latency-sensitive.

The cold-start state, an account that cannot have a voice yet.
Brand voice
We build your brand voice from your sent campaigns. You don't have enough yet, so add it yourself, and we'll use it from your very next draft.
Upload a style guideDescribe your voice

A voice can't be inferred below a threshold of sent campaigns, so every new account hits a wall. I retrofitted this after handoff. It routes to the two manual paths rather than apologising.

Results

Same interface. 8% more acceptance.

A pure backend experiment. 50/50 by campaign, ~637,000 messages, no visual difference between the arms.

MetricControlTreatmentLiftVerdict
Subject-line AI adoption10.00%10.83%+8.26%Significant · adj. p<0.001
Average open rate34.92%35.00%+0.17%Not significant
Click rate1.61%1.62%+0.30%Not significant
Why the small number is the interesting one

No new affordance, nothing to discover. Suggestions simply sounded like the merchant, and marketers accepted them 8% more often. The flat open and click rates are the honest counterpart: on-brand copy changed marketer behaviour, not recipient behaviour.

It also stopped being a feature. Built for one surface, it became a service for five, and ownership moved to the orchestration layer where teams inherit voice rather than build it.

Lessons learned

The destructive override shipped. Uploading a style guide discards descriptors the user wrote. I'd now argue for merge-or-confirm.

The descriptor UI may do less work than it looks. An engineer thought the raw examples give the model far better context, which makes the editable list mainly a trust surface. I think he's right, and it isn't what I thought I was building.

The headline target was never measured. The requirements set 60% to 70% content acceptance, and no document reports whether it moved.

← Back to projects
+6% KAV lift · 27% adoption in 2 weeks

Personalized Send Time

Sends each message when that specific person is most likely to open it. I designed the scheduling UX, manual controls, and analytics that made marketers trust it.

Live 5,546,000 recipients · one send time
8:00 AM
12:00 AM
0of 40 engaged
Personalized Held-back control Engaged
0 of 40 engaged
Problem
Everyone at 8 AM
One send time for a list in every time zone
Insight
They didn’t know it existed, or worked
Discoverability, then trust
Solution
Inline entry, honest lift, real controls
Tested, then shipped to 100%
Result
+6% KAV lift
27% adoption in 2 weeks
Discovery

One send time for a whole list. Would customers trust a smarter one?

Marketers picked one send time for every subscriber, whatever their time zone or habits.

We were sending everything at a hard eight a.m. … like what time is that in the U.K.?

Marketing lead, DTC brand · Customer call

I put early scheduling designs in front of customers. The answer was a maybe, for two reasons.

Early concept: an Optimal sending hours beta toggle at the top of the schedule or send campaign drawer12
Early concept, April 2025. A beta toggle at the top of the scheduler.
1
I didn’t know this existed.Discoverability. A toggle inside the scheduling drawer is easy to scroll past.Led to the banner experiment
2
I don’t know if it works.Trust. Nothing showed whether the new timing actually helped.Led to the lift analytics
Experiment

Is a banner the right pattern?

We ran an experiment: a prominent banner above the scheduler, or an option inline in the send-time dropdown. I bet on the banner.

A · Banner
Schedule
Email #1
×
Scheduling options *
Fixed send time
Date *
Jul 1, 2025
Time
11:30 AM
Send date *
Jul 1, 2025
Sending window
11:00 AM
–
8:00 PM
Recipients will be determined at start of sendingYour campaign will only send to contacts who are eligible at the start of sending.
Schedule message
B · Inline dropdown, the winner
Schedule
Email #1
×
Scheduling options *
Enable personalized send timeBoost engagement by sending at each recipient’s best time. Choose a window and we schedule each message from their past behavior.
Date *
Jul 1, 2025
Time
11:30 AM
Send date *
Jul 1, 2025
Sending window
11:00 AM
–
8:00 PM
Recipients will be determined at start of sendingYour campaign will only send to contacts who are eligible at the start of sending.
Schedule message

The dropdown won because it lived where the decision already happens. No surprise element, just a better answer to a question the marketer was already answering.

Design

Show the lift, and what it’s measured against.

Once people found it, the next question was whether it worked. The lift was real, but measured against a holdout nobody could see, so it read as an assertion.

I don’t need to know that. I don’t need you to tell me again the personalized send time works and break up all my data.

Marketing lead, DTC brand · Same call
Aggregate. Every metric carries its personalized and control rate underneath, which is the rule the research produced.
+0.0%
Placed order lift
Personalized rate: 0.09%
Control rate: 0.08%
+0.0%
Click rate lift
Personalized rate: 0.74%
Control rate: 0.77%
+0.0%
Open rate lift
Personalized rate: 17.1%
Control rate: 16.9%
The shipped distribution chart. When recipients actually received the campaign, against the held-back group.
Engagement over time Personalized send time
Review impact
Engagement over timeHourly send time distribution
This campaign was sent between 12:00 AM – 12:00 AM in recipient local time zone
Iterate

Customers wanted more control over the baseline.

Trust brought a new ask: let me choose what it’s compared against. I added controls for the baseline and expanded the analytics to every campaign.

The account default. One place to set the baseline every campaign is measured against.
Settings
AccountBillingEmailText messagePush notificationsAttributionDataMonitorsWhatsApp
PersonalOrganizationUsersMessagingTranslationAPI keysActivity logSecurityPersonalization
Send time optimization settings
Manage how Personalized Send Time measures performance and learns across all campaigns. Changes made here apply to all future campaigns and may impact how results appear in analytics.
Set default control send time
The control group send time is the baseline used to send a portion of messages to learn from engagement and compare personalized send time performance.
Default control send time saved
And the campaign override. Required rather than optional when the chosen control falls outside the campaign window, a forcing function that came out of an engineering edge case review.
+End
Schedule or send campaign×
Type
Personalized send time
Send date
Pick a future date
Sending window
11:00 AM
–
8:00 PM
Customize control timingSend messages when each recipient is most likely to engage. A control group receives messages at a set time to measure performance, and that control time can be updated to match your preferred baseline.Learn more ↗
Change settings for all campaigns →
Schedule campaignCancel
Reporting the baseline.
Personalized send time performance results
Compare performance between recipients who received this campaign at their predicted optimal time and those who received it at a fixed time.
Comparison baseline time
Personalized send time optimized between 12:00 AM and 7:00 AM in their local time zone, sent to 2.4K recipients.
Control sent at each recipient’s historical send time, to 622 recipients.
+8.0%
Click rate lift
Personalized rate: 2.60%
Control rate: 2.41%
+1.1%
Open rate lift
Personalized rate: 17.1%
Control rate: 16.9%
+4.8%
Placed order lift
Personalized rate: 0.09%
Control rate: 0.08%
Hourly send time distribution
Personalized send time Control group: historical send time
Aggregate across campaigns
Performance across 12 campaigns using historical send time as control
Impact

1.8 billion messages, and an honest limit.

1.8B+Messages sent across email, SMS, push and WhatsApp
+2.97%Email click-rate lift
85Beta companies, then a waitlist
4 moFrom beta to GA
Where it doesn’t work

Under 50K emailable profiles, results are a coin flip.

Order rates don’t improve at any account size.

So the analytics only claim what the data supports.

← Back to projects
15% → 34% of companies in six months

Audience Optimization

A model scores every recipient at send time and drops the riskiest. The effect is real but tiny, so my job was making it legible.

Spring launchAll subscribersOptimized52,400 recipients47,960 recipients · −4,440 at risk, +1,120 likely buyersMRMaya R.maya@mail.comIncludedBLBen L.ben.l@mail.comIncludedRemovedPSPriya S.priya@mail.comIncludedAKAna K.ana.k@mail.comIncludedRemovedJTJordan T.jt@mail.comIncluded+ 52,395 moreDKDiego K.diego@mail.comAddedLWLena W.lena.w@mail.comAdded
Problem
A model quietly drops recipients
Real effect, but tiny
Insight
Legibility beats persuasion
Show the comparison, not the conclusion
Solution
Report against a held-back group
Before and after the send
Result
15% → 34% of companies
In six months
Discovery

The effect is real. It's also tiny.

123K
Recipients on a typical campaign
median, 500K+ profile accounts
407
Removed by the model
0.4% of the audience
~129
Unsubscribes if you send to everyone
0.13% of recipients
~52
Prevented per month
median at this tier

Unsubscribes are rare: one to three in a thousand recipients. Even with perfect prediction, the pool the model can act on is a few people per send.

Not “communicate a big win.” It was: make a small, noisy, genuinely real effect legible enough to be trusted and kept. Everything good here follows from accepting that early.

Define

The shipped metric was the least stable one.

The feature prevents a fraction of one unsubscribe per campaign. The dashboard reported the result for each individual send. Drag the account size below and watch what the product actually showed people.

Live Account size 5,000 profiles
Per-campaign unsubscribe change, the metric we shipped
−100%
1 unsub in the control group
With ~400 control recipients and about one unsubscribe, treatment getting zero reads as a 100% reduction, and getting one reads as 0%. The number is noise wearing a result's clothes.
Spread across this account's campaigns−100% to +100%

The reporting surface wasn't just under-informative. It was teaching the wrong lesson to the people with the least patience for it. That reframed the whole project from explaining a model to choosing a unit of analysis.

I wouldn’t use any kind of audience optimization without thoroughly testing incrementality on performance. For me, I don’t really trust AI until I know it’s been proven.

Senior director of retention · Mid-market apparel brand · research session
Design

Both rates. Every funnel stage. A designed “we don't know.”

Before the send. What the model will remove, stated next to every other pre-send fact.
Email 1
×
MessageSettings Review
RecipientsCompleted
Edit
48,219 estimated recipients
This will send to 3 segments.
Smart sending
Smart sending is enabled for this campaign. Profiles that received an email from any campaign in the past 16 hours will be skipped.
Audience optimization
Audience optimization is enabled for this campaign. 281 profiles likely to unsubscribe will be excluded at send time.
Tracking1 warning
Edit
ScheduleSave
After the send. What was removed, and the impact across every optimized campaign.
Audience optimization
179
View impact across all 12 sent email campaigns
Audience optimization
3,942
View impact across all 143 sent email campaigns
Date range
Last 90 days
−2.0%
Unsubscribe rate change
Personalized rate: 0.210%
Control rate: 0.214%
+0.28%
Open rate lift
Personalized rate: 41.3%
Control rate: 41.2%
+0.34%
Placed order rate lift
Personalized rate: 0.041%
Control rate: 0.041%
Open and placed order rate are not performing significantly differently from the control on current data. Results should not be relied on yet.
Data since Mar 12, when the model was updated to improve accuracy.
Impact

From near zero to a third of campaigns.

April
22.9%
June
31.2%
August
34.3%
September
34.4%
3,340
Companies using it
from ~15% in March
122.9M
Recipients evaluated in one month
email alone
1–3%
Relative unsubscribe reduction
accounts above 10K profiles
4
Channels, from one in April
I shipped the data hook behind the account-level card
Next

Removing is safe. Adding is not.

The next milestone inverts the feature: instead of removing recipients, it adds them. Removing the riskiest one percent is safe on any audience. Additions are large, they're the brand's most valuable profiles, and they only mean anything relative to the campaign they land in. Drag the campaign size to see why.

Live Campaign audience 5,000, a VIP segment
Original audience5,000
Profiles the model would add+10,000
Triples the send. The same 10,000 profiles are a rounding error on a newsletter and a different campaign entirely on a VIP segment.

People don't experience an addition as a decision. They experience it as a segment. One participant wanted the added profiles given their own name so she could see how they performed after the send, which turns this from an explanation problem into an audience-composition problem.

← Back to projects
Case study · Klaviyo · UX lead

Channel Affinity

A model predicts which channel each customer will actually engage with: email, SMS, push or WhatsApp. I led the UX for profile attributes, segmentation and flows.

Same email to everyone
Spring launch · Email
Reading past engagement
Problem
Marketers guess the channel
Email, SMS, push or WhatsApp, per person
Insight
A prediction has to earn routing
Money moves on it, so rank needs a tier
Solution
Rank plus tier, as profile attributes
Usable in segments, flows and the profile
Result
+5 to 10% engagement
In concierge tests, shipped June 2025
Background

Channel selection was guesswork.

About 10% of Klaviyo customers send on more than one channel a month, with no signal for where each person will engage. SMS costs money per message, so without data, picking a channel is guesswork.

What it looks like today. One campaign, every channel, the same minute.
The campaign
All subscribersEveryone on every list
EmailJul 1 at 10:00 AM
Text messageJul 1 at 10:00 AM
Paid per send
Push notificationJul 1 at 10:00 AM
What Dana gets
10:00
Mail10:00Terraza · Summer sale starts now
Messages10:00Terraza: Summer sale starts now
Terraza10:00Summer sale starts now
Same message, three times
Duplicate fatigue

The same message on every channel at once reads as spam.

People don’t want to receive the same message through both channels at the same time.
Wasted SMS spend

Every text costs money, even to people who never answer.

We want to send SMS to people who really need it.
Channel silos

Unsubscribe from email and stay on SMS, and nothing adapts.

We’re operating within a silo, blind to those unsubscribes.
Manual workarounds

The savviest built their own preferred-channel property from flow logic. It does not scale.

Research

Eleven customers, a lot of confusion.

I ran eleven 1:1 interviews, SMB through mid-market, to test whether people understood the model and could apply it. Four things came back.

Preferred channelSMS
Did the customer pick this?
They didn’t know it was a predictionPeople read it as something they, or their customer, had set.
Preference→Predicted engagement
“Preference” was the problemThe word implied a manual field, not a model output.
EngagementSMS first
Why SMS?
They wanted the reasoningNobody would route paid SMS spend on a label without seeing why.
Top engaged?Rank 1?
Rank labels didn’t land“Top engaged” and “rank 1” meant different things to different people.
How it works, from signal to send.
Key insight

A rank on its own is misleading. Someone whose top-ranked channel still has low predicted engagement looks identical to a genuinely reachable customer, and a simple “preferred channel” label would send you after both. Rank gives you the direction. It does not tell you whether the signal is worth anything.

The design decision that came out of it. Switch the label and watch the same profile change meaning.
Live interaction
Profile · Dana R.

Same model output, two labels. The first one tells you to send Dana an email. The second tells you Dana barely engages anywhere, so the right move is to leave her out of the expensive send entirely. Two properties instead of one is the whole design.

Craft

Two properties. Three surfaces. One data model.

Marketing
Home
Campaigns
Flows
Audience
Content
Analytics
Support
← All profiles
Dana Reyes
DetailsMetrics and insightsLists and segments
Predictive analyticsPowered by Klaviyo AI
$500 Customer lifetime value (CLV)
Expected date of next orderJan 19, 2025
Next best productEssential Popover Hoodie
Channel affinityTailor communication based on predicted engagement of available channels.
Available channelsEngagement preference
EmailFirst
SMSSecond
PushThird
Learn about predicted channel affinity ↗
Activity log
Opened emailMay 16 at 11:11 amJuly upcoming sale
Received emailMay 16 at 11:11 amJuly upcoming sale
Received SMSMay 16 at 11:11 amBack in stock
Placed order for $206.45May 16 at 11:11 amBurgundy Fingerless Gloves
Marketing
Home
Campaigns
Flows
Audience
Content
Analytics
Support
Segment builder
Segments track people who meet certain conditions.
Predictive analytics about someone
Predicted channel affinitysuggestsEngagement preferenceforSMSSMSEmailPushWhatsAppisFirst FirstFirst preferred channelSecondSecond preferred channelThirdThird preferred channel
+ Add condition
Estimated size 48,210 profiles
Marketing
Home
Campaigns
Flows
Audience
Content
Analytics
Support
TriggerPrice drops by 10%+
Conditional splitSMS preference is First
Yes
SMSPrice drop alert
No
EmailPrice drop alert
Conditional split details
People who meet the condition take the Yes path.
Predictive analytics about someonePredicted channel affinityEngagement preference
forSMSSMSEmailPushWhatsApp
isFirstFirstFirst preferred channelSecondSecond preferred channelThirdThird preferred channel
CancelSave

Two ordinary profile properties, which is why they work in surfaces people already knew. Nothing here is a new object type or a new builder.

Impact

It routes well. It does not beat everything.

+5–10%Engagement lift in concierge tests
+7.8%Email engagement, where the model picked email
+42%SMS engagement, where the model picked SMS
Jun 2025Shipped, limited availability
The honest read

It wins inside the channel it picks, but email-only still had the highest overall engagement.

So “route everyone to their best channel” isn’t proven yet. That shaped what came next.

Where I argued it should go. Marketers write the message once. Affinity picks the channel for each person.
Black Friday early accessReplay
AudienceThursday, Nov 27Friday, Nov 28
VIPs
123 profiles
Your message
Suggest a channel for each personReading engagement for 123 profiles
Channel affinity splitEach person gets their best channel
1Prefers email first58
Email
2Prefers texts first41
Text message
3Prefers push first24
Push notification
Sale kickoff
Nov 28 at 10:00 AM
← Back to projects
Case study · Klaviyo · Sole designerIn progress

Discount Decisioning

A model that tells you who has historically needed an offer to buy. It is pre-launch, so the work is not public yet.

In progress

This one is still in design toward a limited beta, so I have taken the detail down for now. Happy to walk through it live: the uncertainty states, the claim discipline in the copy, and the research behind asking someone to withhold a discount.

Ask me about it

← Back to projects
Case study · Athenic AI · Founding designer

Data XRay

Athenic lets business teams analyze data in plain English, with no SQL and no data team. The AI worked. People signed up, got confused, and left before they ever saw it work. I led the end-to-end design to make the promise feel real.

Data XRay3 sources connectedHow are my sales vs last year?Searching 2 spreadsheetsorders_2024.xlsxorders_2025.xlsxSales are up 18% vs last year.Monthly revenue20252024+18%JanFebMarAprMayJun
Problem
People left before the AI worked
Signed up, got confused, never saw a result
Insight
Activation is the product
The promise has to be felt in the first minute
Solution
Ask a question, get a chart
Plain English in, no SQL, no data team
Result
+18% activation
BMW acquired as a customer
Background

Powerful AI. Nobody could use it.

Users signed up, got confused, and left before experiencing any value. Not because the AI failed, but because the experience around it got in the way.

Where it broke down. The customer workflow, mapped from interviews with myKaarma, PMC Studio, BMW and Additel.
Setup, done onceThe daily loop, where people gave up
1Select data type
2Connect data source
3Prep data
4Create project
5Ask questions
6Create graph
7Add to dashboard
Unclear question askingPeople did not know how to phrase a question the AI could answer.
No continuityEvery session started over. No history, no follow-ups.
Fragmented flowsDashboard and search were separate products.
Hidden product value runs through all of it: you could not see enough of the product to know what was possible.
Design thinking

Fewer features. More clarity.

Rather than adding analytical power, I worked on instructional design, discoverability and conversational continuity. I ran a whiteboard session with engineering to map what the system could actually do, and to decide what to build first.

Mapping capabilities with engineering.
Whiteboard session mapping product capabilities with engineering
Defining the criteria each direction had to satisfy.
Criteria definition for the product directions

Over twelve rounds of user testing I worked through four product directions before converging.

Version one, a search bar for asking questions
V1 · Search bar. Ask a question, get a table or a graph.
Version two, a conversational chat interface
V2 · Chat. Search becomes a conversation.
Version three, merged navigation using tabs
V3 · Tabs. Less clutter through merged navigation.
Version four, the chosen workbook merging search and dashboard
V4 · Workbook, chosen. Search and dashboard become one space.
The iteration studies behind them.
Iteration studies across the four product directions
Key insight

People did not need more analytical power. They needed clarity, guidance and continuity. The constraint was never the AI. It was the experience around it.

Final design

Ask. See. Remember.

Chat, charts and saved insights in one workbook. Ask a question, see the answer visualized, and build on it without losing your place.

One workbook. Questions and charts in the same place, with no switching between search and dashboard.
Transparent wait time. The part I am most pleased with.

The backend takes a while, so instead of a spinner the interface narrates the work: it pulls the tables first, then draws the graphs, and shows where the data came from. The wait became the moment that built trust rather than the moment people left.

Question history. Continuity within a session and across past ones.

Insights build on each other instead of starting over every time, which is what turned a demo into something people came back to.

Impact

Easier to start, so more people stayed.

+18%Product activation
15Installs in the first week after launch
BMWSigned as an enterprise customer
Reflection

Powerful AI is only worth something when people understand and trust it. Reframing analytics as a conversation let non-technical teams work with their own data, without an analyst in the room.

← Back to projects
Carnegie Mellon · Integrated Product Development · 6 weeks

LMS Canvas

Students juggle a dozen tabs to finish one assignment. I led research and design on a single workspace that keeps every source in view.

Problem
One assignment, a dozen tabs
Constant refocusing, missed deadlines
Insight
Submitting is the daily pain
Small, repeated, and stressful
Solution
One workspace, every source in view
Multi-view, customizable, calm
Outcome
A tested concept and rollout plan
Validated with students in co-design
Discovery

Most universities use Canvas. Students still struggle with it.

34% of US universities run on Canvas, 43% of its users call submitting assignments their top frustration, and 800+ learning platforms are competing for the same students.

Canvas wins on reach, not experience. Next to Blackboard and Google Classroom, it gives students the least motivation, organization and guidance.
No opportunity coveredPartlyStrong
CanvasBlackboardClassroom
AdventureNoneRewards and badgesBadge system
SensualityNoneNoneKeep, Drive and Calendar built in
ConfidenceEmail confirmations, plagiarism checksEmail confirmations, plagiarism checksNone
PowerNoneConsistent across coursesFlexible collaboration
Visual and perceptionNoneMostly consistent, light color systemVery consistent, focused feature set
EnablingNoneOne side tab bar for navigationLinks embed in the submission

Where is the frustration coming from?

I spend more time finding, formatting and checking my assignments than actually doing them. Half the time I miss a deadline I didn’t even know existed.

Katie · MBA student · full course load
Insight 1
Students want less time in Canvas, not more.
Graduation is the goal. The hours they spend finding and submitting work are hours not spent on the work itself.
Insight 2
Submitting is the daily task, and it sets the mood for the whole product.
The smallest action, repeated every day, is where stress builds and where perception of Canvas is formed.
Insight 3
Group work has no home.
Teams leave Canvas to share files, schedule and talk, then come back only to submit.
Insight 4
Every course is a new learning curve.
Each professor organizes modules and links their own way, so students hunt across tabs inside and outside Canvas.
Define

How do students use an LMS today?

We ran a co-design session to watch students finish a real assignment, end to end.

Five students worked through a real assignment on the devices they actually use.

Laptop · phone · touchscreen

What one student had open to finish one assignment10 tabs
CanvasRubricNotesDriveSlackDocsCanvasYouTubeSpotifyZoom
Students working through an assignment during the co-design sessionA team member observing students on laptops during co-design
Too many tabsMost of the clutter came from tabs, not from Canvas itself.
Reopening the same onesStudents kept reopening the rubric and notes.
Constant switchingEvery switch meant refocusing on a different source.
Music on the sideMany kept YouTube or Spotify open while they worked.

Jobs to be done: the most valuable ones were also the hardest.

We broke submission into jobs to be done and plotted every one by value and effort. The design target is the lower right: jobs students value most that still take the most effort.

Low effortHigh effortLow valueHigh valueCharge laptopAdd additional material fordiscussion-based submissionsEnsure correct filetype and sizeLocate assignmentfrom calendarSubmit documentsViewrequirementsView pendingassignmentsView due datesfor assignmentsVerify submissionstatusMonitorsubmission timeReview requirementsand grading rubricFind physical location tocomplete assignmentAssign submitter forgroup assignmentsFormatting thesubmissionFormat theassignmentCommunicatewith facultyand TAMake changes toassignment if neededEstimate time neededfor assignmentCross-check submissionwith assignmentrequirementsResubmit if neededDecide theassignment priorityLocate team forgroup assignmentsLocate assignmentwithin subjectRequest feedback/extension ifneededRecap classmaterialDo theassignmentDesign target

The task, summarized.

Eight stages to submit one assignment, and most of them happen outside the assignment page.

Define
  • Pending assignments
  • Due date
  • Estimate time
  • Prioritize
Locate
  • Assignment
  • Details
  • Team
Prepare
  • View requirements
  • Review notes
  • Prepare equipment
  • Find a place to work
Confirm
  • Review requirements
  • Internalize the rubric
  • Realign with instructor and TAs
Execute
  • Do the assignment
  • Format
  • Assign a submitter
Monitor
  • Requirements
  • Verify format
  • Due date and time
Modify
  • Edit if needed
  • Request extension or feedback
  • Format submission
Conclude
  • Submit
  • Verify submission
  • Resubmit if needed
  • Add materials
Opportunity

21 opportunities, narrowed to one question.

21
Opportunity gaps
4
Themes
Surface pending workMake flows intuitiveSupport collaborationPrioritize information
1
The question
How might we prioritize actionable information in Canvas so assignments feel intuitive and efficient, and group work has a home?
Explore

From sketches to a tested direction.

We ran Crazy 8s, narrowed the sketches to three concepts, and let students’ sticky notes decide what stayed.

1Ideation: eight ideas each, in eight minutes
Crazy 8s sketches: dashboards, planners, timers, chat, gamification and a multi-tab workspace
Three traits every strong idea shared
FunEfficientPersonal
Five patterns across the sketches
GamificationPersonalizationInteractionTime trackingEasier onboarding
2The concepts
Workspace 1
Workspace 2
Workspace 3
+ Add up to 4
Create workspace
Assignment
Slides
Rubric
Reading
Concept 1Carried forward
Multi-Workspace
Every assignment source in one customizable window: the prompt, slides, rubric and readings.
Risk: content might not render well inside the panes.
To do
Concept posters2 hr
Sandals reading1 hr
Finance reading3 hr
Calendar
Concept 2Kept the personalization
Dashboard Reimagined
A to-do list and calendar that let students estimate, prioritize and plan their week.
Risk: more information could feel like more clutter.
15 day streakFinish assignments on time to keep it going
M
T
W
T
F
S
S
Concept 3Cut
Mascot and Gamification
Tido, a mascot with streaks, daily goals and a help chat to make Canvas feel less stressful.
Risk: extra steps for students who are already efficient.
3Testing: what students told us
Concept testing: students leaving sticky-note feedback on three printed concepts
KeepPersonalization: color coding, and filtering to their own files
KeepA customizable dashboard, as long as it never gets cluttered
CutGamification. A want, not a need
CutA mascot. Charming until you’re stressed at 11 PM
4What the final design had to be
Multi-viewAdaptableCustomizableIntuitive
Final design

Create a workspace, then never leave it.

From any assignment, students pull the prompt, rubric, lecture and notes into one view, and pick up right where they left off.

canvas.cmu.edu / 49740-A / Assignments
49740-A › Assignments › Concept posters

Concept posters

Due Sun 11:59 PM · 100 pts · File upload
Create workspaceStart assignment
OverviewInstructions
New workspace
Pick what you need for this assignment
CancelCreate workspace
AssignmentSubmit
Lecture 7
Rubric
My notes
1 · Open an assignment2 · Pick what you need3 · Work in one view
Envision

Next: a workspace that isn’t limited to one screen.

Looking further out, the same workspace moves off the laptop. With AR glasses, the assignment, lecture and notes float around the student, so every source stays in view without fighting for space.

Future vision: a student wearing AR glasses with the Canvas assignment and a lecture video floating beside the laptop
← Back to projects
Case study · Builders Patch · Lead designer

SiteMatch

Affordable housing developers spend months evaluating sites by hand, without data. SiteMatch surfaces the best ones by estimated funding score, so developers can find a site and secure the money faster.

MANHATTANBROOKLYNQUEENSBRONXNEW JERSEYSite 14 · Harlem92Est. fundingscore
Problem
Site selection takes months by hand
Developers evaluate without the data
Insight
Funding score is the real question
Not the site, but whether it wins the money
Solution
Rank sites by estimated score
With the inputs behind the number
Result
Under 12 months
Pre-development cut from years
Background

A process built on guesswork and regulation.

Affordable housing developers win tax credits through the Qualified Allocation Plan, a government score where higher means a better chance. Criteria differ across fifty states, policies keep shifting, and data is scarce, so scoring accurately at speed is nearly impossible.

Research finding on scarce funding
Funding.
Research finding on high demand and low return
Demand.
Research finding on government dependency
Regulation.
Scarce funding
Construction costs rise while profits stay capped by rent limits. Every point of score matters.
High demand, low return
The housing is urgently needed, and the process is longer and more complex than market-rate work.
Government dependency
Region-specific policy shifts constantly, and developers have to stay current across several states at once.
No reliable tool
Site evaluation was manual, from scattered sources and outdated information.
Research

Ten expert interviews. One clear opportunity.

We interviewed developers, architects and consultants working in affordable housing on the East Coast to find where the real friction was. The answer was site selection. There was no reliable way to identify and evaluate sites against the funding criteria, so people did it by hand.

What the score is made of. The five criteria developers optimize against.
Breakdown of the five QAP selection criteria
Where we could actually intervene. Value opportunity analysis across the process.
Value opportunity matrix across the development process
Value added task analysis
The seven values developers prioritize.
Defining the criteria developers prioritize
Design thinking

Three concepts. One winner.

After a build-a-thon with Crazy 8 ideation and physical wireframing, we converged on three concepts, each attacking the problem from a different angle.

Brainstorming and concept generation session output
Chosen
SiteMatch. Surfaces the best sites by estimated score. It solves the site selection problem directly.
Not chosen
SiteGPT. Conversational guidance for developers. Broader, and much harder to scope to an MVP.
Not chosen
SiteScope. A browser extension to save and analyze sites. Too passive; it never surfaces an opportunity on its own.
How we decided
Co-design workshops with developers, architects and multi-housing experts, then affinity mapping.
Co-design and affinity mapping.
Co-design workshop and affinity mapping with developers and architects
Final design

Find the right site. Score it. Win the funding.

One place for reliable, integrated, current site information, organized around the decision developers actually make: which site gives them the best shot at funding.

SiteMatch product demoSearch, score and compare sites, end to end Watch on YouTube ↗
Storyboard.
Storyboard of the SiteMatch experience
User flow.
Search and filter
Filter sites by location, preferences and market demand to find the real opportunities.
Score calculator
Estimates the funding score per site, so you can see which ones have the best odds before committing.
Comparison
Several sites side by side, ranked by score, so the decision is quick and defensible.
Live data
Scraping and parsing keep the information current. No more stale spreadsheets.
Impact

Value delivered.

SiteMatch cuts pre-development time to under twelve months, centralizes site data that was scattered across sources, and gives developers a clear path to maximizing their score and their chance of winning funding.

Lessons learned

Experience level shapes everything. New developers want simplicity; experienced ones want their existing workflow respected, and those are different products.

Show deliverables to users as early as you can. In complex B2B the knowledge gaps are wide and the data gets messy fast, so you pivot, prototype, co-design and workshop continuously rather than designing then validating.

← Back to projects
Case study · Klaviyo · One of four designersIn progress

The Personalization System

Marketers wanted simplicity and optimization. We gave it to them in six different forms, built years apart. I wrote the patterns that made them feel like one thing.

CampaignsFlowsSegmentsA/B testsCreateStatusChannelSend timeTagsDate rangeNAMESTATUSSEND TIMECHANNELAUDIENCESpring launchSent9:00 AMEmail4 segmentsWelcome seriesLiveTriggerEmail + SMSNew subsAbandoned cartLive+2 hrsEmail + SMSCart > $50VIP early accessScheduled10:30 AMSMSVIP, 2 excl.Back in stockDraft11:00 AMEmail3 segmentsWinback 90dLive+90 daysEmailLapsedWeekend flashDraft6:00 PMEmail + SMS5 segmentsPersonalizationSend timePer personChannelPer personAudienceOptimizedDiscountWhen neededApplied to every campaign and flow
Problem
Six models, four ways of saying so
Built years apart, none aware of the others
Insight
A badge is a signal, not a price tag
It marks that a model decided, free or paid
Solution
One vocabulary for every ML surface
States for significant, borderline, learning
Result
SKU launching December
Indicator shipped across five surfaces
Background

Marketers wanted simplicity and optimization.

They wanted fewer decisions and better results. We shipped exactly that six separate times, each built years apart and unaware of the others.

Four questions customers were already asking. Amber ones have a case study.
Who to reach
Audience Optimization RFM lifecycle segments
What to show them
Discount Decisioning 1:1 content Product recommendations
When to reach them
Personalized Send Time
Where to reach them
Channel Affinity

A marketer meeting these one at a time has no way to tell they are the same kind of decision.

Built years apart, then brought together. The bundle only, not the content generation features.
Product recs, RFM
Channel Affinity
Personalized Send Time
Audience Optimization
Discount Decisioning
202420252026
Amber rule: brought together as one product

Dots mark the ships I worked on. Discount is still pre-launch. Nothing here was designed with the others in mind.

Packaging and rebranding

The layer got one name. Every feature under it kept its own. Survey data showed customers didn't connect audience optimization to personalization at all, so the rebrand could not stop at the pricing page. It had to happen in the product, on every surface where a model already made a decision.

The audit: every place a model touched a send. Toggle the fix, or open a case study.
Live
Content
Product recs
The purple sparkle is the content generation mark from the composer, borrowed here for a predictive feature. A toggle with no indicator at all. A status badge using a different word. And a fourth treatment for the free feature.
The rebrand, surface by surface. Four names, four icons, four ideas of what to call a model.
SurfaceCalledMarked withAfter
Send timePersonalized send timeComposer sparklePersonalized
AudienceAudience optimizationNothingPersonalized
ContentAdvanced personalizationSparkle in a status badgePersonalized
Product recsVaries by surfaceVariesPersonalized
Channel affinityChannel affinityNothing, and freePersonalized
Smart sendingSmart sendingNothing, and freePersonalized

The sparkle was the worst offender. In the composer it means generate this for me, the mark for content generation and the AI assistant. Reused on send time, it told people a model had written something when a model had only chosen a time. Generation and prediction need different marks.

The decision I'd most defend

The same indicator goes on free features as on paid ones. Customers couldn't tell a model was involved at all, so the badge says a model decided this, not you paid for this. Put it only on paid features and it becomes a price tag. Entitlement belongs in gating.

Research

The blocker is explainability, not accuracy.

Sixteen power users, five sessions. Trust splits along data-driven versus generative. All sixteen accepted send time, predictive metrics and audience optimization. All sixteen refused to let AI write customer-facing copy unreviewed.

I have it running on two different flows. On one, the personalization is crushing it. On the other, it’s sucking wind, and I’ve got literally no why.

Agency strategist · Agency

Two things changed priorities. Defaults decide adoption, because the controls sit below the scroll line. And the dashboard is glance-once, so the real ask was an alert when something underdelivers.

Patterns

The pattern library is the real contribution.

A model is confident, borderline, inconclusive, or still learning. Design systems have no pattern for that. I wrote three.

Four significance states. Drag the sample size and watch the treatment move through all four.
Live Recipients in the test 12,000
Inconclusive
No data yet
Too few recipients to tell either way.
Not significant
+0.4%
This variant isn't performing significantly differently from the control.
Borderline
+3.1%
Close to significance. We recommend monitoring performance.
Significant
+8.2%
Results are statistically significant. This variant is outperforming the control.

The type ramp does the work, so a scanner knows how much attention a number deserves before reading a word.

Three states, one card. Step through what the model says about itself.
Live
8 of 20 sent
Audience optimization is learning your audience
Send 12 more campaigns to reach a reliable sample size.
Learning
8 of 20 campaigns sent40%
Determinate
A counting bar, not a spinner.
Plain language
Say reliable sample size, not statistically significant.
Actionable copy
Say what to do next, not just a percentage.
Green means on track
Not waiting, not broken. A week-one empty card reads as failure.
Metric anatomy. Try hiding the rates. This is the framing my own research disproved.
Live
Control rate
57%
held-back group
Personalized rate
61%
optimized group
Lift
+8%
relative difference
Key insight

Lift-only was the least trusted thing I tested. One participant called it “almost on instinct a little bit scammy.” Five of six trusted the full comparison, which disproved my own hypothesis. Verifiability comes before trust.

Craft

Then consistency created its own bug.

Turn both features on below.

Live interaction
Campaign card footer, before the fix
After the fix

Two identical bolts, caused by finally making everything consistent. Fixed in code: one badge, one tooltip, one assembled screen-reader string.

Two lessons

Consistency is not a one-pass job. Sharing a pattern creates collisions that exist only because it is shared.

Engineering wanted a new personalized status variant. Design systems said no: personalized is an attribute, not a status. They were right.

Closing

Why these six belong together.

It was never six features. It was one question asked six times: when a model decides something a person is accountable for, what does the interface owe that person?

Show the comparison, not the conclusion. Give uncertainty a designed state. Remember the person’s control. Claim only what the data supports.