Discussions of how much randomness is good or bad in a game fills forums and could fill tomes. But assuming you do want randomness in your game (hint: you probably do), how should it be implemented? Wait - are there "types" of randomness?
The short answer is yes, but they are easy to overlook. But controlling the "type" of randomness in your game can really affect the whole experience, so it's worth taking a look at some options and designing "randomness" consciously.
#1: True Random
In a video game this is usually your built-in random number generator - it's technically not actually truly random, but for our purpose, we can consider it to be. If you're making a tabletop game, this might be a single die.
Many video games start here and then get player feedback that the game feels "off" or "less than random" (or bull**!#). But looking into the code for bugs, one sees that everything is working fine. It's random alright, but it still feels off. That's because True Random can be very "streaky", with multiple very high or very low rolls.
Tyler Sigman, the designer of Darkest Dungeon, used True Random deliberately to create very high and very low moments. He knew it could be streaky, and used it intentionally to create fear, anxiety and tension in players.
He had this to say about it:
Darkest Dungeon is a game about how unforgiving it would be to lead a risky life of adventure as a fantasy hero. The purest expression of this is the unforgiving gaze of fate. Pure (ed: True) randomness affords not only the reality of an uncaring, invisible dungeon master, but also the chance to secure meaningful victory and lucky winds of chance, all intermingled.
He also mentioned that it's like a Dungeon Master that always rolls in front of players - as opposed to rolling out of view behind a screen, where the DM has the ability to change the roll to create drama or override bad luck. In Darkest Dungeon and with open rolling, your entire party can be wiped due to an unlucky streak. There's no protection from it.
True Random is simplest to implement, explain and understand. It's also the default that most designers use, if they don't think more deeply about it. But there are more tools in the chest, if we look.
Subnautica has resources scattered around the world that have randomized loot inside. Each resource has one of a few types of loot, at a set distribution. For instance, limestone might break to give copper 50% of the time and titanium the other 50%:
In earlier versions of the game, we unthinkingly used True Random to determine which of these resources you would get each time. True 50/50. But it didn't feel good - it was clear that it felt "less than random" or the game even felt buggy. Players expected to get a more even spread of resources when cracking these things open, especially when opening a few in a row. This is a common problem: needing less randomness, in order to actually feel random! That's when I discovered Negentropy.
This is a method that starts as True Random and then gradually becomes predictable (the opposite of "entropy"). It's used in Path of Exile, Diablo and other ARPGs, where it's desirable for players to do consistent damage over time, but to camouflage predictability from players.
For limestone, this means the first result is True Random, then subsequent limestones alternate back and forth between titanium and limestone. If you stop breaking open limestone for a bit, the pattern resets.
The implementation looks complex, but it's actually simple (although I struggled to try to draw this):
Negentropy is great for giving perfectly even distributions, that don't appear that way. Go here for more details on the algorithm - but note the wiki calls the base value "entropy" which I think is a mistake.
Shufflebags, Bell Curves and Ad-Hoc Sculpting are covered in Part #2.