Time and Materials, Retainer or Milestones: Picking a Billing Model

Time and Materials, Retainer or Milestones: Picking a Billing Model

You run a 20-person software team. One client pays by the hour, one pays a monthly fee, one insisted on a fixed price per feature. Every month the invoicing takes three days, someone finds hours that were already billed under the retainer, and the accountant asks why revenue in the P&L does not match the invoices sent. The billing model decides your cash flow, who carries the risk when scope grows, and when you may call the money revenue. Here is how the three models compare, and how to run them side by side without billing the same hour twice.

The three models on one page

Time and materialsMonthly retainerFixed-price milestones
What you sellHours at a rateCapacity for a monthAn agreed result
Invoice timingAfter the period, from timesheetsIn advance, same day each monthOn prepayment and on acceptance
Cash flowSlowest: work, then invoice, then waitFastest: money before workLumpy: deposit, then a gap, then balance
Scope riskClient carries itShared: capped hours protect youYou carry it
Revenue recognitionAs hours are worked and approvedEvenly over the monthOn acceptance, or over time by progress
Admin effortTimesheets, approvals, rate cardsLow, plus tracking of used hoursBudget vs actual, change requests

Time and materials: timesheets and rate cards

Under T&M you sell hours at a rate that depends on the person, the role or the project. The building blocks are a timesheet (who worked on what, for how long, on which day) and a rate card (what an hour of each person or role costs the client). Rate cards need effective dates, so that March hours are billed at the March rate even when the invoice is produced in April.

The month-end routine: people log hours daily, a project lead approves them weekly, and on the first working day of the next month the invoice is generated from approved hours multiplied by the rate card, with the timesheet detail attached. US clients in particular expect the breakdown by person and day.

How hours get billed twice

Double-billing rarely comes from bad intent. It happens when hours are exported to a spreadsheet, invoiced, then re-exported next month because a late entry changed the total; or when a person works for the same client on a retainer project and a T&M project. The fix is structural: every approved hour carries a status (unbilled, billed on invoice X, non-billable, covered by retainer) and the invoicing step can only pick unbilled hours. If your tool cannot list unbilled approved hours per client, you are relying on memory. TridentERP builds T&M invoices from unbilled hours only, so the same hours cannot be billed twice, which is the guard you want whatever the tool.

Monthly retainers

A retainer sells capacity: a fixed monthly fee for an agreed number of hours or a defined scope of support, usually invoiced on the first day of the month in advance. The client gets a predictable cost and a guaranteed team; you get the cash before the work is done.

Three decisions make or break a retainer. The cap: state the included hours (say, 80 per month) and the rate above it. Rollover: unused hours expire at month end or roll over for one month, never indefinitely. Scope: bug fixes and small changes are usually in, new features usually out, and the border must be written down.

Accounting is simple but often done wrong. An invoice issued on 1 March for March capacity is a contract liability that becomes revenue as the month passes. For monthly reporting this is a detail; for quarterly invoicing in advance it changes the P&L materially. Because the money arrives before delivery, many teams send a proforma invoice first and convert it once paid.

Fixed-price milestones

Fixed price sells a result: a feature, a release, an integration, for an agreed amount regardless of hours spent. The client gets certainty; you get the margin if you estimate well and the loss if you do not. Split the work into milestones of two to six weeks, with a deposit at the start and the balance on acceptance, and write the acceptance criteria before work begins.

Two internal numbers matter here. Budget vs actual: estimated hours against hours logged so far, per milestone, reviewed weekly. And effective hourly rate: the milestone price divided by hours actually spent, which shows whether fixed-price work beats your T&M rate. Hours are still logged on fixed-price projects even though they are not invoiced; without them you cannot calculate either number.

Revenue recognition depends on the contract. For short milestones, recognizing revenue on acceptance is the common and defensible approach. For longer contracts, IFRS 15 may require recognizing revenue over time based on progress (often hours spent against total estimated hours), which is one more reason to keep timesheets on fixed-price work. Ask your accountant which applies before the first large contract.

Worked example: 160 hours billed three ways

