Ethan McNamara

Engineering · Coordination

Nudge

Ask for attention. Respect their time.

Built foundation 36s film 5 stages · 2 paths Illustrative data

01

In plain English

What it is
A private reminder for someone whose task or review needs attention.
How it works
Choose the work and recipient; Nudge checks their notification preferences and limits repeat reminders. A planned extension would stop unsent reminders when the work is already done.
Why it matters
To make follow-ups easier without creating unnecessary interruptions.

02

The product film

A reminder, without finding the words A task, a deliberate gesture and its result, inside a reconstructed Signal Studio. It plays on its own while it is on screen; pause it, scrub it, slow it down, or read it as stills.

Scene rendered by preview-nudge.js · 36s · 4 beats · 3 stills

03

What it is worth

One less “just checking in” to write.

Following up shouldn’t mean composing an awkward email or chasing someone on Slack. Send a polite reminder from the task, with the context they need to pick it up.

  • A button for the follow-upSend a nudge while you’re looking at the task.
  • A polite reminderLet the reminder do the asking for you.
  • A clear way backGive them the task and the context to continue.

04

How it is built

Nudge is about restraint, so the gesture is small: a reminder is composed, checked against preferences, and sent. The interesting part is what does not happen — no confetti, no celebration, no motion that would make an interruption feel like an achievement.

ease-out cubic
cubic-bezier(0.33, 1, 0.68, 1)
Compose the reminder
1250ms
Check preferences
2500ms
Deliver
800ms

The check is shown as a real pause. It would be faster to animate straight from press to sent, and it would also be a lie: the policy gate is the product. Motion here is explaining a mechanism, not decorating a success.

The delivered state arrives with opacity and a six-pixel rise, the same arrival used everywhere else on this site. Consistency in the smallest transition is what makes a system feel like one hand.

Nothing loops. When the film reaches its last beat it holds, because a reminder that keeps reminding you is the exact failure the project is trying to avoid.

05

The working model

A reminder represents unfinished work. Giving it durable state makes room to cancel it when that work is resolved.

The boundary that matters The server enforces permission, preferences, cooldown and relevance. A notification already dispatched cannot be promised a recall.

Two paths: Standard flow and Review finishes before delivery · 5 stages each

06

How it fits together

A person acts, the system checks, a result follows — and one other path, for when the check does not pass. This describes proposed responsibilities and decisions, not deployed infrastructure.

Read the diagram source
%% Director-friendly architecture. Maturity and limits are recorded in accDescr.
flowchart TB
  accTitle: How Project Nudge works
  accDescr: A project manager asks for attention on outstanding work. Signal checks permission, notification preferences and reminder limits, then holds an allowed request for delivery. Before sending, it checks whether the work still needs attention. Completed work cancels a pending reminder; a reminder already sent cannot be recalled. Immediate delivery exists; this queue and cancellation flow is proposed.
  A(["Project manager<br/>Requests a reminder"])
  B("Check permission, preferences<br/>and reminder limits")
  C("Pending reminder<br/>Waits for delivery")
  D{"Work still<br/>needs attention?"}
  E("Private reminder sent<br/>For the assigned person")
  X("Reminder cancelled<br/>Work already complete")
  A --> B
  B -->|Allowed| C
  C --> D
  D -->|Still outstanding| E
  D -->|Work completed| X
  classDef human fill:#faf7f2,stroke:#bf8c53,color:#24211c;
  classDef work fill:#ffffff,stroke:#a3a5ad,color:#25262a;
  classDef decision fill:#f3efff,stroke:#967bcb,color:#30244c;
  classDef result fill:#f0f6ff,stroke:#7b9dca,color:#1d365b;
  classDef exception fill:#fff5ec,stroke:#ce9b63,color:#64431e;
  class A human;
  class B,C work;
  class D decision;
  class E result;
  class X exception;

07

The case study

A useful reminder needs a lifecycle, not just a send button.

The problem

A stalled review generates another message, then another. A one-click follow-up removes writing effort but can also remove the social friction that normally limits repeated interruptions.

The insight

Reduce the effort of asking without removing the recipient’s control. The reminder should stay attached to the state of the work, so it can become unnecessary before delivery.

The system

The existing foundation checks authorisation, assignees, preferences, and a 24-hour cooldown before immediate email and in-app delivery. The proposed next layer adds an atomic policy gate, a transactional outbox, retry deduplication, and relevance checks that cancel pending nudges when work is resolved.

The rationale

Less coordination effort is valuable only if it does not create more notification fatigue. Private delivery and bounded frequency are core product behaviour.

Responsibilities

Attention request
A named recipient and one specific piece of work.
Policy gate
Permissions, preferences, cooldown, and idempotency checked atomically.
Pending outbox
Durable intent with cancellation and retry state.
Delivery check
Revalidate relevance immediately before asking for attention.

The boundary

The client cannot decide whether a nudge is allowed. Permission, cooldown, duplicate suppression, and final relevance checks belong on the server.

The trade-off

Delaying delivery creates room to cancel obsolete reminders but makes the interaction feel less immediate. Retries can be deduplicated internally; provider behaviour still limits any guarantee of exactly one external notification.

When it fails

The button is clicked twice

Reuse the request key and return the existing accepted result. Enforce an atomic cooldown check so concurrent requests cannot each create a new reminder.

The review finishes first

Cancel the pending reminder and check current review state again before dispatch. If delivery already started, show an honest sent state instead of promising recall.

The recipient opts out

Apply notification preferences when scheduling and again before delivery. Explain that a nudge was not sent without exposing private preference details.

Evidence Immediate-delivery foundation exists · queued cancellation and atomic deduplication are proposed · demonstration uses synthetic data

08

On the design side

Reminders are the quiet end of the communications surface, explored in the comms deck.

Comms

The sends, the voice, and how little an interruption can be.

20 views