antipattern

Use when

Your progression adds magnitude without adding options.

What it is. Progression that raises magnitude without changing what the player does. +10% damage, +50 HP, tier-7 sword — the bar fills, the fantasy of growth is sold, but the decision space is frozen. You fight the same, you just fight it in bigger digits.

Why it hurts. Growth you can’t feel is growth that isn’t there. If the enemy’s HP scaled to match your damage, the fight is identical to hour one — you’ve spent the session running to stand still. The treadmill feels like effort and reads as nothing.

The smell

Numbers rise but play doesn’t change. Strip the UI and the moment-to-moment inputs, timings, and choices at hour 20 are the ones from hour 1. The reward is a larger integer, not a new verb.

How it happens

The tell (check YOUR design)

Run these on your own progression before handoff:

ProbeInflatedReal growth
Decision testPost-upgrade, the optimal action is unchangedA new option becomes viable or dominant
Verb countSame moves at hour 20 as hour 1New verb, or old verb in a new context
Strip-the-numberHide all stats — the build is indistinguishableHide stats — you still play differently
Enemy-cancelsDamage +10% and enemy HP +10%The buff shifts what you can survive/skip
Screenshot at two depthsOnly the digits differThe board differs

If three rows land in the left column, you’re inflating. The fix isn’t a better curve — it’s a different currency of reward.

The fix

Trade magnitude for options. Every meaningful upgrade should change a decision, not just a number.

Seen in

Twist seams

Verify / guard

Guard against inflation the same way you catch antipattern-false-depth: a build that reads different but plays identical is inflated. Before handoff, run the decision test and strip-the-number probe from the tell table; if hiding every stat leaves play unchanged, the growth is cosmetic. See docs/VERIFICATION.md, and cross-check the sibling arms-race in antipattern-power-creep and the empty-tree tell in antipattern-fake-choice.

This module rendersthe repo's markdowndirectly — edit it there, it changes here.