antipattern

Use when

Testers stall hard at one point after smooth progress.

What it is. One encounter demands a skill or build the game never taught, tested, or funded. The smooth ramp becomes a step, and the player who was flowing an hour ago now bounces off the same wall twenty times.

Why it hurts. A cliff reads as betrayal, not challenge. The player trusted the ramp; the ramp lied. They don’t feel under-skilled — they feel cheated, because nothing on the near side of the wall pointed at the far side. Trust is the currency of difficulty (see pattern-fairness-and-trust), and a cliff spends it all at once.

The smell

The curve jumps instead of climbing. Every step before was +5% harder; this one is +200%. Skill, gear, knowledge, or reflex speed all spike together with no on-ramp — the gate is unsignalled, so the player can’t even name what beat them.

How it happens

CauseThe mechanism
Designer blindnessYou’ve played the encounter 500 times. You solve it reflexively and can’t see the wall a first-timer hits.
Untaught prerequisiteThe fight assumes a mechanic-parry or a mechanic-dodge-roll the tutorial mentioned once and never drilled.
Gear/level gateA number check the system-economy never funded — the player cannot have the stats yet.
Knowledge gateA system-telegraphs the player was never trained to read, so the counter looks like RNG.
Optional-content mergeA side path’s difficulty leaks onto the main line without a warning marker.
Boss as first examA system-boss-design tests three mechanics at once, none rehearsed in isolation.

The through-line: you tested a skill you never taught. Design teaches then tests; a cliff inverts the order.

The tell

Spot it in your own design before a tester does:

The fix

Teach the skill before you test it. Rehearse the mechanic at zero stakes, then at low stakes, then grade it. anchor-celeste introduces every hazard alone in a safe screen before combining them; the B-sides are where the real cliff lives, and they’re opt-in.

The order is doctrine: teach → rehearse → test → combine. A cliff skips one of the first three.

Twist seams

Break the antipattern deliberately and it becomes a feature — the twist is consent.

Seen in…

GameThe cliffFair or foul
anchor-cupheadBosses spike hard, but each drills a rehearsed skill and shows exactly what killed youFair — signalled, teachable
anchor-dark-soulsOrnstein & Smough after a gentle stretch — but the area is visibly grim, retries are cheapFair — chosen, checkpointed
Classic JRPGsA boss the system-economy under-leveled you for; the only fix is off-screen grindingFoul — becomes a antipattern-grind-wall
Many metroidvaniasA late fight assumes a movement tech (mechanic-wall-jump) the game demoed onceFoul — untaught prerequisite
Difficulty-select games”Normal” that’s a cliff for the median, “Easy” that’s a walk — no middleFoul — the DDA gap in system-difficulty-and-dda

Guard against it

Instrument the funnel: per-node completion and attempt counts, watched for the crater. The verify half owns the numbers — wire the check via [[docs/VERIFICATION.md]] and let it fail the build when one node drops off the ramp. Cross-check the shape against pattern-mastery-and-flow before handoff: if any step is more than one skill past the last, you have a cliff, not a climb.

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