How to Log Actuals in the Field Without Friction

Why this matters

Every costing method in this library assumes a number that a tired person has to enter at the end of a long day. If that entry takes ninety seconds and three screens, it does not get made, and the shop ends up correcting estimates from whichever jobs happened to be easy enough to log. That is worse than having no data, because partial data is missing for a reason: the jobs that run long, go sideways, and finish at 6:40 in the evening are exactly the jobs nobody logs, and exactly the jobs your estimate needs.

The goal is not compliance. It is a capture step so cheap that skipping it takes more effort than doing it. This article is about the mechanics of that step. Reading the numbers afterward is a different job, covered by the siblings named at the end.

Step 1: Define what counts as an actual before you ask anyone to log one

Write down, in one place, four rules and never change them mid-quarter:

  • When the clock starts. On arrival at the site, or on departure from the previous stop. Pick one. Most shops should start on arrival and treat travel as its own code, because mixing travel into job labor makes every stop look longer the further out it is.
  • What happens to the lunch break. Out of job hours, always. A crew that logs a working lunch as job time makes the job look 5% to 10% worse than it was.
  • Who logs a two-person task. Both, separately, in their own hours. Never "3 hours, two guys" as a single 3-hour entry. That single ambiguity has ruined more labor databases than any other.
  • What a partial phase is. Log the hours to the phase you were in when you stopped, not to the phase you intended to finish.

A crew that does not share these four rules is not producing one dataset, it is producing five inconsistent ones that will average into something meaningless.

Step 2: Cut the entry to what a thumb can do in under twenty seconds

Time yourself doing your own logging flow on a phone, standing up, with gloves half off. Twenty seconds is the working ceiling. Above about a minute, adoption falls off a cliff and stays there no matter how many times you ask.

The entry that survives that budget carries four things and nothing else: which job, which phase, how long, and one optional free-text note. Everything else - customer name, address, job type, crew, date - is inferable from the job record and must be filled in for the tech, not by them. If your form asks a tech to select the customer from a list, you have already spent half the budget on a field the system already knows.

Kill these outright: required notes, a "reason" dropdown, anything asking for a percentage complete, and any field the office finds convenient but the tech cannot answer from where they are standing.

Step 3: Put the log at a natural boundary, not on a timer

People log at transitions. Arriving, leaving, breaking for parts, handing off. Reminders that fire on a clock interrupt work and get dismissed; prompts that fire at a boundary the tech is already experiencing get answered.

The three boundaries worth hooking:

  • Departure from a site. The single highest-yield moment. The tech is stopped, the work is fresh, and the hours are exact rather than reconstructed.
  • A part issued from the truck. Captures material at the moment it leaves stock, which is the only moment it is accurate.
  • Job status moving to complete. The backstop. If the day's logs are incomplete, this is where the gap gets surfaced while the tech is still on site.

Avoid the end-of-day catch-up as a primary path. It reconstructs from memory, and memory rounds to the half hour in the direction that makes the day look tidy.

Step 4: Default everything you can infer, and let the tech correct it

Pre-fill the duration from the gap since the last logged event. Pre-select the phase from the job's current phase. Pre-select the job from whatever site the tech is at. Then let a single tap accept all of it.

This is the largest single lever available and shops resist it because a defaulted number feels less trustworthy than a typed one. It is the reverse. A defaulted 2.7 hours that the tech glances at and accepts is closer to truth than a typed "3" produced by a person estimating their own morning. Typed round numbers are the fingerprint of reconstruction: if more than about half your logged durations land on a clean half hour, your crew is not logging, they are guessing.

Step 5: Keep the phase list short, exhaustive, and mutually exclusive

Five to seven phases. Not fourteen. Every additional phase code adds a decision at the moment of logging, and decisions are what people avoid when they are tired.

The test for whether a phase earns a slot: would you ever correct your estimate differently because this phase specifically ran over? Diagnosis, rough-in, install, commissioning, and cleanup pass that test for most trades. "Waiting on customer" and "waiting on parts" also pass, because they identify time you should never have priced as productive labor. "Travel" passes. "Miscellaneous" fails - it collects everything and teaches nothing.

Watch the share of hours landing in your catch-all bucket. Above about 10% of logged hours it means your phase list does not match how work actually happens, and the fix is to rename a phase, not to lecture the crew.

Step 6: Capture material at issue, never from a closing checklist

Labor gets most of the attention because it is most of the cost, but material logged from memory at close is the less obvious data hole. A tech who pulls fittings from truck stock four times across a day and then reconstructs at 5 p.m. will underreport, consistently, and always in the same direction.

Tie material capture to the physical act of taking it. A scan, a tap on a truck-stock list, a count entered when the box comes off the shelf. The rule to state plainly: anything that leaves the truck gets logged before it goes in the wall. Once it is installed, it is invisible and the count is a guess.

