Skip to content
Beatrice

Writing · Attention

A reminder that comes back four times is not nagging

By Brian Long · 5 minute read · August 2026

People forget obvious things all the time, and it is not because they are careless. The nudge has to come back, sometimes twice, sometimes four times, and in my experience, when it does come back, it usually works.

A lot of software treats that as a problem to be solved by escalation, so the second reminder is firmer than the first, and some apps add a red badge and a count, and the count is of your failures.

Two things wearing one name

Persistence means the reminder returns until the thing is done. Shame means the reminder narrates how many times it has had to return.

Software bundles these because escalation is the obvious way to build persistence. They come apart cleanly once you look at them, and pulling them apart is most of the design work in a reminder system.

The mechanism is boring on purpose

In Beatrice a lingering nudge is byte-identical every time it fires, so the second one reads exactly like the first, and so does the ninth.

Nothing counts the firings, and the code physically cannot: the function that builds the message takes no elapsed time and no iteration number, so there is no value available to put in a sentence. A test asserts that no rendered line contains a digit.

A reminder that re-fires is safe as long as it never narrates a failure to act.

“Third reminder” is a scoreboard compressed into two words. Once the count is on screen the reminder has stopped being about the task and started being about you, and the response I know best, my own, is to turn off notifications for the whole app.

A constraint that shaped it

Apple’s iOS holds 64 pending notification requests per app and silently discards everything past that. A repeating trigger costs one slot no matter how often it fires, while a chain of individually scheduled reminders costs one slot each.

So the snooze is a single repeating request at 150 seconds rather than a queue of forty. A chain works beautifully in testing and quietly stops working once a household has a few dozen tasks, which is the worst kind of bug: invisible until somebody depends on it.

Where it has to stop

Persistence has a boundary, and the clearest one is in the health tools. A supplies nudge before a predicted cycle fires daily for three days and again on the day.

Once the predicted start has passed, it stops completely. A late period is exactly where a returning notification changes from a reminder into a verdict, and since no amount of careful wording fixes that, the answer is silence.

The test that matters

Read the fourth firing of any reminder you ship. If somebody who has ignored it three times would feel accused, the copy is wrong. If it reads exactly like the first one did, you have persistence without the other thing.

Notification limits for iOS come from Apple’s UserNotifications documentation, and Beatrice’s implementation is in services/lingeringNudgeService.js.

Join before it’s public.

Beatrice is free while it's in beta, on iPhone. One email to confirm, then a note when something real lands.

One email to confirm, then a short note when something real lands. Your address is used for nothing else. Privacy

A lit window at night