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