From Data
to Decision

From Data
to Decision

Healthcare marketers using Freshpaint’s Attribution feature had all the data they needed and no clear next step. Recommendation Cards was built to close that gap, surfacing a specific, ranked action every week instead of a table to interpret. Here’s how it was designed, and what happened after it shipped.

PRD Analysis

PRD Analysis

AI-Assisted Synthesis

AI-Assisted Synthesis

Rapid Prototyping

Rapid Prototyping

Data-Informed Design

Data-Informed Design

Cross-Functional Collaboration

Cross-Functional Collaboration

User Research

User Research

Design Systems

Design Systems

Context

Recommendation Cards is a feature I designed at Freshpaint, living inside Attribution, the tool healthcare marketers use to see how their ad spend is performing across channels and where attribution credit is landing. Each card makes a specific claim, backs it with a number, and closes with a single recommended action. It also carries a category badge: Channel Performance, Funnel & Journey, Budget, and others, so a marketer can tell at a glance what kind of signal they're looking at.

1

1

Category

Tags the signal type at a glance, before the marketer reads a word.

2

2

Claim

States a concrete finding plainly instead of leaving the marketer to interpret raw data.

3

3

Attribution model

Discloses which model produced the recommendation, since different models can disagree.

4

4

Recommended action

States a clear, actionable recommendation for the user to take.

5

5

Feedback mechanism

Lets the marketer flag whether the recommendation was useful, giving the team a signal to tune future cards against.

The origin

The origin

The origin

Before I worked at Freshpaint, I designed Recommendation Cards, sort of by accident. The final stage of my interview process included a take-home design exercise: no mention of Recommendation Cards, no feature spec. Just a brief describing a healthcare marketing lead drowning in data spread across disconnected systems, unable to get a clear read on what was working without deep technical help.

The task was to design something that let that person explore their own data and act on it with confidence, however I saw fit.

The Problem

The Problem

For healthcare marketers, the problem isn't data. It's clarity, confidence, and its trust.

They have campaign metrics open in one tab, website engagement in another, appointment outcomes in their CRM, compliance logs in a separate system.
Data scattered across tools that don’t talk to each other and if they do, they don’t agree. Throw a little HIPAA– compliance anxiety into the mix and even the most confident marketer starts questioning whether they should share anything at all.

The User

The User

• Digital Marketing Manager at a mid-sized regional hospital network

  • Owns the results, not the resources

  • Confident in interpreting metrics but not in building the systems behind them

  • Lives in Google Ads, their CRM, and a few other tools that rarely see eye to eye

  • Has compliance anxiety and is suffering in silence

The Scenario

The Scenario

Data access isn’t the issue. It’s confidence. She can see the data, she just can’t trust it, synthesize it, or share it without anxiety.

It’s Monday morning. A Digital Marketing Manager is prepping for a Tuesday leadership review. She’s anticipating three questions she know her CMO is going to ask: “What did we spend last month?”, “What did it produce?”, and “Where should we focus next quarter?” She typically pulls data from four different sources but none of them ever agree on the numbers. One of them she’s not totally sure she’s supposed to be pulling patient-adjacent data from at all. She has two hours to finish.

The Vision

The Vision

We're not designing a more powerful analytics tool. We're designing a more confident user.

That means optimizing for clarity over completeness, decision-readiness over data richness, and trust over flexibility. This system will show less than it could, surface fewer options than users might expect, and make strong default choices on their behalf because for this user, in this context, more choice is not more power. It's more anxiety.

The Problem

The Problem

For healthcare marketers, the problem isn't data. It's clarity, confidence, and its trust.

They have campaign metrics open in one tab, website engagement in another, appointment outcomes in their CRM, compliance logs in a separate system.
Data scattered across tools that don’t talk to each other and if they do, they don’t agree. Throw a little HIPAA– compliance anxiety into the mix and even the most confident marketer starts questioning whether they should share anything at all.

Scenario

User

Vision

An artifact from my original design challenge submission for my interview at Freshpaint. Framing the problem and understanding the user.

I called my concept Pulse. The scenario I built centered on a marketing manager who didn't need more data, she needed more confidence in the data she already had. Pulse surfaced that confidence through a feed of insight cards that explained to her how her channels are performing and what to do about them in a way she can understand, act on, and share. The response to this concept was strong enough to become one of the deciding factors in getting me hired onto the exact team that would go on to build it for real. Months later, that same core idea would go on to become a living feature inside the Freshpaint ecosystem.

