A PLATFORM
REBUILT WITH
EVERY CUSTOMER
STILL ON IT

Four aging flows, one rebuild, and customers who could not be asked to wait or start over. I sequenced the work into six phases, got the team to agree on what it believed before a customer saw anything, proved the new builder against the system it replaced, and designed a migration that has since moved 50 accounts with no bugs or support tickets reported. Six threads, from the first roadmap to the last migration.

Role
Lead Product Designer
Discipline
Roadmapping, facilitation, comparative testing, flow design, migration
Context
Enterprise B2B SaaS platform
Status
Shipped: migration, builder, A/B testing, bulk tools
THREAD 01 / 06
Sequencing the rebuild
4
ScopeMajor flows brought into a single coordinated rollout plan
5+
ScopeDistinct personas the sequence had to serve, from marketers to admins
6
DecisionPhases sequenced from discovery through polish and scale
The problem

An aging platform area needed a full revamp spanning four major flows: campaign management, campaign creation, an asset manager, and asset creation. Rebuilding all four at once was a non-starter; each stage had to ship something usable and de-risk the next.

What I did

I built a six-phase roadmap: discovery and foundation, core MVP, asset manager, creation flows, analytics, then polish and scale. Explicit scope lines, a success criterion, and named decision points in every phase meant each stage was validated before the next was committed, so the team never bet more than one phase of work on an unproven direction. The stories underneath were mapped by persona, from hands-on marketers to developers and enterprise administrators, which made visible where needs pulled in different directions and kept the sequence from serving an average user who did not exist. A competitive audit of the category's major players set the bar to protect, since the existing product already beat category benchmarks on click-to-install and click-to-open, and the four modules were framed as one connected loop so the roadmap read as a direction instead of a feature list.

Each phase ships something usable and clears risk for the next, with the MVP validated by beta users before we move on. Roadmap principle, phased rollout
Demo. Campaign creation in motion, looping, no audio. Open full size ↗
STEP SYSTEM DECISION EDGE CASE END MILESTONE 01: CORE MVP MILESTONE 02: EXPANSION HIGH-LEVEL FLOWS INTERNAL DECISION LOGIC HIGH-LEVEL FLOWS INTERNAL DECISION LOGIC OVERVIEW + TEMPLATES CREATE FLOW 1.3 1.4 1.5 1.6 BETA GATE ROLE-BASED ACCESS ARCHIVE 2.2 2.3 2.5 2.6
Fig. The working flow board: both milestones mapped end to end
THREAD 02 / 06
Agreeing before the customers did
20+
ScopeAssumptions surfaced and sorted into agreed versus unverified
3
DecisionConcepts with genuine team agreement, isolated from the rest
The problem

A core flow was blocked on one architecture question: were two related concepts the same thing, and did editing a shared template change work that already existed? The disagreement sat buried in a long chat thread, nobody could ship until it was settled, and testing with customers before the team agreed on what it believed would have turned any result into noise.

What I did

I planned and facilitated a working session with the full cross-functional team. Assumption mapping surfaced more than twenty assumptions and exposed real disagreement on fundamentals; a decision-tree exercise then traced each path's consequences without forcing a premature vote. Separating the three things the team actually agreed on from everything it merely assumed turned the open questions into an evidence plan, competitor research plus a customer survey through the advisory community. Agreements, live disagreements, and next steps were documented with named owners, which unblocked the flow and left a record the team reused for the next contested call.

Strong agreement on three things, open disagreement on the rest. Better to find out before we sit down with customers. Working session, validation planning
AGREED DISPUTED EVIDENCE PLAN SURFACE THE ASSUMPTIONS TWENTY-PLUS, MAPPED IN ONE SESSION QUIET DISAGREEMENT, MADE LOUD SORT AGREEMENT VS DISPUTE OPEN QUESTIONS BECOME AN EVIDENCE PLAN GENUINELY AGREED ACTUALLY DISPUTED INCLUDING: DO SHARED TEMPLATE EDITS CHANGE EXISTING WORK? THE EVIDENCE PLAN COMPETITOR RESEARCH PLUS A CUSTOMER STUDY TESTED BEFORE ANY CUSTOMER VALIDATION RAN
Fig. Assumptions surfaced and sorted, open questions turned into an evidence plan
THREAD 03 / 06
Proving the builder against what it replaced
2×
ResultUsability rating over the legacy builder, from 7 customer raters
2
ScopeIndependent customer sessions converged on the same verdict
The problem

