Markdown Editor

Recommendation System Design Template

Recommender funnel: two-tower retrieval and ANN, pre-ranking and ranking, feature freshness, training, exploration, A/B tests, feedback loops and bias

시스템 설계전체designrecommendationsystem

사용법: Use it when designing personalised feeds or related-item recommendations at scale. Fill the objective and guardrails (2.2), the funnel sizes (3.5) and the retrieval deep dive (7.1) first. The main pitfall is optimising a short-term proxy such as clicks without impression logging, so bias and real user value cannot be measured.

미리보기

System Design: [Product name] recommendation system

Reference design for a large-scale recommendation system that ranks items (videos, products, articles or posts) for each user. It covers the multi-stage funnel of candidate generation, pre-ranking, ranking and re-ranking; embeddings and approximate nearest neighbour (ANN) retrieval; feature freshness; the training pipeline; online serving within a latency budget; exploration; A/B testing; and feedback loops and bias. It follows the structure of the System Design Document template and is pre-filled with a worked design to adapt. Replace every [bracketed] value and every row marked Example; values marked Example are assumptions, not benchmarks. This is an engineering format; recommender transparency and profiling rules depend on your jurisdiction and are not legal advice.

Document control

FieldValue
Document ID[SDD-REC-001]
System / feature[Home feed and related-items recommendations]
Version[0.1]
Status[Draft / In review / Approved / Implemented / Superseded]
Owner[@owner]
Author(s)[@author]
Approvers / reviewers[@reviewer-1], [@reviewer-2]
Last updatedYYYY-MM-DD
Classification[Internal]
Objective owner[@product-owner]
Surfaces in scope[Home feed / related items / notifications / email]
Related[ML system design], [Model monitoring plan], [Data contract], [A/B test plan], [DPIA]

Approvals

RoleNameDecisionDate
Tech lead[@name][Approved / Changes requested]YYYY-MM-DD
ML lead[@name][Decision]YYYY-MM-DD
Product owner (objective)[@name][Decision]YYYY-MM-DD
Trust and safety[@name][Decision]YYYY-MM-DD
Privacy[@name][Decision]YYYY-MM-DD
SRE / operations[@name][Decision]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]First draft for design review
0.2YYYY-MM-DD[@name]Example: Added two-tower retrieval alongside co-visitation
0.3YYYY-MM-DD[@name]Example: Added exploration slots and position-bias correction
1.0YYYY-MM-DD[@name]Example: Approved

Contents

1. Overview

1.1 Problem statement

[Example: Our video app has 100 million daily users and a catalogue of 50 million items, with 400 000 new uploads a day. The home feed is ranked by a popularity score per category, so new creators get almost no exposure and returning users see the same items for days. Product wants longer sessions without growing clickbait complaints. A nightly batch writes a fixed list per user, so the feed ignores what the user watched five minutes ago.]

1.2 Proposed solution

[Example: A request-time funnel: several candidate sources (two-tower embedding retrieval through an ANN index, co-visitation, subscriptions, fresh uploads, trending) return about 1 500 candidates; a light pre-ranker cuts them to 300; a deep ranking model scores those with user, item and context features predicting several engagement and satisfaction targets; a re-ranker applies diversity, freshness, policy filters and exploration slots and returns a page of 20. User features update from a streaming pipeline within a minute. Every impression is logged with position and model versions; training is daily for ranking and weekly for retrieval; every change ships through an A/B test with guardrails.]

1.3 Decisions requested from reviewers

IDQuestionRecommended optionSection
Q-01Example: Primary objective?Weighted blend of predicted watch time and satisfaction, guardrailed by complaint rate2.2, 7.3
Q-02Example: Retrieval method?Two-tower embeddings with HNSW index plus heuristic sources7.1
Q-03Example: User feature freshness?Streaming session features under 60 s; long-term features daily7.2
Q-04Example: Exploration?2 of 20 slots for uncertainty-driven exploration of new items7.4
Q-05Example: Experiment unit?User, with a 1% long-term holdout7.5
[Q-nn][Question][Option][Section]

1.4 45-minute interview path

