You sign a $600,000 contract in March to build out a restaurant space, with completion expected in February of next year. By December 31, your crew has done most of the rough work, you have spent $240,000, and the client has paid $200,000 in progress billings. Now your accountant asks the question that decides your year: how much of that $600,000 counts as this year's revenue?
The cash does not answer it. You received $200,000, but billings are not revenue. The costs do not answer it directly either. What answers it is your measure of progress — your documented estimate of how far along the job is — and under ASC 606 you must pick one of two families of measures: input methods, which track the effort going into the job, or output methods, which track the value coming out. The choice changes the number on your income statement, your tax return, and the work-in-progress schedule your bank reads before renewing your line of credit. This guide explains both methods, shows the math with worked examples, and flags the mistakes that turn a routine job into a restatement.
Why long-term contracts need a progress measure at all
Most sales are simple: you hand over the goods, control passes to the customer, and you recognize the full revenue at that point in time. Long-term contracts are different because you satisfy the promise gradually, over weeks or months. ASC 606 says that when a performance obligation is satisfied over time, you must recognize revenue over time by measuring progress toward complete satisfaction of that obligation.
A contract qualifies for over-time recognition when it meets at least one of three tests: the customer receives and consumes the benefit as you perform (a monthly cleaning contract), your work creates or improves an asset the customer already controls (renovating the client's building), or your work creates a custom asset with no alternative use to you and you have an enforceable right to payment for work completed so far (building custom machinery to the buyer's specs). Construction, custom manufacturing, long consulting engagements, and multi-month agency retainers with defined deliverables usually land here.
Once you are in over-time territory, the standard offers exactly two categories of progress measures. Input methods look at what you have put in — costs incurred, labor hours worked, materials consumed — relative to the total you expect to put in. Output methods look at what has come out — units delivered, milestones reached, surveys of work performed — relative to the total promised. Both are acceptable. They are not interchangeable, and picking the wrong one for your contract is one of the most common revenue restatement triggers for project-based businesses.
The two methods at a glance
| Input methods | Output methods | |
|---|---|---|
| What they measure | Effort expended: costs, hours, materials used | Results achieved: units, milestones, certified completion |
| Common measures | Cost-to-cost, labor hours, machine hours | Units delivered, milestones, surveys, time elapsed |
| Best when | Outputs are hard to observe directly (services, custom builds in progress) | Deliverables are countable or observable (production runs, phased projects) |
| Biggest risk | Inefficiency looks like progress; front-loaded material purchases inflate completion | Milestones tied to billing rather than value; work in progress between milestones is invisible |
| Typical users | General contractors, custom manufacturers, consultants | Unit-price contractors, manufacturers with staged delivery, subscription-style services |
Input methods: measuring the effort going in
An input method computes a completion percentage as inputs used to date divided by total inputs expected, then multiplies that percentage by the contract price to get cumulative revenue to recognize. The logic is indirect — effort is a proxy for progress — which makes input methods flexible and also easy to misuse.
Cost-to-cost: the default for project work
Cost-to-cost is the most widely used input method, and for most contractors it is the starting assumption. The formula is:
Completion % = costs incurred to date / total estimated costs Revenue to date = completion % x contract price
Take the $600,000 restaurant build-out. By year-end you have incurred $240,000 of costs against a total estimate of $400,000. That is 60% complete, so cumulative revenue is $360,000 — even though you have billed only $200,000. The $160,000 gap between revenue earned and amounts billed is an asset on your balance sheet (often called costs and estimated earnings in excess of billings, or simply a contract asset), and it is exactly what a work-in-progress schedule tracks job by job.
Note what the method demands of you: a credible, current estimate of total cost. If that $400,000 estimate drifts to $480,000 because lumber prices spiked and you never update it, every revenue number downstream is wrong. ASC 606 treats estimate changes as cumulative catch-up adjustments — you recompute from the start of the contract and book the difference in the current period — so stale estimates do not fade quietly. They detonate all at once.
Labor hours, labor dollars, and machine hours
Costs are not always the best proxy for effort. On a job where a single expensive component dominates the budget — say a $90,000 commercial oven in a $400,000 kitchen fit-out — buying the oven early makes cost-to-cost scream "25% complete" when the crew has barely mobilized. When materials distort the picture, many businesses measure labor hours or labor dollars instead: hours worked to date over total hours expected. A design agency might use billable hours against the budgeted hours for a fixed-fee rebrand. An excavation contractor might use machine hours.
The trade-off is data discipline. Cost-to-cost runs off your accounting system, which you already maintain. Labor-hour methods run off time tracking, which has to be complete and job-coded to mean anything. If half your crew's hours sit in an unallocated bucket at month-end, a labor-hour measure is fiction.
The uninstalled-materials adjustment
Here is the trap inside cost-to-cost that catches growing contractors. Suppose you take delivery of $50,000 of custom light fixtures for the restaurant in December but will not install them until February. The money is spent and the materials are on site, but has the customer received $50,000 worth of value? No — and ASC 606 says so explicitly. When a cost is not proportionate to your progress, you must adjust: exclude the uninstalled materials from both the numerator and the denominator of the progress calculation, and recognize revenue on those materials at cost, with zero margin.
In numbers: with the fixtures excluded, incurred costs drop to $190,000 and total estimated costs drop to $350,000, giving 54% completion on the real work, plus $50,000 of pass-through revenue at zero profit. Including the fixtures unadjusted would have overstated both completion and gross profit. Auditors test this adjustment specifically, because booking margin on materials still sitting in crates is one of the easiest ways — intentional or not — to pull next year's profit into this year.
Output methods: measuring the value coming out
Output methods measure results directly: what has the customer actually received? Standard-setters consider outputs the most faithful depiction of performance when they are observable, precisely because they skip the proxy and count the thing itself. The catch is that counting the thing is sometimes expensive, sometimes impossible, and sometimes misleading between counts.
Units delivered and units produced
The cleanest output measure is a count. A cabinet shop contracted to deliver 200 custom units recognizes 1/200th of the contract price per unit delivered. A paving contractor on a unit-price contract — 100,000 square feet at $5 per foot — recognizes revenue per square foot completed and accepted.
Watch the boundary condition: units delivered works only when delivery is the moment control transfers. If your contract transfers control when goods enter finished goods sitting in your warehouse awaiting the customer's call-off, counting shipments understates your progress and your revenue. Match the measure to the contract's transfer point, not to the shipping dock out of habit.
Milestones
Milestone methods recognize revenue when defined events occur: foundation poured, rough-in approved, final inspection passed. Milestones work when each milestone represents a genuine chunk of value transferred. They fail when milestones are really a billing schedule wearing a progress costume — "30% on signing, 40% at midpoint, 30% on completion" tells you when cash moves, not when value moves.
Even honest milestones have a blind spot: nothing happens between them. A six-month phase with one milestone at the end shows zero progress for five months and then a cliff. If your milestones are that sparse, pair the method with judgment about whether interim progress needs recognition, or pick a method that moves every month.
Surveys and appraisals of work performed
On larger jobs, an independent survey — an architect's certification of percentage complete, an engineer's measurement of cubic yards moved — can be the most defensible measure available, because a qualified third party attests to it. Sureties and lenders love certified surveys for exactly that reason. The cost is the drawback: paying for monthly certifications on a small job can exceed the value of the precision. For most small contractors, the practical answer is an internal survey disciplined by evidence — photos, daily logs, and a superintendent's signed estimate — rather than a number invented in the office on the last day of the month.
Time elapsed
For stand-ready obligations — a year of IT support, a maintenance contract, access to a facility — progress often passes with the calendar, and straight-line recognition over time is the sensible output measure. Each month that passes transfers one-twelfth of the annual value. Do not stretch this logic to performance obligations where effort is uneven: recognizing a website build straight-line over six months while all the development happens in months five and six misstates every interim period.
The right-to-invoice practical expedient
There is one shortcut worth knowing. If your contract lets you bill amounts that correspond directly to the value delivered so far — $200 per hour of consulting performed, $10 per unit delivered — you may simply recognize revenue in the amount you have the right to invoice. This practical expedient is popular with hourly professionals for good reason: the invoice already is the progress measure. It is unavailable the moment billing diverges from value, such as a flat monthly retainer against lumpy deliverables or an upfront mobilization fee. And like every output measure, it cannot be used to recognize revenue ahead of actual transfer of control.
Same contract, two answers: why the choice matters
Put both methods on one job to see the stakes. A contractor signs a $500,000 contract with $400,000 of expected cost. In month two, she buys and takes delivery of $120,000 of structural steel that will not be erected until month four, and spends another $40,000 on labor and other costs.
Under unadjusted cost-to-cost, she is $160,000 / $400,000 = 40% complete and books $200,000 of revenue with $40,000 of gross profit — largely earned by a purchase order. Under a milestones method tied to erected steel and completed phases, she might be 15% complete with $75,000 of revenue. Under properly adjusted cost-to-cost (steel excluded, recognized at cost with no margin), she books roughly $57,000 of progress revenue on the real work plus $120,000 of zero-margin steel revenue. Three defensible-looking computations, three different profits, same job, same month. Cash flow is identical in all three — only the reported story changes. That is why auditors ask for your method memo before they ask for your numbers.
How to choose — and what auditors check
The standard's test is a sentence worth memorizing: the method must faithfully depict your performance toward complete satisfaction of the obligation. In practice, that breaks into five checks:
- One measure per performance obligation. A contract with design and build phases that are distinct obligations can use different measures for each. A single obligation gets a single measure — you cannot recognize the labor half on hours and the materials half on delivery.
- Consistency across similar contracts. Whatever you use for one restaurant build-out, you use for all similar build-outs. Cherry-picking methods job by job to smooth earnings is exactly what the consistency requirement exists to prevent.
- Exclude inputs that do not depict progress. Wasted materials, rework from your own errors, uninstalled goods, and abnormal inefficiencies come out of an input calculation. Your mistakes are not progress.
- Update estimates every period. Total cost, total hours, and completion percentages are living numbers. Recompute cumulative revenue from inception each close and book the change as a catch-up — that discipline is the monthly close routine for any project business.
- Document the reasoning. A short memo per contract type — why this measure, why it fits these obligations, how estimates are updated — is what stands between you and a painful audit adjustment two years later when nobody remembers why the method was chosen.
If progress cannot be reasonably measured at all, which happens most often in the chaotic first weeks of a job, the standard has a holding pattern: recognize revenue only to the extent of costs incurred (zero margin) until a measure becomes reliable — provided you expect to recover those costs. It is a temporary shelter, not a method.
Booking it in your ledger
Whichever method you choose, the monthly bookkeeping has the same shape: accumulate job costs, recognize earned revenue from your progress computation, and track the difference between revenue earned and amounts billed. That difference is the heartbeat of project accounting — under-billings are an asset (work performed ahead of billing), over-billings a liability (cash collected ahead of work).
If you keep your books in plain text, the month-end entries for the restaurant job look like this. First the costs hit the job, then the progress computation drives the revenue entry and the contract-asset balance:
2026-12-31 * "December job costs - Harbor Restaurant build-out"
Expenses:Job-Costs:Harbor-Restaurant 240000.00 USD
Assets:Checking -240000.00 USD
2026-12-31 * "Recognize revenue, 60% complete on $600,000 contract"
Assets:Contract:Harbor-Restaurant 360000.00 USD
Income:Contract-Revenue:Harbor-Restaurant -360000.00 USD
2026-12-31 * "December progress billing #2"
Assets:Accounts-Receivable 200000.00 USD
Assets:Contract:Harbor-Restaurant -200000.00 USDAfter these entries, the contract account holds a $160,000 debit balance — your under-billing, provable against the progress computation — and the income statement shows $360,000 of revenue against $240,000 of job cost. A Fava dashboard on top of this ledger turns those job accounts into the work-in-progress schedule your banker wants to see, and the Beancount documentation covers balance assertions you can add so a fat-fingered progress entry fails loudly instead of shipping to your tax return.
Your month-end progress routine
Start with the contract, not the software: confirm each obligation qualifies for over-time recognition and write down the single measure you chose and why. Update your estimate of total cost or total effort before computing anything, and carve uninstalled materials out of input measures. Compute cumulative revenue from inception, subtract what you already recognized, and book the difference — that subtraction is the cumulative catch-up, and it is where stale estimates surface. Finally, reconcile billings against recognized revenue on every open job and make the resulting under- and over-billings tie to your balance sheet. Do that every month and the year-end question — how much of this contract is this year's revenue — answers itself.





