ASC 606 Revenue Recognition for Professional Services: The 5-Step Model in Plain English
ASC 606 trips up agencies and consulting firms more than any other business type. This guide explains the 5-step revenue recognition model in plain English, with specific examples for milestone billing, retainers, and project-based engagements.
Prabhu
Q2C Automation Consultant

What Is Revenue Recognition?
Revenue recognition is the accounting principle that defines when revenue is officially earned and can be recorded in your financial statements.
It answers a question that trips up most SaaS companies, agencies, and consulting firms:
When is revenue actually earned — when you invoice, when you get paid, or when you deliver?
The answer is: when you deliver the promised value to the customer. Not before.
This distinction sounds simple. It becomes complicated fast when your contracts span months, include milestones, bundle multiple services, or use usage-based pricing.
Why Revenue Recognition Matters More Than You Think
Getting revenue recognition wrong isn't just an accounting problem. It creates downstream damage across the business:
- Overstated revenue misleads investors, lenders, and your own team about company health
- Understated revenue makes you look smaller than you are during fundraising or acquisition discussions
- Audit risk — regulators take revenue timing seriously, especially post-SOX and post-IFRS 15 adoption
- Bad decisions — if you think you've "earned" $200K from a signed contract on day one, you may overhire, overspend, or miss cash flow problems
For agencies and consulting firms specifically, the timing gap between signing, billing, and delivery is where most revenue reporting errors live.
ASC 606 and IFRS 15: The Standards That Govern Revenue Recognition
There are two major accounting standards that define how revenue must be recognized:
- ASC 606 — applies to companies reporting under US GAAP
- IFRS 15 — applies internationally (UK, EU, Australia, most of the world)
Despite different jurisdictions, both use the exact same underlying framework: the 5-step revenue recognition model. If you understand the five steps, you understand both standards.
These standards replaced a patchwork of industry-specific rules that existed before 2018. The goal was a single, consistent principle: recognize revenue when you transfer control of promised goods or services to the customer, in the amount you expect to receive.
The 5 Steps of Revenue Recognition (With Real Examples)
Step 1: Identify the Contract With the Customer
A contract is a legally enforceable agreement where both parties have rights and obligations. Under ASC 606, a contract exists when:
- Both parties have approved it (signed, accepted terms, confirmed order)
- Each party's rights are identifiable
- Payment terms are defined
- It has commercial substance
- Collection is probable
What this looks like in practice:
A digital marketing agency signs a 12-month retainer with a client for $6,000/month. That signed statement of work is the contract. An informal email saying "let's work together" with no terms is not a contract for revenue recognition purposes.
If a contract doesn't meet all five criteria above, you cannot recognize any revenue under it — even if you've already started delivering work.
Step 2: Identify the Performance Obligations
Performance obligations are the distinct promises you've made to the customer within that contract. The key word is distinct — meaning the customer can benefit from that deliverable on its own, or together with other resources they already have.
Examples of performance obligations:
- SaaS: access to software platform (one ongoing obligation)
- Agency retainer: monthly content strategy + execution (potentially one or two obligations depending on separability)
- Implementation project: discovery phase, build phase, go-live support (potentially three separate obligations)
- Bundled deal: software license + onboarding training + 12 months of support
Why does this matter? Because each distinct obligation must be recognized separately, on its own timeline.
If an agency signs a $50,000 project with three phases — strategy ($10K), build ($30K), and launch support ($10K) — those may need to be recognized at different points in time, not all at once when the contract is signed.
Step 3: Determine the Transaction Price
The transaction price is the total amount you expect to receive in exchange for fulfilling the contract. This sounds straightforward — until it isn't.
Transaction price gets complicated by:
- Variable consideration — performance bonuses, penalty clauses, usage-based fees, refund rights
- Non-cash consideration — a client giving you equity or credit in exchange for services
- Significant financing components — if payment terms create a meaningful time gap between payment and delivery
- Consideration payable to the customer — discounts, referral fees, or credits you owe the customer
Worked example:
An agency signs a 6-month project at $15,000/month = $90,000 base, plus a $10,000 performance bonus if they hit a traffic target. The base amount is fixed. The bonus is variable.
Under ASC 606, you can only include variable consideration in the transaction price to the extent it's "highly probable" that a significant reversal won't occur. If the traffic target is uncertain, you'd recognize the $90,000 base and only include the $10,000 bonus once it's nearly certain to be earned.
Step 4: Allocate the Transaction Price to Performance Obligations
Once you've identified all your performance obligations and the total transaction price, you need to allocate that price across each obligation based on its standalone selling price (SSP) — what you would charge if you sold that service alone.
Example:
A consulting firm sells a $60,000 engagement that includes:
- Project discovery and strategy ($20,000 SSP)
- Implementation ($35,000 SSP)
- 6-month post-launch support ($15,000 SSP)
Total SSP = $70,000, but you're charging $60,000 (a bundled discount). You allocate the $60,000 proportionally:
| Obligation | SSP | % of Total SSP | Allocated Price |
| Discovery | $20,000 | 28.6% | $17,143 |
| Implementation | $35,000 | 50.0% | $30,000 |
| Support | $15,000 | 21.4% | $12,857 |
| Total | $70,000 | 100% | $60,000 |
This prevents recognizing all $60,000 upfront just because discovery delivered quickly.
Step 5: Recognize Revenue as Performance Obligations Are Satisfied
This is the step where timing actually matters. Revenue is recognized when (or as) you transfer control of the promised service to the customer.
Control transfers in one of two ways:
Over time — you recognize revenue progressively as you deliver. This applies when:
- The customer receives and consumes the benefits as you perform (ongoing retainers, subscriptions, managed services)
- You create an asset the customer controls (custom-built software on their infrastructure)
- There's no alternative use for the work and you have an enforceable right to payment for progress to date
At a point in time — you recognize revenue when a specific milestone is reached. This applies when control transfers all at once (delivery of a completed report, launch of a finished product).
Agency retainer example:
$6,000/month retainer for content marketing. This is delivered over time. Each month, $6,000 is earned. Even if the client pays quarterly upfront ($18,000 on January 1), you recognize $6,000 in January, $6,000 in February, $6,000 in March — not $18,000 in January.
Milestone-based project example:
$90,000 project with three milestone payments: $30,000 at kickoff, $30,000 at beta, $30,000 at launch. If each milestone represents a distinct deliverable, revenue is recognized at each milestone. If the milestones are just payment triggers for one continuous performance obligation, revenue should be recognized over the project duration (based on percent completion), regardless of when payments arrive.
Revenue Recognition vs. Invoicing vs. Cash: The Three Are Not the Same
This is where most small and mid-size businesses get confused:
| Event | What It Means | Revenue Recognized? |
| Contract signed | Agreement in place | No |
| Invoice sent | Billing triggered | No |
| Payment received | Cash collected | No |
| Service delivered | Value transferred | Yes |
A simple example to make this concrete:
A SaaS company charges $12,000 annually, billed upfront on January 1. Cash hits the bank on January 5.
- January 5: $12,000 received → Deferred revenue (liability)
- January: $1,000 earned → Revenue recognized
- February: $1,000 earned → Revenue recognized
- ... and so on through December
The $12,000 doesn't become revenue on January 5. It becomes a liability that converts to revenue month by month as the service is delivered. This matters enormously for accurate financial reporting.
Common Revenue Recognition Mistakes in SaaS and Professional Services
1. Recognizing revenue at contract signing
Signing a contract creates a commitment, not revenue. Revenue is earned through delivery.
2. Treating all bundled services as one obligation
If a client pays you for implementation + ongoing support in one contract, you likely have two performance obligations. Recognizing it all when implementation completes overstates early revenue and understates future periods.
3. Ignoring variable consideration
Usage-based fees, success fees, and refund clauses must be estimated and accounted for at contract inception — you can't just wait and see what happens.
4. Confusing cash basis with accrual basis
Cash basis (record revenue when paid) is simple but often inaccurate for service businesses. ASC 606/IFRS 15 requires accrual basis for accurate revenue timing.
5. Manual tracking across spreadsheets
The more contracts, the harder it is to track deferred revenue, earned revenue, and allocation across obligations manually. One contract modification (scope change, extension, pricing adjustment) can require recalculating months of recognized revenue.
Why Spreadsheets Break Down for Revenue Recognition
Revenue recognition isn't just an accounting task — it depends on pricing logic, contract terms, and time. Spreadsheets struggle when:
- Contracts are modified mid-term — a scope change or pricing adjustment requires retroactive recalculation
- Multiple performance obligations exist — allocation math must be tracked separately per contract
- Usage-based fees apply — variable pricing means the transaction price can't be fixed at contract start
- Deferred revenue must roll forward — tracking what's earned vs. deferred month-over-month across dozens of contracts becomes error-prone
- Audit trails are required — spreadsheets have no version history for revenue adjustments
System-driven contract and revenue tracking — tied to your CRM and billing tools — is what makes accurate recognition operationally sustainable.
How Revenue Recognition Connects to Your Quote-to-Cash Process
Revenue recognition sits at the end of the quote-to-cash (Q2C) cycle, but problems upstream create recognition errors downstream:
- Poorly structured contracts → ambiguous performance obligations → recognition disputes
- Billing schedules disconnected from delivery → recognized revenue doesn't match cash timing → cash flow surprises
- No contract modification workflow → scope changes go untracked → deferred revenue figures are wrong
- CRM data not synced with accounting → manual handoffs create errors and delay recognition
Getting pricing and contracts structured correctly upstream makes revenue recognition a natural output, not a quarterly firefighting exercise.
If your team is dealing with messy revenue recognition because of how contracts are structured or how billing connects to your accounting system, that's a fixable operations problem — not just an accounting one.
Final Thought
Revenue recognition is not about accounting complexity for its own sake.
It's about accurately representing when value is delivered — to your customers, your investors, and yourself.
Understanding ASC 606's 5-step model helps you:
- Report revenue accurately and consistently
- Avoid audit risk and compliance issues
- Make better decisions about hiring, spending, and growth
- Reduce the gap between what's invoiced and what's actually earned
If your contracts, billing schedules, and delivery timelines are structured clearly, revenue recognition becomes straightforward. If they aren't, the fix starts with the quote-to-cash process — not with the accounting.