How Operating calculates earned and forecasted revenue

Written By Matti Parviainen

Last updated About 1 month ago

This article explains the three revenue numbers you see on projects, the portfolio, and reports:

  • Earned revenue β€” revenue recognized from work and expenses that have actually happened ("actuals").

  • Planned revenue β€” revenue expected from the plan (allocations and planned expenses).

  • Forecasted revenue β€” a single best estimate of total revenue, made by combining earned revenue so far with the remaining plan.

How each is calculated depends on the project's billing type and, for fixed-price projects, its revenue recognition method. We cover every combination below.


The building blocks

A few concepts feed every calculation:

  • Budget β€” the contracted amount for the project (a project can have more than one budget, each with its own date range).

  • Allocations β€” planned assignments of people to the project over time. These drive the plan.

  • Time entries and expenses β€” the actual work logged and costs incurred. These drive the actuals.

  • Rates β€” each person has a billing rate (what their time is worth to the client) and a cost rate (what their time costs you). Both come from rate cards / cost settings.

  • Budget progress β€” recognition indications on the budget that say "this much of the budget has been earned as of this date." Earlier indications lock in the earned amount for the period leading up to them; everything after the last indication is handled by ongoing ("running") recognition.

Important: "Cost-weighted" and "completion %" mechanics described in some sections apply only to the cost-to-cost method. The default fixed-price method works differently. Watch for the method labels in each section.


Billing types at a glance

Billing type

How revenue is determined

Fixed price

You invoice the budgeted amount. Revenue is distributed across time and people according to the chosen recognition method (see below).

Capped time & materials

Revenue is actual hours Γ— rates, but capped at the budget. Earlier work earns its full value up to the cap; work that crosses the cap earns partial revenue; later work earns zero.

Time & materials (per-hour)

The budget is just a target. Revenue is simply actual hours Γ— rates; expenses are invoiced at their billable amount. No budget distribution.

Non-billable

Not invoiced; no revenue.

The rest of this article focuses on fixed price, which is where the recognition methods and the earned/planned/forecast machinery come into play.


Earned revenue (actuals) β€” fixed price

Conceptually, the project's timeline is split into two parts by the last budget progress indication:

1. Up to the last indication β€” "by progress"

Each budget-progress indication sets a fixed amount earned for the period leading up to it. The amount for a period is the increase from the previous indication (progress amounts are cumulative, so a indication at €60k following one at €40k means €20k earned in that period).

That fixed amount is recognized in full β€” there's no proportional scaling β€” and then distributed across the time entries and expenses in the period:

  • Default method ("weighted by hours and rates"): the amount is distributed by each entry's billable value (rate Γ— hours). Expenses are taken first, at their invoice amount (capped to the period's amount), and whatever remains is spread across time entries.

  • Cost-to-cost: the amount is distributed by each entry's cost (cost rate Γ— hours for time; billable cost for expenses), with time and expenses pooled together.

If a period has no entries to attach revenue to, the amount is held as "unattributed revenue" on the indication rather than lost.

2. After the last indication β€” "running" recognition

