Lockin

Forfeit story → Duolingo streak

The contract did not know she had a fever.

Ana had 198 consecutive days of Mandarin lessons behind her when a virus flattened her for a day and a half. The Duolingo streak survived on a freeze. The Lockin stake did not.

Ana, 26, PhD student in linguistics, Madrid

How it started

Ana had been studying Mandarin on Duolingo since the previous August, the summer before her second PhD year at Complutense. The degree was in linguistics, which made the whole enterprise feel slightly paradoxical — she spent her days dissecting how language worked in the abstract, and spent twenty minutes each evening doing a children's app in a language she could not yet order coffee in. She did not mind the paradox. The streak had become a private ritual. It survived seminar weeks, a conference in Lisbon, two sets of exams, and a December trip home to Seville where she sat on the edge of her childhood bed at 11:45pm completing a unit on travel vocabulary she would not need until she could actually travel to China. By February the streak was at 163 days. She noticed something that bothered her: the Streak Freezes. Duolingo sold them, and it also granted them automatically under certain conditions, and she had been using them. Not often — maybe five or six times across the whole run — but enough that the streak number had become slightly fictional. It was 163 days of intent, not 163 days of actual practice. She had heard about Lockin through a study group. Another PhD student, Tomás, had used it to hold himself to a writing quota while finishing his thesis. She downloaded it and set up a contract on the Duolingo habit: one lesson completed per day, three euros to a digital literacy charity if she missed. The structure was simple. The point was not the three euros, which was less than a coffee near campus. The point was that a Streak Freeze would no longer protect the number without protecting the behavior. The Lockin contract could not be auto-spent. It either registered a lesson or it registered a forfeit. One of the wizard steps asked her to set a daily deadline — the cutoff after which the day's stake auto-forfeited. The default was 23:59 local. She opened the 24-hour picker and pulled it back to 21:00. Her habit was post-dinner; she sat down with the app most evenings between half past eight and a quarter to nine. A 9pm deadline matched the actual rhythm of her practice and meant she could not negotiate the lesson down to a sleepy three-minute click-through at 11:55pm to keep the number alive — which was the precise behavior she was trying to retire. The tighter deadline raised both the reward and the pressure, which she preferred. The deadline was set once, in the wizard. It applied to every day in the contract and could not be edited later. She renewed it each week through February into March. The streak reached 190, then 195, then 198.

The contract

$3/day staked against Duolingo streak, charity: digital literacy.

Tuesday, the fourth of March. Ana woke at 7am with a headache she attributed to the previous night's screen time. By nine, sitting in the university library with a cold coffee, she knew it was not the screen time. By midday her temperature was 38.5 Celsius. She took the metro home, bought paracetamol at the pharmacy on Calle Atocha, and was in bed by two in the afternoon. She thought she would sleep for a few hours, feel better by evening, and do the lesson before midnight. It was a Tuesday. She had done the lesson on worse Tuesdays. She slept through Tuesday evening. She slept through Tuesday night and most of Wednesday. She surfaced twice to drink water and once to move from the bed to the couch and back. The fever peaked somewhere in the small hours of Wednesday and broke sometime Wednesday afternoon. She was not tracking time carefully. She came back to full consciousness at 11:42pm on Wednesday. The room was dark. She was damp and hungry and her throat hurt. She reached for her phone.

The night it almost broke

