Case Study · Nexxen SSP · 2024

Metadata changes stopped breaking live ad revenue

Shared taxonomy. Live deals. Silent risk.

RoleLead Product Designer
ScopeEnd-to-end UX
Year2024
↓92%Trust
Mis-targeting incidents on live PMP deals, first quarter after launch.
~30sSpeed
Taxonomy changes propagate to bid-stream enrichment — down from manual multi-team coordination.
$847KScale
Deal revenue flagged by pre-publish dependency checks before a breaking change shipped.
Interactive PrototypeLive
01The Problem

A key-value pair is one row in a table — and one edit could reprice a quarter

KVP metadata feeds targeting, forecasting, and bid-stream enrichment across the SSP. Edits looked like harmless admin work, but they landed on live PMP deals with no warning, no propagation trail, and no way back.

01

Live PMP deals affected silently

02

Forecasting drifted

03

No propagation visibility

04

Destructive actions had no safety net

02Constraints

What was not allowed to change

Data modelExisting taxonomy structures stayed in place
UptimeLive deals could not be interrupted
Two audiencesOps governs shared metadata; AdOps ships campaigns daily
TeamPM, FE/BE engineers, data team · 2-week cycles
03Decisions

Three calls that shaped the system

Decision 01

Separate governance from targeting

The fork

One unified admin surface, or two surfaces with different mental models.

The call

Two layers: Ops thinks in system consistency, AdOps thinks in campaign delivery. One UI serving both served neither.

The cost

Two surfaces to maintain, and shared state that has to stay coherent between them.

Decision 02

Five lifecycle states instead of active / inactive

The fork

Keep the binary flag everyone knew, or model the states values actually pass through.

The call

Draft, active, deprecated, blocked, retired — risk became visible before action, not after damage.

The cost

More state logic everywhere, and a migration that had to re-educate every existing workflow.

Decision 03

Move validation upstream of production

The fork

Validate on publish (fast entry), or validate on keystroke and paste (slower entry).

The call

Format, duplicate, and conflict checks before values ever reach production. Bad data is cheapest to stop at the door.

The cost

Entry got heavier — accepted friction at input to remove incidents downstream.

The targeting layer, after the split
04What Failed First

The first version was too cinematic

Tried

A dashboard-style insight layer above the table — polished, animated, impressive in review.

Signal

“Where do I click?” — operators testing real tasks never left the rows.

Correction

Moved lifecycle, dependency, and propagation context into the rows themselves, at the point of action.

The Surface — Explore

The governance console, up close

Switch views, select a row — the same context operators work in.
KVP Governance Console
KeyStatus
Feature 01

Operational Visibility

Lifecycle statesDependency risk
Interactive
Try it
DraftSaved by an editor but not yet published. No bid requests reference it. No risk.
slot_positionPMP — Disney CTVPMP — Magnite VideoPMP — PubMatic DisplayPMP — Index EUPMP — OpenX MXForecast templates · 7Audience segments · 34BI / Reporting
Blast radius
128 deals
$847K monthly revenue
Interactive
Try it
Feature 02

Manual Entry

Format validationDuplicate check
Interactive
Try it
Add values · Page Position
Value * lowercase, _
Display Name *
Already exists in Page Position · 32 deals
Validation rules
  • Lowercase letters, numbers, and underscores only
  • Max 64 characters · must be unique within key
  • Changes propagate to bid request enrichment in ~30s
2 will be saved
Interactive
Try it
Manual entry · live validation
Feature 03

Bulk Paste

CSV importPaste mode
Interactive
Try it
CSV Import
Drop CSV file here
or browse files · max 1,000 rows · 2 columns
Expected format
value,display_name
abovefold,Above the Fold
belowfold,Below the Fold
✓ Sample CSV ready · 52 rows
Paste one value per line tab-separated for value + display
+ 4 new~ 3 dup! 1 invalidLive preview
NEWoverlay_uOverlay (Upper)
NEWsticky_bottomSticky Bottom
DUPabovefoldAbove the Fold · already exists
DUPbreakrollBreak-roll · already exists
DUPhomepageheroHomepage Hero · already exists
INVALIDpip_corner→ pip_corner · auto-normalize?
NEWinline_nativeInline Native
NEWsplashSplash Screen
4 will be saved
Interactive
Try it
Feature 04

CSV Mapping

Schema mappingData quality
Interactive
Try it
CSV header
→ Schema field
slot_key
str · 52 rows
···
value
required · snake_case
human_label
str · 52 non-null
···
display_name
required · human-readable
notes
str · 6 non-null
···
notes
optional
Awaiting upload…
Interactive
Try it
CSV → schema auto-map
Feature 05

Safe Deletion

Revenue at riskRollback safety
Interactive
Try it

Cannot delete · abovefold

This value has 18 active dependencies
Removing it will affect targeting on 12 PMP deals, 4 audience segments, and 2 forecasting templates.
$847K
Revenue at risk · 30d
PMP deals (12)$612,400
Audience extensions (4)$184,200
Forecast bookings (2)$50,800
Based on trailing 30d delivered revenue from deals targeting pos=abovefold
Active PMP Deals12
UMB-TD-FBC4-5A4F438Paramount-CTV-CBS-Sports
UMB-DV-A12C-1188901Disney-CTV-Hulu-Bundle
UMB-AM-7A3F-9023115Roku-Open-OTT-Music
Rollback safety net
7d window · expires Jun 14, 2026
Type abovefold to confirm force-delete
Interactive
Try it
Rollback window

Expires Jul 23, 2026

05Outcomes

What changed, and how we measured it

Trust↓92%

Mis-targeting incidents on live PMP deals, first quarter after launch.

Speed~30s

Taxonomy changes propagate to bid-stream enrichment — down from manual multi-team coordination.

Scale$847K

Deal revenue flagged by pre-publish dependency checks before a breaking change shipped.

Interactive
Try it
Trust
92%

Mis-targeting incidents on live PMP deals, first quarter after launch.

Speed
~30s

Taxonomy changes propagate to bid-stream enrichment — down from manual multi-team coordination.

Scale
$847K

Deal revenue flagged by pre-publish dependency checks before a breaking change shipped.

Measured through incident reports, deal-impact flags, and behavioral analytics (GA + Hotjar), compared quarter over quarter after rollout.

ObservabilityOperational trustDependency intelligencePropagation awarenessScalable taxonomy workflows
06Reflection

What I would do differently

I would bring dependency intelligence into the API layer earlier — we designed it into the UI first, and teams integrating programmatically got the safety net a quarter later than they should have.

Next was taxonomy ownership: named owners per key, review cadences, and change budgets — governance as a workflow, not just a surface.