Every roast ends with one decision: when to drop. Drop on the clock and a hot roast cooks too long. Drop on bean temperature and it gets cut short. Experienced roasters split the difference by feel, a few seconds early, a degree or two hot.
We built HeatMatch to make that call with math, and we've now run it live on two full roast days: 28 usable roasts across 7 coffees. The short version: whenever HeatMatch was running, we dropped within seconds of its cue. When a coffee came out wrong, the cause we found was its reference roast, not the cue. And a couple of questions are still open.
The idea: count heat, not seconds
Roasting is chemistry, and chemistry speeds up as it gets hotter. A second at the end of a roast does far more than a second earlier on, and a hot second does more than a cool one.
So HeatMatch counts heat dose instead of time. More precisely, it keeps a temperature-weighted score from the bean probe: every second adds to the total, and hotter seconds count more. It doesn't measure the energy going into the beans or the chemistry itself. Whether this score tracks real development is exactly what we're testing. Food canning uses the same basic idea, time at temperature with hotter time counting more; we tuned it for coffee.
The target comes from each coffee's reference roast, its master profile. HeatMatch knows how much heat dose that roast collected before it dropped, counts live during today's roast, and calls the drop when the totals match. A hot roast gets called early, a cool one gets a few extra seconds, and a roast on profile gets called on time. The cue is spoken and shown on screen, and a person still drops the coffee.
Same coffee, 12 seconds apart
Our clearest result came on October 23, from two batches of Pacamara Natural roasted back to back, with an 18-minute break between them. Same green, same 1.8 kg batch, same master profile.
They didn't roast the same way. Batch 2, the first of the pair, ran about 4 °F hotter through the back half of the roast. A clock-based system would have dropped both at the same second anyway. HeatMatch saw the hotter batch collecting dose faster and dropped it 12 seconds earlier, at 9:56 and 406.1 °F. Batch 3, the cooler one, went to 10:08 and 404.3 °F.
The finished coffee came out remarkably close. Both weighed 1539 g, to the gram. Their roast color landed 0.8 Agtron apart, inside our meter's own 1 to 2 point noise, and the color sorter agreed.

That's the proposition HeatMatch is testing in one pair of roasts. Conditions changed enough to call for different drop times, and the measured results still matched. Nearly identical weight and color isn't proof of identical flavor, but it's exactly what we'd hope to see. HeatMatch isn't trying to make every roast take the same time, or end at the same temperature. It's trying to bring every roast to the same heat endpoint, however long or short the trip takes.
Two roast days, 28 roasts
Across October 23 and October 31, on every roast where HeatMatch was running, we dropped close to the cue and each roast ended with close to the reference dose. The cue fires at 100%; a person still presses the button, so the dose at drop runs a little over, by our reaction time or by a deliberate hold.
|
Day |
Roasts |
Dropped after the cue |
Heat dose at drop |
|---|---|---|---|
|
Oct 31 |
16 |
0.4–9.5 s (median about 2 s) |
99.7–105.5% |
|
Oct 23 |
12 |
0.4–1.5 s (one at about 6 s) |
98.7–101.4% (one at 104.7%) |
The table leaves out the two roasts where HeatMatch wasn't steering: the first roast of October 31, where it switched itself off (more on that below), and one we held 11.6 seconds past the cue on purpose. Dose went past 103% only on the few roasts we held longest past the cue. And HeatMatch moved drops in both directions: up to 35 seconds early on fast roasts, and 3 seconds late on a slow one. It isn't just a button that drops everything sooner.
Your roast is only as good as your master
HeatMatch matches today's roast to a reference roast. If the reference is off, the cue lands perfectly on the wrong target. An algorithm can be mathematically right and still give the wrong result if its reference is poor. That's what we found each time a coffee came out wrong.
Washed Bourbon, October 31. Our espresso came out a little light all day: weight loss 14.6% against a usual 15.7%. HeatMatch was calling drops about 18 seconds early, and first crack to drop shrank from 160 seconds to about 133. The clue was that the roasts read hotter than the reference, yet first crack came later. The roaster had been loaded with an old Washed Bourbon master built from a single roast, not our newer one averaged from many. Against the old file today's roasts looked hot, so HeatMatch did its job and ended them early. Against the right master they were nearly on profile, and an offline replay put the cue within about 4 seconds of it.
Cuscatleco Washed, October 23. Drops came 33–35 seconds early, near HeatMatch's limit. Its master is a single roast from September.
Gesha Natural, October 23. First crack came earlier each batch. It has never had a proper master, just a raw import of an old roast.
The lesson: HeatMatch is only as good as its reference. We've rebuilt Washed Bourbon and Torogoz from this data, synced every master on the roaster to our latest builds, and Cuscatleco Washed and Gesha are next. Coffees with solid masters, like Pacamara Natural and Mapache, landed where they should.
The heat factor: we can't tell yet
HeatMatch rests on one number: how much faster roasting goes when it's hotter. The textbook rule for chemistry is double for every 10 °C. That felt too aggressive on our machine, so we've been testing gentler settings, 1.5x on October 23 and 1.3x for most of October 31.
Honest answer: two days can't separate them. Color differences within a coffee sit inside our meter's 1–2 point noise. On Mapache, where the settings disagree the most, roasts came out just 0.5 Agtron apart. And our Washed Bourbon weight losses varied in ways that didn't follow drop timing at all, so something else is moving them. We need several normal roast days at one setting before the data, not our gut, picks a number.
What's changing, and what's still open
One fix is going into the next version. A safety check that switches HeatMatch off when a reference looks badly mismatched was set too tight. On October 31 it switched off on the first Washed Bourbon roast, which was simply running hot, the exact case HeatMatch exists for. That roast fell back to the clock and finished at 110% of the reference dose. The check will now only trip on a truly mismatched profile.
Still open:
- Our hands are in the data. We still make small gas and airflow trims, and every trim on October 31 turned the heat down. Without them, HeatMatch would have ended those roasts even sooner.
- Same dose isn't automatically the same flavor. HeatMatch matches how much development a roast got, not its exact shape.
- It only fixes the ending. Once a roast drifts, HeatMatch picks the best moment to end it; it can't undo the drift.
- An open color question. Pacamara Natural read about 6 Agtron lighter on October 31 than October 23, at similar weight loss, on roasts that each hit their dose. Same dose, different color, and we don't know why yet.
Next roast day runs on the rebuilt masters, and we'll keep logging weight and color on every batch.