Wirefreames of the three card types from my original Freshpaint design-challenge submission, single metric, comparison, and recommendation.
Wireframes of the three card types from my original Freshpaint design-challenge submission, Single Metric, Comparison, and Recommendation.

The problem

The problem

The problem

The problem

Freshpaint customers were working across three, four, sometimes five disconnected marketing sources, and the numbers frequently didn't agree with each other. Even the sharpest customers, the ones who loved a good table or chart, still had to do real legwork to turn that data into a decision, because no platform is ever going to tell you to move budget away from itself. Other customers didn't have the time or inclination to dig through that data at all, so patterns that should have changed their spend went unnoticed for weeks.

Same campaign, same week. Three ad platforms, three different conversion counts

Both user types shared a second problem. Most customers checked in weekly, sometimes closer to biweekly. One insight, generated early in our discovery process, caught a channel with zero completed orders over 30 days, a broken conversion event nobody had noticed. On a biweekly login cadence, that gap could sit unnoticed for a full cycle. It's a month of budget spent against something that was never going to convert.

An early insight generated directly from customer data

The process

The process

The process

1

The standup

Freshpaint's feature set is divided among several color-themed teams, like Tangerine, Celeste, and Lavender. I was assigned to Team Indigo, the stewards of Attribution, and brought up to speed on their roadmap for the quarter during one of my first 9:30am standup meetings. Three projects stood at the top: Group By Campaigns, Paid & Unpaid Sources, and Insight Cards. I took a cursory glance at the PRDs from each, and one stood out. Insight Cards looked strikingly similar to what I had created for my design challenge. Along with the PRD came a rough mockup, early ideas from the PM meant to help get the ball rolling. While the resemblance was clear, this version was simpler: a single card type, rather than the three I had proposed. Either way, it appeared I already had a head start on this project. Better still, it was next in line to get built.

An early mockup based on the initial PRD, insight cards without categories or recommended actions.

2

Studying the PRD

The PRD was the north star, but that didn't mean it was set in stone. Before proposing anything, I wanted to understand where the data was coming from, what the real constraints were, and whether there was room to suggest enhancements, rather than pitch an idea that would blow up scope before we'd even started. I met with the PM and Eng team to work through it together, separating what was fixed from what had wiggle room, then pitched bringing back all three of my original card types. It was a show, don't tell pitch. The idea landed. I got the green light to explore, and while Eng sized the lift, I turned to the data to see if it could actually justify the card types I'd proposed.

3

Using data to define direction

With access to the Streamlit app our Data Eng team had built in Snowflake, I could see the raw version of every customer insight, along with the full data behind it. I ran that data through Claude against my original card types to see if the structure held up, and the signal wasn't strong enough to feel confident. Some cards fit, others were a stretch, so I started preparing a single-card-type fallback just in case. The same exercise surfaced something else: a richer category structure than the PRD's three themes accounted for, planting the idea for adding category badges for quick identification. I packaged both directions up, ready to bring them to a design review for feedback

4

The design review

I arrived at the design review with two approaches in hand. The first showed what my original card types could look like if the data held up. The second was the safer bet: a single recommendation card, with category badges to give it some shape and scannability. I laid out what the data had uncovered: The signal for distinct card types wasn't strong enough to build on with confidence, but the category structure was tangible and consistent. Data Eng had been running their own research in parallel, and their findings lined up with mine. The lift required to support genuinely different card types was more than the timeline could absorb. Different research, same conclusion. We agreed on the single card, with categories carrying the weight my original multi-type idea couldn't. With a direction locked, it was time to build something the team, and eventually customers, could actually react to.

3

Using data to define direction

With access to the Streamlit app our Data Eng team had built in Snowflake, I could see the raw version of every customer insight, along with the full data behind it. I ran that data through Claude against my original card types to see if the structure held up, and the signal wasn't strong enough to feel confident. Some cards fit, others were a stretch, so I started preparing a single-card-type fallback just in case. The same exercise surfaced something else: a richer category structure than the PRD's three themes accounted for, planting the idea for adding category badges for quick identification. I packaged both directions up, ready to bring them to a design review for feedback

Budget

Broken Signal

Efficiency Surge

Channel Win

Efficiency Gap

Portfolio Rebalance

❖ Category Badges V1 – my initial synthesis

Budget

Portfolio

Channel role

Channel performance

Attribution

Funnel & Journey

Trend

Other

❖ Category Badges V2 – after refining with the data team