A new drag-and-drop creative builder was meant to replace uploading full ad creatives as flat images and hand-editing CSS to change anything. "Better" was easy to assert; I needed evidence it beat the old way for the people who'd use it.

What I did

I ran head-to-head testing on a prototype with seven customer raters, rating the new builder directly against their current system. The gap was decisive: the new builder scored in the high range, the current system sat near the bottom, and one media customer called it a thousand-percent improvement. Capturing the reasons, like swapping headlines and calls to action without rebuilding an entire creative, turned "better" from an assertion into a documented verdict, and the builder that shipped follows what they tested.

A thousand-percent improvement on the current system. Enterprise customer, media & publishing
Demo. The new builder in motion: looping, no audio. Open full size ↗
NEW BUILDER CURRENT SYSTEM SAME TASKS, TWO SYSTEMS ENTERPRISE CUSTOMERS RATED BOTH DIRECTLY CURRENT SYSTEM FLAT IMAGES, HAND-EDITED CSS NEW BUILDER DRAG AND DROP, EDIT IN PLACE SWAP A HEADLINE WITHOUT TOUCHING CODE THE VERDICT THE GAP WAS DECISIVE NEW BUILDER SCORED IN THE HIGH RANGE CURRENT SYSTEM NEAR THE BOTTOM A THOUSAND-PERCENT IMPROVEMENT ONE MEDIA CUSTOMER, ON THE RECORD
Fig. Head to head: same tasks on both systems, and a decisive verdict
THREAD 04 / 06
Experimentation that cannot lie
3
ScopeEnterprise customers validated the flow live before release
2 of 3
DecisionCustomers preferred campaign-level settings, which set the default
1–20
DecisionVariants supported, interface adapting at each count
The problem

The platform needed built-in A/B testing for marketers, and experimentation UI is unforgiving: traffic must sum correctly, the control case must be unambiguous, the interface must behave with one variant or twenty, and the people using it run tests for a living. Customers also needed a holdout, a slice that sees nothing, and with no real feature they were faking one with invisible variants, causing scroll-lock bugs, CSS conflicts, and support tickets.

What I did

I designed the flow against seventeen acceptance criteria and specced every edge case before handoff: entry states for one versus many variants, traffic that does not sum to 100 percent, the rule that the last variant cannot be deleted, and what control actually means, so engineering built without coming back with questions. The invisible-variant workaround became requirements for a dedicated holdout that renders no creative at all, keeping measurement clean. Live sessions with customers who run experiments daily confirmed the core interactions and caught one subtle issue, a setting applied at the wrong level that would have corrupted the metrics, which went to engineering as a spike before it could ship. Where customers split on whether dismissal settings belong at the campaign or variant level, it shipped as a configurable default rather than one opinion imposed on everyone.

One variable at a time: creative or settings, never both. Customer experimentation practice, validated in session
Demo. The A/B test flow in motion: looping, no audio. Open full size ↗
CONFIRMED CAUGHT + FIXED DESIGNED TO CRITERIA A FULL SET OF ACCEPTANCE CRITERIA, WRITTEN FIRST THE A/B TEST FLOW TRAFFIC LOGIC, LOCKING, AN UNAMBIGUOUS CONTROL INLINE TRAFFIC EDITING LOCK BEHAVIOR SPLIT TRAFFIC EQUALLY REVIEWED LIVE, BEFORE RELEASE WITH CUSTOMERS WHO RUN TESTS FOR A LIVING LIVE CUSTOMER REVIEW CORE INTERACTIONS CONFIRMED IN SESSION ONE SUBTLE ISSUE CAUGHT, FIXED PRE-RELEASE SHIPPED
Fig. Designed to acceptance criteria, reviewed live, one subtle issue caught before release
THREAD 05 / 06
Creation and editing at scale
14
ScopeResearch participants across media, entertainment, financial services
5 of 7
DecisionKey customer accounts named error recovery the top blocker, setting priority
10,000
DecisionRecords per file, each row validated with its own status
The problem

