Varje AI-verktyg kan skapa fler notiser. Vi lade ett år på att få Nudge att skicka färre. Filtret i två steg, spärrtiden på 15 minuter, och det vi tog bort.
För ett år sedan skickade en tidig version av Nudge en skur av notiser om dagen till en upptagen användare. Idag skickar den en liten handfull, lagda på stunder då du troligen agerar. Inget med produkten blev mindre ambitiöst. Uppgiftssystemet blev större, AI-funktionerna blev bättre, användarbasen växte. Det som ändrades är att vi slutade mäta fel sak.
Fel sak är hur många användbara knuffar en AI kan skapa. Rätt sak är hur många knuffar en riktig människa kan ta emot innan hon börjar ignorera appen. De siffrorna ligger inte nära varandra.
Vilken AI som helst som kan resonera om dina uppgifter kan skapa ett imponerande antal "hjälpsamma" saker att säga till dig. Den kan påminna dig om deadlines. Föreslå deluppgifter. Flagga krockar. Erbjuda sig att boka om. Föreslå en bättre formulering. Påpeka att du skjutit upp just den här uppgiften i tre veckor. Fira serier.
Var och en av dem går att försvara. Staplade på varandra ger de en telefon som vibrerar var 40:e minut. Det är den saken användare avinstallerar.
En naiv version av en AI-produktivitetsassistent ser ut ungefär så här: varje gång en ny uppgift läggs till bedömer AI:n den, föreslår en plan, schemalägger påminnelser för relevanta avstämningspunkter, och skickar en knuff när varje punkt infaller. Lägg till 10 uppgifter på en vecka och du har dussintals knuffar i kö, utspridda över veckan. Första veckan känns smart. Den andra känns tryckande. Tredje veckan slutar notismärket att läsas.
Vi vet det här för att vi byggde ungefär den versionen först.
Det svåra var att lista ut hur man avgör vad som inte ska skickas. En LLM är utmärkt på att ta fram kandidater till knuffar och medelmåttig på att rangordna dem mot varandra. Allt ser rimligt ut var för sig, vilket är samma problem som människor har när de skriver sina egna att-göra-listor.
Lösningen vi landade i är ett filter i två steg. Steg ett är en snabb poängsättare som körs på varje kandidat till knuff. Den ställer fyra frågor:
Är den här knuffen överflödig? Om vi skickade något liknande de senaste 90 minuterna, släng den. Om användaren nyligen slutfört en besläktad uppgift, släng den.
Har användaren mental budget just nu? Det är här sammanhangsmedvetna påminnelser gör skäl för namnet: tysta timmar, användarens kalender, och när hen faktiskt agerat på notiser tidigare matas allt in i det. Om vi är i ett fönster med låg tillgänglighet, skjut upp eller släng.
Är uppgiften faktiskt nära sitt handlingsögonblick? En deadline om fyra dagar utan fast tid behöver ingen knuff idag. En deadline imorgon klockan 17 kanske gör det.
Skulle ännu en knuff för samma uppgift underminera den första? Vi håller ett dagligt tak per uppgift. Standard är två. Över det vägrar schemaläggaren lägga till fler, hur smart resonemanget än är.
Steg två är en global spärrtid. Även om steg ett godkänner går en knuff inte ut om användaren fått någon annan knuff de föregående 15 minuterna. Den enda regeln gav den största minskningen av det dagliga antalet knuffar av allt vi släppt. Den tvingade oss också att bli smartare på vilka knuffar som tog sig genom filtret, eftersom vi inte längre kunde spruta ut påminnelser med svag signal och förlita oss på volymen.
Kulturproblemet inom varje team som bygger med LLM:er är att producera utdata är billigt och att hålla tillbaka utdata är dyrt. En junior utvecklare kan koppla ihop "LLM:en föreslår tre förbättringar av din uppgift" på en eftermiddag. Att avgöra när de förslagen inte ska visas kräver telemetri, användarstudier, rangordningsmodeller, och en vilja att släppa färre funktioner. Det arbetet går inte att demonstrera. Det ser inte ut som framsteg på en skärmbild.
Vi gjorde arbetet med återhållsamhet på grund av en bestämd mätning. Varje knuff vi skickar får en uppföljningssignal inom 24 timmar: användaren agerade på den, ignorerade den, eller så misslyckades även en senare knuff för samma uppgift. Ett leveranssystem av hög kvalitet är ett där de flesta knuffar leder till handling, och de flesta av resten inte leder till något (vilket är okej). Ett dåligt system är ett där de flesta knuffar leder till att någon sveper bort dem, eftersom bortsvepningar kostar förtroende. Det mesta som skiljer de två åt handlar om att bli knuffad vid rätt tidpunkt.
När vi ritade upp det mot antalet notiser var formen uppenbar. Fler notiser per dag betydde fler bortsvepningar. Färre betydde att mer blev gjort, ända tills volymen blev så låg att riktiga deadlines började glida igenom. En liten handfull om dagen visade sig vara den bästa nivån.
Några konkreta saker vi plockade ut ur systemet längs vägen.
Morgonsammanfattningar. En tidig version skickade en notis med "här är din dag" varje morgon. Det lät användbart. I praktiken ignorerade folk notiserna. Vi behöll funktionen men flyttade den till startskärmen i appen i stället för en push. Samma information. Noll notiskostnad.
Påminnelser om serier. "Du har slutfört 5 uppgifter i rad!" är den sortens notis som känns festlig i ungefär tre dagar och irriterande för alltid. Borttagen.
Notiser med förslag. "Vi har märkt att du fortsätter skjuta upp den här uppgiften. Vill du dela upp den i deluppgifter?" God avsikt, dålig tajming. De lever nu som ett stillsamt kort på uppgiftens detaljskärm. Användaren ser det när hen redan tittar på uppgiften, vilket är ett sammanhang där förslaget är välkommet.
Pling om automatisk omplanering. Om Nudges planerare flyttade en uppgift till en ny dag brukade den skicka en notis. Användare tyckte att det var förvirrande och lite oroande. Nu gör planeraren bara sitt jobb i tysthet och visar ändringen på startskärmen.
Mönstret i allt det här är detsamma. Informationen finns fortfarande tillgänglig för användaren, men den har flyttat från push till att hämtas. En pushnotis är ett anspråk på användarens uppmärksamhet. Den bör sparas till sådant som specifikt kräver att användaren agerar nu.
Några anteckningar om implementationen, om du bygger något liknande.
Vår schemaläggare för knuffar använder Celery med ETA-baserade jobb för exakt tajming, med en Redis-kö och en revisionslogg i Postgres bakom sig. Varje knuff har ett ursprungsfält (AI_INFERRED eller USER_EXPLICIT) som styr hur aggressivt vi får avbryta eller boka om den. Vi avbryter aldrig automatiskt en påminnelse som användaren satt själv av volymskäl. Den regeln är det som håller förtroendet uppe. Om du sätter en påminnelse om din mammas födelsedag kommer vi att leverera den oavsett vad modellen tycker. Det är samma garanti bakom påminnelser som inte försvinner förrän du gjort dem.
Logiken för rangordning och avbokning ligger i en daglig planerare som körs en gång per användare och dag. Den får avbryta gamla AI-härledda knuffar (upp till 50 per körning) och köa nya. Den är förbjuden att röra något som användaren bett om. Den gränsen är viktigare än rangordningsmodellen.
När vi beskriver Nudge för folk är den vanligaste reaktionen förvåning över att AI:n inte gör mer. Var är den dagliga coachningen. Varför analyserar den inte min produktivitet. Kan den inte skicka uppmuntran till mig.
Det korta svaret är att den skulle kunna, och att produkten blir sämre när den gör det. Uppmärksamhet är en begränsad budget. Varje notis är ett uttag. Många AI-produktivitetsverktyg lutar sig tungt mot volym och hoppas att användaren behandlar de första som insättningar mot en framtid där appen är oumbärlig. I praktiken behandlar användarna dem som skälet till att de kommer att tysta appen.
Att bygga en AI som vet när den ska hålla tyst är mindre spännande än att bygga en AI som har mycket att säga. Det är också, enligt vår erfarenhet, det som får folk att fortsätta använda produkten efter vecka två, särskilt de som kom och letade efter en uppgiftshanterare för dem som hatar uppgiftshanterare.
Nudge bygger på premissen att färre knuffar med bättre tajming slår fler som ligger lite fel. Gratis på iPhone och webben.
Nudge läser din kalender och lär sig dina mönster, och håller sedan kvar varje påminnelse till ett läge du kan använda.