Report templates

First-time fix rate: how to measure it properly from job data

First-time fix rate is easy to quote and hard to measure honestly, because the repeat visit is often logged as a new job. This template sets out a first time fix rate calculation from job, visit and asset data: the revisit window, the edge cases and the denominator, with a worked example.

By Simon DuttonLast reviewed

Why the figure in your job system is usually too kind

Ask most job systems for first-time fix and you get a count of jobs closed with one visit. That is easy to produce and it flatters almost everyone. When an engineer fixes a boiler on Monday and the same boiler locks out again nine days later, the office raises a new job. Both jobs close with a single visit, so the job count scores two first-time fixes for one fault that took two trips.

The same count can also be unfair. A job where the engineer could not get in on Tuesday and fixed it on Thursday shows two visits and scores as a failure, although nobody touched the asset before the fix.

So the measure has to be built from job, visit and asset data together, with written rules for what counts. This page sets out the method: the revisit window, what counts as a revisit, the awkward cases, and which jobs belong in the denominator.

The formula and the four decisions inside it

The textbook version is short. IBM's explainer on first-time fix rate describes it as the share of jobs completed on the first visit without follow-up visits, supplementary parts or external support, calculated as jobs completed on the first visit divided by total jobs completed.

That sentence hides four choices you have to make before anyone can calculate it from data:

  1. Which visit is "first". We use the first attended visit: the first time an engineer was on site with access to the asset. A no-access attempt is a scheduling failure, and it belongs in a different measure.
  2. What counts as a revisit. Any further visit on the same job to finish the repair, plus any new job for the same fault on the same asset within N days of the fix.
  3. How long N is. We use 28 days in the example. Pick a window, write it down and keep it fixed, because changing it moves the number.
  4. What is in the denominator. Reactive jobs with an attended fix attempt. Surveys, quote visits and jobs never attended are left out.

If your customer contract defines first-time fix, its wording wins for contract reporting. Some contracts excuse a planned return to fit parts; others do not. Keep that as a second view, not a replacement, so you can still see how often vans are missing the part.

The data model

Fields you need

Record Fields used Why
Job (work order) job ref, job type, fault or problem code, asset ref, site, created date, closed date, status, linked or parent job Groups visits, identifies the fault and the asset
Visit (appointment) job ref, engineer, start and end, outcome code (fixed, no access, needs parts, needs second engineer) Finds the first attended visit and why it did not finish
Asset asset ref, site, asset type, parent asset Repeat jobs are matched on the asset, not the site
Repeat job cause cause code on the later job (customer-caused, vandalism, different fault) Separates your failures from things you could not prevent
Parts order (optional) job ref, part, ordered date, delivered date Shows whether the return was for a part a van should carry

Most of these exist in any job system, though not always under these names. On ServiceMax Core, PTC's data dictionary lists the Work Order fields SVMXC__Component__c (Component, a lookup to Installed Product), SVMXC__Top_Level__c, SVMXC__Order_Type__c, SVMXC__Completed_Date_Time__c, SVMXC__Root_Cause__c and SVMXC__How_Fixed__c, and visits on the ServiceMax Event object carry a SVMXC__Service_Order__c lookup back to the work order. There is also a Primary Work Order lookup (SVMXC__Related_Work_Order__c), but its description in the dictionary appears to have been copied from another field, so check how your own org fills it before you rely on it. The ServiceMax integration page covers getting that data out.

Joins

From To Key Watch for
Visit Job job ref Visits held on two calendar objects need reading from both
Job Asset asset ref Jobs logged against the site, not the asset, can't be checked for repeats
Job Later job same asset ref, later created date, within N days of the fix The office rarely links them; match on asset and fault, not on a link field
Later job Fault fault or problem code Free-text faults need mapping to a short code list first
Job Parts order job ref Parts ordered before the first visit mean the return was planned

Formulas

Measure Formula
Fix date date of the visit with outcome "fixed"
Repeat a later job on the same asset, same fault code, not coded customer-caused, created ≤ N days after the fix date
First-time fix first attended visit outcome = fixed and no repeat
First-time fix rate first-time fixes ÷ reactive jobs with an attended fix attempt in the period
Parts-excused view (first-time fixes + parts returns with no repeat) ÷ the same denominator
Period is final when period end + N days ≤ report date

Edge cases, and what we count them as