MinuteCoverNotes
0 to 5Scope: surface, item type, objective, cold startAsk what "good" means: clicks, watch time, satisfaction
5 to 10Core requirements; below the line (search, ads auction, creator tools)
10 to 15Estimates with consequences (3.5)Funnel sizes and index memory
15 to 20API and data model with access patternsImpression log is a first-class entity
20 to 30High-level funnel, then deep dive 1: candidate generation and ANN (7.1)Two-tower, negatives, index choice
30 to 40Deep dive 2: ranking objective and features (7.3) or feedback loops (7.6)Pick 7.6 if asked about bias
40 to 45A/B testing, failure modes, 10x and 0.1xClose on monitoring and guardrails

2. Requirements

2.1 Core functional requirements

IDRequirementPriority
FR-01Example: Return a personalised page of 20 items for the home feedMust
FR-02Example: Return related items for an item pageMust
FR-03Example: Reflect actions in the current session (watch, skip, like, hide) within one minuteMust
FR-04Example: Recommend for new users with little history (cold start)Must
FR-05Example: Give new items exposure within hours of uploadMust
FR-06Example: Apply policy filters (removed, age-restricted, region-blocked items) before displayMust
FR-07Example: Let users remove items and signal "not interested", and respect itMust
FR-08Example: Offer a non-personalised feed optionShould
[FR-nn][Requirement][Must / Should / Could]

2.2 Non-functional requirements and objective

IDQualityTargetMeasured as
NFR-01LatencyExample: p99 at or below 200 ms server time for a pageService timing
NFR-02AvailabilityExample: 99.95%; degraded feed allowedSLO
NFR-03Session freshnessExample: Session actions affect the next page within 60 sEvent-to-feature lag
NFR-04Item freshnessExample: New items eligible within 1 h of passing reviewIndex update lag
NFR-05Primary metricExample: Satisfied watch time per user per dayA/B test
NFR-06GuardrailsExample: Complaint and "not interested" rates, creator diversity, no increase above agreed boundsA/B test
NFR-07Policy safetyExample: Zero removed items served after removal plus 5 minAudit of impression log
[NFR-nn][Quality][Target][Measurement]

2.3 Below the line (out of scope)

  • [Example: search ranking (shares features, separate design)]
  • [Example: ads selection and auction (blended by a separate mixer)]
  • [Example: content moderation classifiers (consumed as item flags)]
  • [Example: notification send-time optimisation (see Notification Service System Design (system-design/design-notification-service))]
  • [Example: the model development record (see ML System Design Document (ai-data/ml-system-design))]
  • [Item deferred, with the release that will take it]

3. Capacity estimation

3.1 Assumptions

InputValueSource
Daily active usersExample: 100 millionAnalytics
Recommendation requests per user per dayExample: 20Analytics
Peak to average ratioExample: 3Evening peak
Corpus sizeExample: 50 million eligible itemsCatalogue
Embedding dimensionExample: 128, float32Model spec
Candidates per request after retrievalExample: 1 500Funnel design
Items scored by the rankerExample: 300Funnel design
Logged events per user per dayExample: 200 (impressions, plays, skips, likes)Client logs

3.2 Serving throughput

QuantityCalculationResultConsequence
Requests per day100 million x 202 billion
Average requests/s2 billion / 86 400about 23 000/s
Peak requests/s23 000 x 3about 70 000/sStateless serving tier in several regions
Ranker item scores/s at peak70 000 x 30021 million/sBatch inference on accelerators; a pre-ranker is required to keep 300, not 1 500
Pre-ranker scores/s at peak70 000 x 1 500105 million/sPre-ranker must be a cheap dot product or small model

3.3 Index and storage

QuantityCalculationResultConsequence
Raw item embeddings50 million x 128 x 4 B25.6 GBFits in memory of a large node; replicate per region; quantise to cut cost
Quantised (8-bit)50 million x 128 x 1 B6.4 GBMany replicas affordable for 70 000 queries/s
HNSW graph links50 million x Example 32 links x 4 B6.4 GBIndex about 13 GB per replica with quantised vectors; still fits one node
Events per day100 million x 20020 billionStreaming ingestion; partitioned event log
Events per second (average)20 billion / 86 400about 231 000/sFeature pipeline partitioned by user ID
Event bytes per day20 billion x Example 200 B4 TB/daySample impressions without engagement for training; keep all positives

3.4 Training

QuantityCalculationResultConsequence
Ranking training windowExample: 30 days of impressionsabout 120 TB rawTrain on downsampled negatives with weights; daily incremental training
Retrieval retrainExample: weekly, fullEmbedding versions must be consistent between towers and index (7.1)

