The wettest month isn't the worst month

I build software that turns NOAA weather data into documentation for construction delay claims. A few weeks back I got a number I didn't buy, spent way too long guessing at why, and it turned out a state government had already published the answer.

Richmond loses more workdays in January than in July

January gets 3.67 inches of rain over 6 rain days. July gets 5.44 inches over 8. July is wetter any way you measure it. January still costs more — 15.1 unworkable workdays against 12.2.

It's not just Richmond. I ran 45 metros. About 40 of them peak in January.

Here's why. Rain doesn't stop work. Mud stops work, and mud shows up after the rain does. Winter rain comes in as frontal systems, spread out — one storm every few days, and each one starts its own drying clock before the last one finished. Summer rain comes in as afternoon thunderstorms that stack up together, so their drying time overlaps and you only pay for it once.

Richmond, VA (clay)JanuaryJuly
Rainfall3.67″5.44″
Rain days6.08.2
Workdays lost to rain itself3.35.3
Workdays lost to drying10.86.9
Drying days charged per rain day3.271.30
Total unworkable workdays15.112.2

Any dirt contractor already knows this in their gut. They'd rather eat four inches in two days than half an inch every third day. But nobody bids that way, because contracts count rainfall and rainfall isn't the thing that costs you.

The number I didn't believe

My model said Richmond loses 139 of 261 workdays a year on earthwork. That's over half the year. I didn't buy it, so I went looking.

I guessed wrong three times. Same mistake every time — I sat there reasoning about my own code instead of just measuring it.

Guess one. My intensity factor is flat under half an inch, so a 0.11″ drizzle and a 0.49″ rain set the exact same drying tail. That's obviously dumb. Fixed it. 139 went to 124.6. Real, but not the thing.

Guess two. Frozen ground. When it thaws my model resets a full drying clock, and that sounded expensive. Measured it: happens 1.4 times a year. Nothing.

Guess three. The temperature term — cold weather stretches the drying tail, and January was the worst month everywhere, so this had to be it. I flattened it almost to nothing.

139.0 became 138.8.

That's when I quit guessing and wrote a script to run the real data through every variant I could think of. Nothing got below about 118. Whatever was wrong, it wasn't in any knob I had.

Turns out Tennessee already solved this

The Tennessee Board of Regents publishes a construction spec with a "Standard Baseline" — how many adverse weather days to expect each month, built off NOAA data, used to settle real contractor claims. It defines a weather day as more than 0.10 inches of rain. Same threshold I'd picked on my own.

Their number is 89 calendar days a year. Call it 63.6 workdays. Mine said 139.

But look at the shape instead of the size:

BaselineSeasonal spread (max/min)Worst monthvs. Tennessee
Tennessee published spec3.0×January
Memphis (silt)2.8×January1.9×
Richmond (clay)1.7×January2.2×
Nashville (clay)1.9×January2.3×

Every one picks January, same as they do. Memphis lands almost dead on their spread. And I'm off by a steady 1.9× to 2.3× across two states and two soil types.

If the model were actually broken those ratios would be all over the place. A steady multiplier means I've got the shape right and the level wrong.

Why I stopped worrying about it

Some of that gap is legitimate. Their spec covers building construction. I model earthwork, which eats a lot more weather. They count a day lost at 50% stoppage; I'm all or nothing.

The bigger thing: it cancels out. A delay claim compares what actually happened against that site's own ten-year baseline, and both come out of the same model. Cut every number in half and the answer doesn't move — same verdict, same count of worse years, same percentile.

Where it doesn't cancel is when you publish a straight number like "carry 12 weather days in your bid." Which is exactly what I'd been doing on my public pages.

So I pulled the annual totals off and kept the monthly ones.

The data

Ten years of baselines for 45 metros, CC BY 4.0, JSON download per metro. Every page names the NOAA station it used, how far away it is, the soil, and the drying constant. Where I disagree with the Tennessee numbers, that's on there too.

Example: Richmond, VA · raw JSON

Run it for a specific jobsite

A metro average is a planning figure. Enter a ZIP and the estimator runs the same model against the station nearest that site, on that site's soil, and returns a documented exhibit. Free, no account.

Open the estimator

Figures model soil-dependent site work — earthwork, grading, excavation, foundations and underground utilities. Enclosed and vertical construction is not modelled. These are planning figures derived from station observations and a deterministic soil model, not site-specific geotechnical findings.