Skip to content

One meter can bill the customer and book the revenue.

When the price is a count of things that happened, the count is an accounting record. The guidance for it is already written and settled. What is usually missing is an event log built well enough to stand behind the number.

The price became a measurement, and measurements need systems.

For twenty years the revenue number at a software company came from two stable things: a contract that said what the customer had bought, and a count of seats that changed a few times a year. Revenue accounting was hard in the way contracts are hard, full of judgement about performance obligations and standalone selling prices, but the inputs sat still while you thought about them. You could print the order form and reason about it.

That is changing quickly, and the numbers are no longer small. Deloitte’s 2026 technology predictions cite a Maxio survey finding that 83 percent of AI native software companies currently offer usage based pricing, and quote Gartner saying at least 40 percent of enterprise software spend will shift toward usage, agent or outcome based pricing by 2030. The same report makes an observation that sounds like product advice and is really an accounting warning: these models need agreed definitions of an agent, a task, a process, an interaction and an outcome, and system instrumentation and metering may have to become more advanced while data observability, billing and financial compliance become more real time.

Read that as a controller and the consequence is direct. If the price is a count of things that happened, then the thing producing the count has become a source document. It is usually a stream of events emitted by application code, designed by engineers for product analytics, shipped on a weekly cadence, with retention set by storage cost and a schema nobody thought of as permanent. None of that is a criticism of how it was built. It was built for a purpose, and it does that purpose well. The purpose has now quietly expanded.

The good news is that this is a solved problem on the accounting side. The guidance for variable consideration is fifteen years of thinking old, both standard setters have recently reviewed it and concluded it works, and the paragraphs that matter here are short and readable. The work that remains is engineering work with a clear specification, which is a far better position than waiting for a standard. What follows is the specification.

The market context for why this is landing now, and what each piece of it asks of the systems underneath. The left and middle columns are attributed to the sources named; the right hand column is Rivane’s reading rather than the source’s.
SignalWhat the source reportsWhat it asks of your systems
Usage pricing is already normalDeloitte’s 2026 predictions cite a Maxio survey finding that 83 percent of AI native software companies currently offer usage based pricingFor most of these companies the meter is already the invoice. The question is whether the same meter is trusted to produce the revenue number, or whether a second calculation runs beside it in a spreadsheet.
The shift has a long runwayGartner, quoted in the same Deloitte report, says at least 40 percent of enterprise software spend will shift toward usage, agent or outcome based pricing by 2030This is not a one year reporting problem to be worked around. The data model is worth building properly, because the share of revenue depending on it goes up every year from here.
Definitions are the hard partDeloitte’s report says these models require agreed definitions of terms such as an agent, a task, a process, an interaction and an outcome, agreed contractually and across engineering, sales and legalEvery one of those definitions eventually resolves to a boolean in a row of data. Whoever writes the definition is writing the recognition rule, usually without knowing it.
Instrumentation is named as the gapThe same report says system instrumentation and metering may have to become more advanced, and that data observability, billing and financial compliance may have to become more real timeFinance is rarely in the room when metering is designed, because metering looks like a product analytics concern. It stops being one the moment a number it emits reaches the income statement.
Outcome pricing is still emergingPractitioners describe outcome pricing as harder to sell than to design, so hybrid structures that mix a fixed fee with a variable one are the common landing pointHybrids are the awkward case in the guidance. A fixed fee sitting alongside outcome fees is one of the things that removes the simplest recognition route, so the most commercially natural structure is also the one that asks most of your systems.
The market context for why this is landing now, and what each piece of it asks of the systems underneath. The left and middle columns are attributed to the sources named; the right hand column is Rivane’s reading rather than the source’s.
Joanne Chen@joannezchen19 May 2026Post on X

Pricing is one of the toughest questions facing AI startups today. The thinking has been that everything will shift to outcome-based pricing. But the reality is messier.

Chen is a partner at Foundation Capital writing about her own portfolio, and her point matters here for a reason she does not raise. The compromise structures she describes, workflow pricing and capped unlimited plans, are hybrids. A hybrid is a fixed element sitting beside a variable one, and that combination is precisely what removes the simplest recognition route under the guidance. The pricing structure that is easiest to sell is often the one that asks the most of the revenue systems behind it. View the original post on X by @joannezchen on 19 May 2026

Two doors, and the contract decides which one you walk through.

