ASC 606 in NetSuite

ASC 606 in NetSuite

ASC 606 in NetSuite

What Controllers Wish They Knew Before Implementation

What Controllers Wish They Knew Before Implementation

What Controllers Wish They Knew Before Implementation

September 8, 2024

20 min read

The Gap Between Theory and Reality

ASC 606 looks straightforward in the accounting literature. Five steps, clearly defined. Identify the contract. Identify performance obligations. Determine transaction price. Allocate to performance obligations. Recognize revenue when obligations are satisfied. Simple, right?

Then you try to implement it in NetSuite's Advanced Revenue Management module and discover that the gap between GAAP theory and ERP configuration is measured in months of effort, thousands of dollars in consulting fees, and more than a few sleepless nights before go-live.

The standard is elegant in its conceptual framework. The reality of encoding that framework into software—software that must handle your specific contracts, your specific products, your specific edge cases—is considerably messier.

After supporting dozens of ARM implementations across industries from SaaS to manufacturing to professional services, here's what we wish someone had told us—and what we now tell every client before they start.


The Five-Step Model in Theory vs. Practice

Let's walk through each step of ASC 606 and examine where implementation complexity hides.

Step 1: Identify the Contract

In theory: A contract exists when it's approved, has commercial substance, and defines rights and payment terms.

In practice: What constitutes a "contract" in your business? Is it the signed MSA? The individual work order? The combination? What about verbal agreements, handshake deals, or implied renewals? How do you handle contracts that start before paperwork is complete?

ARM needs clear rules for what creates a contract in NetSuite. This means defining which transaction types trigger revenue arrangements, how contract inception dates are determined, and how contract boundaries are established when multiple documents are involved.

The accounting guidance gives principles; your implementation needs policies. Those policies need to be specific enough to encode in software and defensible enough to survive audit scrutiny.

Step 2: Identify Performance Obligations

In theory: Identify distinct promises to transfer goods or services.

In practice: Which elements of your offerings are distinct? If you sell software with implementation services, is that one obligation or two? If you bundle hardware with a maintenance contract, how do you determine distinctness? What about options, upgrades, and add-ons?

The distinctness determination requires judgment, and that judgment must be consistently applied. ARM doesn't make these decisions for you—it enforces whatever decisions you configure. Get the mapping of items to performance obligations wrong, and your entire revenue recognition is wrong.

Companies with complex product catalogs often underestimate this step. You might have hundreds of SKUs, but how many distinct performance obligations do they represent? Creating and maintaining that mapping is ongoing work, not a one-time implementation task.

Step 3: Determine the Transaction Price

In theory: The amount of consideration you expect to receive, adjusted for variable components.

In practice: Variable consideration—discounts, rebates, bonuses, penalties, rights of return, price concessions—is where ASC 606 gets complicated. You must estimate variable amounts at contract inception and update estimates over time.

ARM can handle variable consideration, but the complexity depends on your pricing models. Simple fixed-price contracts are straightforward. Usage-based pricing, performance bonuses, and tiered discounts require more sophisticated configuration and potentially custom development.

Constraining variable consideration—ensuring you don't recognize revenue that might need to be reversed—requires ongoing analysis of historical patterns and prospective estimates. ARM tracks the numbers; you provide the judgment.

Step 4: Allocate to Performance Obligations

In theory: Allocate transaction price based on standalone selling prices.

In practice: Determining standalone selling prices is one of the most judgment-intensive aspects of ASC 606. If you sell something both bundled and standalone, you have observable SSP. If you only sell it bundled, you need to estimate SSP using acceptable methods: adjusted market assessment, expected cost plus margin, or residual approach.

These judgments are material. The SSP determines how much revenue is allocated to each element, which affects timing of recognition. If you allocate more to the upfront element, you recognize revenue sooner. The accounting policy implications are significant.

