8 min

How to Create a Mobile App for AI-Based Recommendations

Learn how to plan, build, and launch a mobile app with AI-based recommendations—from data and UX to model choice, testing, and privacy best practices.

How to Create a Mobile App for AI-Based Recommendations

What AI-Based Recommendations Mean for a Mobile App

AI-based recommendations are app features that decide what to show next for each user—products, videos, articles, lessons, destinations, or even UI shortcuts—based on behavior and context.

Three patterns you’ll see in real apps

Most recommendation experiences in mobile apps boil down to a few building blocks:

  • Ranking: you already have a set of items (e.g., “trending” or a search result), and the system orders them for a specific user.
  • Matching: the system selects items from a large catalog to fit a user’s intent (e.g., “because you liked X” or “for your level”).
  • Similar items: the system finds alternatives related to the current item (e.g., “similar shoes,” “more like this video,” “related courses”).

Common use cases (and why they matter)

  • Shopping: “recommended for you,” “frequently bought together,” personalized offers.
  • Media & entertainment: home feed, “up next,” playlists.
  • News & communities: topic feeds, “read next,” suggested follows.
  • Learning: course paths, practice sets, skill-level recommendations.
  • Travel & local: destination ideas, hotel sorting, itinerary suggestions.

How to define success

Recommendations should map to measurable outcomes. Typical metrics include CTR (tap-through rate), conversion (purchase/subscription), watch time/read time, and longer-term retention (day 7/day 30 return rates).

Pick one “north star” metric and add a couple of guardrails (e.g., bounce rate, refunds, churn, or feed load time) so you don’t accidentally optimize for clicks that don’t matter.

Set the right expectation

A recommendation engine is not a one-time feature. It usually starts simple and gets smarter as your app collects better signals (views, clicks, saves, purchases, skips) and learns from feedback over time.

Pick the Right Use Case and User Journey

Recommendations work best when they solve a specific “stuck moment” in your app—when users don’t know what to do next, or there are too many options to choose from.

Before thinking about models, choose the exact journey step where recommendations can remove friction and create a clear win for both users and the business.

Identify the core journey where recommendations matter

Start with the path that drives most value (and has the most decision points). For example:

  • A shopping app: browsing → comparing → choosing
  • A content app: opening → finding something to watch/read → staying engaged
  • A marketplace: searching → evaluating → contacting or booking

Look for high drop-off screens, long “time to first action,” or places where users repeatedly back out and try again.

Choose one primary recommendation surface

To keep your MVP focused, pick one surface to start with and do it well:

  • Home feed: great for discovery, but harder to evaluate because it mixes many intents.
  • Search: great when users express intent; recommendations can improve results or suggest “related searches.”
  • Product/detail page: strong context (“similar items,” “people also viewed”), often easiest to make useful quickly.

A practical default for many apps is the product/detail page, because the current item is a strong signal even when you know nothing about the user.

Define user goal vs. business goal

Write these as one sentence each for your chosen surface:

  • User goal: what the person is trying to accomplish right now (e.g., “Help me find something I’ll like quickly without scrolling forever”).
  • Business goal: what success means for the app (e.g., “Increase add-to-cart rate,” “Improve retention,” “Grow watch time”).

This keeps you from building something that’s “accurate” in theory but doesn’t move outcomes.

Write 3–5 user stories for the surface

Keep them specific and testable. Examples:

  • “As a new user, show me popular picks so I can start without setting preferences.”
  • “As a returning user, help me continue where I left off.”
  • “When I view an item, show similar options so I can compare quickly.”
  • “When I search, surface relevant alternatives if my query has few results.”

Once these are clear, you’ll have a concrete target for data collection, model choice, and evaluation.

Plan Your Data: Events, Items, and User Signals

Recommendations are only as good as the signals you feed them. Before you pick an algorithm, map what data you already have, what you can instrument quickly, and what you should avoid collecting.

What you likely already have vs. what you need

Most apps start with a mix of “backend truth” and “app behavior.” Backend truth is reliable but sparse; app behavior is rich but requires tracking.

  • Often already available: user accounts (if any), orders/subscriptions, inventory/catalog, search queries on the server, customer support tags.
  • Usually needs collection: in-app browsing events (views, clicks, skips), time spent, scroll depth, “not interested,” follows/saves, and exposure logs (what you recommended).