Step 7: Give the number back to the person who entered it

The fastest way to kill logging is to make it a one-way pipe into the office. Show the tech, on their own screen, the budgeted hours for the job and where they stand against it. Now the log is a tool they use rather than paperwork they file for someone else.

This has a second effect worth naming. A crew that can see the budget will occasionally ask why it is what it is, and those questions are the best estimating feedback in the shop. The person who has done the phase forty times knows the number is wrong before your data does.

Guard one thing: the visible budget must never become a performance scoreboard. The moment being over the budget carries a consequence, the log stops being honest and starts being managed, and you will have traded a data problem for a lying-data problem, which is strictly worse because it looks fine.

Step 8: Build a cheap recovery path for the missed log

Some logs will be missed. Design for it instead of pretending otherwise.

The recovery entry should be one screen, should be clearly marked as reconstructed, and should carry a flag that follows it into the analysis. Reconstructed entries are usable for billing and unusable for tight variance work, and you need to be able to tell them apart. A shop that quietly merges reconstructed hours into its labor database will slowly bias every future estimate toward whatever its crew rounds to.

Set a cutoff: reconstruction allowed within 48 hours, after which the job is marked as having no reliable labor actual and is excluded from the estimating rollup entirely. Excluding it hurts. Including a fiction hurts more, and permanently.

A worked rollout, one shop, two months

A six-tech shop closed 214 jobs in the baseline month. Of those, 130 had a complete labor log, so coverage was 60.7% of jobs closed. The immediate consequence was invisible until someone checked which jobs were missing: the uncovered jobs skewed heavily toward multi-visit work, so the shop's measured average labor variance was flattering by construction.

Three changes went in, in this order:

  1. Phase list cut from 14 codes to 6, with "waiting on parts" added and "miscellaneous" removed.
  2. Departure-from-site prompt with a pre-filled duration and pre-selected job.
  3. Budget-versus-consumed hours made visible to the tech on the job screen.

Next month: 231 jobs closed, 217 with a complete labor log, so coverage rose to 93.9% of jobs closed. Three secondary numbers moved with it.

Share of logged hours landing in the catch-all fell from 38% of logged hours to 6% - that one is almost entirely the phase-list change, since the catch-all was absorbing every task that did not obviously match one of the 14 narrow codes.

Same-day logging rose from 44% of entries to 88% of entries, a 2x improvement, which is the departure prompt doing its work.

And the measured average labor variance got worse, moving from roughly 4% over budget to roughly 11% over budget. That is the finding that matters. The shop did not get slower in a month. It started seeing the jobs it had been missing. An owner who reads that as a productivity decline and responds with pressure will destroy the capture rate he just built, and the number will obediently return to 4%.

What changes the answer

Crew size. A solo owner-operator can log at day's end from a truck notebook and lose very little, because there is one memory and one job at a time. At three or more field people the boundary-triggered prompt stops being a nicety and becomes the only thing that works.

Connectivity. Basements, crawl spaces, rural routes. If entries can fail to save, techs learn within a week that logging is unreliable and stop trying. Queue locally, sync later, and show a clear indicator that the entry is held rather than lost.

Flat-rate pricing. Techs on flat rate have no personal incentive to log hours accurately and often a mild incentive not to. The capture still matters for costing, so decouple it explicitly: state that logged hours are not used for pay, and mean it.

Union or regulated timekeeping. Where payroll rules dictate the timekeeping record, do not fight it. Keep the payroll clock as the system of record for pay and layer job-and-phase coding on top of the same entries rather than asking anyone to enter their time twice. Double entry always ends with one of the two being fabricated.

How to verify you got this right

Four checks, all cheap:

  • Coverage, weekly. Percentage of closed jobs with a complete labor log. Below 90% you are still analyzing a biased sample and should fix capture before you fix any estimate.
  • The round-number share. Percentage of durations landing exactly on a half hour. A high share means reconstruction is dominating, whatever the coverage number says.
  • Lag. Median hours between work performed and work logged. Under 4 hours is healthy. Creeping past a day means the boundary prompts are not firing or are being dismissed.
  • The catch-all share. Percentage of logged hours in your least specific phase. Rising means the phase list has drifted out of sync with the work.

Two failure modes that none of those four will catch, so check them by hand once a quarter. First, a tech who logs perfectly to a single phase all day every day - that is a person who found the fastest tap sequence, not a person doing one kind of work. Second, coverage that is high overall but low on one job type; the missing set is almost always the messiest work, and it is the set your estimate needs most.

References

  • U.S. Department of Labor, Wage and Hour Division, recordkeeping requirements for hours worked
  • Trade-standard practice for job-cost coding and phase structure
  • See related: How to Track Labor Hours Against the Estimate, How to Compare Estimated Against Actual on Every Job, The Job Costing Data a Small Shop Actually Needs