The Duolingo notification was cheerful, as Duolingo notifications tended to be. It told her that a Streak Freeze had been used and that her streak now stood at 200 days. The counter had ticked forward through her absence. The number was intact. She opened Lockin. The contract showed a forfeit for Tuesday — the 9pm deadline she had set in the wizard had passed at 21:00 the previous evening while she was asleep with a fever. It already showed a forfeit for Wednesday too. The 9pm deadline that night had passed two hours and forty-two minutes ago, while she was still unconscious. She put the phone down and stared at the ceiling. She had been running a fever of over 38 degrees. She had been functionally unconscious for thirty-six hours. She had done everything right for 198 consecutive days. A rhinovirus had moved through her sinuses and into her chest and she had had no meaningful agency over any part of Wednesday. The contract did not appear to have received this information. The felt unfairness was sharp and specific. It was not the three euros, though the three euros were real enough. It was the categorical indifference. There was no field in Lockin for "was ill." There was no mechanism by which the contract could distinguish between missing a lesson because she had been watching television and missing a lesson because she could not sit upright. Both were a miss. Both forfeited. She thought about sending a message to Tomás. She thought about checking whether Lockin had any kind of dispute or exception process. She looked at the ceiling for a while longer. The thing she kept returning to was the Streak Freeze. The Streak Freeze had fired automatically. It had spent itself so the number could survive her illness undamaged. The number was fine. The number meant nothing about whether she had actually learned any Mandarin on Tuesday or Wednesday. The number had been protected and the practice had been completely absent, and the streak counter had simply absorbed the contradiction and moved forward. That was, she realized, exactly what she had set up Lockin to prevent. Not the specific case of illness. The general case of protection. The Lockin contract was not protecting a number. It was supposed to protect a behavior, and behaviors could not be frozen. If illness got an exception, tiredness would get an exception. The contract had to be cold because warmth was what the Streak Freeze already sold. She watched the clock on her phone reach midnight. The dashboard had already scored both days at their 9pm deadlines, hours apart, while she was sleeping through them. The second forfeit confirmation, the formal end-of-day write, completed as the date rolled over.

What it cost

The forfeits processed on Thursday morning while she was still in bed. She watched the confirmation come through on her phone. Six euros total. The charity was a digital access organization working in sub-Saharan Africa. She did not know much about their specific programs. She had chosen the category because it seemed appropriate given the context. What sat with her was the clean, legible record. Tuesday: no lesson. Wednesday: no lesson. No asterisk, no asterisk. Two days of illness had produced two days of forfeit with no annotation. The record did not know she had been sick. It did not need to. The record was only tracking one variable. She had maintained a streak of 198 days before Tuesday. Those 198 days were real. The practice they represented was real. The contract had not erased that. It had simply declined to protect it, and protecting it was not the contract's job. The Duolingo streak still said 200. The Lockin record said two forfeits. Both were accurate. They were measuring different things.

Forfeit

$3 → digital literacy

What changed

Ana renewed the contract on Friday, once she was well enough to sit at her desk for more than twenty minutes. She kept the structure exactly as she had set it: one lesson per day, three euros per miss, no exceptions. She had considered, briefly, whether the contract should somehow accommodate the case of illness. She decided it should not. The whole point of the design was that consequences applied to the day, not to her reasons for missing it. Building in an illness exception would have meant rebuilding, in a smaller form, the same protection the Streak Freeze had offered — and the protection was the problem. She also did something she had not done before: she logged back into the Duolingo course and looked at her actual completion data, not the streak counter. The streak counter said 200. The completion data told a more complicated story. There were eight days she had completed a lesson but earned minimal XP, sessions under two minutes, lessons she had clearly rushed through to protect the number rather than to learn anything. She had been thinking of the streak as the goal. It was not the goal. The goal was to be able to read a menu in a restaurant in Chengdu without her phone in approximately three years. The streak was a proxy metric, and like most proxy metrics it had started optimizing for itself. She stopped resenting the two forfeits somewhere around the second week back. The resentment had required believing that the contract owed her recognition of her circumstances. It did not. That was not a flaw in the design. That was the design.

"The streak was protecting how I felt about missing a day. The stake was protecting the day itself. Once the flu showed me the difference, I could not unsee it."

— Ana, 26, PhD student in linguistics, Madrid

Try the same contract.

Read how a Duolingo streak contract works on Lockin — what counts as proof, how the stake is held, and where the money goes if you miss.

See the Duolingo streak contract →

Other forfeit stories

Stop deciding. Start staking.

Composite story. Names and identifying details have been changed or invented. Patterns drawn from anonymized Lockin beta-user data.