Method

How Fornello's confidence levels work: the science of pizza dough, explained

A dough calculator that displays "1.37 g of yeast" without saying where that number comes from is asking you to take it on faith. Fornello does the opposite: every flour carries a confidence rating, the yeast comes out as a range, the temperature model is published and cited, and your bake journal corrects the constants instead of freezing them. Here is how it is built, and what it does not know.

By Ermenegildo (Gildo) Conte · Published November 6, 2026 · 11 min read

The short answer

Fornello rates every entry in its library by where it comes from: A when the mill itself publishes the measurement (alveograph, W strength), B when it is a documented professional consensus, C when it is a reasoned estimate that nobody has measured. Canadian flours are all C, because no Canadian mill publishes alveograph data, and the calculator says so on screen rather than hiding it.

The yeast dose is never a single figure: it is a range of ±18 %, because the model describes a microbial growth rate and the gas a dough gives off is a reflection of it, not the same quantity. Temperature follows a model published in predictive microbiology (CTMI, Rosso et al., 1993), not the "doubles every 10 °C" rule of thumb. And every constant can be calibrated: ten bakes noted in your journal, and the model becomes yours.

Why a calculator should say what it does not know

Most dough calculators give a number to two decimals, and that is exactly what should worry you. A yeast quantity depends on the real temperature of your kitchen, on how fast your dough ball cools in the fridge, on the state of your flour and your yeast. None of those things is known to two decimals. Displaying "1.37 g" hides the uncertainty under a varnish of precision.

Fornello's choice was to make the uncertainty visible, for three reasons. First, a pizza maker who sees "between 1.1 and 1.6 g" understands that the dough, not the scale, is what to watch. Second, a confidence rating tells you where to look when the result disappoints: if your flour is rated C, it is the first suspect, not your fridge. Third, it is what makes the bake journal useful: you can only correct what you have admitted not knowing.

The three ratings, flour by flour

Fornello's flour library holds eleven wheat and rye entries, plus some twenty gluten-free flours and starches. For each one the engine keeps the W strength (alveograph deformation energy, in 10-4 J), tenacity P and extensibility L stored separately (because a P/L ratio cannot be averaged), ash content, bran share, water absorption at mixing and after full hydration, and amylase activity. Protein is displayed because everyone asks for it, but it is used in no calculation: a durum semolina at 13.5 % protein gives W 230, a Caputo Pizzeria at 12.5 % gives 260. Protein predicts neither strength nor handling from one flour to the next.

FlourWP/LRatingWhat the rating means
Caputo Pizzeria 002600.55AMill's technical sheet
Caputo Cuoco 003100.57AMill's technical sheet
Caputo Manitoba Oro3800.63AMill's technical sheet
Caputo Nuvola 02700.52BDocumented professional consensus
Durum semola rimacinata2301.53BDocumented professional consensus
Light rye30—BNo gluten network: pentosans do the work
Unbleached all-purpose (Robin Hood, Five Roses)2100.78CEstimate: no alveograph published
Canadian bread flour (CWRS)3201.05CEstimate: no alveograph published
La Milanaise T65 organic2350.67CEstimate: no alveograph published
La Milanaise organic whole wheat2401.14CEstimate, bran 13 %
Spelt1650.40CEstimate: very extensible, a P/L correction tool

Values from the Fornello 0.24 library. The W values mills publish vary from lot to lot, often by ten points or so: the flour article gives the published ranges, mill by mill.

When you blend two flours, the engine adds W, P and L in proportion to the masses, then applies a bran penalty: bran particles physically cut gluten strands during mixing, and the loss of strength exceeds simple dilution. The blend's rating is that of its least certain flour. A 70 % Caputo (A) and 30 % all-purpose (C) blend comes out C, on purpose.

Temperature: the CTMI model rather than the Q10 rule

Almost every yeast calculator uses a Q10 rule: the rate doubles (or a bit more) each time the temperature rises by 10 °C. Between 18 and 30 °C, that roughly works. In the fridge, it is wrong: with a Q10 of 2.2, the rule predicts that at 4 °C yeast still runs at 28 % of its speed at 20 °C. Practice gives around 10 %. A Q10 calculator therefore systematically under-doses long cold fermentations, or pushes you to take the dough out too early.

