E-commerce
Behavioural design
Onboarding
Data driven
Conversion
Personalised Shopping
Helping shoppers build a full basket faster, with tailored filters, smart ranking and well timed nudges.

+9pp
increase in order conversion
+11pp
more users reached minimum spend
-23%
reduction in time to build a basket
COMPANY
ROLE
PLATFORMS
Ocado Technology
Product Designer
Web, iOS, Android
Context
Ocado Technology builds a B2B2C grocery e-commerce platform used by retailers worldwide under their own brand.
Features have to scale across partners while meeting the needs of their shoppers on web, iOS and Android.
First-time shoppers arrive motivated, but many never complete their first order.
The biggest drop-off happens after users start building their basket.

Problem
Building a complete basket is slow and takes effort. Users add their first items quickly, then slow down:
Progress slows as decisions accumulate
Too many options increase cognitive load
Many users abandon before reaching minimum spend
Objective: increase first-time conversion by reducing the effort to build a complete basket.

Objective
Increase first-time shopper conversion by reducing the effort required to build a complete basket.
My role
Led end-to-end design of the basket-building system, from research to launch
Refined the problem framing: shifted focus from “personalisation” to basket-building friction
Translated research and data into a clear product strategy
Designed the core experience: onboarding, filters, nudges and discovery
Prioritised interventions by their impact on conversion
Took part in discovery for the next phase: AI and machine learning personalisation that learns from shopper behaviour
Discovery
What we learned
First-time shoppers don't struggle to find products. They struggle to build a complete basket efficiently.
Users start quickly, but slow down as decisions accumulate, leading many to drop off before reaching minimum spend.
Key insight
Conversion doesn’t fail at the start. It fails when users try to go from a few items to a complete shop.
Supporting evidence
User research (interviews & usability tests): Users feel overwhelmed and struggle to decide what to add next
Funnel data
Largest drop-off happens after the first item is added
Behavioural data
Clear friction zone between 5 and 25 minutes
Filters analysis
Low usage, but significantly higher conversion when applied




Approach
Cross-functional alignment
Personalisation touched many different areas in the platform: search, browse, merchandising, recipes and promotions. Each area was owned by a different team.
To align these, I facilitated a cross-functional workshop with:
Product managers from all different domains
Merchandising and tagging teams
Data and engineering leads
Workshop outcomes
Defined where personalisation should happen first
Aligned on filters and tags as the core system enabler
Surfaced constraints, like inconsistent tagging and cookie limits
Prioritised high-impact use cases across domains
Established a shared roadmap for rollout
This alignment was critical to move from isolated features to a coherent system across the journey.

We designed a basket-building acceleration system that intervenes at the moments where users struggle.
Principles:
Act early → First 1 to 3 minutes are critical
Reduce choice → Narrow options to relevant products
Guide continuation → Help users move from “1 item” to “complete basket”
Balance control → Allow users to override personalisation
Solution
Basket-building acceleration system
We introduced targeted interventions to help users move from a few items to a complete basket, reducing effort where they get stuck.
Capture intent: Onboarding quiz
A short quiz collects preferences, started by a nudge when users hesitate.
Reduce choice: Pre-applied filters
Selected preferences become filters that stay active across the whole platform.
Speed up discovery: Personalised ranking
Relevant products appear first.
Drive continuation: Contextual nudges
Well-timed prompts ask for preferences in context.
Finish the basket: "Complete your shop"
Suggests missing items to reach minimum spend.
Two types of nudges
Hesitation nudge
Detects when users get stuck and invites them to personalise. It opens the onboarding flow so they see products tailored to them. (Small effort)

Behavioural nudge
Reacts to what's in the basket with one targeted question. If the user agrees, one filter is pre-selected, for example vegetarian only. They can change it anytime in preferences. (Medium effort)

