Back to blog

Where this model is wrong

Four errors this calculator has actually shipped, what each one produced, and what changed. Published because a site that traces other people’s sourcing failures should be able to show its own.

Aug 8, 2026Kevin Fan

Most of the posts here trace somebody else's number to a source it does not have. This one is about ours.

Four errors this model has shipped, what each produced, and what changed. They are logged in the repository as they happen; this is the readable version.

1,782 hours for A2 Chinese

The first version applied a flat 3× penalty to app-only study at every level. Asked for A2 Chinese — simple everyday exchanges — it returned 1,782 hours.

That is most of a bachelor's degree to learn how to order lunch.

Every test passed. The tests checked relations: harder languages take longer, higher levels take longer, worse methods take longer. Every relation held. Nothing checked whether the magnitude was sane, because I had not thought of magnitude as a separate property from ordering.

What changed. Method penalties became two coefficients interpolated across the level range rather than one constant — 1.25× to 1.7× for self-study, 1.3× to 3.5× for app-only. And a second class of test now exists: sanity checks on absolute values, separate from the relational ones. Unit tests verify relations; only a human or an explicit magnitude check verifies that a number is not absurd.

A $260 course displayed as "Free"

Prices were modelled as a single number: monthly cost. A one-off purchase has no monthly cost, so it was entered as zero.

Two consequences. The course displayed as "Free". And because zero is affordable on any budget, it was recommended to people who had entered a budget of zero.

That is the worst error on this list, because unlike a wrong estimate it could have taken money from a reader.

What changed. Price is now a tagged union — free, subscription, one-off, per-lesson — with display and ranking separated: display always shows what you will be charged, ranking amortises internally and never shows the amortised figure, and a zero budget disqualifies anything priced.

A citation to a page that did not exist

The level factors — how much of the full figure each CEFR level costs — carried a source URL to Cambridge English. The URL was fabricated and returned 404.

The factors themselves were fine; when the real page was found, all six landed inside Cambridge's published bands. But for some period this site displayed a citation to a page that had never existed, while criticising other sites for unsourced numbers.

What changed. Every URL in the citation registry must have been actually requested, with the date recorded. A 403 is marked as bot-blocked rather than deleted, because publishers and help centres refuse automated fetches and a 403 is not a dead link.

An interpreting body cited on the Latin page

Two pages here cover languages FSI does not measure — American Sign Language and Latin — and both cite substitute frameworks instead of an hour figure.

Those substitutes were pooled into one shared list. So the Latin page cited the Registry of Interpreters for the Deaf.

What changed. Substitute sources are per page, with a test forbidding two pages from sharing one. What stands in for FSI is specific to the language; there is no generic "no baseline" bibliography.

What these have in common

Three of the four passed a full green test suite. The pattern is not carelessness — it is that the tests encoded what I had thought of, and each error was a category I had not.

Which is the honest limit of any of this. The estimates here are better sourced than most in this field and they are still a model, built by one person, with coefficients that are marked as estimates because that is what they are. The methodology page lists every factor, its source, and its confidence.

If you find one that is wrong, it is worth telling me. Two of the four above were caught by looking at output and thinking "that cannot be right", which is a technique available to anybody.

Sources

Every figure above, and where it came from. A post that traces other people's unsourced numbers does not get to have any of its own.

  1. Foreign Language TrainingUS Department of State, Foreign Service Institute

    The class-hour bands every estimate on this site starts from, and the definition of the proficiency they lead to (ILR Speaking-3 / Reading-3).

  2. Guided learning hoursCambridge English

    The shape of the curve between CEFR levels. Cambridge publishes cumulative hours per level (A2 180–200, B1 350–400, B2 500–600, C1 700–800, C2 1,000–1,200); our level factors are normalised against the C1 band and every one lands inside its published range.

  3. ILR scaleWikipedia

    That no official ILR-to-CEFR crosswalk exists. Published academic tables place ILR 3/3+ at C1; others put C1 nearer ILR 4. We take the lower reading, which makes our estimates the more conservative of the two.