My initial synthesis (V1), refined into the eight-category system (V2) after partnering with the data team

4

5

The design review
Building the prototype

I arrived at the design review with two approaches in hand. The first showed what my original card types could look like if the data held up. The second was the safer bet: a single recommendation card, with category badges to give it some shape and scannability. I laid out what the data had uncovered: The signal for distinct card types wasn't strong enough to build on with confidence, but the category structure was tangible and consistent. Data Eng had been running their own research in parallel, and their findings lined up with mine. The lift required to support genuinely different card types was more than the timeline could absorb. Different research, same conclusion. We agreed on the single card, with categories carrying the weight my original multi-type idea couldn't. With a direction locked, it was time to build something the team, and eventually customers, could actually react to.

Rather than spend more cycles tweaking pixels in internal reviews, we opted to let customer feedback guide our next move. I sent the design to Figma Make and built it into a functional prototype, including a per-card drilldown drawer, accessible by click, that surfaced the underlying data behind each recommendation. The data was already available to us, coming straight from Streamlit. I was just giving it a home, using a pattern already established in Freshpaint's design system. This wasn't just to please our more data-hungry customers. It was a way to show our work and build confidence in the recommendation. With the prototype complete, I brought it back to the team for a final look. It got the green light, and we moved straight to booking user testing sessions.

Proposed: three card types

Agreed direction: one card type

Two directions from the design review: three distinct card types (single metric, comparison, recommendation), and the single recommendation card, with categories, that we ultimately agreed on

5

Building the prototype

Rather than spend more cycles tweaking pixels in internal reviews, we opted to let customer feedback guide our next move. I sent the design to Figma Make and built it into a functional prototype, including a per-card drilldown drawer, accessible by click, that surfaced the underlying data behind each recommendation. The data was already available to us, coming straight from Streamlit. I was just giving it a home, using a pattern already established in Freshpaint's design system. This wasn't just to please our more data-hungry customers. It was a way to show our work and build confidence in the recommendation. With the prototype complete, I brought it back to the team for a final look. It got the green light, and we moved straight to booking user testing sessions.

User testing

User testing

User testing

We reached out to our customer base and identified four candidates for our first round of testing. Before each session, I preloaded the prototype with the participant's own data so the recommendations they saw weren't hypothetical, they were real.


More than once, someone stopped mid-session and asked, 'is this our actual data?' It was. Some lit up at numbers they didn't expect. Others found something they didn't love, and were glad to know it now instead of months from now.

USER TESTING CANDIDATE 1:

"WOW. I mean, this is a game changer. Honestly"

USER TESTING CANDIDATE 2:

"You have data and recommendations across [multiple] platforms. There is nowhere else where you have this type of data. Neither of the ad platforms individually is going to give me this. Meta is certainly not going to tell you to cut budget, let alone where to send it to."

Testing continued over the next two weeks. Overall, user responses validated the concept. One tester compared the drilldown flyout to Google Ads' UX, and said the supporting data gave them enough confidence to act on it. We did receive minor actionable feedback. Since the cards are filter-agnostic, it wasn't clear which attribution model the recommendation was built on. Another tester wanted their defined conversion events surfaced in the drilldown drawer, to confirm which one was behind each CPA metric. Beyond that, the original design held up as-is.


A couple of requests didn't make the cut. Some wanted a CTA in the flyout to act on the recommendation directly. It was appealing in theory, but out of scope and hard to get right without overpromising what it could do. We also heard a request to regenerate recommendations under a different attribution model, but that wasn't feasible either, since cards take a full day to generate once data is ingested. Nothing about that could happen live.

The solution

The solution

The solution

What shipped had more value than the original concept, but was still simple by design. A singular card type with a headline with a key finding, a recommendation, and a category badge for quick scanning. Click it, and a drawer opens revealing the full picture, supporting data, and the conversion events driving it. Plus a thumbs up or down on every card, so every bit of feedback could inform how future recommendations were generated. The conversion events in that drawer weren't part of the original plan, they were a direct response to what we heard in testing.

The final card, annotated: a category badge, headline with a key finding, the recommended action, and a way to track user feedback
Clicking a card opens the drilldown drawer, giving customers the supporting data and conversion events behind each recommendation.

Several testers asked to see conversion events. The question then became how to show them well. Some customers track a single conversion event, others track over a dozen. I pulled the actual distribution from Snowflake, then built a small utility panel to stress-test my layout against the full range, from the simplest case to the messiest, so the design held up no matter how much data someone had.

