Step 2 of the ASC 606 model is the one most senior accountants underweight. The transaction price gets all the attention. The performance obligation count quietly determines how that price gets sliced, when each slice recognizes, and how a modification gets treated. A retainer engagement with quarterly compliance work and a year-end deliverable can be one PO, two POs, or four POs depending on how each promise behaves. Same contract, same dollar value, three different income statement profiles.
The two-step test that defines a performance obligation
Both tests must be yes for a promise to be a separate PO. The classic example: a software license that requires significant integration with the customer's environment. The license is capable of being distinct in isolation; in the context of the contract, it's an input to a combined output (a working integrated system). Result: one PO, not two.
One contract, four performance obligations
Consider a 12-month professional services engagement worth $200K, scoped as: retainer advisory hours, quarterly compliance filings, year-end audit-prep workpapers, and an unused-hour carryover provision. Decompose it and you find four POs with four different recognition patterns:
Annual engagement, $200K, decomposed into the unit of accounting
Each PO has its own recognition pattern. Quarterly filings land four discrete times. Year-end workpapers land once. Retainer hours amortize ratably. Carryover hours sit as a contract liability until consumed. One engagement, four recognition curves, four ways for the close to break if the PO count is wrong.
The series exception
ASC 606 has a single-PO carve-out for series of distinct goods or services. When the promises are substantially the same and have the same pattern of transfer to the customer, the standard treats them as a single PO under the series guidance. The 12 months of a SaaS subscription are not 12 POs; they're one PO delivered over 12 months. The series exception is what makes subscription revenue tractable.
See it in motion
Cadel decomposing a retainer engagement with carryover hours
Where the PO analysis breaks
The PO count is set at contract inception and never revisited. New goods or services added mid-contract through a modification can create new POs or modify existing ones. If the modification flows only to the GL JE and not back to the PO inventory, every subsequent allocation runs against a stale count.
Free or bundled add-ons get ignored. A free month, a complimentary onboarding session, or a referral bonus are still performance obligations if they're distinct. They must be allocated transaction price even though no incremental cash is collected for them.
Material rights are missed. A discount on a future renewal, a free product on a future order, or a tiered loyalty benefit are POs under ASC 606. Sales teams rarely flag them because they don't feel like deliverables, but they pull allocation from the present contract.
Implementation services are misclassified. A standalone implementation is a PO. An implementation that's required to make the subscription work and can't be sold separately is part of the subscription PO. Many teams default to "always separate" and end up with an allocation that audit pushes back on.
What good looks like
A clean PO analysis runs at contract intake, not at close. Every promise in the body of the contract is surfaced, including material rights and free goods. The PO count drives the rev rec schedule, the allocation, and the audit trail. Modifications re-trigger the PO analysis automatically rather than being routed to a senior accountant for review three months later.
The downstream effects of this analysis show up in the revenue reconciliation rollforward: when the PO count is wrong, the rollforward stops regenerating from source.
See how Cadel handles end-to-end revenue recognition under ASC 606, or get in touch to walk through your PO analysis on a real contract.