We spend a lot of time arguing about engines, ECS, shaders, netcode. But the thing players actually feel isn't your architecture. It's the curve.
A curve is just a function mapping effort/time to power/complexity. Boring on paper. In practice it decides how long someone stays in flow, the exact moment they feel like a god, and the exact moment they alt-tab to the store page. Get it wrong and no amount of clean code saves you.
I want to talk through how these shapes behave, show the implementations, and then look at real games where the curve made or broke the whole thing. I'd love to hear how you tune yours, because honestly nobody agrees on this.
Two curves people keep mixing up
Learning curve — what's happening in the player's head. How fast do they internalize mechanics?
Difficulty curve — what the world throws back. Boss HP vs the sword they currently hold.
You tune these independently. The classic balance bug is letting the difficulty curve outrun the learning curve, so the challenge lands before the understanding does. Players don't read that as "hard," they read it as "unfair," and they bounce.
Four shapes, four feelings
Each shape carries a mood before you fill in a single value.
Linear — y = mx
js
const reward = base * level; // 5 ore -> 5 gold, every time
Predictable and fair. Also a job. No peaks, no surprise. Fine for a steady resource trickle, deadly as your main progression loop.
Exponential — y = a * b^x
js
const xpForLevel = (lvl) => Math.floor(BASE * Math.pow(GROWTH, lvl)); // GROWTH ~1.15
The RPG level curve. Early "dings" come fast and hook the player; later levels cost a fortune, which is what makes high level feel like status. The trap: pick GROWTH too aggressive and the late game becomes a wall (more on walls below).
Logarithmic **— **y = log(x)
js
const speed = base + k * Math.log(1 + agility); // first points matter, later ones barely move
Big gains up front, then a soft ceiling. This is your friend for stat buffs and diminishing returns — it stops players from breaking the game by dumping everything into one stat.
Sigmoid (S-curve) — slow, then steep, then plateau
The learning journey itself. A bit of fumbling, then it clicks and you tear through the mid-game, then you hit the skill ceiling. Great model for mastery systems and onboarding pacing.
The ramp and the wall
In F2P and live-service, curves quietly become economic filters:
- Hook — a shallow curve for the first ~30 minutes. The player feels strong and smart.
- The wall — a deliberate jag where linear progress stops keeping up with exponential enemy scaling.
- The gap — at the foot of the wall: grind, or pay to skip.
A wall isn't evil. A wall tuned to be miserable on purpose is. And players never file a calm bug report about it. They review-bomb and leave.
** Where the curve broke the game:**
- Star Wars Battlefront II (2017). Progression tied to loot boxes. The backlash produced the most downvoted comment in Reddit history, and EA killed real-money purchases hours before launch. Rebuilt later around cosmetics and recovered, but it's the textbook curve disaster.
- Diablo Immortal (2022). Gacha gear economy where maxing a character could, by widely circulated estimates, hit six figures. User scores cratered to record lows even as it printed money — "profitable" and "trusted" are different scoreboards.
Dungeon Keeper mobile (2014). Wait timers tuned to sell you out of the friction they created. Became the poster child for predatory pacing; a UK ad regulator even ruled calling it "free" misleading.
**
When the curve is right, players defend you**Warframe. F2P since 2013, premium currency is earnable and tradeable, grind is real but rarely a paywall. The economy and the goodwill prop each other up.
Path of Exile. Monetization is basically cosmetics and stash tabs, no pay-to-win. That one discipline bought a famously loyal player base.
Clash of Clans. A decade of carefully balanced sinks and sources on a platform where aggressive pacing is the norm. Proof that a fair curve is a retention strategy.
The pattern: a good curve buys goodwill, and goodwill is what absorbs your next mistake.
Sawtooth, not a diagonal
If you plot difficulty over time, you don't want a smooth ramp. You want a sawtooth — climb, relief, higher climb, relief:
challenge
^ /\ /\
| /\ / \ /\ / \
| / \ / \ / \ / \
+----------------------------> time
peak valley peak valley
The valley after a peak is power realization: new weapon, walk back into an old zone, watch enemies that used to kill you fall apart. That relief is not filler. It's what makes the next, taller peak bearable. Cut the valleys and a well-built game still feels like grinding uphill forever.
How I'd sanity-check a curve before shipping
- State your X and Y out loud. If you can't, it isn't designed yet.
- Find the wall. If the only way past it is the store, you built a tollbooth, not a challenge.
- Put a valley after every peak.
- Make it felt. If the numbers climb but moment-to-moment play feels identical, the curve is invisible, and an invisible curve does nothing.
The annoying truth is you usually only find out whether a curve works after real players have climbed it. Which is the whole argument for modeling and simulating it first.
So how do you tune yours?
- What growth factor do you actually use for level curves, and how did you land on it?
- Where's your line between a fair wall and a paywall?
- Any games you think nailed the curve, or ruined themselves with it?
Genuinely curious — drop it in the comments.
If you want the longer write-up with the curve shapes drawn out and more on the economy side, I went deeper on this over on my blog: Game design curves: progression, difficulty, and the economy of player patience. More about curves in games over there.
Top comments (0)