Treat “exposure” as first-class data: if you don’t record what was shown, it’s hard to evaluate bias, diagnose issues, or measure lift.

Define your key events (with consistent rules)

Start with a small, well-defined event set:

  • view (item detail opened, not just rendered)
  • click (from a list/recommendation module)
  • add_to_cart / save
  • purchase / subscribe
  • skip (explicit dismissal or quick bounce)
  • like / rating (if you collect it)

For each event, decide (and document): timestamp, item_id, source (search/feed/reco), position, and session_id.

Plan item metadata that won’t rot

Recommendations improve dramatically with clean item fields. Common starters include category, tags, price, length (e.g., read time/video duration), and difficulty (for learning/fitness).

Keep a single “item schema” shared by analytics and your catalog service, so the model and the app speak the same language.

Guest users vs. logged-in users

Define identity early:

  • Guest: use an anonymous device/app instance ID and session-based signals.
  • Logged-in: merge guest history into the account on signup/login.

Make merge rules explicit (what to merge, how long to keep guest history), and document them so your metrics and training data stay consistent.

Good recommendations need data, but trust is what keeps users around. If people don’t understand what you collect (or feel surprised by it), personalization can quickly feel “creepy” instead of helpful.

The goal is simple: be clear, collect less, and protect what you keep.

Ask for permission at the moment it makes sense—right before a feature needs it—not all at first launch.

For example:

  • If recommendations use location, request location access when the user taps “Nearby.”
  • If you use contacts for “Find friends,” explain what will happen before showing the system prompt.

Keep consent wording plain: what you collect, why you collect it, and what the user gets in return. Provide a “Not now” path whenever the feature can still work (even if less personalized). Link to your Privacy Policy using a relative link like /privacy.

Data minimization: collect only what you need

A recommendation engine rarely needs raw, sensitive detail. Start by defining the minimal signals required for your chosen use case:

  • Instead of storing full search queries, you may only need categories or intents.
  • Instead of saving exact timestamps, you may only need “recently viewed” ordering.

Collect fewer event types, reduce precision (e.g., coarse location), and avoid storing unnecessary identifiers. This lowers risk, reduces compliance overhead, and often improves data quality by focusing on signals that actually help ranking.

Retention and deletion: build it into the system early

Set a retention window for behavioral logs (for example, 30–180 days depending on your product) and document it internally. Make sure you can honor user-requested deletion: remove profile data, identifiers, and associated events used for personalization.

Practically, that means:

  • A user-facing control (e.g., “Delete my data” or “Reset recommendations”).
  • A backend process that propagates deletion through analytics, feature stores, and training datasets.

Sensitive categories: use extra care (or avoid entirely)

Be especially cautious with health data, data about children, and precise location. These categories often trigger stricter legal requirements and higher user expectations.

Even if it’s allowed, ask: do you truly need it for the recommendation experience? If yes, add stronger safeguards—explicit consent, stricter retention, limited access internally, and conservative defaults. For kids-focused apps, assume additional restrictions and consult legal guidance early.

Design the Recommendation Experience in the App

A recommendation engine can be excellent and still feel “wrong” if the in-app experience is confusing or pushy. Your goal is to make recommendations easy to understand, easy to act on, and easy to correct—without turning the screen into a wall of suggestions.

MVP UI patterns that work

Start with a few familiar modules that fit naturally into common mobile layouts:

  • “Because you watched/read/bought…”: explains why the row exists and builds trust.
  • “Similar items”: great on detail pages when the user is already in exploration mode.
  • “Top picks for you”: a home-screen row for broad personalization once you have signals.

Keep module titles specific (e.g., “Because you listened to Jazz Classics”) rather than generic (“Recommended”). Clear labels reduce the feeling that the app is guessing.

Don’t overwhelm users

Personalization is not a license to add endless carousels. Limit the number of recommendation rows per screen (often 2–4 is enough for an MVP) and keep each row short. If you have more content, provide a single “See all” entry that opens a dedicated list page.

Also think about where recommendations fit best:

  • On the home screen for discovery
  • On item/detail pages for “similar” exploration
  • After an action (finish, purchase, like) as a gentle next step

Add user controls (and make them visible)

Recommendations improve faster when users can correct them. Build lightweight controls into the UI:

  • Hide this item
  • Dislike / Not interested
  • Why am I seeing this? (one sentence is enough)
  • Reset preferences (in settings, not buried)