How the hesitation nudge works
We defined the trigger logic with the data analysts, based on where the funnel showed users slowing down.
Condition
Rule
Basket progress
Hesitation signal
Action
User has added at least 3 products
User stays in the catalogue for more than 5 seconds without adding a product
Show a nudge inviting them to personalise their shop
Why after the 3rd product: by then, users have shown real intent to shop. Asking earlier would feel like a barrier. Asking at the moment they hesitate makes personalisation feel like help, not a form.
Key product decisions
Focus on early and mid journey, where drop-off was highest
Use filters as the main intent signal, since the data showed they drive conversion
Trigger nudges by behaviour.
Keep onboarding light and optional. It's offered when users need help, not forced at the start.
Only filter on what users confirm. The system asks before it filters.
Impact
Funnel performance
Metric
Before
After
Impact
Order conversion
Reach min spend
Time to min spend
39%
53%
10.7 min
45 to 48%
61 to 64%
~8 min
+6–9 pp
+8–11 pp
-23%
Unexpected finding
Built for first-time shoppers. Used most by returning ones.
First-time shoppers were still exploring and rarely set preferences.
Returning shoppers knew what they wanted and set preferences once.
Conversion grew across all orders, not only first ones.
The feature became a retention tool, not only an acquisition tool.
Learnings
1. Solved the real bottleneck
Focused on basket-building, not product search
2. Reduced cognitive load
Filters and ranking simplified decisions
3. Intervened at the right moment
Nudges targeted behavioural drop-offs
4. Balanced automation and control
Users could override preferences, building trust
Next steps: AI and machine learning personalisation (discovery)
Rules worked, but they relied on users setting preferences. We explored how AI and machine learning could learn from behaviour instead:
Smarter triggers: predict when each user needs help, instead of using fixed rules
Better questions: ask the right thing at the right moment
Continuous learning: every answer and override trains the model
The key question: should the model act on what it infers? A wrong filter hides products users never know they missed.
Signal
What the system does
User declared it
Model infers it, high confidence
Model infers it, low confidence
Apply filter, easy to remove
Ask first, then pre-select
Rank only, hide nothing
Dietary needs are never inferred. The system always asks.
Next step: test all three and track filter removals as the signal that the model is wrong.
The key question: should the model act on what it infers? A wrong filter hides products users never know they missed.
Signal
What the system does
User declared it
Model infers it, high confidence
Model infers it, low confidence
Apply filter, easy to remove
Ask first, then pre-select
Rank only, hide nothing
Dietary needs are never inferred. The system always asks.
Next step: test all three and track filter removals as the signal that the model is wrong.
Reflection
We designed for the first order, but the value showed up in repeat orders. Personalisation works when it's right, visible and easy to undo.
AI and machine learning can make it smarter, but only if users stay in control.
E-commerce
Behavioural design
Onboarding
Data driven
Conversion
Personalised Shopping
Helping shoppers build a full basket faster, with tailored filters, smart ranking and well timed nudges.

+9pp
increase in order conversion
+11pp
more users reached minimum spend
-23%
reduction in time to build a basket
COMPANY
ROLE
PLATFORMS
Ocado Technology
Product Designer
Web, iOS, Android
Context
Ocado Technology builds a B2B2C grocery e-commerce platform used by retailers worldwide under their own brand.
Features have to scale across partners while meeting the needs of their shoppers on web, iOS and Android.
First-time shoppers arrive motivated, but many never complete their first order.
The biggest drop-off happens after users start building their basket.

Problem
Building a complete basket is slow and takes effort. Users add their first items quickly, then slow down:
Progress slows as decisions accumulate
Too many options increase cognitive load
Many users abandon before reaching minimum spend
Objective: increase first-time conversion by reducing the effort to build a complete basket.

Objective
Increase first-time shopper conversion by reducing the effort required to build a complete basket.
My role
Led end-to-end design of the basket-building system, from research to launch
Refined the problem framing: shifted focus from “personalisation” to basket-building friction
Translated research and data into a clear product strategy
Designed the core experience: onboarding, filters, nudges and discovery
Prioritised interventions by their impact on conversion
Took part in discovery for the next phase: AI and machine learning personalisation that learns from shopper behaviour
Discovery
What we learned
First-time shoppers don't struggle to find products. They struggle to build a complete basket efficiently.
Users start quickly, but slow down as decisions accumulate, leading many to drop off before reaching minimum spend.
Key insight
Conversion doesn’t fail at the start. It fails when users try to go from a few items to a complete shop.
Supporting evidence
User research (interviews & usability tests): Users feel overwhelmed and struggle to decide what to add next
Funnel data
Largest drop-off happens after the first item is added
Behavioural data
Clear friction zone between 5 and 25 minutes
Filters analysis
Low usage, but significantly higher conversion when applied



