1,000 days on Duolingo. Still couldn't order a beer.
A streak that long is supposed to mean something. Mine meant I was very good at tapping the right tile. Put me in front of an actual German person and nothing came out. Say It is what I built instead: thirty phrases worth actually saying, drilled out loud against a voice agent, built for one trip with a real date on it.
The streak was measuring the wrong thing.
Nearly three years of daily practice, and the failure was total the moment it mattered. That is not a discipline problem, I had the discipline. It is a design problem, and once I named it properly the whole product fell out of it.
Phrasebooks and mainstream apps optimise recognition, not production. The failure moment is saying a phrase out loud, at speed, to a real person. Nothing cheap rehearses that moment.
Recognition is picking the right answer from four. Production is opening your mouth with someone waiting. They feel like the same skill. They are not, which is how a thousand-day streak sits happily alongside total silence at the bar. Every tap I made trained the easy one.
The other thing the streak hid: most of what I learned was never going to come up. I can tell you, in German, that the turtle drinks milk. I could not ask where the toilets were. Duolingo optimises for the next lesson, not for the trip, so the vocabulary is broad, evenly spread and almost entirely irrelevant to any actual evening.
Three years bought me comprehension. I can read a menu. I cannot talk to the person holding it. That is a real skill and it is not the one I was paying for.
Then there is the bill. I paid a subscription for the better part of three years in order to arrive at the bar unable to speak. Not a scam, the product does exactly what it advertises. But the price and the outcome were never connected: I was billed for continuing, not for arriving. A streak is a retention mechanic wearing the costume of an achievement, and it charges monthly whether or not you can order a beer.
Say It cost a few pounds of API credit, because generation is priced per use. That inverts the incentive completely. A subscription wants you back tomorrow. A per-use tool wants to be finished with you. I would rather build the thing that gets me to Berlin and then goes quiet.
Stop trying to learn a language. Start trying to survive four specific days, in one specific city, with about thirty things you will genuinely need to say. Narrow the target until practice can't miss.
Thirty phrases. Personality over phrasebook.
The content is the product. Thirty phrases across arrival, food, directions, emergency and nightlife, chosen because you would actually say them in Berlin, not because they come next in a syllabus.
Funny is a memory mechanism, not decoration. "Wo ist die Tanzfläche?" sticks because it is faintly ridiculous to practise and genuinely useful at 2am. Asking how to get into Berghain is a joke with a real answer. A phrase you enjoy saying gets said fifty more times than one you dutifully repeat. So the pack is written to be fun first, and the fun does the job the streak was only pretending to do.
Each phrase carries three things and only three: the German, the English, and a phonetic hint written for an English mouth rather than in IPA. TANTS-fleh-khuh is not correct notation. It is correct enough to get the sound out, which is the only job it has.
Three outcomes, and none of them is failure.
The agent says the phrase at native speed, then slowly. The card shows it. You say it back. What happens next is the entire product, and there are exactly three things that can happen.
Good enough
Brief praise, varied so it never sounds canned, and straight on to the next phrase.
Close
Name the one thing to fix, replay just that sound, invite a retry. Two attempts, never more.
Way off
Re-model slowly, tag it shaky, and advance anyway with encouragement. Tomorrow it comes back first.
Progress is never blocked. That is the one rule the whole design hangs on. The failure mode of language apps is the wall, the thing that will not let you past until you get it right, which for a nervous speaker is precisely when they close the tab. Say It always moves forward and quietly remembers what wobbled.
The drop-off is not lesson four. It is the first phrase said out loud, because talking to a computer feels ridiculous. So the orb speaks first and sounds like a mate rather than an examiner, phrase one is trivially easy, and the funniest phrase in the pack lands inside the first session as a reward.
The first build opened with a wall of German.
The agent had no fixed first message, so it improvised, in German, at length, with no card on screen. A beginner's first experience was a paragraph of a language they did not speak and nothing to read. It was the exact anxiety the product exists to remove, delivered in the first four seconds.

The fix was three rules, all of them about taking improvisation away from the model at the moments that matter. A deterministic English opening, spoken identically every time, explaining the loop in one breath: I show it, I say it, you say it back. Card before voice, a hard rule that the phrase must be on screen before the agent speaks it. And English coaching only, with German reserved for the phrase itself.

The useful part: the model was not wrong, the brief was. Given room to improvise at the highest-stakes moment in the experience, it improvised. Deciding where a model is allowed to be creative is most of the work in shipping anything voice-based.
What I took out, and why.
More was cut than built. Each of these was in the first plan and each one earned its removal.
The 10,000 hours ladder
Mastery folklore aimed at the wrong person. Nobody habit-builds toward ten thousand hours for a long weekend. The trip date is a better mechanic than any streak: a real deadline, intrinsic motivation, and a natural end.
XP, leagues and badges
The machinery that gave me a thousand hollow days. Kept exactly two numbers: the day streak and "X days to Berlin". Everything else was rewarding the wrong behaviour.
Phoneme-level scoring
A real pronunciation pipeline is a week's work on its own. The agent saying "close, the ch in ich is softer" is enough to be useful, and honest about being a judgement rather than a score.
Accounts, payments, more languages
One page, one language pair, one trip. Every one of these would have made it look more like a product and less like a working thing.
The pattern is the same one that made the streak worthless: reward something other than the outcome you want, and you get that other thing every time. Duolingo's leagues made me a person with a streak. A countdown to a real flight makes me a person who can order a beer.
A pack is thirty lines. That's the whole point.
The thing I actually want out of this is not an app. It is a format my friends can take and make their own, because the reason the Berlin pack works is that it was written by someone going to Berlin.
There is a version of this that is a real business, and it is not this one. Voice language tutoring is a crowded market, and Speak is already in it at around a billion dollars. If it were ever worth pursuing, the angle would be the deadline. Everyone else sells open-ended learning you subscribe to. This is a three-week product that finishes.
Say It was built as proof of work for an ElevenLabs application, an argument, in the form of a working thing, that I can take their stack and produce something finished and teachable rather than a demo that falls over.
The Duolingo streak is genuinely why it exists though. I wanted the thousand days back, and failing that, I wanted the next eighty to count.