On 4 June 2026 Deloitte published a Technology Spotlight dealing specifically with outcome based pricing in agentic software, and KPMG has a webcast on revenue for AI companies scheduled for 1 October 2026. Reading the Deloitte piece in full, the striking thing is how little new law there is in it. The analysis runs through paragraphs that have been in the standard since it was written. What has changed is how many contracts now land on them.

The first question is the nature of the promise. Either you are standing ready to provide access to a service throughout a term, which is satisfied over time because the customer simultaneously receives and consumes the benefit, or you are obliged to deliver a specified quantity of successful outcomes. The tells for the second are concrete: each success reduces a remaining entitlement, the customer’s right ends when the quantity is consumed, and getting more requires a fresh purchase order rather than simply continuing. Where usage is driven by downstream events, a customer’s own end customers submitting refund requests, or fraud attempts arriving from outside, the promise is almost always the stand ready one.

A stand ready hosted service is typically a series of distinct service periods under ASC 606-10-25-14(b) or IFRS 15 paragraph 22(b), which is the structural fact everything else rests on. Being a series is what makes it possible to say that a variable fee belongs to March rather than to the contract as a whole. Without the series, there is one undifferentiated performance obligation and the variable amount has nowhere specific to go.

The four contract shapes and where each one lands. The worked figures in the right hand column are the examples used in Deloitte’s Technology Spotlight of 4 June 2026, quoted as that publication’s examples. They are constructed fact patterns, not real customer arrangements, and no company named or unnamed here has any connection to Rivane.
ShapeWhat the contract saysWhere it landsThe worked example
Specified quantity of outcomesThe customer buys a defined number of successful outcomes. Each success reduces the remaining entitlement, unused volume may roll over, and once the volume is consumed the customer has to make a fresh purchasing decision before anything more is owedAn obligation to deliver a specified quantity, satisfied over time, with revenue recognised on an output method as outcomes are deliveredDeloitte’s Example 3 has 250,000 fully resolved refund cases bought for 5 million dollars up front, which is 20 dollars an outcome, with rollover permitted and the same service also sold on a pay as you go basis
Stand ready access, outcome fees on topThe customer gets continuous access with no specified volume, pays a fixed access fee, and pays a fixed rate for each contractually successful outcome on top. Usage is driven by downstream events rather than by a procurement decisionA stand ready obligation treated as a series of distinct service periods. The fixed fee goes over time on a time based measure. The outcome fees are allocated to the period in which the outcomes happenedExample 4 has a 1 million dollar annual access fee plus 3 dollars per successful autonomous fraud intervention. The invoice expedient is unavailable because of the fixed fee, so the allocation route is used instead
Outcome fees only, fixed rate, billed as they occurPricing is solely variable, at a fixed rate per outcome, with a right to invoice for outcomes as they occur and no up front, back end or minimum amounts anywhere in the arrangementA stand ready obligation where the amount you may invoice corresponds directly to the value transferred, so the invoice practical expedient can be considered and no inception estimate is neededDeloitte sets three conditions for this: transferred over time, priced solely on successful outcomes, at a fixed rate per outcome, with a right to invoice as they occur
Outcome fees that settle across the whole termThe fee depends on aggregate performance measured over the full contract rather than within a period, through a term wide success rate, a cumulative volume tier or a year end true upStill a stand ready obligation, but the variable amount is no longer attributable to any one period, so it becomes an estimate made at inception, constrained, spread over the term and updated at every reporting dateExample 6 is Example 5 with one change: the success rate is computed for the whole twelve months instead of resetting monthly. Nothing else about the product, the price or the meter changes
The four contract shapes and where each one lands. The worked figures in the right hand column are the examples used in Deloitte’s Technology Spotlight of 4 June 2026, quoted as that publication’s examples. They are constructed fact patterns, not real customer arrangements, and no company named or unnamed here has any connection to Rivane.

The comparison worth sitting with is the last two rows against each other. Deloitte’s Example 5 has a monthly fee set by that month’s resolution success rate: 18,000 dollars above 80 percent, 15,000 dollars between 70 and 79, 12,000 dollars between 60 and 69, and nothing below 60. Because it resets each month and applies only to that month’s service, the variable amount is allocated to that month and recognised when the month’s metric is determined. Example 6 keeps every one of those facts and changes exactly one: the success rate is computed across the whole twelve month term instead of monthly. That single change means the fee is not attributable to any distinct month, so the exception falls away and the company must estimate total variable consideration at inception, apply the constraint, recognise it over time on a time based measure, and revisit the estimate every reporting period.

