Case studies

Case study · OSCAR

Studio
Search & adsInternal toolFlowchart builder

OSCAR

A visual flowchart builder that decides which sources fill a search results page, with the rules built in.

Role
Senior Product Designer, first sketches to final screens
Team
Product managers and engineering
Platform
Empire, web admin (desktop)
Scope
Providers, content groups, assemblies, strategies, behaviours
Cover
OSCAR: product screens from the final design

Context

Many sources, one search results page

When you search on a website, the results page is often filled from several outside sources, called providers: one supplies ads, another web links, others images or videos. Someone has to decide which source to ask first, what to do if it comes back empty, and how to split visitors between different setups. Put together, those decisions form a flowchart.

OSCAR is the tool inside Empire, Media.net’s internal platform, where teams draw that flowchart. I designed it from the first wireframes to the final screens: the list of providers, reusable chains, the flowchart builder, and later strategies and behaviours.

Provider

A source of results, like ads, web links, images or video. Engineers set providers up; this is where teams find them.

Content Group

A saved chain of two or more providers, like "ask this source, and if it has nothing, ask that one". An admin publishes it before anyone can use it.

Assembly

The whole flowchart for one results page: the main results, plus optional steps for when nothing comes back and for filling empty spots.

Relation

The arrow between two steps, saying how they connect: ask a source directly, try a backup, split visitors by percent, compare results, or follow a condition.

The problem

A powerful engine with strict rules

The engine behind it is flexible, and that is exactly what makes it hard to use. Not every kind of arrow can follow every step, and the product spec listed strict rules, for example:

  • The very first step can only ask a source directly or split visitors by percent
  • After a source or a saved chain, you can only add a backup, several backups or a comparison
  • After a comparison’s decision, only conditions; after a condition, a split, a direct ask or an override
  • A backup can only come after the first source in a chain, never at the very start

Get any of this wrong and a live page breaks. Asking people to memorise the rules was not an option.

How might weLet someone build a working flowchart without having to memorise the rules behind it?

Principles

Four rules I designed by

01

Show the flowchart, not a form. Everything is drawn as steps and arrows, the same way the engine runs it.

02

Only offer what is valid. Each "+" offers only the arrows allowed from that step, and the next field appears only after you pick one.

03

Grow it from the start. The first step, called Root, is placed for you. Each move adds one arrow and one step, so you never face a blank canvas.

04

Reuse, don't repeat. Common chains become content groups that drop into any flowchart as a single step.

Providers

Start by knowing what you can use

Engineers set providers up, so this list is for finding and understanding them. You can search by name or ID and filter by type. Picking a provider opens its details beside the list, so you never lose your place.

Provider Listing
Provider listing with search and filters for provider family and integration
Provider details
Provider listing with the details panel open for one provider

Content groups

Package a chain once, reuse it everywhere

A content group is a small flowchart of two or more providers, such as one search provider with a backup provider behind it. The list shows every group with its providers, the kinds of content they return and their status, with filters for each.

Content Group listing
Content group listing with provider, content type, status, creator and date
Filters
Content group listing with filters for status, created by, provider nodes and content type

Building one

Creating a group starts with a name, and the first step is already in place. The "+" on a step opens Map Relation and Provider: pick the kind of arrow first, then the provider. Only valid options appear, and each field has a hint. Add as many arrows as you need, and add a backup once the chain has its first provider.

Map Relation and Provider
Content group creation with the Map Relation and Provider menu open from the first step
Arrows from the first step
Two arrows from the first step: ads from one provider and web results from another
A complete content group
Finished content group: ads from one provider with a backup provider behind it, and web results from a second provider

Publishing is a gate

Anyone can create a content group, but only admins can publish one so others can use it in their flowcharts. Admins get a publish button, a confirmation and a message once it is live. Everyone else sees the status, so they know whether a group is ready to use.

Publish confirmation
Confirmation dialog asking to publish a content group
Content group flowchart
Read-only graph view of a content group

Assemblies

The builder

An assembly is the full recipe for one results page. The list shows each one with the providers and content groups it uses, and opens straight into its flowchart. Every assembly has three parts as tabs: Results, which is required, plus No Results (what to show when nothing comes back) and Backfill (how to fill empty spots), which are optional.

Assembly listing
Assembly listing with provider nodes or content groups, relation type, status and dates
Assembly flowchart
Read-only assembly graph with Results, No Results and Backfill tabs

One step at a time

Creating an assembly is a three-step flow. The first step is placed for you with a hint: "Select + icon for Map Relation and Provider". From there, only a direct ask or a percent split is offered, so your first choice is always a valid one. Save as Draft keeps your progress for later.

Start
Assembly creation with the Results, No Results and Backfill stepper and a tooltip on the Root node
Map Relation and Provider
Relation popover from Root with API selected and a provider dropdown

Splitting visitors

A Percent arrow splits visitors between branches, for example 95% to the usual setup and 5% to a test. The form adds a value per branch, shows what is left as you go, and stops you if the total is not 100. Each branch can then grow on its own.

Percent relation
Percent relation with two percent inputs being added from Root
Percent branches
The first step split into two branches of 95% and 5%
Percent states and validation
States of the percent form: filled values, chips with remaining percent, invalid percentage error and a total must be 100% error

Backups, and groups inside groups

A multi-fallback lets a provider hand over to a whole content group when it has nothing for certain kinds of content. A content group shows up as a single step that expands in place, so you can see what is inside without leaving the flowchart.

Multi-fallback
Multi-fallback relation with content types and a content group chosen
Nested content group
Assembly with percent branches, a multi-fallback to a content group and an expanded nested content group

Decisions and conditions

Eval sends results from several providers into a decision step that compares them. After a decision, only conditions can follow, each written in a short syntax with the instructions right below the field. Conditions can be reordered and marked as reset.

Eval and decision
Two providers evaluated into Decision 1 with two condition branches
Create Condition
Create Condition dialog states with condition syntax, Is Reset checkbox, reorder handles and instructions

Strategies

Putting behaviour on top of the flowchart

Later I added Strategies and Behaviours to OSCAR. A behaviour is a bundle of settings, such as which features are switched on, what to skip when something fails, and what depends on what. A strategy takes an assembly and attaches behaviours to its steps.

Strategy listing
Strategy listing with assembly, behaviour type, creator and date
Pick an assembly
Empty state asking to select an assembly to add behaviours

Nothing left unmapped

Choosing an assembly draws its flowchart. An Unmapped Entities counter at the top counts down as steps get a behaviour, and each finished step gets a green check, so it is obvious what is left. Condition steps ask for their values in place.

Map Behaviour
Map Behavior popover open on a provider node with Unmapped Entities at 03
Map Condition Variable
Map Condition Variable popover on condition node C1
In progress
Strategy flowchart with Unmapped Entities at 04 and plus icons on each step
All mapped
Strategy flowchart with every step showing a green check and Next enabled
Behaviour listing
Behaviour listing table
Behaviour creation
Behaviour creation form with name, feature mapping, fail-list config and dependency config fields

What I learned

Designing for a rulebook

Constraints are UX

The rules about which arrow can follow which step were the hardest part of the product. Building them into the menus did more than any help text could.

Draw what runs

Showing the flowchart the way the engine reads it gave product, engineering and operations one shared picture to talk about.

Reuse keeps it readable

Content groups as single steps that expand kept big flowcharts easy to read.

TimelineWireframes in January 2024, final screens from February, assembly and strategy designs through 2024, with engineering building it through 2025.