Case Counts as Reason
No access, then fixed at the first attended visit First-time fix The engineer fixed it the first time they could reach the asset. Report no-access attempts separately
No access, then cancelled Excluded No fix was attempted
Return to fit a part Miss (excused in the parts view) The customer still waited for a second visit
Second engineer or specialist needed Miss Same reason; the cause code tells you whether it was skills or a two-person task
Same fault, same asset, inside N days Miss The fix did not hold
Different fault, same asset Not a miss A filter alarm after a fan repair is a new problem. Flag assets with three or more jobs instead
Repeat coded customer-caused Not a miss Only if someone checks the code; an unchecked code becomes a way to hide misses
Same fault after N days Not a miss Outside the window by definition. Watch these in an asset reliability report
Survey or quote visit Excluded Nobody was trying to fix anything on that visit

Two things make this fair in practice. Fault codes must be short and consistent, because "Not cooling" and "no cooling, unit iced" have to match. And the customer-caused code needs an owner who reviews it each week.

Grouping weeks and waiting for the window

Group jobs by the date of the first attended visit, not by the date they closed. A job attended on 30 September and finished on 9 October after a parts return belongs to the week it was first attended, which is when the fix failed.

Then accept that recent weeks are not finished. A repair done last Friday has had three days to fail, so its week will look better than it really is. Mark any week whose last day plus N is after the report date as provisional, show it differently, and do not compare it with final weeks. The chart below does exactly that, and the last four weeks sit higher than most of the eight before them for no reason other than time.

IVP.ai / Report

Run 2 November 2026 · 28-day revisit window

First-time fix rate · Ostlecombe Building Services (fictional)

76.7% fixed first time,
not the 81.4% the job count shows.

Reactive jobs over the 8 weeks whose 28-day window has closed. A job counts only if the first attended visit fixed it and no job for the same fault on the same asset followed.

First-time fix rate
76.7%
332 of 433 jobs
Parts returns excused
87.1%
If a contract allows it
Single-visit job count
81.4%
372 of 457 closed jobs
Repeat faults caught
32
Logged as new jobs

Weekly trend, three ways of counting

  • Method (this page)
  • Parts returns excused
  • Single-visit job count
First-time fix rate by week, 10 Aug to 26 OctOver 8 final weeks the method gives 76.7%, the single-visit job count 81.4% and the parts-excused view 87.1%. The last 4 weeks are provisional because repeat jobs inside the 28-day window may still arrive, so their method figures will usually fall as late repeats arrive.Provisional: window still open60%70%80%90%100%10 Aug24 Aug7 Sept21 Sept5 Oct19 Oct26 Oct
Weekly figures
First-time fix rate by week under each counting rule
Week fromMethodParts excusedSingle-visit countStatus
10 Aug82.5% 47/5791.2%88.7% 47/53Final
17 Aug73.5% 36/4987.8%77.2% 44/57Final
24 Aug69.6% 39/5685.7%80.0% 44/55Final
31 Aug75.5% 40/5386.8%75.0% 45/60Final
7 Sept75.0% 39/5286.5%73.7% 42/57Final
14 Sept83.6% 46/5587.3%85.5% 53/62Final
21 Sept78.2% 43/5585.5%87.3% 48/55Final
28 Sept75.0% 42/5685.7%84.5% 49/58Final
5 Oct84.0% 42/5088.0%81.1% 43/53Provisional
12 Oct84.1% 53/6388.9%86.4% 57/66Provisional
19 Oct91.1% 51/5691.1%88.9% 56/63Provisional
26 Oct94.0% 47/5096.0%94.0% 47/50Provisional

Why first visits missed (8 final weeks)

  • Return to fit parts52 · 51.5% of misses
  • Same fault within 28 days32 · 31.7% of misses
  • Second engineer or specialist17 · 16.8% of misses

Counting rules

  1. ExcludedSurvey and quote visits, and jobs never attended (no access, then cancelled).
  2. Not a missA no-access attempt before the first attended visit. A different fault on the same asset. A repeat coded customer-caused. A repeat after the window.
  3. MissA return to fit parts or bring a second engineer. Any job for the same fault on the same asset within 28 days of the fix.
  4. WaitA week is final only when 28 days have passed since its last day.

Week from 28 September 2026: the jobs that needed a decision

