← Lesson: flow and difficulty/Lab: flow channel
RU
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.
🏠 experiment~10 minno code
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.