Time to Invoice Only Counts the Invoices You Sent
Why this matters
Time to invoice is the gap between finishing work and billing for it, and a shop watching it fall congratulates the office. The trap is structural rather than careless: the average is computed over invoices that got issued, so a job completed and never billed at all contributes nothing to it. The worst cases are exactly the ones the number cannot see. A shop with a real billing backlog can watch this figure improve month after month while the pile of unbilled finished work grows underneath it, and the figure will keep improving right up to the point where the backlog is the reason payroll is tight.
What the average is computed over
Each row in the average is one invoice, and it needs three things to exist at all: the invoice was issued inside the window, it is linked to a job, and that job carries a completion date. The value is issue date minus completion date, in days. The average is the mean of those values.
Three populations are therefore outside it, and they are not random:
- Completed jobs with no invoice. The whole point of the metric, and structurally invisible to it.
- Invoices with no job link - a materials-only sale, a membership renewal, a deposit invoice raised off an estimate rather than off finished work. These have no completion date to subtract from.
- Jobs with no completion date recorded, which in most shops correlates with the messy ones.
An average over completed cases excludes the still-open ones, and the still-open ones are the bad ones. That is survivor bias, this card owns the claim for the group, and the siblings below cite it rather than re-deriving it. It is the same shape as judging a repair method by the calls that came back fixed.
Survivor bias is one species of the wider excluded-denominator problem, which has an owner of its own. See related: SLA Compliance Only Counts Jobs That Carry a Deadline.
Why it improves as the backlog worsens
This is not noise. It runs one direction, for a reason you can name.
An invoice is quick to raise when the job closed cleanly: one line, a signature on file, no parts to price, no outside party to wait on. It is slow when something is missing. An office under pressure triages toward the quick ones, because clearing five simple invoices in the time one messy one takes is the rational move on any given afternoon. So the quick jobs enter the average with a short gap and the messy ones do not enter it at all. The more pressure, the harder the triage, the shorter the average.
Run the mechanism the other way and it still holds, which is how you know it is real: an office with spare capacity clears the messy ones too, those invoices arrive with long gaps, and the average rises while the unbilled pile shrinks. A month where time to invoice worsens and the unbilled count falls is usually a month where somebody caught up.
The companion count that makes it honest
The metric cannot be repaired from inside itself. It needs a second number that is a pure count over the population the average excludes:
Completed and still unbilled: the number of jobs with a completion date, no invoice, and no deliberate hold, aged into buckets from the completion date.
Note the datum. This clock starts at job completion, so it is a different clock from the receivables aging ladder, which starts at an invoice's due date and cannot begin until an invoice exists. A job sitting three weeks unbilled does not appear anywhere in aging, which is the gap this count fills.
Bucket it at 0 to 7 days, 8 to 30, 31 to 60, and over 60. Review it weekly, not monthly, because the buckets are the point and a monthly read lets a job cross two of them before anyone looks.
Where the completion date is the wrong datum entirely
Three job shapes break the metric rather than distort it, and the fix for each is a definition change, not a process change.
Progress-billed work. On a multi-week install billed at milestones, the gap from final completion to final invoice is long by design and says nothing about the office. Measure those against their own milestone dates, or exclude the job type from the metric and say so in its definition, so nobody spends a quarter trying to improve a number that is working as intended.
Recurring work invoiced in advance. If a maintenance agreement creates a job record and the invoice is raised when the visit is booked rather than after it, that row carries a negative gap. Ten such rows at minus 6 days inside a population of fifty pull the mean down by 10 times 6 divided by 50, which is 1.2 days, and that shift is permanent and grows as the agreement base grows. A shop selling more agreements watches its billing speed improve every quarter without the office doing anything differently.
Customer-approved totals on time and materials. Where the agreement is that the customer signs off on the final figure before it is billed, the approval round trip is inside the gap and belongs there, but the target for that job type is days rather than hours. Hold one target across job types with different billing shapes and you will spend the review arguing about the definition instead of the pile.
The month the average fell and the pile grew
A shop completing roughly 60 jobs a month, terms net 30.
| Prior month | Review month | |
|---|---|---|
| Invoices issued against completed jobs | 58 | 54 |
| Average completion-to-invoice gap | 3.1 days | 2.4 days |
| Completed and still unbilled at period end | 14 jobs | 23 jobs |
The reported average fell by 0.7 days, which is 23 percent of the prior month's 3.1 days. On its own that is a good month. The unbilled count rose by 9 jobs, from 14 to 23, which is 64 percent of the prior month's 14.
Here is that pile aged from completion date:
| Age since completion | Jobs | Average age in that bucket | Job-days held |
|---|---|---|---|
| 0 to 7 days | 9 | 4 days | 36 |
| 8 to 30 days | 6 | 18 days | 108 |
| 31 to 60 days | 5 | 44 days | 220 |
| Over 60 days | 3 | 85 days | 255 |
| Total | 23 | 26.9 days | 619 |
The three jobs over 60 days are 3 of the 23 unbilled jobs, which is 13 percent of that unbilled count, and they carry 255 of the 619 job-days, which is 41 percent of the unbilled age weight. Both figures are about the same pile, and neither is a share of anything else. That concentration is the normal shape: a small number of genuinely stuck jobs carries most of the delay, and the reported average contains none of it.
Forcing the invisible jobs back into the number
Compute the honest version once, by hand, the first time you do this. Take every completed job that could have been billed in the period, whether it was or not, and assign each one its gap. Billed jobs get the real gap. Unbilled jobs get their age today, which is a floor, because their eventual gap can only be longer.
Reconcile the counts before you compute, because 54 plus 23 is 77 and this shop completes roughly 60 jobs a month. The 77 is not one month of work. It is the 14 jobs carried in unbilled from the prior month plus this month's own completions, which the identity puts at about 63: 14 open at the start, 54 billed, 23 left standing. And the 23 is not this month's leftovers either. It is every job carrying an unclosed billing obligation at period end, whenever it completed, and 8 of them finished more than 30 days ago.
- The 54 billed jobs contribute 54 times 2.4 days, which is 129.6 job-days.
- The 23 unbilled jobs contribute 619 job-days.
- Total is 129.6 plus 619, which is 748.6 job-days over 77 jobs, so 9.7 days.
Reported 2.4 days over the 54 invoices issued inside the month; honest floor 9.7 days over all 77 jobs that carried a billing obligation in it. Those are two different censuses, a period flow and that flow plus the standing pile behind it, and quoting the second against the first is only fair while you say so. It is roughly four times the reported figure, and it is a floor rather than an estimate, because every one of those 23 jobs is still aging as you read the number.
What that changes: at 2.4 days the office is fine and the conversation is about collections. At 9.7 days and rising, the shop is holding a 23-job pile against a run rate of roughly 60 completions a month, which is about 38 percent of a month's completed job COUNT - a standing stock read against a monthly rate, and not a share of a month's money, which nobody knows yet because none of it has been priced onto an invoice. None of it can be collected, chased, or financed. The failure mode is specific and common: the shop runs a collections push, leans on customers who are paying on time, and never touches the 23 jobs it has not yet asked for money.
What actually moves the gap
Six drivers, and they need separating before any of them gets a fix, because the fixes are unrelated to each other. The last column is what tells them apart when you look at the pile.
| Driver | What it does to the gap | The tell that separates it |
|---|---|---|
| Field close-out incomplete: no signature, no photos, parts used not recorded | Adds days at the front, evenly | Pile is young and wide, most rows under 10 days, spread across every tech |
| One tech's habit | Adds days to a subset | Pile sorts by tech; the same name is on most rows regardless of job type |
| Waiting on an outside party: a sub's invoice, a supplier bill, a permit sign-off | Adds weeks, on a minority | Small count, old rows, every one names a party who is not you |
| Disputed scope or an unsigned change order | Stops the clock indefinitely | Longest rows in the book, each with notes and no invoice |
| Office capacity | Adds days to everything, then triages | The average FALLS while the count rises; this is the only driver with that signature |
| Deliberate hold: customer asked for next month, contract bills in arrears | Adds a fixed, expected number of days | Predictable, same every cycle, and the same customers each time |
The deliberate holds should be flagged and excluded from both numbers rather than explained every month. A contract that bills in arrears is not a billing failure and leaving it in the pile trains everyone to ignore the pile.
The two thresholds worth committing to
State them as defaults and tune them to how your close-out actually runs:
- Flag at 2 business days from completion with no invoice. That is enough time for a tech to sync paperwork and not enough for the job to go cold in someone's memory.
- Escalate at 7 calendar days to a named person who can clear the specific blocker, not to a queue. The escalation is the point: past a week, the reason a job is unbilled is almost never that nobody got to it, it is that something is missing and whoever can supply it has not been asked.
- Over 30 days unbilled, the job gets a decision rather than a reminder: bill it at the agreed scope and argue afterwards, write down the disputed portion, or record it as a warranty or goodwill job so it stops appearing as work in progress. Leaving it in the pile is itself a decision, and it is the one that ends in a write-off.
Run those thresholds against the worked pile and the 23 sorts itself: in the youngest bucket of 9, the rows past 2 business days are flags and the rest are simply in progress; the 6 in the 8-to-30 bucket are all past escalation; the 8 older than 30 days each need a decision. That is a named list for a named person this week, which is what the average alone never produced.
References
- See related: universal-sla-compliance-only-counts-jobs-that-carry-a-deadline, which owns the general excluded-denominator claim this card's survivor bias is one case of.
- See related: universal-days-sales-outstanding-and-the-mismatch-inside-it, for why the collections figure next to this one moves with the window it was read on.
- See related: universal-the-aging-buckets-and-what-each-one-actually-costs, the aging ladder that starts where this count ends.
- See related: universal-partly-paid-invoices-and-the-coverage-number, for invoices that were issued and only partly settled.