These controls aren’t just for UX—they generate high-quality feedback signals for your recommendation engine.

Design for cold start and empty states

New users won’t have history, so plan an empty state that still feels personalized. Options include a short onboarding picker (topics, genres, goals), “Trending near you,” or editor’s picks.

Make the empty state explicit (“Tell us what you like to personalize your picks”) and keep it skippable. The first session should feel useful even with zero data.

Choose an Approach: Rules, ML, or Hybrid

Instrument Without Overcollecting
Draft a safe event schema and privacy-friendly defaults, then build only what you need.

You don’t need a complex model to start delivering useful recommendations. The right approach depends on your data volume, how fast your catalog changes, and how “personal” the experience must feel.

Rules: fast, predictable, and great for an MVP

Rule-based recommendations work well when you have limited data or want tight editorial control.

Common simple options include:

  • Popularity: “Most played,” “Most purchased,” “Trending this week.” Easy to explain and usually safe.
  • Newest: “Just added” items. Helps discovery when your catalog updates often.
  • Curated lists: Staff picks, seasonal collections, or category spotlights. Great for brand voice and guiding new users.

Rules are also useful as fallbacks for the cold start problem.

ML Option 1: content-based filtering (uses item metadata)

Content-based recommendations match items similar to what a user already liked, based on item features such as category, tags, price range, ingredients, artist/genre, difficulty level, or embeddings from text/images.

It’s a strong fit when you have good metadata and want recommendations that remain meaningful even with fewer users. It can get repetitive without variety controls.

ML Option 2: collaborative filtering (uses behavior patterns)

Collaborative filtering looks at user behavior (views, likes, saves, purchases, skips) and finds patterns like: “People who engaged with X also engaged with Y.”

This can surface surprising, high-performing suggestions, but it needs enough interactions to work well and can struggle with brand-new items.

Hybrid: practical personalization for real apps

Hybrid systems combine rules + content + collaborative signals. They’re especially useful when you need:

  • Strong results for new users and new items
  • Better diversity (mix familiar and fresh)
  • A safety net when data is missing or noisy

A common hybrid setup is to generate candidates from curated/popular lists, then re-rank with personalized signals where available.

Architecture Options for Mobile Recommendations

Where your recommendation engine “lives” affects cost, speed, privacy posture, and iteration velocity.

Buy vs. build: hosted API or custom service

Hosted recommendation APIs can be best for an MVP: faster setup, fewer moving parts, and built-in monitoring. The trade-off is less control over modeling details and sometimes higher long-term cost.

A custom recommendation service (your own backend) gives you full control over ranking logic, experimentation, and data usage. It usually requires more engineering: data infrastructure, model training, deployment, and ongoing maintenance.

If you’re early, a hybrid approach often works well: start with a simple custom service + rules, then add ML components as signals grow.

If your bottleneck is simply building the app surfaces and backend plumbing fast enough to start collecting signals, a vibe-coding platform like Koder.ai can help you prototype the recommendation UI and endpoints quickly from a chat-based workflow. Teams commonly use it to spin up a React-based web admin, a Go + PostgreSQL backend, and a Flutter mobile app, then iterate with snapshots/rollback as experiments evolve.

Typical components (even for “simple” systems)

Most production setups include:

  • App analytics/event collection (clicks, views, purchases)
  • Data pipeline to clean/join events with item catalog data
  • Feature store (or a simpler feature table) for reusable user/item signals
  • Model training + evaluation loop
  • Model serving service (API that returns ranked items)
  • Cache (Redis/CDN-like) to keep latency low and reduce compute

On-device vs. server-side recommendations

Server-side is the default: easier to update models, run A/B tests, and use larger compute. The downside is network dependency and privacy considerations.

On-device can reduce latency and keep some signals local, but model updates are harder, compute is limited, and experimentation/debugging is slower.

A practical middle ground is server-side ranking with small on-device UI behaviors (e.g., local re-ordering or “continue watching” tiles).

Define SLAs and fallback behavior

Set clear expectations early:

  • Latency target (e.g., p95 < 200–400 ms from the app)
  • Uptime (e.g., 99.9% for the recommendation endpoint)
  • Fallbacks when data is missing or the service is down: trending items, editorial picks, or category-based defaults