42 of 56 counted jobs fixed first time (75.0%). Plain first-visit fixes with nothing else on the asset are not listed.

Jobs in the worked week that were excluded, missed, or had a later job on the same asset
JobAsset · faultVisitsCounted as
R-52478Ivel Court OfficesChillerHigh pressure trip28 Sept fixedMiss: same fault within 28 days (R-52794)
R-52534Coldharbour Leisure PoolChillerNot cooling29 Sept fixedMiss: same fault within 28 days (R-52913)Different fault, same asset
R-52589Brackwater PrimaryChillerNot cooling22 Sept no access28 Sept needs parts30 Sept fixedMiss: return to fit partsNo access on first attempt
R-52639Pellow Street SurgeryBMS controllerOffline29 Sept needs parts6 Oct fixedMiss: return to fit parts
R-52640Ivel Court OfficesBoilerLockout30 Sept fixedMiss: same fault within 28 days (R-52701)Customer-caused repeat
R-52644Ivel Court OfficesBoilerNo heat2 Oct needs 2nd engineer6 Oct fixedMiss: second engineer or specialist
R-52651Ferrand StudiosWater heaterLeaking2 Oct needs parts6 Oct fixedMiss: return to fit partsDifferent fault, same asset
R-52656Marrable HouseSplit ACError code2 Oct needs parts12 Oct fixedMiss: return to fit parts
R-52657Marrable HouseSplit ACError code2 Oct fixedMiss: same fault within 28 days (R-52658)
R-52665Coldharbour Leisure PoolBoilerLow pressure28 Sept needs parts5 Oct fixedMiss: return to fit parts
R-52673Marrable HouseChillerNot cooling28 Sept needs parts5 Oct fixedMiss: return to fit parts
R-52679Ivel Court OfficesWater heaterLeaking2 Oct fixedMiss: same fault within 28 days (R-52911)
R-52681Coldharbour Leisure PoolChillerHigh pressure trip28 Sept fixedMiss: same fault within 28 days (R-52682)
R-52683Coldharbour Leisure PoolChillerNot cooling28 Sept fixedMiss: same fault within 28 days (R-52534)Different fault, same assetRepeat after 29 days (outside window)
R-52659Quayle Retail Unit 4BoilerLockout30 Sept no accessExcluded: never attended (no access, cancelled)
R-52674Sandpiper Care HomePump setPump failed2 Oct surveyExcluded: survey or quote visit
R-52265Marrable HouseWater heaterNo hot water29 Sept fixedFirst-time fixDifferent fault, same asset
R-52633Northgate LibraryAir handling unitFilter alarm29 Sept no access2 Oct fixedFirst-time fixNo access on first attempt
R-52635Elmswood Medical CentreBoilerLow pressure1 Oct fixedFirst-time fixCustomer-caused repeat
R-52637Tilbrook DepotBMS controllerSensor fault28 Sept no access1 Oct fixedFirst-time fixNo access on first attempt
R-52669Marrable HouseWater heaterLeaking29 Sept fixedFirst-time fixDifferent fault, same asset
R-52672Quayle Retail Unit 4Split ACNot cooling1 Oct fixedFirst-time fixDifferent fault, same asset
R-52675Pellow Street SurgeryChillerNot cooling30 Sept fixedFirst-time fixDifferent fault, same asset

Weeks grouped by first attended visit · single-visit count grouped by job closed date

Illustrative data

Illustrative, fictional data. Company, sites, assets and jobs are invented; not customer results or a live product screenshot.

Worked example (illustrative, fictional)

The figures are from the fictional dataset behind the chart above: a building services contractor, the week starting Monday 28 September 2026, a 28-day window and a report date of 2 November 2026. The window closed on 1 November, so the week is final.

Step Jobs Note
Jobs whose first attended visit (or only visit) fell in the week 58
Less survey or quote visits 1 Excluded
Less jobs never attended 1 No access, then cancelled
Denominator 56 58 − 1 − 1
Misses: return to fit parts 6
Misses: second engineer needed 1
Misses: same fault on same asset within 28 days 7 Each one raised as a new job
First-time fixes 42 56 − 6 − 1 − 7
  • First-time fix rate: 42 ÷ 56 = 75.0%.
  • Parts-excused view: none of the six parts returns had a repeat, so (42 + 6) ÷ 56 = 48 ÷ 56 = 85.7%.
  • Single-visit job count for the same week: 49 of the 58 jobs closed that week had one visit, 49 ÷ 58 = 84.5%. That is 9.5 points higher than the method, mostly because the seven jobs whose fix failed within 28 days each closed with one visit, and a job count never looks at what happened to the asset next.

