How a game difficulty changes over time is commonly called a "difficulty curve", which you can probably find some more resources about online.
The basic idea is the game should get more difficult over time as the player gets more comfortable with the mechanics to constantly keep the game challenging.
This doesn't have to be dynamic difficulty. One can design levels by hand such that one is more difficult than the next. This may, in fact, often be easier than trying to adjust difficulty purely dynamically. Designing a game such that you can basically have a slider of difficulty at any point in time is not trivial.
Difficulty selection adjusts this for variance in general player skill and in what players are looking for in the game (a challenge or something relaxing). Although not all games have this (or dynamic difficulty).
Reference (with slightly modification).
Many games have occasional dips in challenge after bosses or at other points in the game.
These dips allow players to enjoy their victory and give them a break to prevent exhaustion.
Allow players to change difficulty
One player may be better than another, so their Easy mode may be another player's Hard mode. They also wouldn't be equally good in every game. This could make it difficult for players to accurately pick the "correct" difficulty for them.
They may also learn new skills faster or slower than other players, meaning a fixed difficulty curve wouldn't always work so well.
Dynamic difficulty is one way to deal with the above problems, but another way would be to simply allow players to change the difficulty throughout the game.
This may not work so well in games where you unlock one difficulty after the other (although I'm not a big supporter of that).
One should also be careful about allowing players to trivialise a part of the game that's supposed to be challenging. Of course you don't want them to be stuck there too long, but having them drop the difficulty right after the first failed attempt would remove most of the reward from overcoming the challenge. This could make your game a whole lot less fun.
You could wait until they've failed a few times before giving them the option of dropping the difficulty (or automatically drop it until they finish that part).
You could alternatively require them to restart the level or chapter or whatever if they want to change difficulty. This would add an additional (minor) barrier to make changing the difficulty less appealing, so they'd be more inclined to try to get past the challenge instead.
Start off easy or hard?
A significant part of the challenge of a game could be getting used to the mechanics.
You could be thrown right into the action with little to no time to get used to everything. Too much of this would alienate inexperienced players.
You could alternatively be slowly introduced to the mechanics of the game. Too much of this would alienate experienced players.
This is a balancing act, but there is a bit of lenience here. Most players expect some time to adjust to the mechanics and experienced players expect the introduction to be a bit slower than they'd like.
The tutorial could also be optional. Although you shouldn't expect players to have mastered something immediately following the tutorial.
This also applies to new abilities and enemies.
New abilities or weapons
Unlocking new abilities as the game progresses would make the game easier, but you should also make these abilities be required in subsequent parts of the game.
- Make things more challenging by requiring players to master the new abilities.
- Keep the game varied enough to remain fun (even if it doesn't change the difficulty)
- Make things more challenging by adding the complexity of having to pick between or chain different abilities.
This can very clearly be seen in many platformers:
Perhaps you start off only being able to (or needing to) jump. The very first level is trivial with only one small gap to jump over. Subsequent levels require better and better jumps. After a while you may unlock a new ability like double-jump or wall-jump. The first level after unlocking this ability is typically fairly straight-forward and subsequent levels get harder. This repeats until the end of the game.
New enemies or environments
This is very similar to the above point, and similarly requires mastery and adds variety and complexity.
In the beginning there often aren't many different types of enemies, environment types or hazards. More of these are unlocked as the game progresses.
Making it seem like it was closer than it was
- ignore the first hit that would kill you
- make you think you have less health than you actually have
- make you stronger if you're on lower health
- or even briefly make you invulnerable if you're close to death
This gives players the feeling of barely surviving more often, which makes the game more exciting and feel more challenging.
It can also create a bigger buffer for whether a player would find a difficulty too easy or too difficult, since better players could feel challenged even if they're still quite far from actually dying. A bigger buffer makes different difficulties (and dynamic difficulty) easier to balance.
Related video on The Game Theorists (this also talks about dynamic difficulty).
Combine difficulty selection with dynamic difficulty
Players could be looking for:
- Something relaxing
- A challenge
- A good middle-ground between the two
Dynamic difficulty by itself can't really provide all three of these in one.
Difficulty selection does allow players to pick this, but variations in player skill and learning rate may make this less than ideal.
Combining difficult selection with dynamic difficulty allows players to pick what sort of challenge they're looking for, and have the difficulty adjust accordingly.