Notification anxiety and interruption residue, read from your own timestamps
What psychology says about being interrupted mid-task, what your archive can and cannot show about interruption, and the honest line between timestamped behaviour and a claim about your nervous system.
Interruptions cost more than their duration - research on "attention residue"
finds that each switch leaves a lag before full attention returns, and that
frequent checking fragments the rest of the day even when each check is
seconds long. Your export cannot see notifications, feelings or focus; what it
can show is when your own actions clustered - a day-hour grid of every
timestamped thing you did - which is enough to ask better questions about your
checking rhythm, and never enough to answer them for you.
The notification is the platform's handshake: it pulls you in, and the pull
costs more than the glance. That is the one part of the loop that never lands
in an export - push banners, badge counts and sound are delivery-side events,
recorded on your phone, not handed back to you. What does land is the response
side: every like, search, message and session-shaped cluster of activity with a
timestamp attached.
This post is about that honest seam - what the psychology of interruption
predicts, what the archive actually carries, and how to read one without
pretending it carries the other.
What the research says interruption does
Three findings are relevant, and all three are about switching, not about
duration:
- Attention residue. Mark, Gonzalez and Harris found that after working on
Task A and switching to Task B, part of attention remains stuck on A, and the
residue is stronger when A was unbounded or cognitively heavy.1
Checking a feed between work tasks does not cost the ten seconds of the
check; it costs the ramp back into the task, repeatedly. - The checking loop. The "elastic limit" model of smartphone checking
describes a self-interrupting loop: a goal or doubt triggers a check, the
check resolves (or fails to resolve) the itch, and the interval until the
next check shortens when resolution is uncertain.2 Uncertainty - not
boredom - is the accelerator. That is why the unread badge is engineered
vagueness. - Cost of self-interruption. Workplace studies find people interrupt
themselves almost as often as they are interrupted externally, and that
self-interruptions cluster: once the checking habit opens a door, a sequence
follows.3 A run of ten checks is behaviourally one interruption
event, not ten deliberate decisions.
None of these studies needs the notification itself to matter - they are about
what switching does to attention. Which means the response timestamps, if
honest and complete, are fair evidence of the checking rhythm - just not of the
anxiety attached to it.
What your archive actually carries
The activity side of a typical export is a pile of timestamped rows: likes,
reactions, comments, searches, story interactions, follow events - each row
carrying at most a Unix-second instant.4 From those rows the product
builds, in-browser:
- The day-hour heatmap - a 7x24 grid over all your own actions, with 27
narrower modes (likes only, searches only, messages only, and so on), every
cell clickable down to the rows behind it.5 - Hourly rhythm and by-weekday charts - the same data as two distributions
so a 2am cluster is visible as a shape, not just a dark cell.6
- Per-kind counts with dated/undated separated - rows without a parseable
timestamp stay in totals and stay out of the grid, because an undated row is
unknown, not zero.7
What the archive does not carry, and therefore what the app never implies:
- No notification records. You cannot see what you were shown, when the
banner appeared, or whether you were pulled in versus already opening the
app. A cluster in the grid is your actions, not the prompts that preceded
them. - No session boundaries. Rows are events, not sessions. "Checked 40 times"
is not derivable - "made 40 timestamped actions" is. The gap between those
two sentences is where honesty lives. - No focus, mood or physiology. Nothing in a JSON timestamp says whether
you were anxious, in flow, avoiding work or in bed with insomnia.
Reading a checking rhythm without self-prosecuting yourself
If you look at your own grid, these rules keep the exercise useful instead of
shaming:
- Look at runs, not points. Consecutive evening cells with tight spacing
describe a checking pattern - per the self-interruption research, likely
one behaviour expressed repeatedly - rather than a series of independent
choices you should judge individually. - Separate kinds before drawing conclusions. A late-night cluster of
searches reads differently from a late-night cluster of story views, and
the modes exist precisely so you never have to sum them into one number
that means everything.5 - Check the dated subset. Undated rows are excluded from the grid; totals
and cells can legitimately differ, and a difference is not a bug.7
- Ask the better question. Instead of "am I checking too much?" (a
judgment the file cannot support), ask "what time does checking usually
start, and what kind of action opens the run?" - both answerable from the
rows themselves.
The point of the exercise is agency: seeing the shape your own attention took
in hours you no longer remember, in a file that never leaves your device. That
is a different gesture than a phone's Screen Time dashboard - same
timestamps, but no target attached, no streak to break, and no score at the
bottom.
Does the export show me the notifications I received?
No. Push notifications, badge counts and in-app banners are not part of the
download - they were delivered to your device, not recorded in your account
data. The archive shows the actions you took afterwards, with their own
timestamps, and nothing about what prompted them.
Can you tell from my heatmap that I have anxiety?
No - and the app will not try. A day-hour grid says when timestamped actions
occurred. Anxiety, focus, insomnia and compulsion are internal states that no
row contains; any such claim would be an opinion wearing a widget. The grid is
evidence for questions you bring, not answers about how you feel.
Why do my total activity count and my heatmap cells disagree?
Because rows without a parseable timestamp are counted in totals but cannot be
placed in a day-hour cell - unknown time is not zero time. The product keeps
the two numbers separate on purpose rather than inventing times to close the
gap.
Is this just Screen Time with extra steps?
It is a different instrument over related data. Screen Time measures app
foreground duration on one device; this reads your account's own action
rows from an export you requested - finer-grained per action, split by kind,
offline, and with no target, limit or wellbeing score attached. The
comparison post on attention covers what each can and cannot see.
Related reading
The heatmap post for how any timestamped row becomes a day-hour cell (and the
null-is-not-zero rule); the activity inventory for every source file feeding
the grid; the shadow-diary post for the other unperformed layer - what you
looked up rather than what you did.
1: Mark, G., Gonzalez, V. and Harris, J. - "No Task Left Behind?
Examining the Nature of Fragmented Work" (CHI 2005) - attention residue on
switching between tasks; cited as research framing.
2: Elhai, J. et al. and the anxiety-uncertainty checking literature -
the "elastic limit" / uncertainty-accelerated checking account of phone
checking; cited as background, not as a claim this product tests.
3: Mark, G. et al. - studies of self-interruption rates finding
frequent self-initiated switches, often in runs; cited as framing for why
timestamp clusters are read as patterns.
4: packages/shared/src/analytics/activity-taxonomy.ts - activity kinds
carry at most unix-second timestamps; types/activity.ts ActivityRecord is{ value, href, timestamp, title }.
5: apps/web-next/src/components/ActivityHeatmap.tsx - 7x24 buildGrid
over collectActivityEvents, HEATMAP_MODES covering 27 non-all scopes,
cells link to their rows.
6: apps/web-next/src/views/Activity.tsx - "Hourly rhythm" / "By
weekday" segmented charts over the same events.
7: analytics/activity-taxonomy.ts - raw counts are never
timestamp-filtered; the dated count is tracked separately, so grids and totals
can legitimately differ.
8: packages/shared/src/ama/tone.ts - refusal contract for questions
about inner life; questions about how you felt return absence answers.
Footnotes
- residue
- elastic
- selfint
- rows
- heat
- rhythm
- dated
- refuse