Approach
Cross-functional alignment
Personalisation touched many different areas in the platform: search, browse, merchandising, recipes and promotions. Each area was owned by a different team.
To align these, I facilitated a cross-functional workshop with:
Product managers from all different domains
Merchandising and tagging teams
Data and engineering leads
Workshop outcomes
Defined where personalisation should happen first
Aligned on filters and tags as the core system enabler
Surfaced constraints, like inconsistent tagging and cookie limits
Prioritised high-impact use cases across domains
Established a shared roadmap for rollout
This alignment was critical to move from isolated features to a coherent system across the journey.

We designed a basket-building acceleration system that intervenes at the moments where users struggle.
Principles:
Act early → First 1 to 3 minutes are critical
Reduce choice → Narrow options to relevant products
Guide continuation → Help users move from “1 item” to “complete basket”
Balance control → Allow users to override personalisation
Solution
Basket-building acceleration system
We introduced targeted interventions to help users move from a few items to a complete basket, reducing effort where they get stuck.
Capture intent: Onboarding quiz
A short quiz collects preferences, started by a nudge when users hesitate.
Reduce choice: Pre-applied filters
Selected preferences become filters that stay active across the whole platform.
Speed up discovery: Personalised ranking
Relevant products appear first.
Drive continuation: Contextual nudges
Well-timed prompts ask for preferences in context.
Help complete the basket:
“Complete your shop”
Two types of nudges
Hesitation nudge
Detects when users get stuck and invites them to personalise. It opens the onboarding flow so they see products tailored to them. (Small effort)

Behavioural nudge
Reacts to what's in the basket with one targeted question. If the user agrees, one filter is pre-selected, for example vegetarian only. They can change it anytime in preferences. (Medium effort)

How the hesitation nudge works
We defined the trigger logic with the data analysts, based on where the funnel showed users slowing down.
Condition
Rule
Basket progress
Hesitation signal
Action
User has added at least 3 products
User stays in the catalogue for more than 5 seconds without adding a product
Show a nudge inviting them to personalise their shop
Why after the 3rd product: by then, users have shown real intent to shop. Asking earlier would feel like a barrier. Asking at the moment they hesitate makes personalisation feel like help, not a form.
Key product decisions
Focus on early and mid journey, where drop-off was highest
Use filters as the main intent signal, since the data showed they drive conversion
Trigger nudges by behaviour.
Keep onboarding light and optional. It's offered when users need help, not forced at the start.
Only filter on what users confirm. The system asks before it filters.
Impact
Funnel performance
Metric
Before
After
Impact
Order conversion
Reach min spend
Time to min spend
39%
53%
10.7 min
45 to 48%
61 to 64%
~8 min
+6–9 pp
+8–11 pp
-23%
Unexpected finding
Built for first-time shoppers. Used most by returning ones.
First-time shoppers were still exploring and rarely set preferences.
Returning shoppers knew what they wanted and set preferences once.
Conversion grew across all orders, not only first ones.
The feature became a retention tool, not only an acquisition tool.
Learnings
1. Solved the real bottleneck
Focused on basket-building, not product search
2. Reduced cognitive load
Filters and ranking simplified decisions
3. Intervened at the right moment
Nudges targeted behavioural drop-offs
4. Balanced automation and control
Users could override preferences, building trust
Next steps: AI and machine learning personalisation (discovery)
Rules worked, but they relied on users setting preferences. We explored how AI and machine learning could learn from behaviour instead:
Smarter triggers: predict when each user needs help, instead of using fixed rules
Better questions: ask the right thing at the right moment
Continuous learning: every answer and override trains the model
The key question: should the model act on what it infers? A wrong filter hides products users never know they missed.
Signal
What the system does
User declared it
Model infers it, high confidence
Model infers it, low confidence
Apply filter, easy to remove
Ask first, then pre-select
Rank only, hide nothing
Dietary needs are never inferred. The system always asks.
Next step: test all three and track filter removals as the signal that the model is wrong.