Seven of the 42 fixes had something else on the record that a cruder rule would have held against them: two had a no-access attempt before the fixing visit, four had a later job on the same asset for a different fault, and one had a repeat coded customer-caused. None of them is a miss under the rules above.

Over the eight final weeks the fictional contractor's rate is 332 ÷ 433 = 76.7%, against 81.4% from the single-visit count. Of the 101 misses, 52 were parts returns, 32 repeat faults and 17 second-engineer visits. Parts are the biggest cause, which points at van stock and pre-visit diagnosis before it points at engineer skill.

Reading the trend

Treat a single week as noise unless it is very different; with 50-odd jobs a week, three jobs move the rate by about five points. Look at the reasons as well as the rate. A falling rate driven by repeats is a quality question for the engineers and their supervisors. One driven by parts returns is a stock and diagnosis question. One driven by second-engineer visits is often a dispatch question: sending one person to a two-person job.

First-time fix also sits next to other measures. Utilisation pushed too high can show up here as rushed visits, which is why engineer utilisation is worth reading alongside it, and the full set of operational measures is on the field service KPIs template. Planned work has its own measure in the PPM compliance report template.

How to automate it with IVP.ai

The calculation needs jobs, visits and the asset register in one place, refreshed daily, with fault codes mapped to a short list. The IVP.ai Data Layer brings those together from your job system, whether it exposes a REST API or a SQL database, and keeps the history so a week moves from provisional to final on its own when the window closes. It applies the rules above as written, so the definition is the same for every branch and every month.

A Deskless by IVP.ai agent can then send the operations director the weekly rate with its reasons, and send each supervisor the repeat jobs on their patch, along with any job coded customer-caused for them to check. By default it flags and drafts, and a person decides; it does not recode jobs or change the figures. Deskless explains how that works. The national fire safety and security company in our single source of truth case study unified HubSpot, Uptick and finance spreadsheets into one governed view, saving 10+ hours a week on reporting; this report is built the same way. More templates are on the field service reporting hub.

To see your own first-time fix rate measured this way, start with the free 48-hour pilot. We connect up to three sources, clean the data and set one report or agent running on it within 48 hours of read-only access. You then have 14 days of access to decide whether to choose a plan or walk away.

Questions

Frequently asked questions

How do you calculate first time fix rate?

Divide the reactive jobs fixed at the first attended visit, with no job for the same fault on the same asset within your revisit window, by all reactive jobs that had an attended fix attempt in the period. Leave out surveys, quote visits and jobs never attended. Group jobs by the date of the first attended visit, and treat recent weeks as provisional until the window has passed.

Does a return visit to fit parts count as a failed first-time fix?

Under the method on this page, yes, because the customer still waited for a second visit. Some service contracts excuse a planned parts return, so it is worth reporting a second view that excuses them alongside the main figure. Keeping both shows contract performance and also how often vans arrive without the part the job needed.

What revisit window should we use?

There is no single correct number. A short window misses fixes that fail slowly; a long one starts catching unrelated wear, and every week stays provisional for longer. The example here uses 28 days. If a customer contract defines a window, use theirs for contract reporting. Whatever you choose, write it down and keep it fixed, because changing the window changes the rate.

Should a no-access visit count against first-time fix?

Not under this method. If the engineer could not reach the asset, no fix was attempted, so the first attended visit is the one that counts. A job that is never attended and then cancelled is left out of the denominator. No-access attempts still cost money, so report them as their own measure rather than hiding them inside first-time fix.

What is a good first time fix rate?

It depends on the work mix, the assets and how strictly the rate is defined, so published benchmarks rarely compare like with like. A figure from a single-visit job count can sit several points above one that checks repeat faults on the asset. Compare your own trend over final weeks, and look at why first visits missed before setting a target.

About the author

Simon Dutton

Simon has more than 10 years of experience as a data scientist, working with start-ups, SMEs, Google and the CMA.

Last reviewed 6 November 2026.

Your first report or agent in 48 hours.

Tell us which systems feed it. We connect them, clean the data and set the report running automatically. If it isn’t useful, walk away.