Loyalty by architecture, not by feature

Most loyalty programs are features — points, discounts, a stamps card. Features can be removed in the next sprint. Architecture choices can't. A different way to think about retention for vertical SaaS.

Walk into any small business that has been on the wrong end of a marketplace platform's policy change and you will hear the same story. They onboarded onto the platform because the platform brought customers. They invested in the platform's "loyalty features" because the platform told them retention was solved. A year later, the platform changed its discovery algorithm, the customers it had been routing started seeing other shops, and the small business found that the loyalty features they had paid for were a thin layer over a system that fundamentally did not have their interests at the centre.

That story is not a complaint about any particular platform. It is a story about a category — horizontal marketplaces with vertical SaaS bolted on — whose incentives structurally do not align with the small operator. The marketplace's incentive is to keep customers inside the marketplace. The shop's incentive is to keep customers loyal to that specific shop. Those two incentives look aligned at the start. They diverge in every direction the moment the marketplace decides to optimise for itself.

If you are building software for a small operator — a shop, a clinic, a salon, a service business, any vertical where the operator's whole livelihood depends on a stable customer relationship — this divergence is the single most important thing to design around. And the way to design around it is structural, not feature-shaped.

Why feature-shaped loyalty fails

Most software products labelled "loyalty" are features in the literal sense: a points balance, a stamps card, a discount triggered after the fifth visit, a referral bonus, a personalised offer. Each of those is implemented in code, lives in a particular release, and could be removed or weakened in any future release. The whole apparatus is exactly as durable as the vendor's commitment to retaining it.

This is fine when the vendor's incentives stay aligned with the operator. It collapses the moment they don't. The classic failure mode looks like this: the loyalty feature is launched with fanfare, used by the operator's customers, generates the data the vendor wanted, and is then quietly downgraded in a subsequent release because the vendor's data shows the feature isn't driving enough new conversions for them. The operator now has to either accept the downgrade or migrate to a competing platform — in either case, the loyalty their customers had to that operator was a transient artefact, dependent on the vendor's product roadmap.

Worse: most loyalty features actively prepare the operator's customers to be lifted by the vendor. A points balance held in the vendor's account is portable to whichever shop the vendor decides to surface next. A stamps card in a marketplace app is a stamps card in any shop on that marketplace. The features look like loyalty to one shop and behave, structurally, like loyalty to the platform.

/ The frame

A loyalty feature lives in a release. A release can be reverted. The "loyalty" the operator paid for is, at most, as durable as the vendor's next quarterly roadmap. For an operator whose livelihood depends on retention, that is a thin foundation.

Architectural loyalty: structural, not promotional

The alternative is to bake the loyalty into the structure of the product, in a way that cannot be removed by a feature flip without breaking the product itself.

Concretely: a vertical SaaS product where each operator has their own instance, with their own customer base, where customers do not see — and structurally cannot discover — other operators through the same app. There is no marketplace surface. There is no aggregator view. There is no "shops near you" tab. Each customer who onboards onto the operator's instance is bound to that instance by the registration mechanism itself, not by a points incentive layered on top of a marketplace.

The system we built for an auto body shop pilot uses a QR-code onboarding flow as the binding mechanism. Each shop has its own unique QR code. A customer scans the code, registers as a customer of that shop, and from that moment on the customer's app shows that shop's services, that shop's mechanics, that shop's promotions. The customer does not see the shop next door. They cannot search for "auto body shops near me" inside the app, because the app does not know about the shop next door — it is a per-shop instance, not a horizontal directory.

This is not because we want to restrict the customer's choices in some paternalistic way. It is because the studio's paying customer is the shop owner, and the shop owner's livelihood depends on retention. A product that lets the shop's customers browse a competing shop is a product that has misunderstood whose interests it is serving. We did not build a marketplace; we built a per-shop tool.

A loyalty feature can be removed in the next sprint. An architecture that has no surface for the customer to discover other shops cannot be removed without throwing away the product. That is the difference between paid promotion and structural retention.

