Marketplace Engineering Two-Sided Personalisation Best Practices
Comprehensive guide for designing, building and improving personalisation and recommendation
systems in two-sided trust marketplaces on AWS Personalize. Contains 49 rules across 9
categories, ordered by cascade impact on the personalisation lifecycle, plus two playbooks
for planning a new system from scratch and diagnosing an existing one.
When to Apply
Reference this skill when:
- Designing the event schema and tracking for a new recommender system
- Choosing an AWS Personalize recipe (USER_PERSONALIZATION_v2, SIMS, PERSONALIZED_RANKING_v2)
- Writing or reviewing candidate-generation and re-ranking code for marketplace search or homefeed
- Handling cold start for new providers, new seekers, or new catalog regions
- Diagnosing a live system that "mostly works but feels stale, unfair, or unpersonalised"
- Planning the next experiment, baseline comparison, or A/B test for the recommender
- Investigating concentration, coverage collapse, death spirals, or training-serving skew
- Adding observability dashboards, drift detection, or online metric slicing
Setup
This skill has no user-specific configuration — it is self-contained. References are live
URLs to official AWS Personalize documentation, academic papers on bias and exposure, and
engineering blogs from Airbnb and DoorDash.
Rule Categories
Categories are ordered by cascade impact: earlier stages poison everything downstream.
| # |
Category |
Prefix |
Impact |
| 1 |
Event Tracking and Capture |
track- |
CRITICAL |
| 2 |
Dataset and Schema Design |
schema- |
CRITICAL |
| 3 |
Two-Sided Matching Patterns |
match- |
CRITICAL |
| 4 |
Simple Baselines and Theory of Constraints |
simple- |
HIGH |
| 5 |
Feedback Loops and Bias Control |
loop- |
HIGH |
| 6 |
Cold Start and Coverage |
cold- |
HIGH |
| 7 |
Recipe and Pipeline Selection |
recipe- |
MEDIUM-HIGH |
| 8 |
Inference, Filters and Re-ranking |
infer- |
MEDIUM-HIGH |
| 9 |
Observability and Online Metrics |
obs- |
MEDIUM-HIGH |
Quick Reference
1. Event Tracking and Capture (CRITICAL)
track-log-impressions-alongside-clicks — the denominator that turns clicks into a rate and unlocks unbiased training
track-use-stable-opaque-item-ids — prevents history loss when listings rename or move
track-stamp-events-with-request-id — the join key that enables impression-to-outcome attribution
track-stream-events-via-putevents — real-time adaptation versus end-of-day bulk import
track-capture-negative-signals — dismissal is information, silence is not
track-measure-outcomes-not-clicks — reward the completed booking, not the clickbait
2. Dataset and Schema Design (CRITICAL)
schema-design-conservatively — Interactions schemas are immutable, Users/Items are painful to change
schema-keep-user-item-thin — volatile fields belong in events
schema-enforce-metadata-freshness — PutItems on every metadata change
schema-prefer-categorical-fields — unlock per-value features
schema-weight-event-value — align the model with the business outcome
schema-include-context-everywhere — train-serve feature parity
schema-meet-minimum-dataset-sizes — 50 users / 50 items / 1000 interactions before training
3. Two-Sided Matching Patterns (CRITICAL)
match-rank-mutual-fit — rank by mutual accept probability
match-hard-filter-before-ranking — retrieval enforces feasibility
match-cap-provider-exposure — diversity as a fairness constraint
match-model-capacity-constraints — capacity-discounted scoring
match-balance-supply-demand — per-segment strategy routing
4. Simple Baselines and Theory of Constraints (HIGH)
simple-ship-popularity-baseline — a reference point that every ML model must beat
simple-find-bottleneck-first — diagnostic before optimisation
simple-heuristic-rerank-cold-cohorts — trust × recency × proximity
simple-budget-complexity — ship or kill criterion before running
simple-audit-before-build — telemetry audit gates model work
simple-measure-gap-to-baseline — baseline retained as permanent minority bucket
5. Feedback Loops and Bias Control (HIGH)
loop-log-ranking-slot — slot data for position-bias correction
loop-reserve-random-exploration — unbiased training data
loop-optimize-completed-outcome — reward the goal, not the proxy
loop-decay-event-weights — old preferences fade
loop-detect-death-spirals — exposure Gini as a leading indicator
6. Cold Start and Coverage (HIGH)
cold-use-v2-recipe-with-metadata — metadata extrapolates to new listings
cold-best-of-segment-popularity — segmentation beats global top-N
cold-capture-onboarding-intent — ask instead of guessing
cold-reserve-exploration-slots — promotions filter for fresh inventory
cold-tag-cold-start-recs — warm-versus-cold metric slicing
7. Recipe and Pipeline Selection (MEDIUM-HIGH)
recipe-default-to-user-personalization-v2 — discovery default
recipe-sims-for-item-page-only — similar-items is not a homepage recipe
recipe-personalized-ranking-as-reranker — not a candidate generator
recipe-build-candidate-rerank-pipeline — two layers, two concerns
recipe-defer-hpo-until-baseline-measured — prove the model before tuning
8. Inference, Filters and Re-ranking (MEDIUM-HIGH)
infer-use-filters-api — Personalize backfills to numResults
infer-rerank-rules-after-model — preserve the model distribution
infer-deduplicate-canonical-entity — provider-level dedup, not listing-level
infer-enforce-exposure-caps — rolling fairness constraints
infer-cache-responses-short-ttl — session continuity and cost control
9. Observability and Online Metrics (MEDIUM-HIGH)
obs-always-ab-test — before-and-after is never enough
obs-track-coverage-and-gini — exposure-health signals
obs-slice-metrics-by-segment — aggregate metrics hide segment regressions
obs-watch-online-offline-divergence — proxy overfitting detector
obs-alarm-on-prediction-drift — distribution KL-divergence as early warning
Planning and Improving Recommendations
Two playbooks drive end-to-end workflows that compose the rules above:
references/playbooks/planning.md — Plan a new recommender system from scratch: a nine-step workflow that starts with instrumentation and ends with the first A/B-tested ML lift over a popularity baseline.
references/playbooks/improving.md — Diagnose and improve an existing recommender: a decision tree that identifies the current bottleneck (telemetry, freshness, coverage, feedback loop, algorithm) and routes to the specific rules that fix it.
Read the playbooks first when the task is "design a recommender" or "this recommender
is underperforming". Read the individual rules when a specific question arises during
implementation or review.
How to Use
- Read
references/_sections.md for category structure and impact ordering.
- Read individual rule files under
references/ when a specific rule matches the task at hand.
- Read
references/playbooks/planning.md to design a new system.
- Read
references/playbooks/improving.md to diagnose an existing system.
- Use
assets/templates/_template.md to author new rules as the skill grows.
Reference Files
| File |
Description |
| references/_sections.md |
Category definitions, impact ordering, cascade rationale |
| references/playbooks/planning.md |
Planning playbook for a new recommender |
| references/playbooks/improving.md |
Diagnostic playbook for an existing recommender |
| assets/templates/_template.md |
Template for authoring new rules |
| metadata.json |
Version, discipline, authoritative reference URLs |
1---
2name: marketplace-personalisation
3description: Personalisation and recommendation systems for a two-sided trust marketplace built on AWS Personalize — event tracking, dataset and schema design, two-sided matching, cold start, feedback loops, bias control, recipe selection, serving-time re-ranking, observability, and a diagnostic playbook for existing systems. Trigger when designing, building, debugging, reviewing, or improving such a system — and even when the user does not explicitly mention "AWS Personalize" but is working on recommendations, ranking, search, homepage personalisation, or anything that matches seekers and providers across a trust-based catalog.
4---
5
6# Marketplace Engineering Two-Sided Personalisation Best Practices
7
8Comprehensive guide for designing, building and improving personalisation and recommendation
9systems in two-sided trust marketplaces on AWS Personalize. Contains 49 rules across 9
10categories, ordered by cascade impact on the personalisation lifecycle, plus two playbooks
11for planning a new system from scratch and diagnosing an existing one.
12
13## When to Apply
14
15Reference this skill when:
16
17- Designing the event schema and tracking for a new recommender system
18- Choosing an AWS Personalize recipe (USER_PERSONALIZATION_v2, SIMS, PERSONALIZED_RANKING_v2)
19- Writing or reviewing candidate-generation and re-ranking code for marketplace search or homefeed
20- Handling cold start for new providers, new seekers, or new catalog regions
21- Diagnosing a live system that "mostly works but feels stale, unfair, or unpersonalised"
22- Planning the next experiment, baseline comparison, or A/B test for the recommender
23- Investigating concentration, coverage collapse, death spirals, or training-serving skew
24- Adding observability dashboards, drift detection, or online metric slicing
25
26## Setup
27
28This skill has no user-specific configuration — it is self-contained. References are live
29URLs to official AWS Personalize documentation, academic papers on bias and exposure, and
30engineering blogs from Airbnb and DoorDash.
31
32## Rule Categories
33
34Categories are ordered by cascade impact: earlier stages poison everything downstream.
35
36| # | Category | Prefix | Impact |
37|---|----------|--------|--------|
38| 1 | Event Tracking and Capture | `track-` | CRITICAL |
39| 2 | Dataset and Schema Design | `schema-` | CRITICAL |
40| 3 | Two-Sided Matching Patterns | `match-` | CRITICAL |
41| 4 | Simple Baselines and Theory of Constraints | `simple-` | HIGH |
42| 5 | Feedback Loops and Bias Control | `loop-` | HIGH |
43| 6 | Cold Start and Coverage | `cold-` | HIGH |
44| 7 | Recipe and Pipeline Selection | `recipe-` | MEDIUM-HIGH |
45| 8 | Inference, Filters and Re-ranking | `infer-` | MEDIUM-HIGH |
46| 9 | Observability and Online Metrics | `obs-` | MEDIUM-HIGH |
47
48## Quick Reference
49
50### 1. Event Tracking and Capture (CRITICAL)
51
52- [`track-log-impressions-alongside-clicks`](references/track-log-impressions-alongside-clicks.md) — the denominator that turns clicks into a rate and unlocks unbiased training
53- [`track-use-stable-opaque-item-ids`](references/track-use-stable-opaque-item-ids.md) — prevents history loss when listings rename or move
54- [`track-stamp-events-with-request-id`](references/track-stamp-events-with-request-id.md) — the join key that enables impression-to-outcome attribution
55- [`track-stream-events-via-putevents`](references/track-stream-events-via-putevents.md) — real-time adaptation versus end-of-day bulk import
56- [`track-capture-negative-signals`](references/track-capture-negative-signals.md) — dismissal is information, silence is not
57- [`track-measure-outcomes-not-clicks`](references/track-measure-outcomes-not-clicks.md) — reward the completed booking, not the clickbait
58
59### 2. Dataset and Schema Design (CRITICAL)
60
61- [`schema-design-conservatively`](references/schema-design-conservatively.md) — Interactions schemas are immutable, Users/Items are painful to change
62- [`schema-keep-user-item-thin`](references/schema-keep-user-item-thin.md) — volatile fields belong in events
63- [`schema-enforce-metadata-freshness`](references/schema-enforce-metadata-freshness.md) — PutItems on every metadata change
64- [`schema-prefer-categorical-fields`](references/schema-prefer-categorical-fields.md) — unlock per-value features
65- [`schema-weight-event-value`](references/schema-weight-event-value.md) — align the model with the business outcome
66- [`schema-include-context-everywhere`](references/schema-include-context-everywhere.md) — train-serve feature parity
67- [`schema-meet-minimum-dataset-sizes`](references/schema-meet-minimum-dataset-sizes.md) — 50 users / 50 items / 1000 interactions before training
68
69### 3. Two-Sided Matching Patterns (CRITICAL)
70
71- [`match-rank-mutual-fit`](references/match-rank-mutual-fit.md) — rank by mutual accept probability
72- [`match-hard-filter-before-ranking`](references/match-hard-filter-before-ranking.md) — retrieval enforces feasibility
73- [`match-cap-provider-exposure`](references/match-cap-provider-exposure.md) — diversity as a fairness constraint
74- [`match-model-capacity-constraints`](references/match-model-capacity-constraints.md) — capacity-discounted scoring
75- [`match-balance-supply-demand`](references/match-balance-supply-demand.md) — per-segment strategy routing
76
77### 4. Simple Baselines and Theory of Constraints (HIGH)
78
79- [`simple-ship-popularity-baseline`](references/simple-ship-popularity-baseline.md) — a reference point that every ML model must beat
80- [`simple-find-bottleneck-first`](references/simple-find-bottleneck-first.md) — diagnostic before optimisation
81- [`simple-heuristic-rerank-cold-cohorts`](references/simple-heuristic-rerank-cold-cohorts.md) — trust × recency × proximity
82- [`simple-budget-complexity`](references/simple-budget-complexity.md) — ship or kill criterion before running
83- [`simple-audit-before-build`](references/simple-audit-before-build.md) — telemetry audit gates model work
84- [`simple-measure-gap-to-baseline`](references/simple-measure-gap-to-baseline.md) — baseline retained as permanent minority bucket
85
86### 5. Feedback Loops and Bias Control (HIGH)
87
88- [`loop-log-ranking-slot`](references/loop-log-ranking-slot.md) — slot data for position-bias correction
89- [`loop-reserve-random-exploration`](references/loop-reserve-random-exploration.md) — unbiased training data
90- [`loop-optimize-completed-outcome`](references/loop-optimize-completed-outcome.md) — reward the goal, not the proxy
91- [`loop-decay-event-weights`](references/loop-decay-event-weights.md) — old preferences fade
92- [`loop-detect-death-spirals`](references/loop-detect-death-spirals.md) — exposure Gini as a leading indicator
93
94### 6. Cold Start and Coverage (HIGH)
95
96- [`cold-use-v2-recipe-with-metadata`](references/cold-use-v2-recipe-with-metadata.md) — metadata extrapolates to new listings
97- [`cold-best-of-segment-popularity`](references/cold-best-of-segment-popularity.md) — segmentation beats global top-N
98- [`cold-capture-onboarding-intent`](references/cold-capture-onboarding-intent.md) — ask instead of guessing
99- [`cold-reserve-exploration-slots`](references/cold-reserve-exploration-slots.md) — promotions filter for fresh inventory
100- [`cold-tag-cold-start-recs`](references/cold-tag-cold-start-recs.md) — warm-versus-cold metric slicing
101
102### 7. Recipe and Pipeline Selection (MEDIUM-HIGH)
103
104- [`recipe-default-to-user-personalization-v2`](references/recipe-default-to-user-personalization-v2.md) — discovery default
105- [`recipe-sims-for-item-page-only`](references/recipe-sims-for-item-page-only.md) — similar-items is not a homepage recipe
106- [`recipe-personalized-ranking-as-reranker`](references/recipe-personalized-ranking-as-reranker.md) — not a candidate generator
107- [`recipe-build-candidate-rerank-pipeline`](references/recipe-build-candidate-rerank-pipeline.md) — two layers, two concerns
108- [`recipe-defer-hpo-until-baseline-measured`](references/recipe-defer-hpo-until-baseline-measured.md) — prove the model before tuning
109
110### 8. Inference, Filters and Re-ranking (MEDIUM-HIGH)
111
112- [`infer-use-filters-api`](references/infer-use-filters-api.md) — Personalize backfills to numResults
113- [`infer-rerank-rules-after-model`](references/infer-rerank-rules-after-model.md) — preserve the model distribution
114- [`infer-deduplicate-canonical-entity`](references/infer-deduplicate-canonical-entity.md) — provider-level dedup, not listing-level
115- [`infer-enforce-exposure-caps`](references/infer-enforce-exposure-caps.md) — rolling fairness constraints
116- [`infer-cache-responses-short-ttl`](references/infer-cache-responses-short-ttl.md) — session continuity and cost control
117
118### 9. Observability and Online Metrics (MEDIUM-HIGH)
119
120- [`obs-always-ab-test`](references/obs-always-ab-test.md) — before-and-after is never enough
121- [`obs-track-coverage-and-gini`](references/obs-track-coverage-and-gini.md) — exposure-health signals
122- [`obs-slice-metrics-by-segment`](references/obs-slice-metrics-by-segment.md) — aggregate metrics hide segment regressions
123- [`obs-watch-online-offline-divergence`](references/obs-watch-online-offline-divergence.md) — proxy overfitting detector
124- [`obs-alarm-on-prediction-drift`](references/obs-alarm-on-prediction-drift.md) — distribution KL-divergence as early warning
125
126## Planning and Improving Recommendations
127
128Two playbooks drive end-to-end workflows that compose the rules above:
129
130- [`references/playbooks/planning.md`](references/playbooks/planning.md) — Plan a new recommender system from scratch: a nine-step workflow that starts with instrumentation and ends with the first A/B-tested ML lift over a popularity baseline.
131- [`references/playbooks/improving.md`](references/playbooks/improving.md) — Diagnose and improve an existing recommender: a decision tree that identifies the current bottleneck (telemetry, freshness, coverage, feedback loop, algorithm) and routes to the specific rules that fix it.
132
133Read the playbooks first when the task is "design a recommender" or "this recommender
134is underperforming". Read the individual rules when a specific question arises during
135implementation or review.
136
137## How to Use
138
139- Read [`references/_sections.md`](references/_sections.md) for category structure and impact ordering.
140- Read individual rule files under `references/` when a specific rule matches the task at hand.
141- Read [`references/playbooks/planning.md`](references/playbooks/planning.md) to design a new system.
142- Read [`references/playbooks/improving.md`](references/playbooks/improving.md) to diagnose an existing system.
143- Use [`assets/templates/_template.md`](assets/templates/_template.md) to author new rules as the skill grows.
144
145## Reference Files
146
147| File | Description |
148|------|-------------|
149| [references/_sections.md](references/_sections.md) | Category definitions, impact ordering, cascade rationale |
150| [references/playbooks/planning.md](references/playbooks/planning.md) | Planning playbook for a new recommender |
151| [references/playbooks/improving.md](references/playbooks/improving.md) | Diagnostic playbook for an existing recommender |
152| [assets/templates/_template.md](assets/templates/_template.md) | Template for authoring new rules |
153| [metadata.json](metadata.json) | Version, discipline, authoritative reference URLs |