Same product. Same price. Same meter. Same customer experience. One clause in the order form separates reading a number off a system from running an estimation model four times a year and documenting it for an auditor. That is worth knowing at the point the clause is drafted, which is months before anyone in revenue accounting normally sees it.

The paragraph map: the operating question, where it is answered in each framework, and what the answer actually turns on. Paragraph references were read from the endorsed IFRS 15 text on EUR-Lex and, for the US paragraphs, from the passages quoted in full in Deloitte’s Technology Spotlight.
The questionUS GAAPIFRSWhat it turns on
Is this one performance obligation or many?ASC 606-10-25-14(b) and 25-15IFRS 15.22(b) and 15.23A series is distinct goods or services that are substantially the same with the same pattern of transfer. The pattern test has two criteria: each distinct item would be satisfied over time, and the same method would measure progress for each. Daily or monthly access to a hosted service usually clears both.
Why is access satisfied over time?ASC 606-10-25-27(a)IFRS 15.35(a)Because the customer simultaneously receives and consumes the benefit as you perform. This is the criterion both the stand ready case and the specified quantity case lean on, which is why the choice between them is about the nature of the promise rather than about timing in the abstract.
Can I put the variable fee in the period it was earned?ASC 606-10-32-39(b) and 32-40IFRS 15.84(b) and 15.85Only if both criteria hold. The payment terms must relate specifically to your effort to transfer that distinct service or to a specific outcome from doing so, and allocating the amount there must be consistent with the allocation objective. This is the paragraph a monthly meter lives or dies on.
What is the allocation objective it has to satisfy?ASC 606-10-32-28IFRS 15.73That the amount allocated depicts the consideration you expect to be entitled to for transferring the promised goods or services. In practice: a consistent rate per outcome that reflects its standalone selling price, resetting each period, with no cross period true ups and no pricing for one agent set on the expectation of buying another.
Can I just recognise what I am allowed to invoice?ASC 606-10-55-18IFRS 15.B16The wording is identical in both: where you have a right to consideration in an amount that corresponds directly with the value to the customer of performance completed to date, you may recognise the amount you have a right to invoice. It is a genuine simplification and it is narrower than it looks.
What happens if neither exception is available?ASC 606-10-32-11IFRS 15.56 to 15.59You estimate the variable consideration, include it only to the extent a significant reversal is not expected, and update that estimate at the end of every reporting period. IFRS 15.57(c) names limited experience with similar contracts as a factor increasing reversal risk, which describes a pricing model launched this year.
Does the usage based royalty rule help me here?ASC 606-10-55-65IFRS 15.58 and 15.B63Almost certainly not. That treatment is available only for a royalty promised in exchange for a licence of intellectual property. A hosted service is not a licence. The FASB’s own review records that the Board considered widening it beyond licensing when the standard was written and chose not to.
Does the choice change what I disclose?ASC 606-10-50-14IFRS 15.121(b) and 15.122Yes. Recognising under the invoice expedient relieves you of the remaining performance obligation disclosure for that obligation, but you then have to say qualitatively that you are applying the expedient. The recognition decision reaches the notes, so it is worth making once and documenting properly.
The paragraph map: the operating question, where it is answered in each framework, and what the answer actually turns on. Paragraph references were read from the endorsed IFRS 15 text on EUR-Lex and, for the US paragraphs, from the passages quoted in full in Deloitte’s Technology Spotlight.

One route is worth closing off explicitly, because it is the first place experienced revenue people reach. The sales based or usage based royalty treatment, where you recognise only as the usage occurs and never estimate anything, is genuinely simple and genuinely unavailable here. IFRS 15 paragraph 58 and paragraph B63 confine it to a royalty promised in exchange for a licence of intellectual property, and the US equivalent does the same. A hosted service is not a licence. The FASB’s post-implementation review of Topic 606 even records that the Board considered widening the exception beyond licensing when the standard was written and decided against it, because it would add complexity or delay revenue past the point goods and services transfer. The door is closed deliberately rather than by oversight.

A definition of success is a query over somebody’s audit trail.

The allocation exception has a first criterion that reads like boilerplate and is the whole game in practice. The payment terms must relate specifically to your effort to transfer that distinct service, or to a specific outcome from doing so. Deloitte’s reading of that for outcome pricing is blunt: the contract has to define a successful outcome with enough specificity that both parties can tell when the obligation has been satisfied and the right to consideration earned. Without clear contractual success criteria, the payment may not be specifically related to an outcome at all, and the exception is not available.