3.5 Summary

QuantityEstimateDesign consequence
Peak requests70 000/sRegional stateless serving, cached fallbacks
Funnel50 M to 1 500 to 300 to 20Four stages; latency budget per stage (8)
Index memoryabout 13 GB (quantised vectors plus graph links)Replicated in-memory ANN
Events231 000/sStreaming features, impression logging as a product requirement

4. API design

4.1 Endpoints

Method and pathPurposeIdempotent
GET /v1/feed?surface=home&cursor=Next page of recommendationsYes (read)
GET /v1/items/{id}/relatedRelated itemsYes (read)
POST /v1/eventsBatch of client events (impression, play, skip, like, hide)Yes, keyed by event ID
POST /v1/feedback/not-interestedExplicit negative feedbackYes
GET /v1/feed/why/{impression_id}Plain reason for a recommendationYes (read)

4.2 Request and response examples

GET /v1/feed?surface=home&cursor=c_19a
Authorization: Bearer [token]
X-Client-Context: {"device": "tv", "locale": "en-GB", "network": "wifi"}
HTTP/1.1 200 OK
Content-Type: application/json

{"request_id": "req_7b3f", "items": [{"item_id": "it_501", "impression_id": "imp_7b3f_01", "position": 1, "source": "two_tower"}, {"item_id": "it_88a", "impression_id": "imp_7b3f_02", "position": 2, "source": "explore"}], "next_cursor": "c_19b"}
  • The client sends an impression event only when an item was actually visible (Example: 50% of the tile on screen for 1 s), carrying the impression_id. Requests do not count as impressions.
  • request_id ties events to the model versions and features used, which the server logs at serving time.

5. Data model

5.1 Entities

Users and items have features and embeddings; requests produce impressions; impressions produce engagements. Training joins all four.

5.2 Storage choices

DataStoreKeyNotes
Item metadata and policy flagsDocument store plus cacheitem_idPolicy flag changes pushed to serving within minutes
Item embeddings and ANN indexIn-memory ANN index per region, versionedmodel_versionBuilt from embedding table; swapped atomically
User features (long-term)Key-value storeuser_idDaily batch
User session featuresIn-memory storeuser_idStreaming, TTL 24 h
Request and impression logEvent log, then data lakedate, user_idServer-side features logged with request
EngagementsEvent log, then data lakedate, impression_idJoined to impressions for labels

5.3 Access patterns

IDQueryServed byPartition key rationale
AP-01Example: Top K nearest items to a user embeddingANN index lookupWhole index replicated; no partitioning by user
AP-02Example: User long-term and session featuresKey-value multi-get by user_idOne user per request; partition by user_id
AP-03Example: Item features for 1 500 candidatesBatched multi-get on item cacheHot items cached in serving memory
AP-04Example: Items co-watched with recent itemsPrecomputed co-visitation table by item_idDaily job; lookup by seed item
AP-05Example: Build training rows with features as servedJoin impressions, logged features and engagements by request_id and impression_idAvoids recomputing features offline
AP-06Example: Check items already shown recentlySession store set of item IDs with TTLDedupe across pages

6. High-level design

ComponentResponsibilityScales by
OrchestratorFan out to sources, merge, call rankers, enforce budgetsHorizontally
Candidate sourcesReturn candidates with source labels and scoresPer source
ANN indexNearest neighbour retrievalReplicas
Pre-rankerCheap scoring of 1 500 candidatesIn process
Ranking model serverDeep model on 300 candidates, batchedAccelerators
Re-rankerPolicy filter, diversity, freshness, exploration, dedupeIn process
Streaming featuresSession features from eventsEvent log partitions

7. Detailed design

7.1 Deep dive: candidate generation and ANN retrieval

OptionStrengthWeakness
Heuristic sources only (co-visitation, subscriptions, trending)Simple, explainableWeak on long-tail and new users
Matrix factorisationStrong baseline for collaborative signalsCannot use rich context easily
Two-tower model (user tower, item tower)Uses features on both sides; item embeddings precomputed; user embedding at request timeNeeds negatives sampling and index operations
Generative or sequence retrievalCaptures order of actionsCostlier to serve; younger tooling