ARM requires you to configure SSP for every item that can appear in a revenue arrangement. For companies with large product catalogs, this is substantial initial work and ongoing maintenance as products and prices change.

Step 5: Recognize When Obligations Are Satisfied

In theory: Point in time or over time, depending on the nature of the obligation.

In practice: Point-in-time recognition is relatively straightforward—revenue recognized when control transfers. Over-time recognition requires determining the method: output method, input method, or straight-line as a practical expedient.

For over-time recognition, ARM can apply different methods and periods. But you must determine which method applies to each performance obligation and configure accordingly. Inconsistent application of recognition methods is an audit finding waiting to happen.


What Controllers Learn the Hard Way

Beyond the conceptual complexity, ARM implementations reveal practical challenges that aren't obvious until you're in the middle of them.

Data Quality Is Everything

ARM can only recognize revenue correctly if it has clean, complete contract data. The module is sophisticated, but it operates on whatever information flows into it. Garbage in, garbage out has never been more true.

Common data quality issues that break ARM:

  • Missing performance obligations on sales transactions

  • Incorrect standalone selling prices on items

  • Contract modifications without proper documentation

  • Inconsistent use of item records across contracts

  • Timing mismatches between billing and revenue arrangements

Data quality issues don't just cause wrong numbers—they cause arrangement processing failures. Contracts that can't be recognized create backlogs that compound over time. A few bad contracts in month one become an overwhelming remediation project by month six.

Your Contracts Are Messier Than You Think

Most companies believe their contracts are standardized. "We have three pricing models and two contract templates. It should be straightforward."

Then you start mapping actual contracts to ASC 606's five-step model and discover:

  • Legacy contracts with terms that don't match current templates

  • Side letters and verbal agreements that modify standard terms

  • One-off deals for strategic customers with unique pricing

  • Contracts that span multiple years with escalating terms

  • Amendments and modifications that change original arrangements

  • Renewal terms that differ from original contract terms

Each exception requires either specific handling in ARM configuration or manual treatment outside the system. The number of exceptions typically exceeds initial estimates by a factor of three or more.

ARM Configuration Reflects Judgment Calls

ASC 606 requires significant management judgment. ARM doesn't reduce that judgment—it enforces whatever judgments you configure.

Critical judgments that flow into ARM:

  • What constitutes a distinct performance obligation

  • How to determine standalone selling prices

  • When to apply the constraint on variable consideration

  • Which recognition method applies to which obligations

  • How to treat contract modifications

These decisions have real financial impact. Two companies with identical contracts might recognize revenue differently based on their ASC 606 judgments. ARM makes those judgments auditable and consistent—but the judgments themselves are yours to make and defend.

Testing Takes Longer Than Building

The configuration might take weeks. Testing every scenario—new contracts, modifications, renewals, cancellations, variable consideration adjustments—takes months.

Effective testing requires:

  • Representative contracts from every product and pricing combination

  • Modification scenarios for each type of contract change

  • Cancellation handling across different contract stages

  • Renewal processing with various term changes

  • Variable consideration estimation updates

  • Period-end processing and reporting

  • Historical migration validation

Each scenario needs expected results documented before testing. When results don't match expectations, you need to determine whether the configuration is wrong or the expectation was wrong. This takes time.

Cutting testing short is how companies end up restating revenue. The cost of additional testing time is trivial compared to the cost of getting revenue recognition wrong.

Historical Migration Is Its Own Project

If you're implementing ARM on a live system with existing contracts, you need a migration strategy. Options include:

Prospective Only

Apply ARM only to contracts after go-live. Existing contracts continue on legacy recognition. This is simplest but creates parallel tracking requirements—some contracts in ARM, some outside.

Full Historical Migration

Migrate historical contracts into ARM and retrospectively adjust. This provides clean, consistent treatment going forward but requires significant effort to migrate historical data and validate results.

Hybrid Approach

Migrate some historical contracts (e.g., those with remaining performance obligations) while leaving completed contracts alone. Balances completeness against effort.