The clearest way to see what that demands is Deloitte’s Example 7, which happens to be an accounts payable agent. The arrangement carries a 600,000 dollar annual access fee, 1 dollar 25 per invoice processed straight through, and 1 dollar per duplicate payment prevented. A successful outcome is defined as an invoice posted correctly to the ERP with a document identifier and passing required field validations, approvals that followed the delegated authority matrix with a workflow audit trail and no overrides, and controls passing with the transaction not reversed for cause within an agreed window. Duplicate prevention requires the controls agent to have logged, held or blocked the payment, to demonstrate no payment occurred, and for the prevention not to be overturned inside the window.

Read that sentence as a specification and every clause is a condition something has to evaluate and store. A document identifier exists. A set of validations passed. An approval chain matched a matrix. No override was applied. A window elapsed without a reversal. The revenue for that line is the count of rows satisfying all of it. Which means the vendor’s revenue recognition depends on evidence produced inside the customer’s own system of record, and the vendor has to be able to show that evidence to its own auditor months later.

This cuts both ways, and the second direction is the more interesting one. If you are the buyer rather than the seller, an outcome priced contract is an invoice you cannot check unless the same evidence is available to you. Agreeing a success definition without agreeing how it will be evidenced, retained and recomputed is how a procurement win becomes a dispute in month seven. The asymmetry is worth fixing at signature, and the fix is a clause about evidence and retention rather than a clause about price.

There is a related trap in the denominator. A tiered or performance based fee turns on a success rate, and a rate needs both numbers. Deloitte’s Example 5 spells out the denominator carefully: eligible requests submitted in the month meeting predefined automation criteria, excluding contractually defined out of scope items such as fraud investigations, regulatory exceptions and missing required data. If your event pipeline only writes a row when something succeeds, which is a very common and entirely reasonable design choice for product telemetry, the denominator does not exist anywhere and the fee cannot be recomputed by anyone. That is a schema decision made years earlier with no accounting intent whatsoever, and it is the single most common way this goes wrong.

ETtech@ETtech15 July 2026Post on X

About 7% of TP's revenue now comes from its ‘revenue-as-a-service’ business, where contracts are linked to business outcomes such as revenue generation, customer retention or cost savings.

A useful marker that outcome linked contracting has already reached the size where it appears in reported revenue rather than in pipeline. Teleperformance is a services business rather than a software one, which if anything makes the point stronger: the measurement problem is the same whether the outcome is produced by people or by software, and the share of revenue that depends on an agreed definition of a business result is going up in both. View the original post on X by @ETtech on 15 July 2026

Build the event record once and let both jobs run off it.

The practical answer to all of this is a single well built record per outcome, serving billing and revenue at the same time, rather than a metering feed for invoicing and a separate reconstruction for the close. The fields that make that work are not exotic. Most of them are the things you would want anyway for a billing dispute, which is a useful argument to have ready when asking for engineering time.

The fields that turn a metering feed into something a revenue number can stand on, and why each one is load bearing. This is Rivane’s recommended record shape rather than a requirement of any standard, and the field names are a worked structure rather than a schema anyone has to adopt.
FieldWhat it holdsWhy it is load bearing
event_id and idempotency_keyA stable identifier the producer generates once, plus a key that makes a replay of the same event a no operationPipelines retry. Without an idempotency key a retry is indistinguishable from a second outcome, and a duplicate here is revenue you did not earn and an invoice line the customer will dispute.
occurred_at and recorded_atWhen the outcome happened and when your systems learned about it, both stored, both in UTC, with the derived accounting period held as its own columnThese diverge, and the gap is where period cutoff errors live. An event that occurred on the 30th and arrived on the 3rd belongs to the earlier period, and only a stored occurred_at lets you prove that after the fact.
contract_id and contract_versionThe arrangement the event is priced under, and the specific version of its terms that was in force when it occurredOrder forms get amended mid term. Pricing an old event at a new rate is a silent misstatement, and an amendment that changes how a success rate is measured can move the whole arrangement from one recognition route to the other.
success_criteria_version and success_resultWhich version of the contractual success test was applied, and the explicit pass or fail it produced, rather than the presence of the row being taken to imply successThe contract defines success. If only successful events are ever written, you cannot compute a success rate, you cannot support a tiered fee, and you cannot show an auditor the population the rate was drawn from.
evidence_refA pointer to the underlying proof that the criteria were met: the document identifier, the workflow trail, the validation resultThis is the field that turns a count into evidence. Without it, testing a sample of outcomes means asking an engineer to reconstruct what happened, which is an expensive way to answer a routine audit question.
rate_applied and unit_amountThe rate taken from the contract version and the resulting amount, stored on the event rather than recomputed at reporting timeStoring the amount makes a period reproducible. Recomputing it later means the number depends on whatever the pricing tables say today, and a rate table is one of the easiest things in a system to change without leaving a trace.
reversal_of and reversal_reasonA reversal is a new row pointing at the original, never an update or a delete, with the reason recorded and the original left intactContracts often say an outcome is only successful if it is not overturned within an agreed window, which means reversals are part of the design rather than an exception. An immutable history is also what lets you explain a restated prior period instead of merely reporting one.
billing_status and revenue_statusWhether the event has been invoiced and whether it has been recognised, tracked separately on the same rowThey are different questions with different timing, and holding them on one row is what makes the monthly tie between billings and revenue a query rather than a reconciliation project.
The fields that turn a metering feed into something a revenue number can stand on, and why each one is load bearing. This is Rivane’s recommended record shape rather than a requirement of any standard, and the field names are a worked structure rather than a schema anyone has to adopt.

