← Back to work
SaaS

Scaling price optimization from products to campaigns

Redesigned Spresso’s pricing workflow so retailers could manage and optimize groups of products under a single campaign.

Scaling price optimization from products to campaigns cover
RoleProduct Designer
TeamMe, 1 PM, Design Manager, Engineering

[IMAGE: Hero shot of the campaign dashboard or campaign management screen]


In a Nutshell

Spresso helps retailers run pricing experiments by comparing optimized pricing against a control group. Originally, the system was built around individual products. Even when retailers ran coordinated experiments, each product had to be configured separately and linked manually through a Campaign ID. As the product moved toward beta, it became clear this model didn’t scale. Retailers needed to think in terms of campaigns as the primary unit of work, not individual product configurations.

I led the redesign to shift the system from a product-first model to a campaign-first model—where shared experiment settings are defined once and inherited across products, with controlled flexibility at the product level.


Context

Spresso’s users are retailers managing large, complex product catalogs and running pricing experiments across multiple SKUs.

In the original experience, setup started at the product level. Each product had to be individually configured with settings like: profit weight, min/max price, test dates, exclusion percentage, status and Campaign ID.

While Campaign ID suggested grouping, it wasn’t a real system object. There was no way to create, manage, or view campaigns holistically. This meant even coordinated experiments were effectively fragmented across multiple product-level configurations.

As we prepared for beta, Product defined a key requirement: retailers needed a true campaign-level structure to manage experiments more efficiently.

My role was to translate this into a scalable product model and end-to-end workflow in collaboration with Product and Engineering.


Design

Decision 1: Moving from product-first to campaign-first

The core shift was redefining the system hierarchy.

Previously:

Product → Campaign ID (attribute)

This created fragmentation and made it difficult to reason about experiments at scale.

In the new model:

Campaign → Products → Product configuration

Campaigns became the primary object. Retailers now start by defining a campaign—its name, dates, exclusion percentage, and status—creating a shared foundation for all associated products.

Once created, the campaign acts as a workspace where retailers can: view all associated products, manage shared settings and add/remove products.

This change aligned the product with how retailers actually think about pricing experiments: as coordinated initiatives, not isolated configurations.

Decision 2: Preserving flexibility through intelligent defaults

A key challenge was ensuring the new structure didn’t reduce control for edge cases.

Instead of enforcing strict standardization, I designed campaign settings as inheritable defaults.

When adding a product to a campaign:

  • Campaign-level settings (e.g. dates, exclusion %) are prefilled
  • Users can accept or override them per product
  • Product-level settings (e.g. min/max price, profit weight) remain fully configurable.

This same model extends to bulk workflows. In CSV uploads, SKUs can inherit campaign defaults by default, while additional columns allow targeted overrides when needed.

This approach balanced consistency at scale with flexibility for exceptions, which is critical in enterprise retail environments.

What changed

BeforeAfter
Price optimization started at product levelCampaign is the primary entry point
Campaign ID manually assigned per productCampaigns are first-class objects
Settings repeated across productsShared defaults applied at campaign level
Products managed in isolationProducts managed within a campaign workspace
Bulk setup required repetitionCSV supports inheritance + overrides

Impact

The redesigned experience shipped as part of the beta release, covering campaign creation, product association, and management workflows end-to-end.

While post-launch metrics were not available within the project timeline, the most significant outcome was structural: the system successfully transitioned from a fragmented product-level model to a unified campaign-based architecture.

This established the foundation for how pricing experiments are now organized within Spresso.


Next Steps

If I continued this work, I would focus on validating how the campaign model performs in real usage at scale.

Key questions:

  • Where users spend the most time during campaign setup?
  • How often product-level overrides are used vs campaign defaults?
  • Whether campaign structure improves manageability for large catalogs

These insights would help refine the balance between standardization and flexibility, and identify opportunities to streamline bulk campaign workflows further.


Reflection