Fornello uses the cardinal temperature model with inflection (CTMI), published by Rosso, Lobry and Flandrois in 1993 and since then a standard of predictive microbiology. The model has only three parameters, all readable: a minimum temperature below which nothing grows, an optimum, a maximum beyond which the culture dies. For baker's yeast, Fornello takes −3, 35 and 45 °C, and normalises the curve so that 20 °C is exactly 1. The 35 °C is a choice between two published measurements: the growth optimum of Saccharomyces cerevisiae is around 32 °C (Salvadó et al., 2011, with this same model), and gas production in a dough keeps increasing up to 40 °C (Chiotellis and Campbell, 2003). The resulting unit of work is the hour-equivalent (h-eq): one hour at 20 °C. It adds up from one stage to the next, and that is what makes a three-stage schedule computable.

Temperature4 °C12 °C18 °C20 °C24 °C28 °C35 °C45 °C
Relative rate (CTMI)0.1050.460.851.001.301.591.87 (max.)0
Q10 = 2.2 rule0.280.530.851.001.371.883.267.2

The CTMI row is computed by the engine. The Q10 row shows where the rule of thumb comes apart: in the fridge (three times too fast) and above 30 °C, where it keeps climbing while yeast slows down, then dies.

Thermal lag: a ball in the fridge is not at 4 °C

A 250 g ball mixed at 23 °C and put in the fridge takes hours to reach 4 °C at its core. During that time it ferments at the speed of its real temperature, not the fridge's. Fornello models that descent with Newton's law (lumped heat capacity): the time constant depends on the mass, on the surface of the equivalent sphere and on the heat transfer coefficient. The result: about two hours for 250 g, about four hours for a 2 kg bulk.

This is not a refinement. Over a 48-hour cold fermentation, ignoring the cooling under-estimates the real load by about 29 %, and it is one of the main sources of error in existing calculators. Concretely, a 250 g ball put in the fridge at 23 °C for 48 hours accumulates 6.8 h-eq according to the engine, against 5.0 if it were treated as being at 4 °C from the first minute. The difference is a yeast dose a third too strong.

Two loads, two ways to ruin a dough

Yeast is not the only thing at work. The flour's proteases cut the gluten, and they do not follow the same curve: an enzyme slows down in the cold without ever stopping, while yeast drops off near zero. So Fornello computes two loads: the rise load (CTMI) and the maturation load (proteolysis). In its model, the cold relaxes the dough about 3.4 times faster than it makes it rise.

The two loads fail differently, which is why one number is not enough. Too much rise, and the gas structure collapses: the dough is past it, flat, sour. Too much maturation, and the gluten network liquefies: the dough sticks, spreads on its own, tears. A soft dough in July is almost always the second, not the first. The calculator shows each flour's maturation ceiling and warns when your schedule exceeds it.

Calibration: your bake journal corrects the model

The engine's constants (heat transfer coefficient, mixer friction factor, yeast constant K, relaxation coefficients) are deliberately calibratable. But calibration is not a form where you type what you like: each constant is identified by an observation that isolates it from the others.

ConstantWhat you note in the journal
Friction factorthe dough temperature out of the mixer
Thermal constant τa probe in the ball at a known hour
Yeast constant Kthe rise percentage of a witness jar
Relaxation τPthe hour the dough becomes workable
Absorptionyour judgement: dry, right, slack

The order matters. The thermal constant is fitted first: if K were fitted before the thermal model had been corrected, K would silently absorb the thermal error and both would be wrong in compensating directions. Fitted values regress toward the original value with a weight that depends on the number of bakes: one odd bake does not rewrite the model, but at ten, it is yours. Outliers are set aside by the modified z-score on the median absolute deviation (Iglewicz and Hoaglin, threshold 3.5), and shown back on screen, never deleted in silence.

How we check that the calculator is not lying

The engine exists in two languages: PHP on the server, JavaScript in your browser. PHP is the source of truth. The JavaScript holds no hard-coded constant: they are exported by reflection from the PHP, so complete by construction. A set of 3,731 reference cases (PHP inputs and outputs) is replayed against the JavaScript mirror at every version, with a relative tolerance of 10-9 on numbers and strict equality on codes and structures. On top of that, 1,910 assertions test the engine itself, including published anchor values: 8 hours at 20 °C give 0.195 % instant yeast (professional references say 0.2 to 0.3), 24 hours at 22 °C give 2.7 g of fresh yeast per litre of water (the AVPN specification says 0.1 to 3).