Enterprise customers needed links at scale, thousands at once or tightly named batches of a handful, and the only path was a single-item form repeated by hand or a homegrown spreadsheet. Editing was worse: app paths change, tags get set wrong at creation, and the fix was pinging an admin one link at a time. A CSV wizard existed in prototype with no evidence it worked for the people who would use it daily.

What I did

I ran usability research across three groups, moderated with internal team members and unmoderated with current customers and external growth marketers, then synthesized the findings into one cross-group view with severity scored by product familiarity. The findings reshaped the plan: a complex in-platform editing approach proved hard to use and rarely needed, so it was cut and the simpler download-template, fill, upload, validate path shipped first, handling up to 10,000 records per file, with validation up front and a two-tab preview that lets users download just the failed rows, fix them, and re-upload. Bulk editing followed as a stepped wizard with a persistent rail listing the selected links, so the affected set is visible before any change applies across analytics tags, routing, and social metadata, and nothing edits silently.

Error states are universally the biggest blocker. Users hit errors they couldn't resolve. The flow works, but it doesn't teach. Research synthesis, cross-group findings
STEP SYSTEM VALIDATION ROW ERROR ONE FLOW TEMPLATE, FILL, UPLOAD, VALIDATE, CREATE DOWNLOAD TEMPLATE FILL THE FILE UPLOAD VALIDATE ERRORS RETURNED UP FRONT, BY ROW CREATE MANY LINKS AT ONCE UP TO 10,000 PER FILE, EACH WITH ITS OWN STATUS TWO ROWS FLAGGED, THE REST CREATED
Fig. One flow in, thousands of links out, every row with its own status
THREAD 06 / 06
Moving customers without breaking them
50
ResultAccounts migrated automatically, no customer action required
0
ResultBreaking changes reported since launch: no bugs, no support tickets
2
ScopeFeatures migrated as paired configuration and runtime flows
The problem

A legacy feature set was migrating into a redesigned platform experience, and two configuration surfaces had to move without disrupting the customers depending on them. The job: make the new location feel like an upgrade while preserving existing behavior exactly.

What I did

I mapped both features as paired configuration and runtime flows: where settings live in the new navigation, and what the end user experiences when a link fires. Create, edit, and apply converge at a shared runtime, and automatic migration has since carried 50 accounts' configurations over with behavior preserved and no customer action required, with no bugs or support tickets reported since launch.

Carry the old behavior over untouched, and let the new home earn the move on its own. Design principle, migration work
LEGACY NEW HOME PROTECTED IN TRANSIT LEGACY HOME TWO CONFIG SURFACES, CUSTOMERS DEPENDING ON THEM CONFIG SURFACE 1 CONFIG SURFACE 2 MIGRATED AUTOMATICALLY, BEHAVIOR PRESERVED EXACTLY THE NEW HOME CREATE, EDIT, APPLY CONVERGE AT ONE SHARED RUNTIME CONFIG SURFACE 1 IN THE NEW NAVIGATION CONFIG SURFACE 2 IN THE NEW NAVIGATION CREATE EDIT APPLY SHARED RUNTIME WHAT FIRES WHEN A LINK IS USED FEELS LIKE AN UPGRADE, WORKS LIKE BEFORE
Fig. Two config surfaces moved to the new home, migrated automatically with behavior preserved
A-1 / CASE STUDY
← ALL CASE STUDIES