We recommend reading our blogpost about DoseMatch before this one.
We now decide when to drop a roast by how much heat the beans have absorbed, not by the clock or a single temperature reading. We call it DoseMatch, and on October 18 we ran it live for a full roast day for the first time. This post explains the idea, the math behind it, what the first day showed us, and what we changed as a result.
The problem: fast days
Every roaster knows the feeling. Same coffee, same profile, same charge temperature, and yet the machine runs hot. Ambient conditions, gas pressure or a drum that held more heat than usual can push a roast to finish 5–10 °F above where it normally does.
When that happens, the two usual drop rules both fail, in opposite directions:
- Drop on time. If you drop at the master profile's usual minute, a hot roast has spent those same minutes at a higher temperature. It overdevelops.
- Drop on bean temperature. If you drop at the master's usual temperature, a hot roast reaches that number early. It gets too little development time.
The right answer sits somewhere in between. DoseMatch is our attempt to find it with physics instead of guesswork.
The idea: not all seconds are equal
Chemical reactions speed up as temperature rises. A common rule of thumb in chemistry is that many reactions roughly double in speed for every 10 °C, which is 18 °F. The browning and flavor-building reactions in a roast follow the same general pattern.
That means a second spent at 418 °F does more to the bean than a second spent at 400 °F. So instead of counting plain seconds, we count weighted seconds. A hot second counts for more; a cool second counts for less.
Add those weighted seconds up over the end of the roast and you get a single number: the heat dose. If today's roast receives the same dose as the master profile, it should taste like the master, even if the clock and the thermometer disagree.
This is not a new idea. The food industry uses the same logic to prove that canned food has been sterilized, a measure called F0. Sterilization uses a much steeper curve than we do, but the principle is identical: time at temperature, weighted by how hard that temperature works.
The formula
Each second gets a weight based on bean temperature (BT, in °F). We use 400 °F as the reference point, where one second counts as exactly one:
w(BT) = 2(BT − 400) / 18
In plain terms, every 18 °F above 400 doubles the weight, and every 18 °F below halves it.
| Bean temperature | Weight of one second |
|---|---|
| 300 °F | about 0.02 |
| 382 °F | 0.5 |
| 400 °F | 1.0 |
| 418 °F | 2.0 |
The heat dose is the running total of those weights, measured in "equivalent seconds at 400 °F":
D(t) = Σ w(BTi) · Δti
A few practical choices make this work in a real roaster:
- When counting starts. We begin once the beans climb through 360 °F. Below that, the weights are tiny anyway, and skipping the early part avoids the misleading probe reading right after charge.
- The target. When a profile loads, we run the same sum over the master roast's curve, from its 360 °F crossing to its drop. Every coffee gets its own target. For example, our Ohana master crosses 360 °F at 7:19 and drops at 11:10, for a target of about 174 equivalent seconds.
The live cue
During the roast, the software watches the dose climb and predicts when it will hit the target. It uses the rate of rise over the last 30 seconds to project forward, then subtracts one second for human reaction time.
About 12 seconds before the drop, it announces that the drop is approaching and stops adjusting the prediction, so the roaster has a steady number to act on. The cue is also kept within a sensible window around the master's drop time, so a noisy probe can never send it somewhere absurd.
One point matters to us: DoseMatch is advisory. It speaks a cue. A person decides and drops the beans. Nothing on the machine is actuated automatically.
What the first live day showed
On a fast day, DoseMatch dropped our Torogoz roasts about 20 seconds early and landed them close to a normal day's results. We had 13 usable roasts on October 18. The clearest comparison is Torogoz across three days:
| Torogoz roast day | Drop vs. master | Bean temp at drop | Weight loss |
|---|---|---|---|
| Oct 18, fast day, DoseMatch cue | 17–25 s early | 405–406 °F | 14.0–14.4% |
| Oct 16, fast day, dropped by hand | 14–23 s early | 410–411 °F | 15.3–16.3% |
| Oct 9, normal day | 0–3 s late | 400–404 °F | 13.7–14.2% |
Weight loss is a useful stand-in for roast degree: the more moisture and mass a bean loses, the further it has been developed. On October 16 we were also running fast and dropped early by feel, but the beans still came out 1–2 points heavier in weight loss than normal. On October 18, following the cue, weight loss came back almost to the normal-day range.
Across the whole day:
- Every spoken cue was acted on within 1–3 seconds.
- Finished roasts landed at 99–102% of their master's heat dose.
- The projection held steady in the final seconds, without jumping around.
What we changed
The biggest change is to the formula itself: the doubling factor is now adjustable, and our default is gentler than the textbook 2×.
A gentler doubling factor
The 10 °C doubling rule is a generalization, not a law of coffee. On October 18 we pulled samples with the trier (the small scoop roasters use to pull beans mid-roast) on two roasts and compared them against the predictions. Those two roasts matched a factor of about 1.3× per 18 °F much better than 2×.
A smaller factor means temperature matters a bit less and time matters a bit more. Another way to see it is how many degrees it takes to double the weight:
| Factor per 18 °F | Degrees needed to double the weight |
|---|---|
| 2× (textbook) | 18 °F |
| 1.5× (our new default) | about 31 °F |
| 1.3× (what the trier suggested) | about 47 °F |
Two roasts are not enough to settle the question, so we chose 1.5× as a middle ground and made the factor a setting. We will keep testing and tasting before we move it further. Written generally, the weight becomes:
w(BT) = F(BT − 400) / 18
where F is the chosen factor.
A wider late window
The cue is allowed to fall a little before or after the master's drop time, but not far. On the first live day, two coffees, Mapache and Cuscatleco Natural, ran slow and hit the late limit four times. We widened that limit from 20 to 30 seconds after the master's drop, so slow roasts can still reach their full dose.
Staying on after a manual takeover
When the roaster took manual control mid-roast, the voice cue went quiet. That was a bug, and it is fixed. The roaster can now intervene and still hear the cue.
What's next: a more correct curve
A mathematician friend of the roastery reviewed the formula and caught a real simplification. They were right, and we are writing up the fix, though it has not gone into the software yet.
The "double every 18 °F" rule assumes the doubling interval is fixed. In real chemistry it is not. Reaction rates follow the Arrhenius equation, which depends on absolute temperature, measured in kelvin (K). Its key feature is that the hotter you already are, the more degrees it takes to double the rate again.
The Arrhenius form of our weight looks like this, with T in kelvin and the reference Tref equal to 400 °F (about 477.6 K):
w(T) = exp[ (Ea / R) · (1/Tref − 1/T) ]
Here Ea is the activation energy, roughly how much of an energy hill the reaction has to climb, and R is the gas constant. We would choose Ea so that the curve matches our chosen factor between 400 and 418 °F.
How much does it change in practice? We ran the numbers for our default 1.5× factor:
| Bean temperature | Degrees needed to double (Arrhenius) | Weight, current formula | Weight, Arrhenius |
|---|---|---|---|
| 360 °F | about 27 °F | 0.41 | 0.38 |
| 400 °F | about 30 °F | 1.00 | 1.00 |
| 420 °F | about 32 °F | 1.57 | 1.57 |
Near the drop, where most of the dose accumulates, the two curves are almost identical. The difference shows up at the cooler start of the counting window, and those seconds contribute little to the total. So our current results stand, but the Arrhenius version is the physically honest one, and it will matter more if we ever extend the window or roast unusually light or dark.
What DoseMatch can't do
DoseMatch corrects the ending of a roast, not the whole roast. If the early and middle phases drift far from the master, matching the final dose will not rescue the cup. Good charge temperatures, steady heat application and a solid master profile still do most of the work.
It is also only as good as its bean probe. A probe that reads differently from day to day will shift the dose with it.
Closing thoughts
One live day is a promising start, not a proof. Thirteen roasts, two trier checks and one fast day tell us the idea works and roughly where to tune it. Over the coming roast days we will keep cupping DoseMatch roasts against their masters, test the doubling factor further, and evaluate the Arrhenius version.
DoseMatch is part of RoastRacc, the roasting software we build in-house at our small roastery. We share our methods because we learned most of what we know from roasters who shared theirs. If you try a heat-dose approach on your own machine, we would love to hear what you find.