Loyalty Management Solution for a Media Resource with 5 Million Readers

Loyalty Program Modules on Microsoft Dynamics 365 CRM

Industry
Media, Media & Entertainment
Technologies
Dynamics 365, WPF

Summary

We build loyalty management modules on Microsoft Dynamics 365 CRM. A module of this kind extends the CRM so that purchases, subscriptions and promotional participation translate into points, membership levels and rewards. It records orders and payments, calculates points earned and spent against each transaction, tracks movement between membership levels, applies the discount a level entitles someone to, and presents all of it as a single readable transaction history for both programme managers and the members themselves.

The Challenge

A loyalty programme is judged on whether a member can see and trust the number. That makes explainability of every ledger entry a functional requirement rather than a nicety, and it rules out the shortcut most builds take first: storing a balance and mutating it. Retried plugin executions, duplicate order messages and simultaneous redemptions from two channels are all normal operating conditions, so calculation has to be idempotent and concurrency safe rather than merely correct on the happy path.

Scale pushes in the same direction. A programme covering a large subscriber base generates far more ledger rows than CRM records, so retention, archiving and indexed query paths need planning before launch rather than after the first slow report. The common mistakes are storing only a balance, running heavy calculation synchronously inside the transaction pipeline, encoding programme rules in plugin source code, ignoring time zones when a promotional window opens and closes, and giving managers no way to inspect why a member received the points they did.

The Solution

Entities and the Points Ledger

The module is a set of custom tables and relationships alongside the standard account and contact entities: membership, points ledger entry, accrual rule, redemption, tier definition and tier history. The single most important decision is to model points as an immutable ledger of signed entries rather than a mutable balance field. Inbound entries record earning, outbound entries record spending, expiry produces its own entries, and the balance is derived, with an optional maintained snapshot for query performance. Corrections are posted as reversals, which is what makes disputes answerable.

Rules as Configuration

Accrual should be configuration, not code. A rule pattern defines the qualifying condition, such as product category, subscription term, campaign participation or length of membership, together with the calculation basis, a rate or a fixed award, a validity window, and a priority so overlapping rules resolve deterministically. Managers can then create new patterns without a deployment. Redemption needs the mirror image: what points can be spent on, minimum thresholds, conversion rates, and whether a redemption itself earns.

Idempotency and Concurrency

  • Ledger entries carry an idempotency key derived from the source transaction, so a retry never duplicates an award.
  • Balance checks happen under an appropriate lock rather than as a read followed by a write.
  • Business logic runs in plugins registered on the create and update pipeline for orders and payments.
  • Longer or non-urgent work moves into asynchronous jobs and custom actions so order creation stays fast.

Scale, Integration and Reporting

Integration points typically include billing and subscription systems, payment providers, the web and mobile self-service surfaces that display balances, and the campaign tools that trigger bonus awards. Every one of those interfaces has to agree on what a transaction identifier means, because reconciliation between the points ledger and the finance system is a recurring operational task.

Modelling the Awkward Cases First

We start by modelling the programme rules with the people who run it, including partial refunds, cancelled subscriptions, tier downgrade timing, expiry on inactivity and goodwill adjustments. Those decisions become the rule pattern schema. Implementation then proceeds with unit-tested calculation logic isolated from the plugin execution context, a staged environment carrying representative data volume, and a reconciliation report available from the outset.

What This Delivers

Members can see exactly why their balance is what it is, and support staff can answer a dispute from the ledger instead of guessing. Programme managers change accrual and redemption rules themselves, so a campaign no longer waits on a release. Finance gets a ledger that reconciles against billing. And the CRM stays the single place where membership, transactions and marketing activity meet, rather than a separate system drifting out of agreement with it.

Technologies and Tools

Microsoft Dynamics 365 CRM with custom entities and relationships; plugins on the create and update pipeline plus asynchronous jobs and custom actions; WPF desktop tooling built against the organisation service; and operational reporting through SQL Server Reporting Services or the platform reporting stack.