Lab · hands-on
The flow channel live
Player skill grows left to right (over session time). Pick a difficulty strategy, turn the skill growth and the channel width — and watch how much time the player spends in flow, anxiety and boredom. The goal is to keep the difficulty curve inside the green band around skill.
How to use this
The green band is the flow channel: |difficulty − skill| ≤ w around the gray skill curve. The red line is difficulty under the chosen strategy. Where it leaves the band above — anxiety, below — boredom. Switch between flat / linear / sawtooth (Celeste) / DDA (Mario Kart) and watch the shares at the bottom. Try it: flat → boredom by the end; sawtooth → stays in the channel; DDA with a large gain → the difficulty twitches (oscillation, the rubber band shows, anxiety climbs); DDA with a small gain → the adjustment is sluggish and inert. Hit ▶ run to send a playhead across time.
skill s(t)
difficulty c(t)
flow channel (±w)
anxiety
boredom
Tip: start with "Sawtooth" — every tooth is a new mechanic being introduced (a drop into easy) → practice → peak. Then switch to DDA and drag the gain to the right: you'll see the auto-adjustment start to twitch.
What to notice
Flat difficulty → boredom is inevitable
Set it to "Flat". Skill grows while the red line stands still — by the end of the session the difficulty is deep below the channel: solid blue boredom. No level of flat difficulty saves you: too low and it's boredom from the start, too high and it's anxiety at the start (skill is still small) and boredom later anyway. Conclusion: fixed difficulty structurally cannot hold flow.
The sawtooth holds the channel better than a line
Compare "Linear" and "Sawtooth" at the same skill growth. The line can run along the channel, but it does not teach: it has no dips to introduce a new mechanic. The sawtooth tracks skill and dives on every tooth (the player is a beginner again at a new move) — that is Celeste. Turn the "tooth depth": teeth too shallow = practically linear (little teaching), too deep = you drop into boredom at the start of each segment.
DDA: the gain trade-off
On "DDA" the slider is the controller's gain. DDA does keep flow high in general (that is the point — it adapts), but the gain has a price. Large gain: difficulty reacts sharply to the noise in the skill estimate and oscillates — it twitches up and down across the channel, anxiety grows, and the player feels the tuning (the rubber band showing). Small gain: the adjustment is sluggish and inert — on smooth skill growth flow still holds, but on a sudden jump (the player just clicked with it) it can't keep up. The optimum is in the middle: fast enough to track skill, smooth enough not to be noticed. That is exactly tuning a P controller with a noisy estimate.