Choice: two-tower retrieval plus heuristic sources, each with a quota. Reason: two-tower gives personalised recall across the long tail; heuristic sources guarantee freshness, subscriptions and robustness when the model or index fails.

Index options:

IndexRecall vs speedMemoryUpdates
Brute forceExactFull vectorsTrivial
HNSW graphHigh recall, low latencyVectors plus graph linksIncremental inserts supported
IVF with product quantisationGood recall with tuningSmallRebuild clusters periodically

Choice: HNSW over 8-bit quantised vectors, rebuilt weekly with the retrieval model and updated incrementally hourly for new items. Reason: low latency at high recall, and incremental inserts meet NFR-04.

  • The user tower and item embeddings must come from the same model version; the orchestrator pins a version per request and the index is swapped atomically.
  • Train with in-batch and sampled negatives, correcting for item popularity in the sampling; otherwise popular items appear too often as negatives and end up under-recommended.
  • New items with no engagement get embeddings from content features (title, tags, creator), so they are retrievable on day one.

How real systems do it (paraphrased from a public write-up; not copied)

The YouTube recommendations paper by Covington, Adams and Sargin describes a two-stage system. A candidate generation network uses a user's watch and search history plus context to narrow a corpus of millions of videos to a few hundred, framed as a very large classification over videos whose learned embeddings can be served with nearest neighbour search. A separate ranking network then scores those candidates with many more features, and is trained to predict expected watch time rather than clicks, so that misleading thumbnails are not rewarded. The authors also feed the age of each training example to the model so it can learn that users prefer fresh content, and they note that offline metrics did not always predict live A/B results. This template keeps the same split and the watch-time-style objective, and adds heuristic sources, a pre-ranker and exploration.

Source: Paul Covington, Jay Adams, Emre Sargin, "Deep Neural Networks for YouTube Recommendations", Proceedings of the 10th ACM Conference on Recommender Systems (RecSys 2016), pp. 191 to 198, https://doi.org/10.1145/2959100.2959190

7.2 Deep dive: feature freshness

Feature groupExampleFreshness targetPipeline
Request contextDevice, time of day, localeReal timeIn request
SessionLast 20 items watched, skips in this sessionUnder 60 sStreaming into session store
Short-term userCategory affinity over 7 daysHourlyStreaming aggregates
Long-term userEmbedding of 90-day historyDailyBatch
Item countersPlays and completion rate in the last hourMinutesStreaming
Item staticDuration, language, creatorOn changeChange events

Options: recompute everything in batch; streaming for all; tiered by value. Choice: tiered. Reason: session features carry most of the "react to what I just did" value (FR-03), while long-term features change slowly and are cheaper in batch. Log every feature value used at serving time with the request, so training reads what serving saw (AP-05) and train-serve skew is avoided.

7.3 Ranking, objective and re-ranking

  • The ranker is a multi-task model predicting several targets per item: Example: probability of play, expected watch time, probability of like, probability of "not interested". The final score is a weighted blend owned by product (Q-01), versioned like code.
  • Position is a training feature (set to a constant at serving) so the model learns item quality separately from position bias.
  • The re-ranker enforces: policy filters (NFR-07), dedupe against recent impressions, at most Example 2 items per creator per page, a minimum share of fresh items, and exploration slots (7.4).
Objective optionRisk
ClicksRewards clickbait thumbnails
Watch timeRewards long items and binge patterns
Blend with satisfaction survey modelNeeds survey data and calibration
Long-term retentionSlow, noisy signal; used as experiment metric

Choice: blend of watch time and predicted satisfaction, judged in experiments by long-term retention and guardrails. Reason: short-term proxies drift from user value; anchoring the experiments on retention keeps the proxy honest.

7.4 Exploration and cold start

OptionHow it worksUse
Epsilon-greedyRandom item in a slot with small probabilitySimple baseline; wastes impressions
Upper confidence or Thompson samplingPrefer items with high uncertainty of high valueNew items and new users
Fixed fresh-item quotaGuarantee exposure for new uploadsCreator fairness

Choice: 2 of 20 slots use Thompson sampling over new and under-exposed items, plus a fresh-item quota in candidate generation. Reason: new items need impressions to learn about them, and logging the exploration probability (propensity) gives unbiased data for evaluation. New users get a short onboarding of topic choices and a popularity prior by region, updated after each action through session features.

