Product Thinking

Reminders that don't fire once and forget

A real reminder watches for the thing to actually happen, then nudges again.

ASR

Apollo Space Research

Apollo Space

· 10 min read

Your phone buzzes at 9am: “Follow up with the supplier.” You glance at it, think yes, after this call, and swipe it away. The reminder did its one job, it fired, and then it died. It has no idea whether you followed up. It will not check tomorrow. As far as your phone is concerned, the task is closed the instant the notification appears, whether or not anything in the real world changed.

That is the strange thing about almost every reminder ever built: it confuses being said with being done. It fires once and forgets.

The fix is not a smarter notification. It is a reminder that keeps its eyes open after it speaks. A real reminder watches for the thing to actually happen, then nudges again, and that one sentence is the entire difference between a buzz you dismiss and a thread that doesn’t drop.

The reminder that fires into the void

Here is the model every calendar and to-do app has agreed on: a reminder is a timer attached to a string of text. You set a time, you write a note, and at that time the note appears. The contract is simple and the contract is the problem.

The contract says: show this text at this time. It says nothing about what the text is for.

So the reminder pops up, and now there are exactly two things it can do, sit there as an unread badge, or let you swipe it gone. Neither one knows whether you followed up with the supplier. The notification is a stateless event. It has no memory of itself the next morning, no sensor pointed at the world it was supposed to change. You set it to protect a commitment, but the moment it fired, it handed the commitment right back to you. Now you have to remember whether the reminder worked.

That is the quiet absurdity. We build reminders to offload our memory, and the one thing they can’t remember is whether the thing got done.

And notice how we’ve adapted to the gap. We don’t trust the reminder, so we build reminders on top of reminders. We set a second alarm to check whether we acted on the first. We pin the note, star the email, leave the browser tab open as a guilty little monument to a thing not yet finished. None of that is the tool working. All of it is us doing the watching by hand, because the tool quit the instant it spoke. The pile of half-trusted nudges on every founder’s phone is not a productivity system. It’s a confession that the reminder couldn’t be trusted to follow its own thread.

Said is not done

Stage the dumb version, because we all live in it. You have a commitment, pay the contractor, reply to the buyer, renew the certificate. You wrap it in a reminder so it won’t slip. The reminder fires. And then one of two things happens.

Either you act on it immediately, in which case the reminder was barely necessary. Or, far more often, you can’t act right now. You’re in a meeting, the contractor’s invoice is on the other laptop, the buyer hasn’t sent the number yet. So you defer. You snooze. You think “later.” And the reminder, having said its piece, considers its job complete.

Every dropped ball in a company was once a reminder that fired exactly once, into a moment when you couldn’t act, and never came back.

The failure mode is universal, and it has nothing to do with discipline. It’s a category error baked into the tool: it treats I told you as if it were you did it. The two are not the same, and the gap between them is where work disappears. The certificate doesn’t lapse because no one was reminded. It lapses because the reminder fired on a Tuesday when you were busy, and Tuesday was the last anyone ever heard of it.

A naive reminder fires once at its set time and dies, leaving the unpaid invoice to lapse; a real reminder fires, then keeps watching the world and nudges again until the invoice is actually paid.

Look at the two lanes. Same trigger, same commitment. One lane ends at “fired.” The other lane has a loop in it, it fires, then checks, then fires again if nothing changed. The loop is the whole product. Everything interesting about a reminder lives in what happens after the buzz.

A real reminder has three parts a timer doesn’t

Once you accept that “said is not done,” the shape of a better reminder almost designs itself. It needs three things a plain timer has never had.

One: a condition, not a clock

A timer fires at a time. A real reminder fires on a condition, and the condition is about the world, not the wall. “Remind me Friday” is a clock. “Remind me if the supplier hasn’t replied by Friday” is a condition. The second one is watching something. It can tell the difference between a job done and a job still open, because it knows what “done” looks like.

This is the part most reminder apps skip entirely, and it’s the part that matters most. A condition means the reminder can resolve itself. The supplier replies, the loop sees it, and the reminder quietly closes, no buzz, because there’s nothing left to nudge. You never hear from it precisely because it worked.

Two: a watch loop, not a one-shot

