Quick answer: Players accept randomness when it creates interesting situations and feels fair—not when it decides outcomes arbitrarily or punishes good play. Use randomness to vary situations and create decisions, not to override skill, so randomness feels exciting rather than unfair.

Randomness can make a game exciting and varied or feel arbitrary and unfair, and the difference is in how it's used. Players accept randomness that creates interesting situations and decisions while feeling fair, but reject randomness that arbitrarily decides outcomes or punishes good play. Designing randomness that varies situations rather than overriding skill is what makes it feel exciting rather than unfair.

Randomness should create situations, not decide outcomes

The key distinction in randomness is between randomness that creates interesting situations and randomness that arbitrarily decides outcomes. Randomness that creates situations—varying what the player faces, generating different scenarios, presenting different decisions—adds variety and interesting decisions, because the player responds to the random situation with skill, and the randomness creates the variety that keeps the game fresh while skill determines the response. This randomness players accept and enjoy, because it makes the game varied and interesting while their skill still matters. Randomness that decides outcomes—arbitrarily determining whether the player succeeds or fails regardless of their skill, a random roll deciding the result—feels unfair, because the player's skill doesn't matter, the outcome is arbitrary, and good play isn't rewarded. This randomness players reject, because it overrides skill and makes outcomes arbitrary. So randomness should create interesting situations the player responds to with skill, not arbitrarily decide outcomes, which is the difference between randomness players accept (creating variety and decisions while skill matters) and randomness players reject (deciding outcomes arbitrarily, overriding skill).

Fairness and skill mattering are what make randomness acceptable. Beyond creating situations rather than deciding outcomes, randomness must feel fair and let skill matter to be acceptable. Fairness means the randomness doesn't punish good play arbitrarily—a player who plays well shouldn't be arbitrarily punished by bad luck overriding their good play, because that feels unfair and frustrating. Randomness that can arbitrarily ruin good play (a random failure despite good play) feels unfair, while randomness that creates situations the player handles with skill (where good play is rewarded with good outcomes) feels fair. Skill mattering means the player's skill remains the primary determinant of success—randomness varies the situations and adds excitement, but skill determines how well the player handles them, so good players succeed more through their skill responding to the varied situations. When skill matters (good play is rewarded) and randomness creates fair situations (not arbitrary punishments), randomness feels fair and exciting—adding variety and tension while skill still determines success. This is what makes randomness acceptable: it creates interesting, varied situations (excitement and freshness) while feeling fair (not punishing good play) and letting skill matter (good play rewarded), so the randomness enhances the game without overriding skill or feeling arbitrary. Combining randomness creating situations rather than deciding outcomes (varying what the player faces rather than arbitrarily determining results) with fairness and skill mattering (not punishing good play, letting skill determine success) is what makes randomness players accept—randomness that creates interesting, varied situations the player responds to with skill, feeling fair and exciting rather than arbitrary and unfair. Designing randomness this way—creating situations and decisions, feeling fair, letting skill matter—is what makes it the exciting, freshening element it can be, rather than the arbitrary, unfair frustration that outcome-deciding, skill-overriding randomness becomes. Use randomness to vary situations and create decisions, keep it fair (not punishing good play), and let skill matter (good play rewarded), and players accept and enjoy the randomness, because it adds variety and excitement while their skill still determines success.

Default to the boring, robust choice

It's tempting to reach for the clever, novel, or technically impressive solution, but in production the boring choice — the well-understood approach, the proven pattern, the simple implementation — is usually the one that ships and keeps working. Cleverness has a way of becoming the bug you're debugging at 2am six months later.

Save your novelty budget for the things that actually make your game distinctive, and be conservative everywhere else. A game built on robust, unremarkable foundations is one you can keep building on, while one built on clever fragility is one that fights you the whole way.

Make the common case effortless

Most of what a player does, they do over and over, and most of what you build will be exercised in a handful of common situations far more than in the edge cases. Optimising the rare and neglecting the frequent is a reliable way to make a game that's technically complete and practically annoying.

So spend your polish where the volume is: the action repeated a thousand times, the menu opened constantly, the path every player walks. Making the common case smooth and satisfying does more for how the game feels than perfecting the corners almost nobody reaches.

Protect the thing that makes it special

Every game that connects has some core spark — a feeling, a mechanic, a tone — that's the real reason people love it, and that spark is fragile. In the rush to add content, fix problems, and respond to feedback, it's easy to sand away exactly the quality that made the game worth making in the first place.

Know what your spark is, and guard it. When a change threatens the thing that makes your game distinctive, that's the change to question hardest, because a game can survive plenty of rough edges but rarely survives losing its soul.

Why finishing beats perfecting

The hardest skill in indie development isn't any particular technique — it's finishing. Most games that never ship didn't fail on talent; they failed on scope, polished forever, or chased one more feature. The developers who build a real body of work are almost always the ones who got good at choosing something small enough to complete and then completing it.

That's worth keeping in mind here, because it's easy to let any one part of development expand to fill all your time. Decide what 'good enough to ship' looks like, protect that line, and treat the endless list of possible improvements as a backlog rather than a set of obligations.

Plan for the parts you can't see

Once a game leaves your machine, a lot of what happens to it becomes invisible by default. Players run it on hardware you don't own, hit problems you never reproduced, and most of them never tell you — they simply move on. The gap between 'it works for me' and 'it works for everyone' is where a surprising amount of churn quietly lives.

So plan to see what you otherwise couldn't. Watching real players, capturing the bugs and crashes they hit with the context to fix them, and paying attention to where they drop off all turn invisible problems into ones you can actually act on — which protects the reviews and retention everything else depends on.

Players accept randomness when it creates interesting situations and decisions while feeling fair and letting skill matter—not when it arbitrarily decides outcomes or punishes good play. Use randomness to vary situations, not override skill, so it feels exciting rather than unfair.