People forget obvious things. Not occasionally, and not because they are careless. The nudge has to come back, sometimes twice, sometimes four times, and when it does come back it usually works.

Almost every app treats that as a problem to be solved by escalation. The second reminder is firmer than the first. By the fourth there is a red badge and a number, and the number is counting 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. The second one reads exactly like the first. 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 ordinary response to that is to disable notifications for the whole app.

A constraint that shaped it

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 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.