7.5 A/B testing and evaluation

  • Offline: recall at K for retrieval on held-out next actions; normalised ranking metrics and calibration for the ranker; counterfactual estimates from logged propensities for re-ranking changes.
  • Online: user-level randomisation; primary metric NFR-05; guardrails NFR-06; latency and error rate. Use A/B Test Plan (product/ab-test-plan) to fix hypothesis, sample size and duration before launch.
  • Keep a long-term holdout (Example: 1% of users on a frozen baseline for a quarter) to measure cumulative effects that weekly tests miss.
  • Interference: recommendations change what creators upload and what others see; for creator-side metrics consider cluster or time-split designs.

7.6 Feedback loops and bias

Bias or loopEffectMitigation
Position biasTop items get more engagement regardless of qualityPosition as training feature; randomised swaps in a small slice
Exposure biasItems never shown never get positive labelsExploration slots; propensity-weighted training
Popularity feedbackPopular items get more popularPopularity-corrected negative sampling; creator diversity constraint
Filter bubbleNarrowing topics over timeDiversity in re-ranking; topic breadth guardrail
Harmful amplificationBorderline content optimised for engagementTrust and safety scores as re-ranking penalties; policy review of objective

Monitor these with Model Monitoring Plan (ai-data/model-monitoring-plan), including distribution of impressions across creators and topics, not only model accuracy.

8. Scalability and performance

Latency budget for a feed page (p99 200 ms):

StageBudget
Fetch user and session features15 ms
Candidate sources in parallel (ANN about 10 ms)30 ms
Merge and item feature fetch20 ms
Pre-ranker on 1 50015 ms
Ranking model on 300 (batched)50 ms
Re-ranking and policy filters10 ms
Network and serialisation20 ms
Headroom40 ms
ConcernApproachLimit before redesign
Ranking computeBatch on accelerators; distil model if neededExample: cost per 1 000 requests
ANN throughputMore replicas; quantisationMemory per replica
Event ingestionPartitioned log by user_idPartition count
Hot itemsItem features cached in serving memoryCache size
Multi-regionIndex and models replicated per regionIndex build and distribution time

9. Reliability, security and operations

9.1 Failure modes

IDComponentFailureDetectionBlast radiusMitigationRTO
FM-01Ranking model serverDown or slowTimeoutsAll personalised pagesFall back to pre-ranker orderExample: 5 min
FM-02ANN indexCorrupt or version mismatchRecall canary queries; version checkTwo-tower sourceDrop source; heuristic sources continue; roll back indexExample: 15 min
FM-03Feature storeUnavailableError ratePersonalisation qualityDefault features; cached last page per userExample: 10 min
FM-04Streaming featuresLagEvent-to-feature lagSession freshnessAlert at 5 min; scale consumersExample: 10 min
FM-05Bad model releaseMetric dropGuardrail alarms in canaryCanary shareAutomatic rollback to previous versionExample: 5 min
FM-06Policy flag propagationRemoved item still servedImpression auditUsers who see the itemPolicy filter reads item flags from a fast path; block list pushed directlyExample: 5 min
[FM-nn][Component][Failure][Signal][Scope][Mitigation][RTO]

9.2 Security, abuse and privacy

IDThreat or dutyControl
SEC-01Engagement fraud (fake views to game ranking)Bot filtering before features and labels; anomaly detection per item
SEC-02Data poisoning through coordinated accountsWeight labels by account trust; cap influence per account
SEC-03Sensitive inference from historyExclude sensitive categories from targeting features; DPIA (compliance/dpia)
SEC-04Transparency and opt-out duties for recommender systems where they apply"Why this" endpoint, non-personalised option (FR-08); confirm obligations with counsel; this is a format, not legal advice
[SEC-nn][Threat][Control]

9.3 Observability

SignalMetricAlert threshold
LatencyPage p99Over 200 ms for 5 min
FallbackShare of pages from fallback pathAbove 1%
Source mixShare of impressions per candidate sourceChange above 30% day over day
EngagementPlay rate and watch time per impressionDrop above 5% hour over hour
DiversityDistinct creators per 100 impressionsBelow guardrail
PolicyImpressions of removed itemsAny after grace window

10. Trade-offs and alternatives