This keeps the experience stable while you iterate on quality.

Build the Data Pipeline and Training Loop

Get Credits for Sharing
Reduce costs by earning credits when you share your build or refer teammates to Koder.ai.

A recommendation engine is only as good as the pipeline feeding it. The goal is a repeatable loop where app behavior becomes training data, which becomes a model, which improves the next set of recommendations.

End-to-end data flow (what goes where)

A simple, reliable flow looks like:

App events (views, clicks, saves, purchases) → event collector/analytics SDK → backend ingestion (API or stream) → raw event store → processed training tables → model training job → model registry/versioning → serving API → app UI.

Keep the app’s role lightweight: send consistent events with timestamps, user IDs (or anonymous IDs), item IDs, and context (screen, position, referrer).

Preprocessing that makes training data usable

Before training, you’ll typically:

  • Clean: drop malformed events, fix missing item IDs, standardize timezones.
  • Deduplicate: remove repeated sends from retries, double-taps, or offline resync.
  • Sessionize: group events into sessions (e.g., 30 minutes of inactivity starts a new session) so you can learn “what users do next,” not just what they do overall.

Also define what counts as a “positive” signal (click, add-to-cart) vs. exposure (impression).

Train/validation split without leakage

Avoid random splits that let the model “peek” into the future. Use a time-based split: train on earlier events and validate on later events (often per user), so offline metrics better reflect real app behavior.

Retraining cadence and model versions

Start with a cadence you can sustain—weekly is common for MVPs; daily if inventory or trends change quickly.

Version everything: dataset snapshot, feature code, model parameters, and evaluation metrics. Treat each release like an app release so you can roll back if quality drops.

Modeling Tips: Ranking, Cold Start, and Diversity

A recommendation model isn’t just “one algorithm.” Most successful apps combine a few simple ideas so results feel personal, varied, and timely.

Think in two stages: candidates → ranking

A common pattern is two-stage recommendation:

  • Candidate generation answers: “Which 200–1,000 items could work for this user right now?” It should be fast and broad.
  • Ranking answers: “In what order should we show these items?” It’s more precise and can use richer signals.

This split keeps your app responsive while still allowing smarter ordering.

Embeddings, explained simply

Embeddings turn users and items into points in a multi-dimensional space where “closer” means “more similar.”

  • Items with similar topics or usage patterns end up near each other.
  • A user embedding represents recent interests (based on clicks, saves, watch time, purchases, etc.).

In practice, embeddings often power candidate generation, and a ranking model refines the list using richer context (time of day, session intent, price range, recency, and business rules).

Handle the cold start problem early

Cold start happens when you don’t have enough behavior data for a user or a new item. Reliable solutions include:

  • Onboarding quiz: ask 3–5 lightweight questions (interests, goals, preferred categories). Use answers to seed the first candidates.
  • Popular-by-category: show what’s trending, but scoped to the user’s chosen category, region, language, or price tier.
  • Metadata similarity: recommend items “like this” using tags, text, creator, brand, or attributes—even before you have interaction data.

Add diversity and freshness so feeds don’t feel repetitive

Even a strong ranker can over-focus on one theme. Add simple guardrails after ranking:

  • Diversity caps: limit repeated categories/creators (e.g., no more than 2 from the same creator in the top 10).
  • Freshness boosts: gently promote new or recently updated items.
  • Fatigue controls: downrank items the user has skipped multiple times.

These guardrails make recommendations feel more human—useful, not monotonous.

Evaluate Quality: Metrics and A/B Testing

Recommendation quality isn’t a feeling—you need numbers that show whether users are actually getting better suggestions. Measure in two places: offline (historical data) and online (in the live app).

Offline metrics (before you ship)

Offline evaluation helps you compare models quickly using past interactions (clicks, purchases, saves). Common metrics include:

  • Precision@K: of the top K recommendations, how many were relevant?
  • Recall@K: how many of the relevant items did you successfully surface in the top K?
  • MAP (Mean Average Precision): rewards models that rank relevant items higher across many users.
  • NDCG (Normalized Discounted Cumulative Gain): similar to MAP, but explicitly values relevant items near the top more.

Offline scores are great for iteration, but they can miss real-world effects like novelty, timing, UI, and user intent.

Online metrics (after you ship)

