Loyalty Program Software Problems: The 7 That Cost Real Money, and How to Avoid Each One
The single most expensive failure in a loyalty build is silent double awarding. A point of sale (POS) terminal times out, retries the same transaction message, and without an idempotency key the ledger credits the member twice. Nobody notices, because nobody complains about extra points. Under IFRS 15 and ASC 606 those points are deferred revenue, so every duplicate quietly inflates a balance sheet liability that your auditors will eventually ask you to justify. We have seen groups discover this only when a breakage review forced a reconciliation, at which point the correction spans several years of transactions and the only honest answer to the audit question is that the number was never derivable.
Why does the rewards catalogue always get built before the ledger?
Loyalty projects are funded by marketing, and marketing can see tiers, badges, a rewards catalogue and a member app. Nobody can see a ledger. So the first release ships with a points column on the member record that gets incremented and decremented, and everyone is happy until the first serious dispute.
This is specific to loyalty because points are money. Under IFRS 15 and ASC 606 points issued with a sale are a separate performance obligation, so part of the revenue is deferred until they are redeemed or expire. A stored balance cannot be replayed, cannot survive a duplicated message, cannot explain itself to a customer on the phone and cannot be reconciled to a deferred revenue figure. You have given a marketing feature custody of a balance sheet number.
Retrofitting is the expensive part. Adding an append only ledger after two years of stored balances means the opening balance for every member is an assertion rather than a derivation, because the history that would justify it was never recorded. The fix is a scope decision made in the first design session: the ledger is release one, and earn, burn, adjust, expire, transfer and reverse are all events carrying an idempotency key, an actor and a reason code. Balances are derived, never stored. The rewards catalogue can ship with three hardcoded rewards and nobody outside the project will notice.
What goes wrong when you migrate historic member balances?
Importing balances is a morning's work. Importing the history that justifies them is the project, and this is where loyalty migrations fail in public. Members open the new app, see a statement that starts at zero and tier progress that has reset, and your service desk absorbs the difference.
Two specific traps sit underneath. The first is expiry. If your old programme expires points per earn event and you import a single lump balance, you cannot expire it correctly. You either never expire it, in which case the liability only grows, or you expire the whole balance on one arbitrary date, which is a customer service event with a press cycle attached. The second is duplicates. The same person exists three times in the old programme under three email addresses, and merging them at migration either creates a windfall or destroys balances that a member can prove they earned.
The fix: import transaction history far enough back to cover both your tier qualification period and your longest expiry window, not just the balance. Model a member merge as an explicit ledger event that preserves the pre merge balances, so a bad merge can be reversed rather than argued about. Then run the old and new programmes in parallel for a full billing cycle with daily balance comparison, and only switch the customer facing surfaces once that comparison is clean.
Why do point of sale and ecommerce integrations break after launch?
The till integration passed testing against one point of sale software version. Your estate runs three. A store update rolls out in April, the message format shifts slightly, earn stops in 200 stores, and you find out in June from a complaint.
Retry behaviour is the second failure. Tills differ in how they handle a timeout, and a till that retries without an idempotency key on the source transaction awards twice. Refunds are the third. Ecommerce platforms commonly send a refund as a new transaction with a new identifier, so unless you link the reversal back to the original earn event, points come off the current balance instead. That is how members end up negative, and it is also how a fraud pattern hides, because a buy and return cycle stops looking like anything.
The fix is three things and none of them is clever. One integration contract per source, with the idempotency key taken from the source transaction identifier rather than generated by you. Contract tests run against every point of sale software version in the estate, treated as separate integrations in the plan and the budget. And a daily reconciliation job comparing transaction counts in the point of sale and ecommerce systems against events landed in the ledger, so a silent stop is a next morning alert rather than a quarterly discovery.
What happens when points liability accounting is not covered?
Finance needs a report showing opening balance, issued, redeemed, expired, adjusted and closing balance, reconciled to the ledger, with every manual adjustment attributable to a named person. Most loyalty platforms produce a dashboard instead, and a dashboard is not evidence.
The thing that actually breaks the reconciliation is the associate override. A member is standing at a till being told they have not reached the reward they can see on their phone, so the associate adds points. That adjustment has no reason code, no approval and no link to a transaction, and there are thousands of them a year across an estate. Breakage is the other half of the problem. Your breakage assumption determines how much deferred revenue you can recognise, and a rate set years ago and carried forward is exactly what an auditor will challenge.
The fix: build the liability report as a first class output in release one, not as a phase three reporting item. Derive breakage from your own cohort redemption curves, split by tier, channel and earn reason, because points earned in a promotion behave nothing like points earned on a normal basket. Give every adjustment a mandatory reason code and an actor. And settle your expiry policy before launch, because a programme with no expiry has a liability that only ever moves in one direction.
Should you build custom or configure what you already own?
A large share of retailers reading this should configure and stop there. If your programme is essentially single channel, your earn rule is a percentage of spend, your points outstanding are commercially small and nobody in finance is arguing about the liability, then Antavo will run it properly for a fraction of a build, and building a ledger to operate a stamp card is a poor use of capital. Punchh is well suited to restaurant and convenience operators who want its app experience. Salesforce Loyalty Management is the sensible answer if the group is already committed to Salesforce, with transaction cost and latency at till volume as the constraint to model before you sign.
Talon.One deserves a separate note, because it is frequently framed as a competitor to a build and should not be. It is a strong rules engine, and the sensible architecture in many groups is Talon.One evaluating what should happen while you own the ledger, the wallet, the statements and the reconciliation.
Build when two or more of these hold. Balances already differ by channel and your service desk reconciles them by hand. The liability is material enough that the audit conversation has become uncomfortable. Earn rules change weekly, which is normal in grocery and fuel and outruns a vendor configuration cycle. Your till estate is old, mixed or intermittently offline. Or you run partner earn, where each partner is a settlement relationship rather than an integration.
How do hidden costs get into the quote?
Five items account for most loyalty overruns, and all five are visible before signature if you ask.
- Point of sale estate counted as one integration. Three till software versions is three integrations, three test cycles and three rollout windows, not one with variations.
- Migration priced as a data load. It is a history reconstruction plus a parallel run plus a duplicate resolution exercise, and the parallel run is real project cost that people delete to hit a date.
- Partner earn priced as an application programming interface. Each partner brings settlement, reconciliation and a dispute process, which is accounting work wearing an integration label.
- Multi country priced as translation. Points with monetary value attract different tax and consumer protection treatment by market, and that needs local advice rather than a template.
- Finance sign off missing from the plan entirely. Agreeing the breakage method, the offline redemption policy and the adjustment controls takes real meetings and usually causes real rework.
The fix: make the quote name the till software versions in scope, state how many months of transaction history are being imported, and carry an explicit line for the finance workshop and the parallel run.
What separates a loyalty build that works from one that fails?
The builds that hold up share a small number of decisions. One append only ledger, with every channel reading the same derived balance rather than caching its own. Idempotency keys sourced from the originating transaction so a retry is harmless. Refund reversals linked to the original earn event rather than deducted from the current balance. Offline till behaviour agreed with finance in writing before launch, covering earn queuing, redemption decline and reconciliation on recovery. A liability report treated as a deliverable rather than a dashboard.
Two questions separate teams who have done this from teams who have not. Ask what happens when the same point of sale message arrives twice, and expect idempotency keys inside thirty seconds. Ask what the till does when the loyalty service is unreachable, and expect a specific answer about queuing earn and declining redemption while the sale completes, rather than a promise of uptime.
Then settle ownership before kickoff. The member ledger is the record of a promise you made to millions of customers and it carries a balance sheet liability, so the repository, the cloud accounts and the data must be yours. At Digital Heroes the client owns the code from the first commit, and any arrangement that parks your points ledger inside a supplier platform hands them the upper hand at every renewal.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- The right combination of digital transformation actions can unlock as much as US$1.25 trillion in additional market capitalization across Fortune 500 companies, while the wrong combinations put more than US$1.5 trillion at risk; companies with all three core factors (strategy, aligned technology, and change capability) saw a 5% market-value lift relative to peers. Source: Deloitte (2023) →
- 76% of organizations report that less than half their CRM data is accurate and complete, and 37% experienced direct revenue loss attributable to poor data quality (survey of 602 CRM users across the US, UK, and Australia). Source: Validity (2025) →
- ITIF's 2025 report documents that SMEs operate at roughly 60% of large-firm productivity in advanced economies (citing McKinsey), that CRM platforms deliver a 25-40% improvement in customer retention and a 15-30% boost in sales, and that digital advertising returns about $8 in profit per dollar spent on Google Search and Ads. Source: Information Technology and Innovation Foundation (ITIF) (2025) →
- The 2015 CHAOS data (based on the modern definition of success) reports that only about 29% of software projects succeed, 52% are challenged, and 19% fail, with the three most important success skills being executive sponsorship, emotional maturity, and user involvement. Source: The Standish Group (reported via InfoQ Q&A with Jennifer Lynch) (2015) →
Ben handles business to business accounts, where the buyer is rarely the end user and sign off involves several people who want different things. He writes about running a software project through a committee: gathering requirements that conflict, and getting a decision before the quarter closes.
View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.
Frequently asked questions
Our app and our till show different point balances. What is actually causing that?
Almost always the same architecture problem: the balance is stored in more than one place and synchronised on a schedule, so the till holds a cached figure, the app reads a fresher one and the service desk sees a third in the customer record. No amount of sync tuning fixes it, because the design guarantees divergence. The repair is to hold one append only ledger, derive the balance from it, and have every channel read the same derived value even when that means the till calls out at redemption time.
Can we fix double awarded points after the fact?
You can identify them if the source transaction identifier was stored on each earn event, because duplicates then show as two events sharing one source reference. If it was not stored, you are reconstructing from point of sale exports and matching on amount, store and timestamp, which is slow and never complete. Correcting balances downward is a customer relations decision rather than a technical one, and most groups choose to write off the historic inflation, fix the idempotency and restate the liability going forward with the method documented for their auditors.
How far back should we import member transaction history when we migrate?
Far enough to cover two things: your tier qualification period, so nobody loses progress they earned, and your longest points expiry window, so imported points can expire on the correct dates rather than as one lump. In practice that is often two to three years rather than everything. Importing a single balance with no history means you cannot expire correctly, and the choice then is between never expiring, which grows the liability indefinitely, and expiring everything on one date, which is a public customer service event.
What happens to our points liability if we never expire points?
It only grows. Expiry is one of the few mechanisms that reduces outstanding points other than redemption, and without it your deferred revenue balance climbs with every issuance while your breakage assumption becomes progressively harder to defend. Expiry is a commercial and legal decision rather than a technical one, since some markets restrict or prohibit expiry of points with monetary value, so settle it with finance and local counsel before build rather than adding it later, because introducing expiry to an existing programme is the change members react to most strongly.
Should stores be able to redeem points while the loyalty service is offline?
That is a finance decision with a real exposure attached, and it needs to be made calmly rather than during an incident. Allowing offline redemption against a cached balance means you will occasionally pay out points that were already spent elsewhere. Refusing it means a member at a till cannot use a reward they can see on their phone. Most groups we work with refuse offline redemption above a locally cached balance, queue earn events, and give the associate a documented goodwill path with a reason code so the adjustment is at least attributable.
How do we stop refunds pushing member balances negative?
Link the reversal to the original earn event rather than deducting from the current balance. If a member earned 400 points on a basket and returns it, the reversal should target that specific earn event, which means the ledger can tell you the points were never validly held even if the member has already spent them. Deducting from the current balance is what produces negative balances, and it also hides buy and return fraud, because the pattern stops looking like anything once it is mixed into a running total.
Our till estate runs three point of sale software versions. Does that triple the integration cost?
Not quite triple, but plan for closer to three separate integrations than one with variations. The message formats, the retry behaviour on timeout and the offline capability usually differ between versions, and each needs its own contract tests and its own rollout window. The cost that catches people is ongoing rather than initial: every version that gets patched by its vendor is a regression risk, which is why a daily reconciliation comparing point of sale transaction counts against ledger events is worth building in release one.
How should duplicate member records found during migration be handled?
As an explicit merge event in the ledger that preserves the pre merge balances and the source records, never as a silent overwrite. Duplicates are common because members sign up in store, online and through an app with different email addresses, and any automatic merge rule will get some of them wrong. Preserving the inputs means a wrong merge can be reversed and a member who complains can be shown the arithmetic. Merging on a confident match only, and queuing the uncertain ones for review, is slower and considerably safer.
Is Zoho or Pipedrive good enough for a small sales team, or should we build custom?
We run everything on spreadsheets and Airtable. How do we know it's time for custom software?
How do I calculate whether custom software will pay for itself?
How does a custom CRM handle GDPR, HIPAA, or other compliance requirements?
Should I hire a freelancer or an agency to build my CRM?
Does it matter which tech stack the agency wants to use?
What happens to our CRM if the agency shuts down or we stop working with them?
Is custom software more secure than off-the-shelf SaaS?
Who can build a custom CRM software system?
Digital Heroes builds custom CRM software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.
Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.
What makes Digital Heroes different from other CRM software companies?
Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.
Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.
How can I check Digital Heroes is legitimate before getting in touch?
Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.
Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.