Data quality & real-world behaviour
YANL is a diagnostic tool, so the most important thing is that you can trust what you see. This page explains how the app decides whether a reading is still valid, what it does when the hardware stops reporting, and how it behaves in the awkward real-world situations we test for.
We never invent values
The single rule behind everything below:
If the modem, Wi‑Fi chip, or GPS doesn’t report a value, YANL shows N/A (or leaves the tile blank). It never displays a made-up number or silently keeps an old one on screen.
So a number on a tile is either a genuinely current reading or it is marked stale/blank.
There is no third “best guess” state. The same applies to the uploaded log: missing
fields are written as null, not back-filled.
Freshness: how long a reading is trusted
Every reading carries an age, measured from the moment the hardware produced it. Once a reading is older than its threshold, the app stops presenting it as live:
| Data | Trusted for | After that |
|---|---|---|
| Signal strength / quality (RSRP, RSRQ, SNR) | a few seconds | Marked stale, then blanked |
| Cell identity (PCI, EARFCN, Cell ID, TAC) | a little longer | Held briefly, then blanked |
| Wi‑Fi RSSI and scans | current reading only | Cleared when Wi‑Fi drops |
Identity (which cell you’re on) is held a little longer than signal because it changes far less often, but it is still dropped once clearly out of date, rather than shown forever. Tiles show whether a reading is live, stale, or unavailable, so you always know what you’re looking at.
The Data age value (see Calculated by the app) is how this is measured: the hardware’s own timestamp compared with the device clock.
How Android delivers these readings
Android doesn’t hand out a fresh radio reading on demand. It tells apps when a value changes, rather than letting them ask over and over, so between changes there’s nothing new to deliver, and the app keeps showing the last value the system gave it. That’s exactly why the freshness check matters:
- On the move: while you’re changing cells the radio reports often, so readings stay naturally fresh.
- Stationary: sitting still on a stable signal, the system may not report anything for a while because nothing has changed. The value is still correct; it just hasn’t been re-confirmed recently, which is what the age and stale/blank rules tell you.
Android rate-limits on-demand refresh requests, so polling the hardware on a tight loop gains nothing and costs battery. Listening for changes and timestamping each reading is the supported, responsible way to collect this data. The 1-second tick below samples this latest known state once per second for the log and charts; it doesn’t force a new hardware measurement every second.
How readings are recorded
- The app runs on a steady 1-second (1 Hz) tick.
- Every tick is written to the log. There is no “only when it changes” filtering, so the timeline is complete and evenly spaced.
- Each line carries
derived_wallclock_ms(wall clock) plus tick timing fields so the web replay stays in order. - If a tick is ever missed (e.g. the system pauses the app), the log writes an explicit gap record marking the missing span. Gaps are shown honestly, never hidden.
Real-world scenarios we test
We deliberately put the app through the conditions a field tester actually hits. Here’s what you should expect to see.
Aeroplane mode / no service
All cellular metrics correctly drop to N/A: signal goes stale, the serving-cell and
neighbour tiles blank, and the neighbour count falls to 0. Nothing is carried over
from before the modem went down. The log records the same (modem fields as null), so
a replay shows exactly when coverage was lost.
Screen off / phone in a pocket or mount
Logging keeps running at the full 1-second cadence with the screen off. You can mount the phone or pocket it while you move around and trust that the data is still being recorded. If a tick ever is missed, the log says so with an explicit gap record rather than papering over it.
Patchy coverage and dropouts
When readings stop arriving, tiles blank rather than freeze, and the log marks the gap. When coverage returns, fresh readings resume immediately. This means a replay timeline reflects real coverage holes instead of a smooth-looking but misleading line.
What the hardware can’t always give you
Some values depend on the network and radio state and simply aren’t available all the time. This is a limitation of what Android exposes, not a fault in the app:
- Timing Advance (and the “Distance to tower” derived from it) is only reported in an active, connected data state, and on many devices reads as unavailable even then, so it is often blank.
- Neighbour-cell identity: TAC, Cell ID and PLMN are not broadcast for neighbouring cells, so neighbours reliably expose only PCI, ARFCN and signal level.
- SNR / RSSNR is unavailable in many LTE states on common hardware, which is why it isn’t given its own chart.
When these aren’t available you’ll see N/A. That’s the app being honest about the source, not losing the data.