One senior developer, a contractor costing you EUR 35 per hour, works 160 hours in a month for a client, so the month costs EUR 5,600 either way. Here is what the client pays, when the cash arrives, and what you keep.

Time and materials

Rate card: EUR 65 per hour. Invoice on 1 April for March: 160 x 65 = EUR 10,400. Payment terms Net 30, so the cash arrives around 1 May, about 60 days after the first hour was worked. Revenue EUR 10,400 in March, margin EUR 4,800 (46%).

Monthly retainer

Retainer: EUR 10,000 per month for up to 160 hours, invoiced on 1 March, paid by 15 March. Cash arrives before most of the work is done. Revenue EUR 10,000 recognized across March, margin EUR 4,400 (44%). If the team logs only 148 hours, the 12 unused hours roll over once, and the cost falls to EUR 5,180, so margin rises to EUR 4,820. Hours above 160 are billed at EUR 65 on 1 April.

Fixed-price milestone

You estimated 160 hours and priced the milestone at EUR 12,000, which includes a buffer of about 15% over the T&M price. Terms: 50% deposit on 1 March (EUR 6,000, received 5 March), 50% on acceptance. Two change requests push the actual effort to 184 hours, cost EUR 6,440. Acceptance on 3 April, balance received 30 April. Revenue EUR 12,000 recognized on acceptance (in April, unless you recognize over time). Margin EUR 5,560 (46%), and the effective rate is EUR 65.2 per hour, just above the T&M rate despite the overrun. With a 40-hour overrun the effective rate would drop to EUR 60.

T&MRetainerFixed price
BilledEUR 10,400EUR 10,000EUR 12,000
CostEUR 5,600EUR 5,600EUR 6,440
MarginEUR 4,800EUR 4,400EUR 5,560
Cash fully inAbout 1 May15 March30 April (half by 5 March)
Who absorbs overrunClientYou, up to the capYou

Combining models per client

Most clients that stay longer than a year end up on a mix: a retainer for maintenance and support, fixed-price milestones for new features with a clear scope, and T&M for whatever neither covers. This works only with a few rules that everyone follows.

  • One timesheet per person, with every hour tagged to a project that belongs to exactly one contract. "Support" hours cannot be logged on the feature project.
  • One rate card per client, with effective dates, used for T&M invoices and for pricing overage on the retainer. Two rate cards for the same client cause disputes.
  • Hours on the retainer project are marked "covered by retainer" when approved, so they can never be picked up by a T&M invoice.
  • Fixed-price hours are logged but flagged non-billable, so budget vs actual and the effective rate stay visible.
  • Every invoice states which contract it belongs to, so a client statement with a retainer invoice, a milestone deposit and a T&M invoice in one month makes sense to their accounts payable team.

Review the mix quarterly. If overage on a retainer exceeds 20% of the fee for three months, the cap is wrong. If a fixed-price client keeps sending change requests, price the next milestone on T&M or raise the buffer.

FAQ

Which model is best for cash flow?

The retainer, because it is invoiced in advance. Fixed price with a 50% deposit is second; T&M billed monthly in arrears is slowest unless you invoice every two weeks.

Should hours appear on a fixed-price invoice?

No. The client bought a result, and listing hours invites a renegotiation. Keep the hours internally for margin and progress tracking.

Can I switch a client from T&M to a retainer mid-year?

Yes. Close the T&M period with a final invoice for all unbilled approved hours, then start the retainer on the first day of the next month with a fresh contract and cap.

What to do next

  1. List your active clients and write down which contract type covers each project. Any project with two answers is where double-billing will appear.
  2. Put effective dates on every rate card and check that last month's invoices used the rate that was valid for those days.
  3. Turn on hour statuses (unbilled, billed, covered by retainer, non-billable) and produce a report of unbilled approved hours per client before the next invoicing run.
  4. Log hours on fixed-price work as well, and review budget vs actual for each open milestone every week.
  5. If your current tools cannot show project margin from timesheets and rate cards in one place, look at how TridentERP handles T&M, retainer and milestone invoicing next to a live project P&L.
Share this post.
Stay up-to-date

Subscribe to our newsletter

Don't miss this

You might also like