Blog

Why It Took 2.5 Years to Build Memset

The honest reason a simple spaced repetition app took thirty months to ship: the only real test was time.

I had the idea for Memset in October 2023. The iOS app reached the App Store in March 2026, and the Android version followed this June. That is two and a half years for an app whose whole job is reminding you to review what you are learning.

Nobody was waiting on me. There was no funding and no team, just one developer with a full life and, from May 2025 on, one designer.

When developers hear a timeline like that, they usually assume scope creep, or a rewrite spiral, or plain perfectionism. I brushed against mild versions of all three, and none of them is the real answer. Memset is a spaced repetition planner, and the defining property of spaced repetition is that it works over months. The only way to know whether the app genuinely helped anyone remember was to learn real things with it, then wait and see what survived.

The code was never the slow part. The waiting was.

A blank wall calendar grid on a soft blue background with a dotted line winding through the empty cells and gradually rising toward the upper right

A memory app can only be tested with memory

Think about how you verify normal software. You build a to-do app, you add a task, you tick it off, and the feedback arrives in seconds. Even for something subtler, a tester can usually tell you within a week whether the product does its job.

Spaced repetition refuses to be tested that way. The method schedules reviews at growing intervals, first a day, then several days, then weeks, then months, each one timed to catch a memory just before it fades along the forgetting curve. The entire value of the product lives at the far end of those intervals. A scheduling change that feels great in week one can quietly fail you in month three, and you will not find out until month three arrives.

So every time I adjusted how intervals grew, or how reviews were balanced across topics, the unit tests told me almost nothing. They passed. They always passed. The question that mattered was whether the vocabulary and engineering concepts I was feeding into the app would still be in my head weeks later. My feedback loop was my own memory.

You cannot A/B test what you will remember in six months. You have to live the six months.

That sentence explains most of the calendar. A meaningful iteration on scheduling needed weeks or months of daily use on real material before I could trust it. Stack a dozen of those iterations end to end and the timeline stops looking strange.

What the timeline actually looked like

Laid out honestly, the two and a half years break down like this:

  • October 2023: the idea. A planner that schedules reviews for learning material living anywhere, in your notebooks, your PDFs, your courses, instead of another flashcard editor demanding everything be rebuilt as cards.
  • Around the turn of 2024: a first working prototype. Ugly, but it scheduled repetitions.
  • 2024 into early 2025: the long quiet middle. I used the prototype every day on my own learning, adjusted intervals and strategies, and waited to see what stuck.
  • May 2025: the idea had proven itself, and design became the bottleneck. I started working closely with a designer on what became the current interface.
  • March 2026: I shipped the iOS app, and the first public version went live in May 2026.
  • June 2026: the Android version followed.

Two stretches in that list deserve a closer look, because that is where the time actually lived.

The first is the quiet middle. From the outside, more than a year with nothing to show looks like a stalled project. From the inside it was the only honest way to answer the question the app exists for. I was the test subject as much as the developer. When an interval scheme dumped too many reviews on me at once, I felt it on a Tuesday evening after work. When a change was right, I noticed facts surfacing on schedule a month later, still intact. None of that compresses.

The second is the design year. Starting that May, we rebuilt the experience screen by screen over roughly a year, while daily use kept exposing problems. The design had one job above all others: keep the app out of the way. Study tools have a notorious failure mode where the tool becomes the work, where maintaining the system costs more energy than the learning it was supposed to support. Every screen we reworked was judged against that trap, and the judging took iterations, and the iterations took time.

Where the rest of the time went

Even granting the slow feedback loops, two and a half years includes a lot of plain building. Three things ate more of it than I expected.

Animations and interface feel took months on their own. I wanted Memset to feel professional from the first touch: smooth transitions, motion that explains what just happened, screens you understand without a manual. This kind of quality is invisible when it works, and it is absurdly expensive to produce. A transition that lasts a third of a second can absorb a week of evenings before it feels effortless.

Localization was a quieter sink. Memset ships in thirteen languages, and every screen, notification, and line of onboarding copy had to survive translation without breaking a layout or losing its tone. Multiply a small app by thirteen and it stops being small.

And notifications, the feature that makes review timing work in real life rather than only when the app happens to be open, carried a long tail of edge cases. A reminder that fires at the wrong moment trains you to ignore it, so getting the timing right needed real days and real routines, not a simulator.

Streaks were the hardest thing I built

If you had asked me in October 2023 which feature would fight me the longest, I would never have guessed the streak counter.

A streak looks trivial: count consecutive days, show a number. Inside a spaced repetition app, it is anything but. Some days legitimately have nothing due, because the scheduler decided so. Other days an overdue review from last week still hangs over you. Should a day with zero scheduled reviews extend the chain? Should one missed day erase three months of consistency? Punish too hard and the feature manufactures guilt, which is precisely the emotion that makes people abandon review systems. Forgive too easily and the streak stops meaning anything.

What shipped is a compromise I can defend. Memset tracks your current and longest streak, an overdue review can interrupt the chain, and recovery is always possible without rebuilding anything. A missed day costs you something, never everything.

I rebuilt that logic more than once, balancing strictness against forgiveness, and I will say it plainly: streaks are the one part of Memset I still think has room to improve. The lesson was bigger than the feature, though. In a simple app, the genuinely hard parts hide inside small systems that must behave sensibly across every edge case a human life can produce.

Quality is a timeline decision

There is a version of this story where I ship in six months. Its scheduling would have been plausible, its animations default, its streak logic naive, and I would have learned about every failure mode from one-star reviews instead of from my own Tuesday evenings.

I do not believe that version survives its first winter. A memory tool earns trust the same way it earns retention, slowly and through repeated correct behavior. The spacing effect it builds on has more than a century of evidence behind it. The science needed no help from me. What needed the work was everything around it: pacing that respects a busy week, recovery that survives a missed day, an interface calm enough to come back to every morning for months. Quality is a timeline decision, and I made it early, knowing the cost in calendar pages.

The proof, when it finally came, was personal rather than dramatic. I have used Memset daily through all of this, and the things I feed it stay with me. I am consistent because the daily load stays sane, and what I review on its schedule sticks in a way my old ad-hoc reviewing never matched. It took two and a half years to be able to write that sentence with a straight face. I would spend them again.

If you are building something whose value only appears months after a user starts, budget for the waiting instead of pretending it away. Fast iteration is a wonderful default and the wrong tool for this particular job. Some products can only be validated at the speed of the thing they improve, and memory does not hurry.

And if you are a learner rather than a builder, and you want a review planner that took its time getting these details right, that is what Memset is for.