Each approach has trade-offs. The choice depends on your contract volume, remaining obligations on existing contracts, and capacity for migration work.


Common Implementation Pitfalls

These issues appear consistently across ARM implementations.

Starting with Configuration Before Policy

Jumping into NetSuite configuration before documenting ASC 606 policies creates rework. You configure based on assumptions, discover the assumptions don't match accounting's requirements, and reconfigure.

The correct sequence:

  1. Document accounting policies for each ASC 606 judgment area

  2. Get policies reviewed by external auditors

  3. Design ARM configuration to implement policies

  4. Build and test configuration

  5. Validate results against policy documentation

Policy documentation should exist before anyone touches NetSuite. This sequence adds time upfront but saves much more time downstream.

Underestimating SSP Complexity

Standalone selling price determination is often treated as a quick exercise. List your products, assign prices, done.

In practice:

  • Observable SSP requires analysis of standalone sales history

  • Estimated SSP requires defensible methodology and documentation

  • SSP may vary by customer segment, geography, or channel

  • SSP needs periodic review and update as markets change

  • New products need SSP determination before they can be sold

Companies that shortcut SSP work find themselves revisiting it repeatedly—and explaining their methodology to auditors who have questions.

Ignoring Contract Modification Complexity

ASC 606 treatment of contract modifications depends on whether the modification adds distinct goods/services at standalone selling price. Different answers lead to different accounting treatments.

ARM needs to handle all modification scenarios your business encounters. Common issues:

  • Partial cancellations that change allocation

  • Price changes on remaining performance

  • Scope additions that may or may not be distinct

  • Extension renewals that change original terms

  • Bundling changes that affect distinctness

If your configuration handles only simple modifications, complex ones will fail or process incorrectly. Design for the full range of modifications your business might see.

Insufficient Integration Between Billing and Revenue

ARM operates on revenue arrangements that should integrate seamlessly with billing. When billing and revenue recognition diverge, reconciliation becomes painful.

Common integration issues:

  • Invoices that don't tie to revenue arrangements

  • Billing adjustments not reflected in revenue schedules

  • Timing differences between billing milestones and revenue recognition

  • SuiteBilling subscriptions that don't flow cleanly to ARM

The integration between billing and ARM deserves as much attention as ARM configuration itself. Plan for it.


Getting It Right: A Practical Implementation Approach

Here's how to approach ARM implementation with eyes open to the challenges.

Phase 1: Accounting Policy Development

Before touching NetSuite:

  • Document ASC 606 policies for your business

  • Define performance obligations for all product/service types

  • Document SSP determination methodology

  • Define contract modification treatment

  • Specify recognition methods and periods

  • Get policies reviewed by auditors

This phase involves accounting leadership, not IT or NetSuite administrators. The output is accounting policy documentation that drives everything else.

Phase 2: Data Preparation
Clean and prepare data for ARM:
  • Review and correct item master data

  • Validate SSP on item records

  • Clean up revenue element configurations

  • Identify historical contracts requiring migration

  • Document contract data quality issues

Data problems discovered during configuration are expensive to fix. Find them early.

Phase 3: Configuration Design

Design ARM configuration to implement policies:

  • Revenue recognition rules matching policy documentation

  • Fair value rules implementing allocation methodology

  • Recognition treatment settings for each element type

  • Contract modification handling logic

  • Integration points with billing and other modules

Document design decisions and map them to accounting policies. This documentation serves implementation and audit purposes.

Phase 4: Build and Unit Test

Build configuration and test individual components:

  • Configure revenue elements

  • Set up fair value rules

  • Configure recognition treatments

  • Build arrangement creation rules

  • Test each component individually

Unit testing validates that individual pieces work before testing them together.

Phase 5: Integration Testing

