Where I started
Stock fan curves are a reasonable default, but overhangs on PETG kept coming out fuzzy no matter what I tried in the slicer's temperature settings — the cooling, not the heat, turned out to be the actual problem the whole time.
Dropping first-layer cooling to zero and ramping to full by layer four fixed most of it. Small parts still needed a manual bump — the built-in curve just isn't aggressive enough for anything under 15mm, since the fan never spends long enough at full speed before the part is already finished printing.
The actual numbers
For anything over 20mm tall, the default curve works fine unmodified. Below that, I now set a minimum layer time of five seconds specifically to force the fan to catch up before the nozzle moves on — without it, small features print faster than the plastic can cool, and everything comes out soft and stringy at the edges.
PETG is more forgiving of overcooling than PLA, in my experience, so erring toward more airflow rather than less has been the safer default whenever I'm not sure. The one place that bites is bridging — too much cooling there and the bridge sags before it sets, which is the opposite problem to the fuzzy overhangs that started this whole investigation.