The honest position is that most app briefs do not need an app. The App Store carries thousands of listings, and for subscriptions, reviews, loyalty, bundling, upsells, returns and the other well-trodden categories, a mature paid app is almost always cheaper, faster and better maintained than anything bespoke. It also gets fixed by someone else when Shopify changes an API. If your requirement has a category name, start by shopping for it. Building it yourself buys you control you probably do not need and a maintenance liability you definitely do not want.
Below that, there is a tier of problems that look like app problems and are not. Shopify Flow handles a surprising amount of conditional automation with no code at all. Metafields and metaobjects plus a theme change cover most structured-content and merchandising asks. A Function on its own, with no surrounding app, covers a lot of pricing and delivery logic. Ordering these correctly from cheapest to most expensive, rather than jumping to a build, is the single biggest saving available on this kind of project, and it is the first thing the scoping call does.
A custom app earns its cost in three situations. First, when the workflow is genuinely specific to your business and doing it by hand is consuming real staff hours every week. Second, when Shopify has to stay in sync with a system that no public app supports, which in practice means an ERP, a warehouse system, a legacy accounting package or an in-house tool. Third, when the data or the logic cannot sit inside a third-party app, whether for commercial confidentiality or because a public app's pricing scales badly against your order volume. If your situation is one of those three, a build is the right call and the economics usually work quickly.