The sales lead closes a $1.2M contract with a new customer on September 28. The CEO calls excitedly: "we're closing the quarter with a record quarter." You look at the contract 10 minutes and respond: "depends. If it's product delivery against order, yes. If it's a 6-month implementation with milestones, we can't recognize much this quarter. If it's a 12-month service, we'll recognize $100K, not $1.2M."
That's the conversation where you see whether the finance team knows ASC 606 / IFRS 15 or recites by habit. The same contract generates three completely different revenue trajectories depending on the nature of the performance obligation — and the decision is NOT the CFO's preference, it's what the accounting standard says.
This module is about revenue recognition in practice: the five steps of the ASC 606 / IFRS 15 framework, common ambiguities (variable consideration, principal vs agent, point-in-time vs over-time), and how to defend your treatment before the auditor when the contract doesn't fit perfectly into a box.
Let's go.
Your company sells perpetual software + 3 years of explicit support for $300K total ($240K license + $60K support). Customer signs on October 1. How much revenue do you recognize this quarter?
In plain language
Before the mechanics, the four basic questions.
Why do this at all?
Because revenue is the most visible P&L line and the most timing-sensitive. Over-reporting revenue (recognizing earlier than the standard allows) is historically the #1 cause of restatements and financial fraud — Enron, WorldCom, Tesco, all started with misrecognized revenue. And the cost is huge: restatement, qualified opinion, stock drop, shareholder lawsuits, eventually jail. Recognizing revenue correctly is not optional — it's the first line of accounting defense.
Who decides and who validates?
Controller proposes accounting treatment contract by contract (for material contracts) or by contract type (for volume). CFO approves. External auditor validates annually. Audit committee reviews recognition policies at least annually. If the contract is ambiguous (service + product, uncertain milestones, variable consideration), document a technical memo the auditor references — not verbal decisions no one defends later.
When does it show up?
Monthly at close: every material contract signed during the month passes through recognition review. Quarterly: review of bookings vs recognized revenue, identify ambiguous contracts. Annually: recognition policy review with auditor before fiscal close. And on any new product type, commercial model, or contract structure — before signing the first deal of that type, not after.
What if we do it wrong?
Four consequences in order of severity: (1) Auditor adjustment at close that reduces reported revenue and EBITDA — team bonus reduces, guidance missed. (2) Restatement of prior periods if the error is material — public, red flag for bank and investors. (3) Qualified or "subject to" opinion in audit — permanent reputational damage. (4) In extreme cases (deliberate manipulation), civil and criminal liability for CFO and CEO under SOX (in US-listed companies). Legal battles can last years.
Andina S.A. — the ambiguous contract
Andina signs a contract with a large retailer: $1.2M total, divided into three deliverables. (a) Inventory management system, installed in September. (b) 12 months of technical support (Oct-Sep next year). (c) Process optimization at month 6 (March). Sales reported it as "$1.2M deal closed in Q3."
Analysis under ASC 606 / IFRS 15:
Step 1 — Identify the contract. Signed document, defined consideration, clear rights and obligations. OK.
Step 2 — Identify performance obligations. Three distinct obligations: (a) system (tangible good), (b) support (over-time service), (c) optimization (milestone service). Each must be evaluated separately.
Step 3 — Determine the price. $1.2M total. But that price must be ALLOCATED among the three obligations based on standalone selling price (what each would be worth sold separately). Honest approximation: system $850K, support $250K ($21K/month × 12), optimization $100K.
Step 4 — Allocate the price to obligations. Done in step 3.
Step 5 — Recognize as each obligation is satisfied. System: point-in-time, September = $850K. Support: over-time, $21K/month × 3 (Oct-Dec) = $63K. Optimization: milestone, $0 until March = $0 in Q3-Q4.
Revenue Q3 recognized correctly: $850K (system). Revenue Q4 recognized: $63K (3 months of support). Full fiscal year: $913K, not $1.2M. The rest recognizes next year ($188K of support + $100K of optimization in March).
Difference between reporting "$1.2M closed in Q3" (what sales says) and "$850K recognized in Q3" (what the standard says): $350K. On typical quarterly EBITDA, that differential is material.
The visual below lets you see how the monthly revenue trajectory changes by recognition method.
Three patterns, live
Three revenue trajectories for the same $1.2M contract: point-in-time (all in delivery month), over-time (straight-line 12 months), milestone (40/35/25% in months 3/6/10).
The critical experiment: move the delivery month slider under PIT. Watch revenue move 100% from one month to another. That monthly volatility is the reality of point-in-time recognition — completely legitimate, but requires the CFO to communicate it to the board before it shows up as a surprise in a quarter.
Interactive visual
Three patterns · same $1.2M contract
A $1.2M contract can be recognized as revenue in three legitimate ways under ASC 606 / IFRS 15. Watch how monthly and annual trajectories change. The contract is the same; reported revenue is radically different.
Point-in-time (delivery)
All revenue recognized on the day of physical delivery or transfer of control. Appropriate for finished goods without ongoing service.
Year total: $1200K
Over-time (straight-line)
Revenue recognized proportionally over contract duration. Appropriate for SaaS, ongoing services, hosting.
Year total: $1200K
Milestones (40 / 35 / 25)
Revenue recognized as each milestone completes. Appropriate for phased projects (design, build, deploy).
Year total: $1200K
Delivery month (PIT)
S(month 9)
Change when the product is delivered under PIT. Watch revenue move entirely to that month.
What you are seeing
Three critical lessons: (1) The same contract produces 3 completely different monthly P&L trajectories — but the YEAR TOTAL is the same if the contract is fulfilled. The difference matters for quarterly guidance, reported EBITDA, and bonuses tied to monthly targets. (2) The auditor does NOT ask "which method do you prefer" — they ask "what does ASC 606 / IFRS 15 say about the nature of the performance obligation?" The defense is technical, not preferential. (3) Changing methods retroactively is a restatement — requires public disclosure and damages credibility. That's why choosing well at contract inception is 10x cheaper than correcting later.
The critical reading of the visual: the YEAR TOTAL under all three methods is identical — $1.2M. What changes is TIMING. That difference matters for quarterly guidance, EBITDA reported by quarter, bonuses tied to monthly targets, and market perception of "growth quality." A company with point-in-time revenue looks lumpy (high quarterly volatility); with over-time revenue looks smooth; with milestones looks "stair-step." Investors read these patterns — method choice is NOT invisible to the market.
Second reading: the standard does not let you freely choose between the three methods. You have to apply the method matching the nature of the performance obligation. For a finished tangible good (plant sold, machine delivered), PIT. For a continuous service (SaaS, hosting, support), over-time. For a phased project with identifiable deliverables (IT project, phased construction), milestone. The decision is technical, not preferential.
And critical: when the contract has MULTIPLE obligations (like Andina: system + support + optimization), you have to decompose and apply the right method to each. Recognizing the full contract as PIT when only the system component is, is over-reporting revenue by the amount of services — the most common and most expensive error.
The mechanics: how to apply ASC 606 / IFRS 15 in practice
- Start by identifying DISTINCT performance obligations within the contract. A commercial "deal" can contain 1, 2, 3, or more distinct obligations. Each must be capable of independent satisfaction so the customer receives benefit. If not separable, they're one combined obligation.
- For each obligation, identify the correct method. Tangible goods delivered with transfer of control: point-in-time. Continuous services where customer receives benefit simultaneously with fulfillment: over-time. Phased projects with identifiable deliverables: milestone. NOT discretionary choice — it's what the nature of the obligation dictates.
- Allocate total price among obligations based on standalone selling price (SSP). Not by the contract's price list — by what each component would be worth sold separately. If you don't have direct SSP, estimate using cost + reasonable margin, or residual method.
- For variable consideration (volume discounts, performance bonuses), estimate at inception. Don't wait for it to materialize. ASC 606 / IFRS 15 requires estimating "probable" variable consideration and recognizing based on that estimate. If the estimate changes later, you adjust — but you can't simply defer.
- Document every recognition decision as a defensible technical memo. Especially for material and ambiguous contracts. Memo includes: contract description, identification of obligations, justification of chosen method, price allocation, reference to standard paragraph. The auditor will read it; without it, they assume you recognized by preference.
- Review contract types annually with the auditor. Before fiscal close. If a new commercial model emerged during the year (subscription, perpetual with upgrades, hybrid), secure treatment before close, not in March when you've already closed dozens with inconsistent criteria.
- Performance obligation. Distinct promise within a contract to deliver an identifiable good or service. A contract can have 1 or more.
- Point-in-time. Revenue recognition at the exact moment of transfer of control to the customer. Appropriate for tangible goods, perpetual software without updates.
- Over-time. Proportional recognition during the period the customer receives benefit. Appropriate for continuous services, SaaS, hosting, support.
- Milestone-based. Recognition as predefined milestones are met. Appropriate for phased projects with identifiable and verifiable deliverables.
- Variable consideration. Price component depending on future events (volume discounts, performance bonuses, penalties). Estimated at inception, not deferred.
- Principal vs agent. Are you the principal (control the good before delivering it) or the agent (facilitate the transaction)? If agent, you only recognize the commission, not the gross. Common error in marketplaces.
- Standalone selling price (SSP). What each obligation would be worth sold separately. Basis for allocating price in multi-obligation contracts.
Adversarial check
Adversarial check
1.Your company sells industrial printing equipment for $500K + a separate maintenance contract of $50K/year for 5 years. Customer signs everything together in July. How much revenue do you recognize this year?
2.Your company signs a SaaS contract of $120K annual with a 20% discount if the customer renews for 3 years. The customer signs the 3-year commitment in the initial contract. How do you recognize this year (year 1)?
3.Your company operates a marketplace connecting buyers with sellers. For each $1000 transaction, you charge 8% commission ($80) and the seller receives $920. What revenue do you recognize?
Exit checklist
Suggested re-review: annually with the auditor recognition policy review before fiscal close. And whenever a new commercial model emerges — before signing the first deal, not after.
Optional
Go deeper
Sources and books to dig into the original material