How scoring works
These are opinions, not benchmarks. A rating says what people picked when shown two options, which is a different claim from "this one is better", and a much smaller one.
Elo, the chess kind
Everything starts at 1,500. After a vote, the winner takes points off the loser:
expected_winner = 1 / (1 + 10 ^ ((loser_elo - winner_elo) / 400)) delta = round(K * (1 - expected_winner)) winner_elo += delta loser_elo -= delta
Beating something rated far above you pays more than beating something below you. The delta is rounded once and applied to both sides, so a pair is always zero-sum: the winner's gain is exactly the loser's loss, and ratings never inflate.
One K per pair
K is 32 while either side is under 30 votes, and 16 once both are past it. New contenders move fast; settled ones stop lurching.
The trade, stated plainly: a newcomer can't move fast while its established opponent stays still. A newcomer's matchups move fast for both sides. That's the price of the pair staying zero-sum.
Two ratings, never blended
Every contender carries two: one from every vote, one from signed-in voters only. A signed-in vote moves both. There is no weighting and no multiplier, so no vote is ever worth more than another — and there is nothing to farm. "Rails leads overall, Django leads among verified devs" is a real thing this can say.
One vote per pair
Your vote on a given pair counts once. We store a hashed fingerprint — a random token from your browser plus your IP, run through a keyed hash. The raw IP is never stored, and nothing links a fingerprint to an account. Vote again on the same pair and it's recorded, but it moves nothing.
Past 30 votes a minute you get a cooldown card. That's faster than anyone can read two logos, so nobody legitimate will see it.
Sponsorship buys exposure
A sponsor slot puts a logo in the rail. It cannot buy a vote or an Elo point, and there is no column in this database that would let it. The moment sponsors can buy wins, the leaderboard stops being data.