Once recommendations are live, measure behavior in context:

  • CTR (click-through rate) on recommended items
  • Conversion rate (purchase, subscribe, add-to-cart, etc.)
  • Dwell time (time spent consuming recommended content)
  • Retention (e.g., D7/D30 return rate)

Choose one primary metric (like conversion or retention) and keep supporting metrics as guardrails.

Why you need a baseline

Without a baseline, “better” is guesswork. Your baseline might be most popular, recently viewed, editor picks, or simple rules.

A strong baseline makes improvements meaningful and protects you from shipping a complex model that performs worse than a basic approach.

A/B testing with guardrails

Run controlled A/B tests: users randomly see control (baseline) vs. treatment (new recommender).

Add guardrails to catch harm early, such as bounce rate, complaints/support tickets, and revenue impact (including refunds or churn). Also watch performance metrics like feed load time—slow recommendations can quietly kill results.

Production Readiness: Performance, Monitoring, and Feedback

Own Your Codebase
Keep ownership by exporting source code when you are ready to move beyond the prototype.

Shipping recommendations isn’t just about model quality—it’s about making the experience fast, reliable, and safe under real traffic. A great model that loads slowly (or fails silently) will feel “broken” to users.

Performance that feels instant

Aim for predictable scrolling and quick transitions:

  • Caching: Cache top results per user (or segment) with a short TTL. Cache item metadata separately so you don’t re-download titles/images on every refresh.
  • Pagination: Return results in pages (e.g., 10–20 items). Keep the first page lightweight and load the rest as the user scrolls.
  • Prefetching: Preload the next page when the user is halfway through the current page, and prefetch item details for likely taps.
  • Graceful fallbacks: If the recommender is slow or unavailable, fall back to trending/new/rule-based lists. Make this a product decision, not an error state.

Monitoring that catches issues early

Track the full chain from event collection to on-device rendering. At minimum, monitor:

  • Latency (P50/P95) for recommendation API calls and end-to-end time-to-render
  • Error rate and timeout rate, split by app version and network type
  • Data freshness: delays in event ingestion, feature updates, and training jobs
  • Model drift: changes in score distributions, CTR, or conversion by cohort that suggest the model is getting stale or behavior shifted

Add alerting with clear owners and playbooks (what to roll back, what to disable, what to degrade to).

Feedback loops and abuse resistance

Give users explicit controls: thumbs up/down, “show less like this,” and “not interested.” Convert these into training signals and (when possible) immediate filters.

Plan for manipulation: spammy items, fake clicks, and bot traffic. Use rate limits, anomaly detection (suspicious click bursts), deduping, and downranking for low-quality or newly created items until they earn trust.

Launch and Iterate with a Clear Roadmap

Shipping recommendations isn’t a single “go live” moment—it’s a controlled rollout plus a repeatable improvement loop. A clear roadmap keeps you from overfitting to early feedback or accidentally breaking the core app experience.

Phased rollout: reduce risk while you learn

Start small, prove stability, then widen exposure:

  • Internal test: dogfood with employees and test accounts. Validate tracking, latency, and fallbacks.
  • Beta: invite a limited set of real users (or a specific region/device cohort). Watch qualitative feedback and edge cases.
  • % rollout: release to 1% → 5% → 20% → 50% → 100%, with the ability to pause or roll back instantly.

Keep the old experience available as a control so you can compare outcomes and isolate the impact of recommendations.

Launch checklist (keep it simple)

Before increasing rollout percentage, confirm:

  • Events verified: key analytics events fire correctly (impressions, clicks, add-to-cart/plays, conversions, dismiss/skip).
  • Dashboards ready: baseline metrics, segment views (new vs returning, iOS vs Android), and alerting for drops.
  • Fallbacks work: if personalization fails, show popular/trending, curated lists, or recent items—never an empty screen.
  • Safety checks: blocked items don’t appear; consent rules are enforced; rate limits and caching prevent overload.
  • Experiment setup: A/B groups are stable, and you can attribute outcomes (not just clicks).

Iteration cycles driven by data and feedback

Run improvements in short cycles (weekly or biweekly) with a consistent rhythm:

  1. Diagnose with analytics (CTR, conversion, retention) and error logs (timeouts, missing data).
  2. Listen to feedback (app reviews, in-app surveys, support tickets) to learn the “why” behind metrics.
  3. Change one thing: UI placement, candidate filters, reranking, diversity rules, or cold-start strategy.
  4. Re-test via A/B or staged rollout, then decide: keep, revert, or iterate.

