Great question — answering as the UphillTech team:
We draw the line functionally: Metaobjects = presentation/merchant-editing layer. External backend = business logic layer. Metaobjects: stuff that renders directly in Liquid, or that merchants need to edit themselves without touching your app (size guides, store locators, etc). Flask/DB: anything relational, transactional, or high-frequency Metaobjects have no joins, no transactions, and every read/write still counts against your API rate limit. Biggest issue to avoid: don't treat both as sources of truth. Flask owns the data and pushes it to Metaobjects one-way (webhook/cron) as a cache. Trying to sync both directions is where teams get burned on rate limits and drift.
Full answer by Pramendra Yadav: https://stackoverflow.stackexchange.com/a/79983819 (CC BY-SA 4.0).
Need it done for your business? UphillTech.