Chapter 06
Playtesting and iteration
No homebrew monster survives contact with a party unchanged, and that's fine. The published books were playtested for years and still produced the demilich. This chapter covers the checks worth doing before the session, and the adjustments worth making during and after it.
Pre-flight math checks
Verifying against the benchmark table catches most problems before they reach the table:
- Row check. Put the creature's AC, HP, attack bonus, DC, and damage per round next to its CR row. One or two deliberate deviations that express its role: good. Everything high or everything low: relabel the CR.
- Offense/defense split. Estimate the CR row its defenses resemble and the row its offense resembles, and average them. If the average disagrees with the printed CR by more than a point, adjust.
- Nova check. Compute the creature's best possible round (everything hits, recharge available). If that round can take the party's squishiest member from full to zero, decide on purpose whether you want that. If you keep it, make sure it's telegraphed.
- Worst-case round for the monster. Now assume it's stunned, restrained, or banished round one. Does it still get to do anything this fight? If not, back to action economy.
- Comparison smell test. Teos Abadía's favorite check is also the oldest one: put your statblock next to a published monster of the same CR (the SRD library is right here) and ask which one you'd rather run.
Gauge the encounter, not just the monster
The Lazy GM's Resource Document offers a benchmark simple enough to do in your head (CC-BY 4.0): an encounter might be deadly if the sum of monster CRs is greater than ¼ of the sum of character levels (levels 1–4), or ½ of the sum (level 5+).
Five 4th-level characters (total 20, ÷4 = 5) against four CR 2 ogres (total 8): potentially deadly. The same party at 5th level (total 25, ÷2 = 12): a manageable fight. "Deadly" here means characters dropping and a real chance someone dies. The benchmark is a redline, and circumstances (terrain, rest state, waves, surprise) push fights across it in both directions. There's also a solo-monster scenario: a single creature might be deadly when its CR meets or exceeds the average party level (or 1.5× it, at 5th level and up).
Character capability jumps at 5th level (extra attacks, fireball, Stunning Strike) and again at 11th. Expect the same monster to play very differently on either side of those breaks, and re-run the benchmark rather than trusting last tier's instincts.
Adjust live, quietly
Monster statistics are yours, including mid-fight. The Lazy GM's "lazy tricks" are the standard toolkit:
- Trim hit points on the fly if the fight has made its point and is now dragging; let the creature drop, flee, or surrender when the story is done. (Within the benchmark's HP range, this isn't even cheating.)
- If the party is coasting, add an attack or a few points of damage per hit, or bring in a wave, rather than doubling HP mid-fight.
- Let morale be real: foes rout, bargain, and yield. Fights that end at zero HP every time train players to see monsters as HP bars.
After the first fight
While it's fresh, ask three questions. Did the creature's concept land, with the players describing it the way you imagined it? Did anyone make an interesting decision because of it? Was any round a non-event? Then edit the statblock the same evening: cut the trait nobody noticed, retune the number that felt wrong, note what you changed live so it's official next time.
Your creatures live in your library, so iteration is cheap: duplicate the creature, tweak the copy, and keep the version that played better. A monster is done when it runs itself and the table remembers it, not when the math is pretty.
This guide draws on openly licensed community works. See Sources and attribution.