If you want implementation details and rollout support options, see /pricing. For practical guides and patterns (analytics, A/B testing, and cold start), browse /blog.

If you’re trying to move quickly from “idea” to a working recommendation surface (feed/detail modules, event tracking endpoints, and a simple ranking service), Koder.ai can help you build and iterate faster with planning mode, deploy/host, and source code export—useful when you want the speed of a managed workflow without losing ownership of your codebase.

FAQ

What’s the best first recommendation use case to build in a mobile app?

Start with one surface where users commonly get “stuck,” such as a product/detail page or search results. Write one user goal and one business goal (e.g., “help me compare quickly” vs. “increase add-to-cart rate”), then define 3–5 user stories you can test.

A focused MVP is easier to instrument, evaluate, and iterate than a broad “personalized home feed” on day one.

Which analytics events are essential for training and evaluating recommendations?

Most apps use a small set of interaction events:

  • view (detail opened, not just shown)
  • impression/exposure (what recommendations were displayed)
  • click (tap from a recommendation module)
  • save / add_to_cart
  • purchase / subscribe
  • skip / dismiss / quick bounce

Include consistent fields like user_id (or anonymous ID), item_id, timestamp, source (feed/search/reco), position, and session_id.

Why do I need to track “exposures” (impressions) for recommendations?

Log an exposure (impression) event whenever a recommendation module renders with a specific ordered list of item IDs.

Without exposure logging you can’t reliably compute CTR, detect position bias, audit what users were shown, or understand whether “no click” was because items were bad or because they were never displayed.

How should I define success metrics for a recommendation feature?

Pick one primary “north star” metric aligned to the surface (e.g., conversion on a shopping detail page, watch time on a media feed). Add 1–3 guardrails such as bounce rate, refunds/cancellations, complaint rate, or latency.

This prevents optimizing for easy wins (like CTR) that don’t improve real outcomes.

How do I handle cold start for new users and new items?

Use a layered fallback strategy:

  • For new users: popular/trending, curated lists, or onboarding picks
  • For new items: metadata similarity (tags/category/creator) and freshness boosts
  • When the service fails: cached results or a simple rules-based list

Design the UI so empty states never show a blank screen—always show a safe default list.

When should I use rules vs. ML for recommendations?

Rules are best when you need speed, predictability, and a strong baseline (popularity, newest, curated lists). Content-based filtering works well when item metadata is strong and you want relevance with limited user interactions.

Collaborative filtering typically needs more behavior volume and struggles with brand-new items, so many teams adopt a hybrid: rules for coverage, ML for re-ranking when signals exist.

What does a “hybrid” recommendation system look like in practice?

Build a hybrid system that combines:

  • A safe base set (popular/curated)
  • Personalized candidate sources (similar items, “people also engaged with”)
  • A ranking layer that uses context (recency, price range, session intent)
  • Post-ranking rules for diversity and safety

This approach improves coverage, reduces repetitiveness, and gives reliable fallbacks when data is sparse.

How do I keep recommendations fast and reliable on mobile?

Set clear product and engineering targets:

  • Latency (e.g., p95 under 200–400 ms in-app)
  • Uptime (e.g., 99.9% for the endpoint)
  • Fallback behavior (trending/curated if personalized results aren’t available)

Use caching (per user/segment), return results in pages (10–20 items), and prefetch the first page so screens feel instant even on poor networks.

How do I evaluate models offline without “data leakage”?

Use a time-based split: train on earlier interactions and validate on later ones. Avoid random splits that can leak future behavior into training.

Also define what counts as a positive (click, add-to-cart) vs. just an impression, and deduplicate/sessionize events so your labels reflect real user intent.

What privacy and consent practices matter most for personalized recommendations?

Collect only what you need, explain it clearly, and give users control:

  • Ask for permission at the moment it’s needed (not all at first launch)
  • Minimize sensitive data (coarse location, fewer identifiers)
  • Set retention windows for behavioral logs (e.g., 30–180 days)
  • Provide “Reset recommendations” and “Delete my data” controls

Link policy details with a relative URL like /privacy and ensure deletions propagate to analytics, feature stores, and training datasets.

Related posts