Work
Case study 01

Unifying retail campaign management into a single, intelligent surface

How I turned three disconnected tools — and a deeply technical product group problem — into one workflow that tripled MRR, reduced support load by 80%, and compressed weeks of manual campaign work into minutes.

3.5×↑ MRR
$100K → $350K monthly recurring revenue
80%↓ tickets
50+ support tickets/week down to under 10
3 → 1
Fragmented tools unified into one workflow
Weeks→ mins
Complex strategy implementation for large accounts
Solo PM ~12 months 2 engineers, no designer Shopping Ads Performance Max Feed automation

Creating Shopping campaigns at scale is a uniquely unforgiving task

Unlike Search campaigns where the main authoring task is writing keywords, Shopping and Performance Max campaigns are built around product group trees — hierarchical structures that determine which products get shown and at what bid. One misplaced exclusion node, one incorrect "everything else" catch-all, and products outside your intent start consuming budget silently.

Our platform had the automation to help — but it was split across three separate tools: one for creating campaigns, one for keeping them in sync with merchant feed changes, and one for restructuring existing campaigns when strategy shifted.

Users had to mentally context-switch between tools to answer a single question: "Is my campaign set up correctly, and is it staying that way?" The fragmentation itself was causing errors — and driving a flood of support tickets.


Hours for simple setups. Weeks for complex strategies.

TaskManual (before)With the tool
2–3 well-structured campaignsSeveral hoursMinutes
Complex strategy, large accountDays to weeksMinutes
Feed sync after catalogue changeManual re-check across toolsAutomated, single surface
Campaign restructureStart-from-scratch rebuildIn-place from unified view

No designer. Half a design handoff. A technically complex domain.

I inherited a half-finished design with no designer to continue it, a 2-engineer team, and a product domain that requires representing tree-structured data clearly to users who are marketers — not engineers.

The product group tree is inherently dense: every node needs to show its match type, bid, status, and relationship to its siblings and parent — all while the user needs to understand the whole tree at a glance before making a change. Cognitive load was the core design problem.


One surface, reduced cognitive load, and intelligent error translation

The core strategic bet was consolidation: give users a single view of all campaigns and the ability to take any action — create, sync, restructure — from one place.

My approach: navigation as a cognitive load lever. Rather than showing everything at once, I built a mechanism that lets users progressively reveal detail. This also meant enforcing a one-campaign-at-a-time flow — which initially felt like a limitation but turned out to reduce errors significantly.

Before
  • Three separate tools for create / sync / restructure
  • Full tree visible at once — high cognitive load
  • Raw machine errors surfaced to marketers
  • No guidance on user-fixable vs support issues
  • Implicit multi-campaign context switching
After
  • Single unified campaign management surface
  • Progressive reveal — expand detail on demand
  • Errors translated to plain-language, actionable steps
  • Clear signal: fix yourself vs contact support
  • Mandatory one-campaign-at-a-time flow

3.5× revenue growth. 80% fewer support tickets. Weeks of work compressed to minutes.

MRR grew from $100K to $350K — driven by increased adoption, reduced churn, and the ability to upsell once customers could actually use the product without friction. Support ticket volume dropped from 50+ per week to under 10.

The time compression resonates most with practitioners. Campaign setups that previously took hours for straightforward accounts — and days to weeks for complex strategies — now take minutes. For agencies managing dozens of clients, that's the difference between a service that's feasible to offer and one that isn't.