Sooner or later, everyone who commissions a learning app gets asked the same question by a learner, a client or an investor: is it working? Logins, page views and minutes on the app don’t answer it. Someone can open an app every day and learn very little.
We’ve built progress and readiness features for our own learning apps. The lessons are mostly about decisions made early.
Keep the answer history, not just the current state
The most useful thing a learning app can store is a record of every answer: which question, right or wrong, and when. Most of what you’ll later want to show comes from that.
We learned this the slow way. In Braineos, each card’s review record held only its current place in the spaced-repetition schedule and when it was next due. That says where a card is now, not how the learner got there. A quiz attempt stored how many answers were right, but not how many questions there were, so a score of 8 could have been 8 of 10 or 8 of 50.
So we added a log with one row per answer, from the website, the mobile app and the AI assistant connector, and stored the number of questions on each quiz attempt. We wrote up why we chose a log over running counters. The part that matters for anyone commissioning an app: history starts when the log goes live. If you want accuracy over time in a year, the app needs to start recording answers now.
Decide which question each page answers
“Progress” means different things in different products, and one page can’t answer every version.
On Braineos, a general flashcard app, the question is where do I stand across everything I’ve studied? Its Progress page shows mastery, how many cards are new, learning, known or mastered, what’s due, and days studied.
On CertBrain, an exam prep app, the question is am I ready to book the exam? Its Readiness page scores each exam domain, weighted the way the exam guide weights them. “Ready to book” needs at least 80% overall and at least 70% in every domain, because an average can hide one weak area that costs marks on the day. Below that, the page names the domain holding the learner back and lists its three weakest lessons.
The scoring underneath is shared between the two. The questions are different, so the pages are too.
Never show an estimated number
The first thing people ask for is a projection: “you’ll master this deck by Friday”, a predicted pass mark, time spent studying. We don’t show any of them.
- No projections. A forecast from a spaced-repetition schedule depends on answers the learner hasn’t given yet. A wrong one teaches people not to trust the rest of the page.
- No pass prediction. CertBrain doesn’t have real exam outcomes to calibrate against yet, so its thresholds are a starting point, and the page says plainly that it’s a study guide, not an exam score or a guarantee of passing.
- No time spent. We don’t track how long a study session lasts, so nothing shows it. We’d rather show nothing than an estimate.
Every figure is a count of something that happened, or a score from a published formula that the page explains under “How this is calculated”.
Say nothing until there’s something to say
A mastery score from three studied cards is noise, and a 0% on day one is discouraging. Both our pages wait for at least 10 studied cards before showing a score, and show the plain totals or point to a next step until then. Trend charts work the same way: a new account sees “Not enough answers yet to show a trend” rather than a line drawn through two points.
One source, so the numbers match everywhere
Once progress shows up in more than one place, the numbers have to agree. On our platform, the answer log is read by one procedure, and everything that shows progress calls it: the progress pages, CertBrain’s accuracy panel and the connector that lets a learner ask an AI assistant how their studying is going. If a learner sees one figure on their phone and another on the web, they’ll trust neither.
Learning is not the same as using the app
Product analytics answer a different question. In our apps, PostHog tracks a sign-up and one meaningful first action, so we can see whether new users reach the useful moment and whether they come back. That tells you whether the product is being used. Whether learners are learning comes from the answer history. You need both, and it helps to keep them apart.
What to decide up front
- What a single answer record holds, and that it’s kept from the first release.
- The one question each progress page answers for your learners.
- The threshold below which a score is hidden.
- What you will never estimate, written down so it survives the first feature request.
If you’re planning a course, certification or exam prep app and want progress reporting people can trust, our education app development page shows what we build and how.