The outcome event, the success rate it supports, and the exception query that guards both

-- One row per outcome. Append only: a reversal is a new row, never an edit.
create table outcome_event (
  event_id                uuid primary key,
  idempotency_key         text        not null,
  contract_id             text        not null,
  contract_version        int         not null,
  customer_id             text        not null,
  agent_or_sku            text        not null,

  occurred_at             timestamptz not null,   -- when the outcome happened
  recorded_at             timestamptz not null,   -- when we learned about it
  accounting_period       date        not null,   -- derived from occurred_at

  success_criteria_version int        not null,
  success_result          boolean     not null,   -- failures are stored too
  exclusion_reason        text,                   -- contractually out of scope
  evidence_ref            text,                   -- document id, workflow trail

  rate_applied            numeric(18,6),
  unit_amount             numeric(18,6),
  currency                char(3)     not null,

  reversal_of             uuid references outcome_event(event_id),
  reversal_reason         text,

  billing_status          text        not null default 'unbilled',
  revenue_status          text        not null default 'unrecognised',

  unique (idempotency_key)
);

-- The success rate a tiered fee turns on. It needs the denominator,
-- which only exists because failures were written down.
select accounting_period,
       contract_id,
       count(*) filter (where success_result)                  as successes,
       count(*) filter (where exclusion_reason is null)        as eligible,
       round(100.0 * count(*) filter (where success_result)
             / nullif(count(*) filter (where exclusion_reason is null), 0), 2)
                                                               as success_rate_pct
from   outcome_event
where  reversal_of is null
group  by accounting_period, contract_id;

-- The exception query to run before the close, not after it.
select 'no contract version'   as issue, event_id from outcome_event where contract_version is null
union all
select 'priced off contract',  event_id from outcome_event e
  where not exists (select 1 from contract_rate r
                    where r.contract_id = e.contract_id
                      and r.contract_version = e.contract_version
                      and r.rate = e.rate_applied)
union all
select 'landed in closed period', event_id from outcome_event e
  join period_status p on p.period = e.accounting_period
  where p.status = 'closed' and e.recorded_at > p.closed_at
union all
select 'reversal with no original', event_id from outcome_event e
  where e.reversal_of is not null
    and not exists (select 1 from outcome_event o where o.event_id = e.reversal_of)
union all
select 'success with no evidence', event_id from outcome_event
  where success_result and evidence_ref is null;

Two things in that shape deserve a note. The first is that failures are stored. It costs almost nothing and it is the difference between a success rate you can recompute and one you have to assert. The second is that reversals are appended rather than applied. Contracts in this space routinely make success conditional on the outcome not being overturned inside an agreed window, which means reversals are part of the normal path rather than an error case. An append only history lets you answer the question an auditor will eventually ask, which is not whether the number is right today but whether you can explain how it got there.

The occurred_at and recorded_at pair is the other piece worth insisting on early. They diverge routinely and the gap is exactly where cutoff problems live. An outcome that happened on the 30th and arrived on the 3rd belongs in the earlier period, and the only way to demonstrate that after the fact is to have stored both timestamps at the time. Measuring the size of that late tail each month turns your cutoff from an assumption into a policy you can describe.

