A metric is not a measurement. It is a steering wheel. Hand a relentless optimizer one number to maximize and watch what happens to everything you did not write down. Then fence it with a guardrail and run it again.
A metric is a decision instrument
Teams do not collect numbers to admire them. Numbers get wired into decisions: what ships, who gets budget, which experiment wins, what an algorithm promotes. The moment a number starts steering behavior it stops being a passive reading and becomes a target, and targets get optimized by people, by incentives, and by literal optimizers. Good metric design assumes that pressure from day one and splits the work across three roles: a north star, input metrics, and guardrails.
How this playground stays honest: the product below is a small simulation with three state variables (content mix, user trust, active users) and three derived metrics (CTR, retention, clicks), advanced day by day in your browser under the rules listed next to it. Every number on every dashboard is read live from that simulation state. Nothing is pre-baked.
A healthy metric system is not one perfect number. It is a division of labor.
North star
The one slow outcome that says the product is working for users and the business, over quarters. Think retained weekly readers, not raw traffic. You monitor it; you cannot move it directly this sprint, and that is a feature: outcomes are hard to game.
Input metrics
The levers a team can actually move this week that feed the north star: publishing cadence, load time, recommendation quality, activation steps. You manage inputs and check they still correlate with the outcome. Clicks live here, not at the top.
Guardrails
The metrics you refuse to trade away while pushing everything else: retention, quality, latency, trust. A guardrail is a constraint, not a target. Its whole job is to say no to wins that quietly spend something you cannot buy back.
You run a content feed. A greedy optimizer controls exactly one thing: the share of clickbait in the publishing mix. Every simulated day it nudges that share in whichever direction improves the metric you gave it, looking one day ahead, exactly like a growth loop tuned on a dashboard. Pick clicks per day and press run. Watch the front page fill with bait while retention decays. Then switch the retention guardrail on and run it again.
Give the optimizer a target
When the guardrail is on, the optimizer discards any move whose projected next-day retention crosses the floor. A constraint, not a target.
The rules of this world
Live dashboards
Clicks per day
1,808
users x impressions x CTR
Click-through rate
5.65%
per impression, trust-adjusted
Retention, day over day
90.0%
no guardrail
Active users
4,000
yesterday's users x retention + 400
Clickbait share
10%
the optimizer's one lever
User trust
100 / 100
latent: no real dashboard shows it
Today's front page
1 of 10 slots are clickbait
"When a measure becomes a target, it ceases to be a good measure."
Marilyn Strathern (1997), summarizing economist Charles Goodhart's 1975 observation.
You just watched the law execute. Clicks were only ever a proxy for "people found something worth reading." The moment the proxy became the target, the optimizer found the cheapest way to manufacture the number without the outcome behind it. For a while the dashboard looked great. Then the users it burned stopped coming back, and the target metric itself collapsed below where it started. The metric did not just mislead; it ate itself.
The optimizer here stands in for any optimizing pressure: a ranking algorithm, a growth team with a bonus tied to one KPI, a vendor managing to an SLA, a model trained on a reward. None of them are malicious. They are all obedient, and that is the problem.
The guardrail did not make the optimizer any wiser. It bounded the damage: the same greedy loop pushed bait up until the projected return rate touched the floor, then held the line there. Notice the overshoot in your guarded run: retention lags because trust moves slowly, so the mix climbed too far early and was dragged back only as the floor began to bind. Guardrails on lagging metrics always bind late. Set them tighter than the level that actually hurts.
And pointing the optimizer at retention itself grew nothing at all. A guardrail makes a poor target for the same reason it makes a good fence: the safest move is always to do nothing.