By Jason Cross · Solution Architect
Shopify Flow, then a private app, then custom code. Each rung costs more to own forever, and most feature requests never need the top one.

Sooner or later you'll want the site to do something Shopify doesn't do out of the box. Then somebody has to decide how much of it you're going to own.
Most agencies answer with a quote. The answer that saves you money is a question back: which rung does this actually need?
Because there's an order, and it isn't negotiable. Shopify Flow first. Then a private app. Then custom code.
So you start at the bottom and only climb when you have to.
The build. Someone scopes the feature, estimates the days, sends a number.
It's the only figure in the room, so it's the one everybody argues about. It's also the one that stops mattering the week after launch.
Shopify ships a new API version every quarter and supports each one for about twelve months. Anything you own that talks to that API needs moving onto a current version roughly once a year. Forever.
Miss that window and nothing errors. Shopify falls forward and serves your request on the oldest version it still supports, so the integration keeps running on behaviour you didn't write and never tested. It works right up until it quietly doesn't.
You find out from a customer.
The dependencies your code pulls in, with security advisories filed against them. A library whose maintainer stopped answering two years ago. Somebody has to be watching for that, and the watching never finishes.
An app vendor does all of it every quarter, because thousands of stores break if they don't. Your custom code has you and your agency's rates. Ours included.
Shopify's whole company exists to do this one thing, and it ships to you the day it lands — nothing to scope, nothing to quote, no slot to wait for in someone's build queue.
Our rule of thumb: between the API and the App Store, about 99% of what a retailer needs is already built and already maintained by someone else. The interesting argument is only ever about the other 1%.
Skip a rung and you pay for it twice — once to build the thing, then again every year you own something a subscription would have covered.
When the first two rungs genuinely can't carry it. That happens. The last 1% is real, and pretending otherwise is how you end up with an app stack held together by luck.
What goes wrong is reaching for it without checking the rung below first.
If you're asking this during a replatform, the order still holds. It just applies to a longer list.
Hentley Farm. The quote for the feature list alone, not for the platform it would have sat on.
Hentley Farm. Both live the same day, replacing custom integrations that had to be built and maintained.
Hentley Farm brought a spreadsheet of things they wanted the business to be able to do. Gift cards were on it.
Priced as custom development on the platform they already owned, the list came to upwards of $300,000 — a fresh bill on top of the one they'd already paid.
They got the whole spreadsheet on Shopify, as apps and configuration. None of it needed custom code.
Eight years of order history came across in the same move.
The line item for support and new features went away.
“It works right up until it quietly doesn't.”
There's an order, and the bottom rung is the one you never have to maintain. Shopify Flow handles it with configuration. If Flow can't, a private app does it with code you own but Shopify still hosts and updates around. Only if neither works do you write custom code, and that's the rung nobody else will ever maintain for you. One retailer brought us a full list of wants and none of it needed custom code.
Ask which rung they're proposing, and why the one below it wouldn't do. A good answer names the specific thing Flow or an app can't handle. A vague one usually means nobody checked, and custom code ends up on your maintenance list rather than theirs.
A platform is only as hardened as the number of businesses that have already broken it — every bug someone else hit is one you never see. We've migrated a retailer off a CMS that had other clients but only one running ecommerce on it. They found the bugs first, every time. The fixes were on them as well.
If your systems are common ones, you stop maintaining the integration yourself and let the vendor do it — rung one, by another name. Xero and Unleashed both have off-the-shelf Shopify integrations. On one migration they reconnected in a day, replacing custom ones that had to be built and maintained.
If you've been quoted for custom development, ask which rung it needs — and why the one below wouldn't do.We put the same question to ourselves before we quote. If custom code is the only thing that will do the job, we'll say so and build it. Otherwise we work through what already exists first.Either way, know how much of it you're about to own.