How a counted outcome becomes a revenue number, and the one clause that changes the routeA diagram in four bands. Across the top, the idea that holds the rest together: once the price is a count of things that happened, the system producing the count is producing an accounting record, so it needs the properties of a source document rather than those of a product analytics feed. In the middle band, a fork with a shared starting point on the left. The shared start is the outcome event: an append only row carrying a stable identifier, the moment the outcome occurred and the moment it was recorded, the contract version and the rate that version carried, the version of the success test applied, the explicit pass or fail it produced, and a reference to the evidence behind it. From that shared start the diagram forks on a single question, namely whether the variable fee is attributable to one reporting period or settles across the whole contract term. The upper branch, for a fee that resets each period, leads to allocating the variable amount to the period it was earned in under ASC 606-10-32-40 or IFRS 15 paragraph 85, or where the pricing is solely variable at a fixed rate with a right to invoice as outcomes occur, to the invoice practical expedient at ASC 606-10-55-18 or IFRS 15 paragraph B16. In both cases the month is read off the meter and no estimate is made at inception. The lower branch, for a fee measured across the term through a term wide success rate, a cumulative tier or a year end true up, leads instead to estimating the variable consideration at inception, constraining it, spreading it over the term on a time based measure and updating it at the end of every reporting period. Below the fork, a band lists the exception query that guards both routes: any event with no contract version, any event priced at a rate that appears in no version of its contract, any event whose occurrence date falls in a period already closed, any reversal whose original cannot be found, any recorded success carrying no evidence reference, and any contract whose terms changed without the recognition route being reassessed. At the foot, the reason the timing matters: a Maxio survey cited by Deloitte found 83 percent of AI native software companies already offering usage based pricing, and Gartner expects at least 40 percent of enterprise software spend to shift toward usage, agent or outcome based pricing by 2030.FROM A COUNTED EVENT TO A REVENUE NUMBERTHE IDEA UNDERNEATHOnce the price is a count of things that happened, the thing producing the count is producing an accounting record.It needs the properties of a source document, not those of a product analytics feed.THE SHARED STARTOne append only row peroutcome, carrying:occurred_at and recorded_atcontract version and ratesuccess test versionthe explicit pass or failand a reference to the evidenceTHE ONE QUESTIONIs the fee attributable toone reporting period?YES, IT RESETS EACH PERIODAllocate it to the period earned:606-10-32-40 or IFRS 15.85Solely variable, fixed rate, rightto invoice: 55-18 or B16NO, IT SETTLES OVER THE TERMTerm wide success rate, cumulativetier or year end true upEstimate, constrain, spread, andupdate at every reporting dateTHE CONTROL, ONE EXCEPTION QUERY BEFORE THE CLOSEAny event with no contract version. Any event priced at a rate in no version of its contract. Any event that occurredin a closed period. Any reversal with no original. Any recorded success with no evidence reference. Any contractwhose terms changed without the recognition route being looked at again.WHY THE TIMING IS GOODA Maxio survey cited by Deloitte puts 83 percent of AI native software companies on usage based pricing already,and Gartner expects at least 40 percent of enterprise software spend to move that way by 2030.
Both routes start from the same event record, which is why the record is worth building well before you know which route a given contract will take. The fork is decided by contract wording rather than by product behaviour. The figures at the foot are from Deloitte’s 2026 technology predictions, which cite a Maxio survey and Gartner respectively.

