Systems Stack
Speed: kill the app, use native, or build in theme.
When to kill an app, replace it with native Shopify features, or build the feature in the theme. Speed optimization by reducing JavaScript, removing unused apps, and custom code.
Last updated: September 10, 2026
| Band | Install / use | Skip | Replace with |
|---|---|---|---|
| $50K/year | Delete unused apps + leftover code | Over-optimizing the theme | Native subs/bundles/gift cards |
| $250K/year | Audit JS; keep useful apps | Slow widgets you don't measure | Theme Liquid for displays; native subs |
| $1M/year | Build most features in theme | Popup/chat bloat apps | Checkout extensibility + metafields |
Speed stack at $50K/year
Do: Delete unused apps and their leftover code. Go to Apps in Shopify admin. Uninstall anything you haven't used in 3 months. Then open your theme code: check theme.liquid (look for app snippets like {% raw %}{% render 'app-name-snippet' %}{% endraw %}), check Assets folder (delete unused JavaScript and CSS files like app-name.js, app-name.css). Uninstalling an app doesn't remove its code. Leftover code still loads on every page.
Replace with native: Subscriptions, bundles, gift cards. Shopify now has native subscriptions (no ReCharge or Bold needed for simple subscribe-and-save), native bundles (fixed-product bundles, no app), and native gift cards (always been native, but some stores use apps). If you're paying $30+/month for what Shopify does free, replace it.
Skip: Over-optimizing. At $50K/year, don't rewrite the theme to save 100ms. Delete unused apps, clean leftover code, use native features. That's 80% of speed work. Don't obsess over a raw Lighthouse score. Google's real Core Web Vitals targets are LCP under 2.5 seconds, INP under 200 milliseconds, and CLS under 0.1, measured at the 75th percentile of real visitors.
Kill signal: You uninstalled an app 6 months ago but its JavaScript still loads. Check your theme code. Search for the app name in theme.liquid and Assets folder. If you see leftover snippets or files, delete them. This is "ghost code." It costs speed and does nothing.
Speed stack at $250K/year
Do: Audit JavaScript cost on product page. Start with Shopify admin's own Online Store Speed report (Analytics > Reports > Online Store Speed), it's free and already scoring your home, product, and collection pages. Then run Lighthouse (Chrome DevTools, or PageSpeed Insights) for the detailed breakdown. Check "JavaScript execution time" in the diagnostics. If total JavaScript is over 2 seconds, find the culprits. Common offenders: reviews widgets (Judge.me, Loox), upsell apps (PickyStory, Zipify OCU), popup apps (Privy, Justuno), chat widgets (Tidio, Gorgias Chat). If an app is adding 400–600ms+, it's costing conversions.
Replace with theme code: Slow widget displays. Most apps load JavaScript that fetches data client-side (reviews, upsells, etc.). Replace the display widget with server-rendered Liquid: keep the app for data collection (reviews, email capture, etc.), but fetch and display data in the theme (via app API or metafields). Product page JavaScript drops 300–600ms. Example: Judge.me widget → Liquid reviews display (still use Judge.me for collection).
Replace with native: ReCharge → native subscriptions (if simple). If you're using ReCharge for basic subscribe-and-save (10% off, deliver every 30 days), switch to Shopify's native subscriptions (free, faster, no app). ReCharge still makes sense for complex use cases (skip a delivery, swap products, prepaid subscriptions). But for simple subscribe-and-save, native is faster and free. Subscriptions covers the full decision by band.
Kill signal: Your product page fails Core Web Vitals on mobile. If LCP is over 2.5 seconds or INP is over 200 milliseconds on your product page, you have app bloat. The page is slow enough to hurt conversions. Audit JavaScript cost, delete unused apps, replace slow widgets with theme code.
Speed stack at $1M/year
Do: Replace most apps with theme code. At $1M/year, a slow product page costs real conversions, and the math scales with your traffic, not a generic percentage anyone can quote you. Build features in the theme: bundles (metafields + Liquid), upsells (cart drawer + Liquid), reviews display (fetch from app API or metafields), email capture (native form + Customer API), FAQ accordions (Liquid). Store data in metafields, render server-side. Product page JavaScript drops from 3–4 seconds to under 1 second.
Replace with native: Checkout extensibility, subscriptions, bundles. Use Shopify's native checkout extensibility (add custom fields, upsells, etc. via Shopify Functions, not apps that inject scripts), this generally requires Shopify Plus, so check your plan before you count on it. Use native subscriptions (if you're still on ReCharge for simple subscribe-and-save, migrate to native). Use native bundles (if fixed-product bundles, no dynamic "build your own"). Native is always faster than third-party apps.
Kill entirely: Popup apps, heavy chat widgets. Most popup apps (Privy, Justuno, Klaviyo popups) add 300–800ms JavaScript. Build email capture in the theme (footer form, drawer, or lightweight scroll-triggered modal in theme JS). Most chat widgets (Tidio, Intercom, Gorgias Chat) add 400–1000ms. Use Shopify Inbox (free, native, fast) or build a custom chat interface (theme-based chat drawer + API).
Kill signal: Customer says "the page is slow" or cart abandonment is climbing despite a good product. Cart abandonment averages around 70% industry-wide, so a strong product with a rate well past that is worth a speed audit. Run Lighthouse or check the Online Store Speed report on product and cart pages. If LCP is over 2.5 seconds or INP is over 200 milliseconds at the 75th percentile, you're losing conversions.
Ongoing: Speed is not one-time. The next app install, theme update, or feature launch will add JavaScript. We offer a retainer so the next app doesn't undo the speed work. Speed optimization covers the full problem.
Uninstall ≠ gone
Kill signal: App deleted in admin, PDP still loads its script. Check theme.liquid, layout/theme, Assets, and leftover app blocks. Ghost code is theme debt, same files as speed.
At this ICP: Delete unused apps first. Replace slow widgets with native or theme code second. Don't buy a "speed app" that defers junk you should remove.
When to call us
We audit the app stack, replace slow widgets with theme code, and rebuild features natively. We also clean up theme debt (leftover code, unused CSS, bloated JavaScript). Storefront, business automations, and email. A project or a retainer. Speed optimization covers the full scope.
Straight answers.
Run Lighthouse on the product page. Check the JavaScript execution time. If an app is adding 500ms+ to load time, it's a problem. Most apps inject JavaScript that blocks rendering.