A quick tool I built to stress-test the conversion-event layout against real customer data, from a single event to over a dozen, so the design held up no matter how much or how little data someone had.

The launch

The launch

Following a round or two of design QA to confirm the execution matched spec, Recommendation Cards launched on schedule, on May 28th, 2026. We showed it off at that week's company all-hands, including clips from the testing sessions. We were excited to finally get it into customers' hands and see how they'd put it to use. Coming out of the retro, we set a plan to revisit the numbers in a month, to see how it was performing across our user base.


What we launched wasn't AI for the sake of having AI in the product. It closed a real gap in our customers' tech stack, giving them a view into their data they'd never had before: an unbiased read on how their initiatives were performing, and what to do about it. Best of all, it had already been tested and validated with real customer feedback and real user data, so we knew we were built something people actually wanted.

Next steps

Next steps

Next steps

In accordance with the plan we'd set, the whole team kept an eye on the Looker dashboard over the following month. We tracked a few key metrics, starting with how many customers enabled AI, a required step before we could generate any cards for them. From there we watched engagement: card views, drawer clicks, and feedback submissions.


AI adoption was healthy. We saw it firsthand on customer calls too, watching them navigate to Attribution and land right on the cards. Engagement with the cards themselves told a different story. We'd set an early goal of at least half of all recommendations getting a thumbs up, a deliberately modest bar meant to confirm the model's output was useful before expecting anyone to act on it. We came in well under that. Card clicks were low, and thumbs up/down submissions were even lower. A couple of weeks in, we talked through the early numbers but held off on any real conclusions until the full month had passed.


Once that trend held, I started digging into why. I'd had some distance from the cards since designing them, which gave me a chance to look at the experience with fresh eyes. I ran through a few scenarios and landed on five hypotheses.

HYPOTHESIS #1

Low click rates might actually indicate cards are already doing their job.

The headline and recommendation may deliver enough value on their own, the drawer exists mainly for people who want the proof behind it. If click-through itself needed to be the success metric, the card would need to show less up front and require the click to unlock the full recommendation.

HYPOTHESIS #2

Low engagement with the thumbs up/down warrants direct user interviews, not just more data-watching.

Feedback timing may be part of it: cards regenerate weekly, so by the time a recommendation proves right or wrong, the card that prompted it is often already gone. Worth understanding when and why users actually would rate a card.

HYPOTHESIS #3

The card doesn't clearly signal it's clickable

While the card has a hover state, that alone isn't enough of a cue. A "View details" affordance on hover could make the interaction more obvious.

HYPOTHESIS #4

The moment someone forms a real opinion on a recommendation may happen inside the drawer, not on the card.

Duplicating the thumbs up/down there could catch feedback that never gets given on the compact view.

HYPOTHESIS #5

Card clicks and thumbs ratings might not be the right signal for real-world impact at all.

A better measure could be following up directly. A smart check-in system triggered by engagement, a click, a thumbs rating, any signal of interest, could prompt a follow-up a week later asking if they acted on it. It's also worth revisiting the action-button idea we passed on during testing: if we built it, clicking it could double as a signal that someone was ready to act.

Underneath most of these hypotheses is a bigger question, whether clicks and thumbs were ever the right thing to watch. Talking it through with our PM afterward, the real goal was never engagement for its own sake. It was giving people recommendations that move a metric they actually care about, something like ROAS. Clicks and feedback were a proxy for that, a way to check the model was landing before we could measure the real outcome. If the recommendations are useful enough that people just act on them without clicking through or rating them, that's not necessarily a failure. It might be the feature working the way it was supposed to.


At this point, I was fueled by genuine curiosity, eager to follow up with customers and dig into their experience with the cards. Before I could, Freshpaint was hit with a wave of layoffs, and unfortunately I was affected by it. I still think about how this one plays out, and I'd love the chance to find out.

Reflections

Reflections

Reflections

Looking back, what stands out to me isn't the cards themselves. It's how consistently I let real data settle an argument instead of my own instincts. Almost every real decision in this project, from which card types survived to how many events might show up in a drawer, got checked against something real before it shipped. And that wasn't a one-off habit for this feature. It's become how I default to working. Data over assumption, every time.


There's also something worth saying about ending a story without a bow on it. Most case studies wrap clean. This one doesn't, and I'd rather leave it that way than force a resolution I don't actually have. In my experience I've found that good product work rarely finishes the moment the person doing it walks away. Mine just ended earlier than I would have liked.