How to build it, in the order that keeps it cheap.

  1. 1. Read your own order forms before touching any system. For each active arrangement, record four things: whether there is any fixed fee, whether there is a minimum or committed volume, whether the outcome rate is constant through the term, and whether any measure of performance is computed across a period longer than the one you report in. Those four answers decide which recognition route the contract is on, and most revenue teams have never had them in one table.
  2. 2. Write the definition of a successful outcome down as a testable expression, in the same words as the contract, and have the person who signs the revenue number read it. Deloitte’s Example 7 defines success as an invoice posted correctly with a document identifier and passing field validations, approvals that followed the delegated authority matrix with a clean workflow trail and no overrides, and controls passing with no reversal for cause inside an agreed window. Every clause in that sentence is a condition something has to evaluate.
  3. 3. Instrument the failures as well as the successes. A meter that only records wins cannot produce a success rate, and a success rate is exactly what a tiered or performance based fee turns on. Record the eligible population, the exclusions the contract permits, and the outcome of each attempt.
  4. 4. Give the event record an immutable history. Append reversals rather than updating rows, key everything on a stable identifier, and make replays idempotent. Doing this early is cheap. Retrofitting it onto a pipeline that has already been deleting rows for a year is not.
  5. 5. Stamp every event with the contract version and the rate that version carried. Then make amendment handling explicit: when an order form changes mid term, decide and document whether it is a separate contract or a modification, and make sure events either side of the change price correctly without anyone editing history.
  6. 6. Build the monthly tie as a standing query, not a spreadsheet. Events in the period, by contract, summed at the stored rate, reconciled to what was invoiced and to what was posted to revenue, with the three differences explained by late arrivals, reversals and deliberate timing rather than by rounding.
  7. 7. Run an exception query before the close rather than after it. Events with no contract version, events priced at a rate not present in any contract version, events whose occurred_at falls in a closed period, reversals with no original, outcomes recorded without an evidence reference, and any contract whose terms changed without the recognition route being reassessed.
  8. 8. Decide the invoice expedient question deliberately and document it once per contract shape. It is attractive because it removes the estimate, and Deloitte lists four things that usually take it away: fixed fees alongside outcome fees, substantive minimums, a rate that varies during the term, and up front or back end charges. Also note that using it changes what you disclose about remaining performance obligations.
  9. 9. For any arrangement that lands on the estimate route, build the estimate as a repeatable calculation with stored inputs rather than as a quarterly judgement call. You have to update it every reporting period anyway, and the standard setters have said plainly that no simplification is coming, so the only thing that makes it cheaper is having the history in a queryable shape.
  10. 10. Bring the engineers who own the meter into the close calendar. They are now producing a source document, and the most common failure in this whole area is a pipeline change shipped on a Thursday by someone who had no reason to know that a column had become an accounting record.

What tends to go wrong, and what to do instead.

Failure modes worth designing around, each with the ordinary engineering or process answer. None of these requires a new system; all of them are much cheaper to handle before the first audit than after it.
Failure modeHow it happensWhat to do instead
A pipeline change quietly changes the revenueMetering is usually owned by a product team with its own release cadence. A redefinition of what counts as a completed task, shipped as a product improvement, moves the revenue number with no accounting entry behind itTreat the success definition as a controlled artefact. Version it, tie each version to the contracts that reference it, and put a change to it through the same review as a change to a posting rule. A diff on that definition should be readable by an accountant.
Late events land in a closed periodEvents arrive after the books close, legitimately, because a reversal window ran past the cutoff or an upstream system was slowStore occurred_at and recorded_at separately, set an explicit and documented cutoff policy, and measure the size of the late tail each month. Once you know the tail is stable and small, it becomes a disclosed convention rather than a monthly surprise.
Hybrid pricing removes the easy route without anyone noticingA deal desk adds a modest platform fee or a small minimum to close a deal. Commercially it is a rounding detail. Technically it can remove the invoice expedient for that contractPut the four structural questions on the order form approval itself. The cost of answering them at signature is a minute. The cost of discovering the answer during a year end audit is a remeasurement across a population of contracts.
A term wide metric turns a meter into a modelA success rate measured across the year rather than the month means the variable amount is not attributable to any one period, so it has to be estimated at inception and revisited at every reporting dateThis is a pricing design choice with a direct reporting consequence, so make it one. If a customer wants an annual performance measure, price it as a separate annual element rather than letting it govern the whole fee, and let the recurring part keep resetting.
The constraint is hardest exactly when the product is newIFRS 15.57(c) names limited experience with similar contracts, or experience with limited predictive value, as a factor that raises reversal risk. A pricing model launched this year has bothStart collecting the history before you need it. Even a few months of outcome rates by customer segment gives the first estimate something to stand on, and the working papers for that estimate are far easier to write while the data is being produced than a year later.
Nobody can test the outcomesAn auditor asks for support for a sample of the outcomes that drove the quarter, and the answer involves an engineer writing a query against logs with a retention periodThe evidence reference field solves this before it becomes a problem. Decide retention against the audit and dispute windows rather than against storage cost, and make a sample of outcomes something a controller can pull unaided.
Failure modes worth designing around, each with the ordinary engineering or process answer. None of these requires a new system; all of them are much cheaper to handle before the first audit than after it.

