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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.