This net was tested by breaking it on purpose. Changing a constant without re-exporting stops the check at the first step. Changing an algorithm without reflecting it in the mirror turns the affected cases red, with the gap quantified on every field. It is tedious to maintain, and that is exactly the point.

The calculator below opens at the advanced level: the fermentation load in hour-equivalents, the yeast range and the equivalences between instant, active dry and fresh yeast are shown under the weigh-out.

Fornello — load, range and equivalences

Farine

—

g

Eau

—

g

Levure

—

g

Style

Farine

Ajouts

Levée

Horaire

Pesée

Garnitures

Sauvegarde

What the engine does not know, named rather than hidden

  • The starting P/L is static per flour; damaged starch is not modelled.
  • Amylase activity (falling number) is a three-notch label, low, medium, high, not a measured value.
  • The bran penalty is a single coefficient, with no distinction between fine and coarse milling.
  • The gluten relaxation coefficients are at confidence C.
  • The composition modifiers (salt, sugar, fat, whole grains) on the rate of rise are at confidence C: reasoned orders of magnitude, to be refined by real data.
  • The W values of Canadian flours are estimates, and will stay estimates until a mill publishes an alveograph or a laboratory measures one on an identified lot.
  • The sourdough inoculation law (power 0.6) is at confidence C and will be the first constant the bake journal should refit.

This list lives in the code documentation and grows with every version. It is not there to discourage: it is there so that a failed dough has a cause you can look for.

Frequently asked questions

What does the C rating on my flour mean?

That this flour's strength and extensibility are a reasoned estimate, not a published measurement. The calculation works, but the range is wider, and if your dough does not behave as expected it is the first thing to question. All Canadian flours are C, because no Canadian mill publishes alveograph data.

Why is the yeast shown as a range rather than an exact figure?

Because the model describes a microbial growth rate, and the gas produced in your dough is a reflection of it, not the same measurement. The ±18 % range reflects that gap. A figure to two decimals would be false precision.

What is CTMI, and why not the Q10 rule?

The cardinal temperature model with inflection (Rosso et al., 1993) describes a microorganism's rate between its minimum, optimum and maximum temperatures. The Q10 rule ("doubles every 10 °C") works between 18 and 30 °C but predicts three times too much speed in the fridge and keeps climbing above 35 °C, where yeast dies.

How does the bake journal change the calculations?

Each noted bake (dough temperature, the hour it became workable, the rise of a witness jar, a dry-or-slack judgement) identifies one specific constant. Fitted values slide toward yours as bakes accumulate, and outlying measurements are shown to you rather than thrown away in silence.

Does the model apply to gluten-free doughs?

The fermentation, yes: yeast eats sugars and does not care about gluten. But the gluten-free mode refuses to display a W, a P/L or a maturation, because those measurements describe a network that does not exist. Structure comes from a hydrocolloid gel, modelled separately.

Sources

  1. Rosso, L., Lobry, J. R., Flandrois, J. P. (1993). An unexpected correlation between cardinal temperatures of microbial growth highlighted by a new model. Journal of Theoretical Biology, 162(4), 447–463.
  2. Rosso, L., Lobry, J. R., Bajard, S., Flandrois, J. P. (1995). Convenient model to describe the combined effects of temperature and pH on microbial growth. Applied and Environmental Microbiology, 61(2), 610–616.
  3. Salvadó, Z., Arroyo-López, F. N., Guillamón, J. M., Salazar, G., Querol, A., Barrio, E. (2011). Temperature adaptation markedly determines evolution within the genus Saccharomyces. Applied and Environmental Microbiology, 77(7), 2292–2302 (cardinal temperatures of S. cerevisiae measured with the CTMI).
  4. Chiotellis, E., Campbell, G. M. (2003). Proving of bread dough II: Measurement of gas production and retention. Food and Bioproducts Processing, 81(3), 207–216.
  5. Iglewicz, B., Hoaglin, D. C. (1993). How to Detect and Handle Outliers. ASQC Quality Press (modified z-score on the median absolute deviation, threshold 3.5).
  6. Associazione Verace Pizza Napoletana. International specification for the "Vera Pizza Napoletana" mark (fresh yeast 0.1 to 3 g per litre of water).
  7. Fornello 0.24, source code documentation: flour registry (confidence ratings), fermentation, thermal lag, maturation and calibration models, PHP ↔ JavaScript verification chain (3,731 vectors, 1,910 assertions).