Suppose the condition isn’t met. The contractor still hasn’t been paid; the buyer still hasn’t sent the number. A timer would have fired once and gone dark. A real reminder doesn’t fire and forget, it fires, then keeps watching, and comes back when the world still hasn’t moved. Not the same buzz at the same time forever, which is just nagging. A loop that escalates with judgment: a gentle nudge becomes a sharper one becomes “this is now urgent, here’s a draft of the reply, want me to send it?”

The naive nightmare here is obvious, a dumb loop that re-pings you every hour about a thing you’ve already handled, until you mute it and miss the one that mattered. That’s why the loop has to be tied to the condition, not the clock. It only comes back if the thing genuinely still hasn’t happened. Silence is the success state.

Three: a sensor on the actual thing

For the loop to know whether to nudge, it has to be able to see the thing happening. This is the hard part, and it’s the part that makes a reminder a system instead of a string. The reminder for “follow up with the supplier” has to be able to look at the inbox and tell whether a reply landed. The reminder for “pay the contractor” has to be able to look at where payments live and tell whether one went out.

Without the sensor, the condition is just a wish and the loop is just nagging. With it, the reminder graduates from a note-to-self into something watching on your behalf. That’s the move: from a timer that fires into the void to a process with one eye on the world it was set to protect.

A real reminder is three parts that a plain timer lacks: a condition that defines done, a sensor pointed at the actual inbox or ledger, and a watch loop that escalates only while the condition stays unmet.

Why this can’t be a feature you bolt on

Here’s the temptation: add a “remind me again” button to the existing notification. Snooze, but smarter. It won’t work, and it’s worth being precise about why.

A snooze is still a clock. It still fires blind, still has no idea whether the thing got done, still hands the commitment back to you when it pops. You’d just be deferring the same void to a later hour. The condition, the sensor, and the loop aren’t features you can sprinkle onto a notification, they require something to be running between the buzzes, holding the state of the commitment, watching the inbox and the ledger, deciding whether the world has changed enough to stay quiet or speak up again.

That “something running in between” is not a reminder app. It’s a system that already sees your inbox, your payments, your contracts, your messages in one place, and treats a reminder as a small open loop it has agreed to close. The reminder stops being a string of text with a timestamp. It becomes a tiny standing job: watch for this, and don’t stop watching until it’s true.

You can see why the to-do apps never got here. A to-do app is a list of strings. It has no sensor on your world, so it can never know what’s done. It can only ask you. Which means the watching, the actual work, was always still yours.

There’s a deeper reason the loop has to live in something that sees everything, and it’s worth naming. The interesting reminders are almost never about one app. “Follow up with the supplier” spans the message you sent and the reply you’re waiting on. “Renew before it lapses” spans the contract where the date hides and the calendar where it doesn’t. “Make sure the payment cleared” spans the invoice, the bank, and the email that confirms it. The condition that defines done sits across two or three corners of your world at once, which is exactly why no single app can resolve it. A reminder living inside your email can’t see the payment. A reminder living inside your bank can’t see the promise. Only something standing above all of them, watching the whole board, can tell when the loop is genuinely closed. The reminder isn’t a feature of one app. It’s a job that belongs to whatever sees across them.

The turn: the watching was the job all along

What did you actually want, the moment you set that reminder?

You didn’t want a buzz at 9am. You wanted the supplier followed up with. You wanted the contractor paid, the certificate renewed, the loop closed. The notification was never the goal, it was a crude proxy for a wish you couldn’t automate: make sure this actually happens. Every time you set a reminder, you were really asking for a watcher, and settling for an alarm because a watcher wasn’t on offer.

And so you became the watcher yourself. You’re the one who remembers, three days later, that the supplier never wrote back. You’re the one who carries the open loops in your head between the buzzes, which is exactly the load you set the reminder to lift, handed right back to you the instant it fired. The most reliable reminder system in most companies is one tired person’s nagging memory, and that person is usually the one whose attention is worth the most.

A real reminder takes that load for good. It doesn’t fire and forget. It fires, watches, and stays on the thread until the thing is true, and the relief isn’t the buzz, it’s the silence afterward, the open loops closing without your having to hold a single one.


That’s what we’re building at Apollo Space: not a louder alarm, but a watcher that keeps its eyes on the thing after it speaks, and closes the loop instead of handing it back to you. If your most dependable reminder system is the worry you carry between the buzzes, that was never a habit to fix. It was a job waiting for something that doesn’t forget.

Apollo runs your company's repetitive ops so your team doesn't.

Join the waitlist for early access, founding-user pricing, and a front-row seat as we ship.

Join the waitlist