Ad pricing lived entirely in spreadsheets. Every rate change required a developer, creating bottlenecks and slowing the sales cycle.
I designed a self-serve pricing tool that gave sales teams full control over rate cards and inventory types, removing engineering dependency entirely.
Ad Tech Internal Tool
5 months
The pricing team could now create and update rate cards on their own. No more waiting on engineering to update a rate card.
*AI images used for illustrative purposes only.
Hulu Ad Manager (now Disney Campaign Manager) launched in March 2020, giving advertisers a self-serve way to create and manage streaming campaigns. At launch, the platform ran on a single fixed CPM (Cost per 1,000 impressions). Every advertiser paid the same rate, regardless of targeting sophistication, deal type, or seasonal demand.
That flat structure made sense early on. But as the platform matured and advertiser needs diversified, it became a ceiling. The pricing team had no way to:
Beyond the missed revenue opportunities, there was an operational problem. Any CPM change, no matter how minor, required an engineering ticket. The pricing team worked entirely in spreadsheets, manually tracking which advertisers had which rates:
When a rate needed to change, they submitted a ticket and waited. Depending on engineering bandwidth, that wait could stretch to weeks.
"Pricing Manager" had sat in the backlog for years. The concept was clear: give the pricing team a self-serve tool to create and manage multiple rate cards without engineering support. In late 2022, it finally got resourced.
The core design challenge wasn't just building a CRUD interface for rate cards. It was making a system with real business complexity feel simple and manageable for a non-technical team. Rate cards needed flexible logic: start and end dates, pricing add-ons for targeting, priority ordering when multiple cards applied, and a way to assign advertisers in bulk rather than one at a time.
MVP requirements for launch:
With a compressed timeline, late 2022 start to early 2024 launch, I focused discovery on the people who would use this tool every day. Through interviews with the pricing team, I mapped their end-to-end workflow: how they tracked rates, how they made decisions about which advertisers got which CPMs, and what kinds of exceptions came up most frequently.
The biggest insight wasn't about features. It was about mental models. The pricing team already thought about their work in terms of rate cards as objects you manage in a list, not forms you fill out one at a time. That informed the entire structural approach.
External competitive research wasn't possible for this internal tool. Instead, I audited two existing tools in our ad suite that had comparable complexity:
These patterns gave me a starting point grounded in how this team already worked, rather than starting from scratch.
Early explorations tested two approaches: a form-driven flow where users built rate cards step by step, and a table-first approach where rate cards lived as rows you could select, expand, and edit inline. The form approach felt intuitive for creation but made it harder to get a quick overview of all active cards. The table view matched how the pricing team already thought about their work, so that became the foundation.
The final interface uses a table view with an expandable side panel for editing. This was a deliberate choice over a full-page edit flow. The pricing team needed to frequently compare cards, check active dates, and understand priority order at a glance. A full-page editor would have broken that context every time they opened a card.
The side panel kept the list visible while allowing focused editing. It also created a consistent interaction pattern: select a row, edit in the panel. I carried this same pattern into advertiser group management so the tool felt like one coherent system rather than a collection of separate screens.
I iterated on this pattern through regular working sessions with the pricing team, walking through Figma prototypes and adjusting based on how they described their actual decision-making process. There was no formal usability testing given the timeline, but the tight feedback loop with the end users served as a practical substitute.
Advertiser group management uses the same table-and-panel structure. The consistency was intentional: once a user understood how to work with rate cards, advertiser groups should feel immediately familiar. It also reduced the cognitive overhead of learning two different interaction models in the same tool.
The walkthrough below shows the full end-to-end flow: creating a rate card with targeting add-ons, setting priority order, assigning advertisers via group management, and publishing changes without any engineering involvement. Watch for how the side panel keeps context intact throughout.
The tool launched in early 2023. What had previously required an engineering ticket and days or weeks of wait time became a few clicks. The pricing team went from maintaining spreadsheets outside the platform to managing everything directly, in real time.
Post-launch, the tool has continued to expand. Publisher-level targeting was added, letting the pricing team specify whether a rate applies to Disney+, Hulu, or both, a capability that simply wasn't possible under the old system. It's a sign that once you remove a hard dependency, the roadmap opens up.
The hardest part of this project wasn't the interface. It was understanding the pricing logic well enough to design for it. Rate card prioritization, in particular, required multiple conversations to get right: when does one card override another? What happens when an advertiser belongs to multiple groups? Getting those rules right in the design before they became engineering decisions was the most important work I did on this project.
Given more time, I would have pushed harder on the prioritization UI specifically. The current design communicates priority order clearly, but there's an opportunity to make the conflict resolution logic more transparent so users understand not just what the system will do, but why.