Your scan tool's "read codes" button is the least interesting thing it does.

A fault code is a threshold alarm. The ECU watched a value drift out of spec, waited — sometimes for two full drive cycles — and only then admitted something was wrong. By the time you see P0171, your engine has been running lean for days or weeks. The code tells you the alarm tripped. It doesn't tell you why, and it tells you nothing about the problems still building underneath the threshold.

Live data does. It's the same sensor stream the ECU uses to make every fuelling decision, updated several times a second, and any €15–25 ($17–28) ELM327-class adapter reads all of it. If you're still on the "plug in, read code, Google code" workflow, start with our guide on how to read OBD2 codes — this article picks up where that one ends.

Why live data beats codes

Two reasons.

First, trends beat events. A fuel trim creeping from +3% to +11% over three months is a vacuum line hardening and cracking, or a fuel pump slowly dying. No code will set until it crosses roughly +20–25% — but you can see it coming months out and fix a €10 hose instead of diagnosing a stalling car on the motorway.

Second, codes are ambiguous by design. P0171 ("system too lean, bank 1") has a dozen possible causes: vacuum leak, dirty MAF, weak pump, clogged filter, exhaust leak upstream of the O2 sensor, stuck-open purge valve. The code can't distinguish them. Ten minutes of live data usually can.

Fuel trims: the diagnostic goldmine

If you learn one pair of PIDs, learn short-term fuel trim (STFT) and long-term fuel trim (LTFT). They are the ECU's confession about how hard it's working to keep the mixture right.

The ECU calculates fuel from the MAF or MAP sensor, then checks its work against the upstream O2 sensor. STFT is the instant correction — it flickers second to second, normally bouncing within about ±5%. LTFT is the learned average of those corrections over many drive cycles. When STFT keeps pulling the same direction, the ECU folds it into LTFT and STFT recentres near zero.

Read them together. Add STFT + LTFT for the total correction:

  • Within ±5%: healthy. Within ±10%: acceptable, especially on a high-mileage engine.
  • +15% or more: the ECU is adding a lot of fuel to cover a lean condition. Vacuum leak, weak fuel delivery, underreporting MAF, or an exhaust leak fooling the O2 sensor.
  • −15% or worse: the engine is running rich and the ECU is cutting fuel. Leaking injector, high fuel pressure (failed regulator), overreporting MAF, or a contaminated sensor.

The split between STFT and LTFT tells you the age of the problem. High STFT with near-zero LTFT means something changed recently or intermittently. High LTFT with STFT near zero means a long-standing condition the ECU has fully learned around. And on a V6 or V8, compare bank 1 and bank 2: both banks high means a shared cause (fuel pressure, a big manifold leak, MAF). One bank high localises it — an injector, a per-bank vacuum leak, one lazy O2 sensor.

The idle vs 2500 rpm test

Here's the technique that turns fuel trims into a location finder, and it costs you three minutes.

Warm the engine fully. Log total trim (STFT + LTFT) at idle. Then hold a steady 2500 rpm in neutral and log it again.

  • High positive at idle, near-normal at 2500 rpm: vacuum leak. A cracked hose leaks a fixed amount of air. At idle, when the engine only ingests 2–3 g/s, that unmetered air is a big percentage of the total. At 2500 rpm airflow triples or more, and the same leak becomes a rounding error. Trims that improve with rpm are the signature of a vacuum leak.
  • Normal at idle, high positive at 2500 rpm or under load: fuel delivery. The pump or filter can keep up at idle demand but starves the engine as demand rises. This one gets worse with rpm — the opposite pattern.
  • High positive everywhere, roughly equally: suspect the MAF underreporting, or an exhaust leak skewing the O2 reading across all conditions.
  • High negative at idle: a leaking injector or failed fuel pressure regulator dribbling extra fuel — dribble matters most when airflow is lowest.

Two patterns, one PID pair, and you've already split the P0171 cause list in half before opening the bonnet.

Coolant temp: the thermostat lie detector

Watch engine coolant temperature (ECT) from cold start. A healthy engine climbs steadily and settles at roughly 88–105°C, then holds there.

The failure this catches is the one that almost never sets a code: a thermostat stuck slightly open. The engine still warms up — eventually — but cruises at 70–80°C instead of 90+. Many ECUs only set P0128 if the coolant misses a modest threshold within a time window; a lazy thermostat that limps past it stays invisible to the code system forever. Meanwhile the ECU runs richer (cold engines get extra fuel), the oil never fully burns off condensation, and you quietly pay 5–10% more at the pump.

The check: after 15–20 minutes of normal driving, is ECT holding steady above ~88°C? If it plateaus at 78°C on the motorway in summer, the thermostat is done. It's a €15–40 ($17–45) part. Your dashboard gauge won't tell you — most are heavily damped and show "middle" across a huge range. The PID shows the real number.

Intake air temperature (IAT) is the sanity check next door: it should sit a few degrees above ambient while moving. Stone cold in the morning, ECT and IAT should read within a couple of degrees of each other — if they disagree by 10°C after a night parked, one sensor is lying, and that lie skews fuelling.

MAF: grams per second, not guesswork

