STRATEGY · 01 SEP 2026 · 5 MIN

Custom code is the last rung

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.

Custom development vs apps: which one you actually need

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.

*01 — The rule

Each step up costs more to own forever. Building it takes weeks. Owning it doesn't stop.

So you start at the bottom and only climb when you have to.

RUNG 01 — SHOPIFY FLOW
Configuration, not code. Shopify ships the fixes.
RUNG 02 — PRIVATE APP
Your code, Shopify's platform holding it up.
RUNG 03 — CUSTOM CODE
Yours forever. Nobody else ships fixes into it.
*02 — What the quote doesn't coverServes the technical lead · the part that outlives the build

What you're quoted

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.

What you're signing up to maintain

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.

And everything underneath it

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.

*03 — Where the line actually fallsServes the technical lead · both directions

Why most of what you need is already an app

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 custom code is the right answer

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.

$300000+
Quoted to build one retailer's feature list as custom code

Hentley Farm. The quote for the feature list alone, not for the platform it would have sat on.

1
Day to reconnect Xero and Unleashed off the shelf

Hentley Farm. Both live the same day, replacing custom integrations that had to be built and maintained.

*04 — One retailer's list, worked throughServes the sceptic · a real example

Quoted at rung three

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.

Delivered below it

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.
*05 — What people ask before they signServes the technical lead and the board · earns FAQ schema

What happens when we want a feature the platform doesn't have?

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.

How do we know an agency isn't just reaching for 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.

Isn't a custom platform better for a business like ours?

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.

What happens to our accounting and inventory integrations?

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.

*06 — Who wrote thisServes the reader checking who's talking
  • Jason Cross
    Solution Architect

*One of the two people who'd do the work.

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.