VeePeenini, Part 13: Making It a Game, Not Just a Collection
· Vitor Pontual · 9 min read
Somewhere around the end of the group stage, I noticed the thing I’d been quietly worried about since Part 7. The album was filling up. A few friends had most of their stickers pasted, the trade market was thinning out, and the daily loop — claim a pack, place your stickers, argue in the lounge — was starting to feel like a chore you finish rather than a game you play. A collection has a natural end. A game shouldn’t.
So over a couple of days I added the parts that make it a game and not a solitaire. And the honest headline of this entry is that the fun mechanics were the easy half. The hard half was assuming, correctly, that a closed group of nine friends will try to game any system I build — usually for each other, not against — and designing so they can’t.
The motivation: past the group stage, the game has to earn its own attention
Predictions carry the tournament, but predictions are between you and the fixtures. There’s nothing between you and another player. I wanted direct, personal, slightly cutthroat competition — the kind of thing that makes someone open the app because a specific friend just did something to them.
Four things went in. A Store where you spend in-game currency on premium packs. A Transfer market where you can sign one specific card you’ve been hunting instead of praying to the pack RNG. A first-to-close-a-country race, a live bonus for being the first in the group to finish any nation. And the centerpiece: penalty duels, a best-of-five shootout you can throw at any rival straight off the leaderboard.
Duels: a side-bet with real stakes
A duel is a best-of-five penalty shootout between two players. Both sides secretly commit five kick directions and five save directions, and it resolves over ten shots — enough that it rewards reading your opponent rather than flipping a coin. You can even scout a rival’s past tendencies before you commit, which turns it into a little poker game of being unpredictable while they aren’t.
Each player antes a spare duplicate card and a few points into escrow. Win and you take the loser’s staked card and points; the swing comes from them, nothing is minted. Your pasted elite stickers give small deterministic edges, which ties the shootout back into the album and gives your collection a second job.
That was the fun part to design. Then I sat down and thought about how my friends would break it.
The hard part: a friend group will collude, and you have to design for it
Here’s what outsiders miss about a private league. The adversary isn’t a cheater trying to beat everyone. It’s two friends quietly agreeing to help each other, because points are points and nobody feels bad about it. Most of the real work in this update was closing those doors.
The burn-on-draw rule, which I’m proudest of. A duel can end in a draw. The obvious, generous design is: a draw pays both players a consolation point and returns both staked cards. Which means two friends can sit in a corner and “duel” each other to a polite draw over and over, farming a point apiece every time at zero cost. So a draw pays both players +1 — and burns both staked cards. Destroyed, not returned. If you want to collude, fine, but each fake draw costs both of you a card off your pile. It turns a farm into a slow bleed, and it did it with one rule instead of some fraud-detection contraption trying to guess intent. A genuine draw takes ten committed shots landing dead even, so it’s rare enough that an honest player almost never eats the cost — the rule mostly bites the pair manufacturing draws on purpose. I like fixes that make the loophole unprofitable rather than forbidden.
The ghosting tax. The other exploit is refusal. If ignoring a challenge were free, you’d just never answer the ones you’d lose. So not answering costs you points — and, crucially, it costs the same whether you actively decline or let the challenge quietly expire. An earlier version of mine had a gap where declining was strictly worse than ghosting, which meant the honest “no thanks” got punished and the rational move was to leave your friend hanging. That’s backwards. Now the two cost the same, so there’s no reason to be rude.
But a tax on absence can’t punish someone who’s genuinely asleep or on a plane. So it’s capped per day: there’s a hard floor on how much anyone can lose to challenges piling up while they’re away, no matter how many land. Teeth for a habitual dodger, protection for someone who’s simply gone. And the tax is a sink — it’s never paid to the challenger — so spamming people gains you nothing either.
To make all of this land as an actual rivalry rather than isolated bets, each duel keeps a head-to-head record against every opponent, and there’s a scoreboard card showing your net points and your won/lost/ghosted tally. Now it’s a running story between two people, not a coin flip you forget.
The duels board: your record against everyone, and who your nemesis is. (Names anonymized.)
The bugs I’ll own
Two are worth writing down, because both are the kind of quiet wrongness I keep warning myself about.
The /duels page crashed on load. The cause was dull and instructive: a timestamp came back from the database as a string where the code expected a Date object, and the first thing that touched it fell over. No amount of clever game design saves you from the boring type mismatch at the boundary. All the thought went into the duel economy; the thing that took the page down was a data type nobody was looking at.
The second was a scoring subtlety. Those elite-sticker perks are supposed to net out — if both players bring the same edge, they cancel and the shootout is decided on the ten shots. A bug meant they weren’t cancelling cleanly, and a player who’d actually kicked a perfect leg got wrongly docked down to a draw. A perfect performance scored as a tie is exactly the kind of unfairness that would make someone stop trusting the game, and trust in the standings is the whole product. Fixed, and it stung to have shipped it.
The store, the transfer market, and the scramble
The economy pieces are quieter but they’re what keep the late album alive. The Store lets you spend saved-up rare duplicates on a premium pack with a guaranteed elite. The Transfer market lets you hand over ten elite duplicates to sign one exact card — the precision tool for the last stubborn gap, deliberately expensive so it can’t trivialize finishing. They’re priced with what I’ve been calling conviction pricing: the more you want the shortcut, the more of your best cards it costs you. And the first-to-close-a-country race hands a small bonus to whoever completes a nation first, which turned into a live scramble every time a new group of stickers entered circulation.
What this actually was
None of these are big features on their own. Together they turned a collection you eventually finish into a game you keep playing — competitive, social, and a little bit ruthless, which is exactly right for this group. I made the product calls: what to add, how the stakes should feel, and above all where a friend would find the exploit. Deciding what the game should be, and staying paranoid about the specific ways nine people who like each other would bend it — that was the whole job, and none of it was code.
Not every feature is for the already-hooked
This is the part I didn’t expect to care about as much as I do. Of the nine people I invited, two never really landed — one made zero predictions and zero trades, and another made 16 predictions and then went quiet after the first week. You can’t win everyone, and I’ve made my peace with that. But two others were dead-slow starters. One made a single trade in the first two weeks and otherwise sat still; the other did nothing at all for two weeks. Then both of them turned on. The one-trade player climbed to dozens of trades a week, and the two-week ghost did the same, and by the back half of the tournament both were among the most active people in the game.
There’s a flip side worth owning, too. While the one-trade player sat still, the offers didn’t wait politely in his inbox — they rotted. Dozens of incoming trades expired without him ever touching them, and 31 of those got claimed by other people: the expiry rule quietly handing his neglected cards to whoever was still showing up. For a couple of weeks he was, in effect, a supply drop for the active players. Not the outcome I designed for, but the one the rules should produce: leave the table and the table doesn’t wait for you.
I can’t prove why from the data alone, but my honest read is that this update is what pulled them back. The trade nudges gave them a concrete reason to open the app — a specific card someone wanted, a deal waiting — and the notifications kept tapping them on the shoulder when a duel or a race was live. The predictions loop is for the person who’s already in. The transfer market and the pings turned out to be for the person who almost wasn’t. Some of what you build isn’t for the friends who are already hooked. It’s the thread you throw to the ones drifting away.
Did anyone actually try it?
So did the friends actually try to game any of this? I went and looked, because I was curious too. Over the tournament they made 872 completed trades between them, and I was in 324 of those — more than a third of every deal in the game ran through me, which made me the second-busiest trader of the nine. I’ll resist reading too much into that number: with nine people, any one of us touching a fifth or so of the deals is just what the math falls out to, so 37% mostly means I traded a lot. But it does tell me the one thing I wanted to know — I was a hub, not someone being frozen out. Nobody was routing trades around me to deal only with each other. The market wasn’t a cabal I was locked out of; it was a bazaar, and I was standing in the middle of it. (The two who barely traded at all — one deal, and zero — weren’t colluding either. They were the same pair who’d drifted to the back, the exact people the next post is about.)
The burn-on-draw rule is the one I keep coming back to. One sentence, and a whole category of collusion just stops being worth anyone’s time. That’s the shape of the good ones.