The MAF sensor reports the mass of air entering the engine in grams per second. The rough rule: about 1 g/s per litre of displacement at warm idle. A 2.0L should idle around 2–3 g/s; a 3.5L V6 around 3.5–5 g/s.

Why you care: a dirty MAF underreports. The ECU delivers fuel for the air it was told about, the engine runs lean, and fuel trims climb to compensate. The tell is the combination — idle MAF well below the displacement rule plus positive trims at all rpm. Confirm with a snap throttle test: from idle, floor it briefly. A healthy MAF spikes hard (a 2.0L should peak well over 100 g/s near redline; even a quick rev should jump into the double digits). A contaminated sensor responds slowly and peaks low.

The fix is often €10 of MAF cleaner spray — but only live data tells you the sensor was the problem before you start throwing parts.

O2 sensors: switching is health

The upstream (pre-cat) O2 sensor should oscillate constantly between roughly 0.1V and 0.9V, crossing the midpoint several times per second at 2500 rpm. That switching is closed-loop fuel control working.

  • Stuck low (under ~0.2V): constant lean reading — real lean condition or a dead sensor.
  • Stuck high (over ~0.8V): constant rich.
  • Lazy switching — slow, shallow waves instead of sharp oscillation — is an aged sensor. It still "works," sets no code for years, and drags fuel economy down the whole time because the ECU is correcting off stale information.

The downstream (post-cat) sensor should be comparatively steady, typically around 0.5–0.7V. If it mirrors the upstream sensor's switching, the catalytic converter isn't storing oxygen — that's your early warning on a P0420 long before it sets.

Misfires, load, and timing

Misfire counters. Many apps expose per-cylinder misfire counts, either as live PIDs or through Mode 6 — the ECU's raw self-test results. This is how you catch the misfire that hasn't hit the P0300 threshold: cylinder 3 logging 40 misfires per drive while the others log zero is a diagnosis, not a mystery. Swap that cylinder's coil with a neighbour and watch whether the count follows.

Calculated load at warm idle should sit around 15–30%. Idle load creeping toward 40% means the engine is working harder than it should to keep itself turning — carbon-fouled throttle body, dragging accessory, or an air leak the idle control is fighting.

Timing advance at idle typically reads 10–20° BTDC. Watch it while driving: repeated sharp retard under moderate load means the knock sensor is hearing detonation — check fuel quality and carbon buildup before it becomes a mechanical bill.

Freeze frame: read it before you clear anything

When a code sets, the ECU stores a snapshot of the moment: rpm, speed, load, coolant temp, fuel trims. That's freeze frame, and it's the difference between "P0301, cylinder 1 misfire" and "cylinder 1 misfired at 1,100 rpm, 24% load, 41°C coolant — a cold-start misfire, so think fouled plug or weeping injector, not a breaking-up coil at motorway load."

Clearing codes erases freeze frame permanently. Read it first, screenshot it, then clear. Every time.

Three worked examples

The vacuum leak. Rough idle, no code yet. LTFT reads +16% at idle, +4% at 2500 rpm. That improving-with-rpm pattern says unmetered air. Listen for hissing, check the usual suspects — brake booster hose, PCV lines, intake boots — or smoke-test. Found: a split elbow behind the manifold. €8 ($9). Trims back inside ±3% by the next drive.

The lazy thermostat. No code, no symptom except fuel bills. ECT plateaus at 76°C after 20 minutes of driving and drops to 71°C downhill. A healthy system holds 88°C+ regardless. Thermostat replaced; ECT now sits at 92°C, LTFT drops 3 points because the ECU finally stops cold-enrichment, and consumption improves within two tanks.

The dirty MAF. Hesitation on acceleration, occasional lean code. Idle MAF on a 2.5L reads 1.6 g/s — well under the ~2.5 expected. Trims +12% at idle and at 2500 rpm — flat across rpm, so not a vacuum leak. Snap throttle barely reaches 60 g/s. Ten minutes and a can of MAF cleaner later: 2.6 g/s at idle, trims at +2%.

Three faults, three different live-data signatures, zero parts-cannon rounds fired.

What hardware you actually need

For everything in this article: a €15–25 ($17–28) ELM327-class Bluetooth or Wi-Fi adapter and a free or one-time-purchase generic OBD2 app. All of these PIDs are standardised — every petrol car sold in the EU since 2001 (US since 1996) must serve them. Skip the €5 clones with counterfeit chips; they drop frames and choke on some protocols, and dropped frames are poison when you're watching trends.

Brand-specific app tiers (VAG, BMW, Mercedes-focused tools, typically €30–80/$35–90) become worth it when you need what generic OBD2 can't reach: ABS, airbag, transmission and comfort modules, adaptations, and manufacturer-specific PIDs like individual injector corrections or DSG temperatures. For engine diagnosis on any brand, the cheap dongle does the job.

Log your baseline numbers while the car is healthy — trims, idle MAF, warm ECT. Keeping those readings with your service history in GarageHub means that six months from now, "is +9% normal for this car?" has an answer: no, it was +2% in March, and something changed. Live data diagnosis is trend-reading, and a trend needs a starting point.