The evidence to keep.

  • The contract inventory that drives the recognition routes: for every active arrangement, the fixed fee, any minimum or committed volume, whether the outcome rate is constant, and whether any performance measure spans more than one reporting period. Plus the conclusion each set of answers led to, with the paragraph relied on.
  • The success definition, versioned, in the contract’s own words, with the mapping from each clause to the field or check that evaluates it, and a dated history of every change with the contracts affected.
  • The event population for the period, including failures and excluded items, so a success rate can be recomputed independently rather than taken on trust. Storing only successes makes a tiered fee unauditable.
  • The monthly tie from events to invoices to revenue, with the differences attributed to late arrivals, reversals and timing, retained for every month rather than only for the ones someone asked about.
  • The reversal history in full, showing originals preserved, reasons recorded and the period each reversal was reflected in.
  • Where an estimate was required, the calculation with its stored inputs, the constraint judgement, and the record of each reporting period’s update, since the requirement to revisit it is explicit in the standard.
  • The disclosure position that follows from the route chosen, including the qualitative statement required where the invoice expedient is applied.
  • The change log for the metering pipeline itself over the period, reviewed against the close calendar, so that a change to how outcomes are counted can be tied to the period it first affected.

Questions worth asking in your own review.

  • For each of our contract shapes, which paragraph are we recognising under, and can the person who signs the revenue number say which one without looking it up?
  • Does any fee in our current order forms depend on performance measured across a period longer than the one we report in? If so, is that a deliberate pricing choice or an artefact of how the clause was drafted?
  • If an auditor picked twenty outcomes from last quarter at random, how long would it take us to produce the evidence that each one met the contractual definition of success, and who would have to do it?
  • Can we recompute last month’s success rate from stored data today, including the failures and the contractually excluded items, without asking anyone to rerun anything?
  • What happens in our data when an outcome is reversed inside the contractual window? Is the original row still there, and can we show which period the reversal landed in?
  • Who can change the definition of a successful outcome, and does that change pass anyone in finance before it ships?
  • Do we store the rate and contract version on the event, or do we recompute amounts at reporting time from whatever the pricing tables currently hold?
  • How large is our late event tail, and do we know whether it is stable? If we do not measure it, our cutoff is a hope rather than a policy.

What this adds up to.

The accounting question here is settled, and it is worth saying that clearly because the surrounding noise suggests otherwise. The IASB reviewed IFRS 15 and decided to take no action on variable consideration, concluding that estimating it inherently requires judgement and that no improvement was available that would make it significantly easier. The FASB’s review of Topic 606, drawing on outreach with more than 2,200 stakeholders, landed in the same place, with the staff noting that the difficulty concentrates where a price depends on data affected by external factors or spans a long period. Nobody is coming to simplify this. That is not bad news. It means the answer is stable, and the leverage sits somewhere you control.

It sits in two places. The first is contract design, and it costs nothing. A performance measure that resets each period instead of running across the term keeps you on the simple route with no commercial difference the customer would notice. Keeping a rate constant through the term, avoiding a token minimum added late in a negotiation, and writing a success definition your own systems can evaluate are all decisions made by people who are in the room long before the close. Putting four structural questions on the order form approval is the highest return process change available here.

The second is the event record, and it pays for itself in places that have nothing to do with the audit. A well built outcome log settles billing disputes in an afternoon, supports the customer facing reporting that outcome pricing implicitly promises, gives product a clean measure of how often the thing actually works, and makes the revenue number reproducible at any point in the past. Finance is usually the last function to ask for it and the one with the clearest argument for why it has to be right.

If there is one place to start, it is smaller than a project. Take your current order forms and answer four questions for each: is there a fixed fee, is there a minimum, is the rate constant through the term, and is any performance measure computed across more than one reporting period. That table takes an afternoon and it tells you which contracts are already on the estimate route. Most teams find at least one they did not know about, and finding it in September is a very different experience from finding it in February.

Sources.

Every IFRS 15 paragraph referred to here was read from the endorsed standard text in Commission Regulation (EU) 2016/1905 on EUR-Lex, fetched as a file and read directly rather than through a summary. The US paragraph references and the four contract shapes come from Deloitte’s Technology Spotlight of 4 June 2026, which was also fetched and read in full rather than summarised, and which quotes the US paragraphs verbatim. The two post-implementation review reports were downloaded as files and read directly. Where a figure appears in a worked example, it is Deloitte’s constructed fact pattern quoted as such: those arrangements, entities and amounts are examples in that publication rather than real customers, contracts or results, and none of them has any connection to Rivane. The market figures are Deloitte’s 2026 technology predictions citing a Maxio survey and Gartner respectively, reported here as those sources report them. Both posts on X were opened in a browser and read on the rendered page before being quoted, rather than taken from a search snippet. The record shape and the queries in this article are a worked structure, and every field name, rate and identifier in them is a placeholder rather than anything drawn from a real system. Nothing here is accounting advice for any particular company: the requirements that apply to any arrangement come from the standards themselves and from the facts of the contract, and a conclusion in this area depends on terms that only the parties to it can read.