The leftover budget (budget total βˆ’ last indication amount) covers the period from the day after the last indication to the end of the budget. How much of it is earned so far depends on the method:

  • Default method ("weighted by hours and rates"): the remaining budget is recognized only once that period has fully ended (the budget's end date passes) or you set another indication. While the period is still open, no revenue is attributed to it yet β€” even if work has been logged. When it is recognized, the full remaining budget is distributed by billable value (expenses first, then time entries). There is no day-by-day completion ratio. In practice this means earned revenue under the default method moves in steps: it jumps at each indication and when the budget completes, rather than accruing continuously.

  • Cost-to-cost: the system computes a completion % = actual costs Γ· planned costs since the last indication, clamped between 0% and 100%, and earns completion % Γ— remaining budget β€” so earned revenue accrues continuously as costs are incurred. "Actual costs" includes both time-entry costs and expense costs. This earned amount is then distributed cost-weighted across the entries. (Once a budget's period has fully ended, it's treated as 100% complete regardless of the cost ratio.)

Earned revenue with the "evenly" methods

Evenly by week / Evenly by month ignore the per-person mechanics above entirely:

  • The budget is spread evenly across the calendar weeks/months the budget covers. Partially-covered weeks/months are prorated by the number of days included.

  • Revenue is attributed at the project level only β€” it is not attributed to the people who logged time, and planned expenses receive no revenue.

  • Rate cards act purely as a planning aid here; they don't affect recognition.

This applies to both earned and forecasted revenue.


Budget progress indication: how they work

Budget progress is the mechanism behind earned revenue for the default ("weighted by hours and rates") method β€” but the workflow differs by method, and it's a common source of confusion.

Setting progress manually (default method)

For the default method, you record progress yourself. From a project's financials (the "Set progress" / "Add progress indication" action on a budget), you:

  1. Pick a date (it must fall inside the budget's date range β€” the budget's own start and end are implicitly treated as 0% and 100%).

  2. Enter either a percentage or an amount β€” the two are linked, so entering one fills in the other ("Enter either percentage or amount - they are linked").

A few rules to know:

  • The amount you enter is cumulative β€” it's the total earned as of that date, not the increment since the last indication. So a project that goes 40% β†’ 70% is recorded as two indications of €40k and €70k (on a €100k budget), and the second indication earns the €30k in between.

  • Each indication must be larger than the previous one and smaller than the next, and no greater than the budget. Only one indication per day.

  • Until you set a indication (or the budget period ends), no revenue is attributed to that stretch of work. This is by design for the weighted method β€” it's why a fixed-price project can show logged time but €0 earned revenue until you mark progress.

Cost-to-cost: progress is automatic

For cost-to-cost, you do not set indications. Progress is computed automatically from tracked costs vs planned costs every time the figures are recalculated β€” there are no stored indications behind it. As the in-app help puts it: "Budget progresses automatically based on tracked costs compared to planned costs. Completed budgets always have 100% progress even if actual costs are over or under planned costs."

(The "Set progress" action is still technically available on these projects, but manual indications aren't part of the intended cost-to-cost workflow.)

Evenly by week / month: no indications needed

The "evenly" methods spread the budget across the calendar automatically, so they don't rely on progress indications either.

When figures recalculate

Earned revenue is recalculated automatically whenever you add, edit, or delete a budget progress indication, and whenever the time entries or expenses on the project change. For cost-to-cost, changing tracked time or costs moves the completion % (and therefore earned revenue) on its own, with no indication needed.


Planned revenue β€” fixed price

Planned revenue answers "if the plan plays out, how is the budget expected to be earned?"

  • The entire budget is recognized as planned revenue and distributed across the allocations and planned expenses that fall within the budget's dates.

  • The split follows the same weighting rules as actuals:

    • Default method: weighted by billable value (rate Γ— planned hours), expenses first.

    • Cost-to-cost: weighted by planned cost, allocations and expenses pooled.

    • Evenly by week/month: spread evenly across the calendar; planned expenses get nothing.

  • With multiple budgets, each budget is distributed independently and matched to allocations/expenses by date. Anything dated outside every budget's range isn't recognized.

(For time & materials projects there's no budget distribution β€” planned revenue is simply rate Γ— planned hours per allocation, plus planned expenses at their billable amount.)


Forecasted revenue β€” combining the two

Forecast (shown on the project portfolio, project list, and project detail page) is built around a cutoff date β€” typically the end of the last closed period (e.g. the end of the previous month):

Forecast = earned revenue up to the cutoff + remaining plan after the cutoff

Mechanically:

  1. Up to the cutoff: take the earned revenue already recognized (whether from indications or running recognition).

  2. After the cutoff: take the planned revenue, but scale it to the remaining budget β€” i.e. budget βˆ’ earned revenue up to the cutoff. The future plan is fit into whatever budget is left.

For a fixed-price project this means earned + forecast lands exactly on the contract budget. (Capped T&M scales to the remaining cap; plain T&M and the "evenly" methods are simply additive with no remaining-budget scaling.)

Why the cutoff date matters

  • Cutoff = last closed month: the forecast is made of fully-closed actuals plus the remaining plan. Nothing in the open period is included on the actuals side.

  • Cutoff at a later date: more actuals are pulled in. For cost-to-cost, the recognition for the still-open period reflects the running completion % (actual vs planned costs since the last indication). For the default method, the open period's earned revenue is the distributed remaining budget as described above.

A note on terminology: Operating does not use a separate "estimate at completion" figure. The forecast is simply the recognized actuals through the cutoff plus the remaining budget spread over the future plan. Earned-revenue figures are recalculated whenever budget progress, time entries, or expenses change.


A worked example

Take a €100,000 fixed-price project running January–February, with planned work split evenly (β‰ˆβ‚¬50k of billable value planned in each month). It's now mid-February, and the forecast cutoff is the end of January (the last closed month).

Default method ("weighted by hours and rates")

At the end of January the project manager records a indication: 40% complete = €40,000. In January the team logged time worth €50,000 of billable value (say €35k for Alice, €15k for Bob).

Earned revenue today:

  • January (up to the indication): €40,000 is recognized β€” the indication sets the total, not the €50k of value tracked. It's split in proportion to billable value: Alice €40k Γ— 35/50 = €28,000, Bob €40k Γ— 15/50 = €12,000.

  • February (open, ends after today): the remaining €60,000 budget period is still open and has no indication, so €0 is earned yet β€” even though the team has already logged February time.

  • Total earned so far: €40,000.

This is the "steps" behaviour: earned revenue will stay at €40,000 until either a new indication is set or the budget completes at the end of February (at which point the remaining €60,000 is recognized).

Forecast (cutoff = end of January):

  • Earned up to the cutoff: €40,000.

  • Remaining budget: €100,000 βˆ’ €40,000 = €60,000, which the February plan is scaled to fit.

  • Forecast total: €40,000 + €60,000 = €100,000 β€” exactly the contract budget, as always for fixed price.

Same project on cost-to-cost (for contrast)

Now suppose the project uses cost-to-cost instead, with a total planned cost of €60,000, and no manual indications. By mid-February, €36,000 of actual cost has been incurred.

  • Completion % = €36,000 Γ· €60,000 = 60%.

  • Earned revenue today = 60% Γ— €100,000 = €60,000 β€” recognized continuously as costs are incurred, with no indication required.

Same budget, same calendar, same plan β€” but the default method shows €40,000 earned mid-February (the last indication) while cost-to-cost shows €60,000 (live cost progress). That difference is the heart of why the recognition method matters.

(Expenses follow the same logic: under the default method billable expenses are recognized first, up to the period's amount; under cost-to-cost they're pooled with time and weighted by cost.)


Quick reference

Default (weighted by hours & rates)

Cost-to-cost

Evenly by week/month

Up to a indication

Indication amount, distributed by billable value (expenses first)

Indication amount, distributed by cost

Budget spread evenly over the calendar

After last indication

Full remaining budget, by billable value

completion % Γ— remaining budget, completion % = actual Γ· planned cost

Budget spread evenly over the calendar

Distributed to people?

Yes

Yes

No β€” project level only

Planned expenses earn revenue?

Yes

Yes

No

Forecast = actuals to cutoff + plan after cutoff scaled to remaining budget

Yes

Yes

Additive (no scaling)


Common questions

My fixed-price project shows €0 earned revenue even though we've logged plenty of time. Why? On the default method ("weighted by hours and rates"), revenue isn't attributed to logged time until you set a budget progress indication or the budget's end date passes. Logged time alone doesn't move earned revenue β€” record progress to recognize it.

Earned revenue jumped up suddenly from one day to the next. Is that a bug? No β€” that's expected on the default method. Earned revenue moves in steps: it increases when you set a indication and when a budget completes, not gradually day by day. (Cost-to-cost is the opposite β€” it moves gradually as costs are incurred.)

My cost-to-cost project shows progress I never entered. Where does it come from? Cost-to-cost calculates progress automatically from tracked costs vs planned costs. There are no manual indications behind it β€” the percentage updates whenever time or expenses change.

Earned + forecast equals exactly the budget. Shouldn't the forecast be able to go over or under? For fixed-price projects, the future plan is scaled to fit the remaining budget, so earned-to-date plus forecast always lands on the contract amount. If you expect to over- or under-run, that's reflected by adjusting the budget, not by the forecast drifting off it. (Time & materials forecasts can exceed any target, since they aren't budget-capped.)

Can cost-to-cost progress go above 100%? No. Completion is capped at 100% even if actual costs exceed planned costs. A fully completed budget is always treated as 100% earned, whether you came in over or under on cost.

Why don't individual consultants get revenue attributed on an "Evenly by week/month" project? Those methods attribute revenue at the project level only and spread it evenly across the calendar. They don't attribute to the people who logged time, and planned expenses receive no revenue. Rate cards there are only a planning aid.

Does changing the forecast cutoff date change my actuals? No. The cutoff only decides where the line is drawn between "earned so far" and "remaining plan." It doesn't change how any individual entry's revenue is recognized β€” that's driven by indications (or cost progress) and budget completion, which key off today, not the cutoff.

I typed a percentage when setting progress, but it saved an amount. Why? Percentage and amount are linked in the dialog for convenience, but only the amount (cumulative, in your project's currency) is stored. The percentage is recomputed from the amount and the budget whenever it's shown.

Why can't I set a indication on the budget's first or last day? The budget's start and end are implicitly 0% and 100%, so indications are only for the dates in between.