DecisionOptionsChosenWhyWhat we give up
Serving modePrecompute lists nightly; request timeRequest timeSession freshness (FR-03)Higher serving cost
RetrievalHeuristics; MF; two-towerTwo-tower plus heuristicsRecall and robustnessIndex operations
IndexHNSW; IVF-PQHNSW quantisedLatency and incremental insertsMore memory than IVF-PQ
ObjectiveClicks; watch time; blendBlend with satisfactionAvoid clickbait and binge proxiesSurvey data pipeline
ExplorationNone; epsilon; ThompsonThompson in 2 slotsLearns new items, logs propensitySome short-term engagement
At 10x (700 000 requests/s, 500 M items)Bigger index; sharded indexShard ANN by item partitions with scatter-gather; cheaper distilled rankerIndex memory and ranking cost dominateMore tail latency from fan-out
At 0.1x (7 000 requests/s, 5 M items)Full funnel; simplerDrop pre-ranker; brute-force or managed vector search; single rankerFewer stages to runLess headroom to grow
[Decision][Options][Chosen][Why][Cost]

11. Delivery plan and risks

11.1 Milestones

MilestoneScopeExit criterionTarget date
M1Impression logging with request features99% of impressions joinable to requestsYYYY-MM-DD
M2Request-time funnel with heuristic sources and rankerA/B win on primary metric, guardrails flatYYYY-MM-DD
M3Two-tower retrieval and ANN indexRecall at K above baseline; latency within budgetYYYY-MM-DD
M4Streaming session featuresLag under 60 s at peakYYYY-MM-DD
M5Exploration and bias correctionsLong-term holdout readoutYYYY-MM-DD

11.2 Risks

IDRiskLikelihoodImpactMitigationOwner
R-01Example: Objective weights tuned for short-term metrics hurt retentionMediumHighLong-term holdout; quarterly objective review[@name]
R-02Example: Client impression events unreliable on some devicesHighMediumClient SDK tests; server-side fallback signals; Data Contract (ai-data/data-contract)[@name]
R-03Example: Accelerator capacity shortfall at peakMediumMediumDistilled ranker; reduce ranked items under load[@name]
[R-nn][Risk][L / M / H][L / M / H][Mitigation][@name]

12. Appendices

12.1 Traceability

RequirementDesign elementVerification
FR-03, NFR-037.2 session featuresLag dashboard; end-to-end test
FR-05, NFR-047.1 incremental index, 7.4 quotaTime to first impression for new items
NFR-018 latency budgetLoad test at peak
NFR-05, NFR-067.3 objective, 7.5 experimentsA/B readouts
NFR-077.3 policy filter, FM-06Impression audit
[ID][Element][Test]

12.2 Open questions

IDQuestionOwnerDue
OQ-01Example: Do we personalise for signed-out users from device history?[@name]YYYY-MM-DD
OQ-02Example: How often should objective weights change, and who approves?[@name]YYYY-MM-DD
[OQ-nn][Question][@name]YYYY-MM-DD

12.3 Glossary

TermMeaning
Candidate generationRetrieval of a few hundred to a few thousand items from the full corpus
Two-tower modelModel with separate user and item networks whose embeddings are compared by dot product
ANNApproximate nearest neighbour search
HNSWHierarchical navigable small world graph index
Pre-rankerCheap model that trims candidates before the expensive ranker
PropensityProbability that the system showed an item at a position, logged for unbiased evaluation
Position biasHigher engagement caused by position, not quality

12.4 References

ReferenceUse
Covington, Adams, Sargin, "Deep Neural Networks for YouTube Recommendations", RecSys 2016, doi:10.1145/2959100.2959190Two-stage funnel and objective (7.1); paraphrased
ML System Design Document (ai-data/ml-system-design)Model development record
Model Monitoring Plan (ai-data/model-monitoring-plan)Monitoring and drift
Data Contract (ai-data/data-contract)Event and feature contracts
A/B Test Plan (product/ab-test-plan)Experiment design
News Feed System Design (system-design/design-news-feed)Feed assembly and fan-out
Video Streaming System Design (system-design/design-video-streaming)Item delivery after recommendation

Standard and licence note

Based on common industry practice for large-scale recommender systems and on the public references in 12.4. Papers and company write-ups were used as inspiration only; the text, diagrams and numbers are original and illustrative. Rules on recommender transparency, profiling and minors differ by jurisdiction and change; check the current official texts. This is an engineering format, not legal advice. Template licence: MIT.

관련 템플릿