Test end-to-end scenarios:

  • Create test contracts representing all product combinations

  • Process through arrangement creation

  • Verify allocation calculations

  • Test recognition over appropriate periods

  • Validate integration with billing

  • Test modification scenarios

  • Test cancellation handling

Integration testing requires documented test cases with expected results. Manual verification that results match expectations.

Phase 6: Historical Migration

If migrating historical contracts:

  • Extract historical contract data

  • Prepare migration files

  • Load to sandbox environment

  • Validate migrated arrangements

  • Reconcile to legacy revenue schedules

  • Document and resolve discrepancies

Historical migration is its own project. Don't underestimate it.

Phase 7: Parallel Processing

Run ARM in parallel with legacy recognition:

  • Process new contracts through both methods

  • Compare results

  • Investigate discrepancies

  • Refine configuration as needed

  • Build confidence in ARM accuracy

Parallel processing catches issues before they affect reported financials.

Phase 8: Go-Live and Stabilization

Transition to ARM as system of record:

  • Cut over to ARM processing

  • Monitor arrangement processing closely

  • Address exceptions quickly

  • Validate first month-end close

  • Stabilize and document steady-state processes


The Role of Customization

ARM handles standard scenarios well. Unique business requirements often need custom extensions.

Custom Processing for Edge Cases

If you have contract scenarios that ARM can't handle natively—complex bundling rules, unusual modification treatments, non-standard variable consideration—custom SuiteScript can fill gaps.

Custom code should integrate cleanly with ARM, not bypass it. The goal is extending ARM's capability, not creating parallel revenue recognition systems.

Integration Automation

Integration between source systems (CRM, CPQ, contract management) and ARM often requires custom development. Automated contract data flow reduces manual entry and associated errors.

Reporting Extensions

ARM's native reporting may not meet all needs. Custom reports and dashboards can provide visibility into revenue schedules, arrangement status, and compliance metrics beyond what native reports offer.

Exception Handling Automation

Arrangements that fail processing need attention. Custom automation can route exceptions, notify responsible parties, and track resolution—ensuring failed arrangements don't accumulate.


Ongoing Compliance: ARM Is Not Set-and-Forget

Implementation is just the beginning. ARM requires ongoing attention.

SSP Maintenance

Standalone selling prices need periodic review. Market conditions change. Product positioning shifts. What was valid SSP last year may not be valid this year. Build SSP review into regular processes.

New Product Setup

Every new product or service needs proper ARM setup before sale. Revenue element assignment, SSP determination, and recognition treatment must be configured. Build this into product launch processes.

Policy Updates

Contract structures evolve. New deal types emerge. Policies need updates, and ARM configuration needs to follow. Don't let configuration drift from documented policy.

Processing Monitoring

Monitor arrangement processing regularly. Failures need quick attention. Backlogs are easier to address when small. Build arrangement health monitoring into regular operations.

Audit Support

Auditors will ask questions about ASC 606 implementation. Maintain documentation that supports your policies and demonstrates consistent application. ARM provides data; you provide the narrative.


The Real Question

ARM is a powerful module. With proper implementation, it automates revenue recognition at scale, ensures consistent policy application, and provides audit-ready documentation.

But it's only as good as the accounting policies it enforces and the data it processes. The question isn't whether ARM can handle ASC 606—it's whether your organization is ready for the discipline ASC 606 requires.

That readiness means clear policies, clean data, comprehensive testing, and ongoing maintenance. Companies that invest in this foundation get reliable revenue recognition. Companies that shortcut it get audit findings and restatements.

The choice is yours. But make it with eyes open to what's actually involved.

Ready to Work Together?

Ready to Work Together?

Ready to Work Together?

Let us talk about your NetSuite challenges and how we can help. No pressure, no sales pitch. Just a straightforward conversation.

Let us talk about your NetSuite challenges and how we can help. No pressure, no sales pitch. Just a straightforward conversation.

Author

Michael Strong

Michael Strong

Founder & Principal Architect

Founder & Principal Architect