What this changes about every other design decision

Once the architecture is per-shop instead of multi-shop, a lot of other design calls fall out of it cleanly.

The customer's data belongs to the shop, not the platform. There is no shared customer table across operators. A shop's customer list is theirs; a different shop on the same software has a separate, unconnected customer list. This sounds like a privacy benefit (it is) but the more important point is structural: the shop's customer relationship is the shop's, not borrowed from the vendor.

Onboarding gets simpler. The QR-code-and-go flow is fast to use because the system already knows which shop the customer is registering with — the QR code carries that. There is no "search for your shop" step. There is no risk that the customer accidentally registers with the wrong shop. The first interaction is shaped by the shop's choice, not the customer's discovery process.

Branding is per-shop. The app the customer downloads can carry the shop's name and the shop's voice, because there is no shared marketplace identity competing for the customer's attention. The vendor's brand can sit subtly in the footer; the shop's brand sits everywhere else. This is the right hierarchy.

Promotions can be specific. Because the audience is the shop's customers and only the shop's customers, the shop owner can run a promotion that does not have to compete with the marketplace's algorithm for visibility. A "next service free" promo runs to the shop's customers exactly when the shop owner says so, because there is no recommendation engine to outbid.

Pricing aligns with the operator. Because the vendor is selling per-shop, the vendor's incentive is to keep each shop happy — not to optimise for marketplace-wide discovery metrics that may benefit some shops at the expense of others. The vendor gets paid when the shop renews; the shop renews when their customers stay. The interests line up.

The tradeoff — and why we still think it's right

Per-shop instance architecture trades growth velocity for retention durability. That is a real trade. A horizontal marketplace can plausibly add a thousand shops by signing one big partnership; a per-shop product has to be sold one shop at a time. The marketplace can show network effects ("we have more customers, so more shops join, so we have more customers"); the per-shop product cannot.

Network effects sell well to investors. They sell less well to the shop owners who are the actual customer of the software. A shop owner asked to join a marketplace is asked to add their customers to a pool of customers their competitors also fish in. A shop owner asked to install a per-shop tool is asked to add software to their own existing customer relationship. The latter is a much easier sale, and the conversation is honest in a way the marketplace pitch is not.

The deeper bet is that small operators are increasingly aware that marketplace economics turn on them. The shops, restaurants, clinics, and service businesses we have spoken to are not naive about this any more — they have watched discovery algorithms change, take rates climb, and customer relationships dilute. The market for software whose architecture is on the operator's side, rather than the platform's, is growing.

That is why we have been building this way. Not because we are ideological about the per-shop instance model, but because, when we sat down and asked who the product was actually for and what their durable interest was, the per-shop instance model was the only one that did not silently betray it.

What this means for anyone building vertical SaaS

If you are building software for small operators — vertical SaaS in any category — the question worth asking before you ship anything is: where, in the architecture, is the operator's customer relationship protected? Not in the marketing. Not in the loyalty feature roadmap. In the literal data model and the literal navigation of the product.

If the answer is "we have a points feature," you are one release from being able to remove that feature. If the answer is "we have a marketplace surface that sometimes shows other shops," you are an algorithm tweak from the operator finding out their customers can browse the competition. If the answer is "the architecture has no surface for the customer to discover anyone other than the operator who onboarded them," you have something durable.

That answer comes with costs — no marketplace network effects, no easy aggregator value-prop, harder distribution. We think those costs are honest. They reflect the fact that you are selling to one customer (the operator) and the operator's interests are stable, where a marketplace pitch tries to serve two customers (operators and consumers) whose interests diverge.

Build the structural version. The loyalty features you bolt on top become honest decoration. The architecture is the moat.


If you are building or commissioning vertical SaaS for small operators — and you are weighing the marketplace shape against a per-instance shape — that is a conversation our 30-min calls are for. Book one, or write to help@digicrafter.ai.