After playing countless games over the years, it is very clear that the difficulty level of a game is considered important when it comes to the end users enjoyment. You may immediately think that easier games where the player dies less often would be the first choice if you wanted to make sure the user enjoyed the game, but this is absolutely untrue. From Software have demonstrated time and time again that is possible to create a game that is brutally difficult, while still being incredibly fun. This is reflected in the success of the Dark Souls series. There should be no connection between how challenging a game and how much a user enjoys the game. So long as it is fair and the AI does not have an unfair advantage, the end user should have no complaints. What I have learned over the years is that this is a very fine line to tread.
From a programming perspective, the AI will always have an unfair advantage. It is up to the developer to "dumb the AI down" so they do not use these unfair advantages, while still building enough of an intelligence to give the player a fight. Games like Call of Duty: World at War had an absolutely ridiculous difficulty level. On the highest difficulty level, there were enemies capable if shooting you in the head from massive distances no matter how inconspicuous you were. With the ability to land several grenades directly at your feet as soon as you turn a corner, there was no sense of a fair playing field here. Making superhuman AI like this is not hard when the system knows the player's location at all times.
It is all fine and easy to say that the superhuman AI is unfair, but when a game contains little or no stealth mechanics, the developer is left in a tricky situation. What is considered a fair distance/prerequisites for the AI opponent to begin firing at the player? There is no golden ratio here, it depends on the setting and scope of the game itself. Correctly answering this question in relation to a specific game is absolutely essential. Too low and the player will breeze through the game and beat it too quickly, too high and we find a situation that players are getting shot when they are unable to see the enemy the need to shoot back at. Getting the perfect balance of enemy awareness of the player is what determines whether the difficulty is cheap or not.
RPGs like Fallout are often criticized for their difficulty level, but not so much in the sense of superhuman artificial intelligence. This game opts for a more stat based increase in difficulty. This type of increase typically makes enemies stronger and have more health. Some might consider this a more classic approach to game difficulty. The very nature of this type of difficulty is cheap. When you can blast an enemy in the head with a shotgun, visibly see scorch marks on their face, yet they may only lose a fraction of their health, you can't help but call it cheap. However, unlike AI based difficulty, the focus for balance is to give the player adequate means to defeat the enemy. If a player makes it to a boss fight or a difficult dungeon area of a game, they need to be able to survive almost entirely with supplies found in the area. If a player dies due to running out of ammo or the means to damage enemies, the future of a game is left in a very precarious position. This is where stat based difficulties become cheap in the eyes of the gamer. If the player were to use up all available supplies in their inventory, the total damage they can possibly inflict would not be enough to defeat all of the enemies. The player will either need to start the game again (assuming they have not been backing up gamesaves) or they will just delete the game and potentially give it a bad review. This is one of the worst outcomes when playing a game. I have a very frustrated memory of playing Evil Dead: Fist Full of Broomstick and finding myself in this exact position.
Subtracting the 2 main sources of directly modifying the difficulty of a game, there are various other things that can be done to influence the difficulty of a game. From level design, weapon design to gameplay mechanics, there are so many options. One of the more common and possibly most controversial methods is infinitely spawning enemies. This is a feature that can work very well in some game types and horrendously in others. Generally speaking, people hate to see this being used in a shooter, with game modes like Nazi zombies being an obvious exception. If a player is taking cover and the enemies keep coming, no matter how many they kill, the game becomes very unfair. On the other end of the spectrum, infinitely spawning enemies can actually make the game easier, which is something we saw with the loot cave glitch in the first Destiny game. Infinitely spawning enemies make sense in a lot of scenarios where a kill count is not the trigger for player progression. The critical thing to remember with infinitely spawning enemies is that the rules to terminate the spawning need to be more complicated than simply progressing past an invisible checkpoint.
With digital platforms like Steam and Metacritic making it so easy for the average user to leave feedback, the importance of striking the right level of difficulty has never been more important. When a user can play a game for a few hours and give your game a 1-star review without backing up the reason, it can hurt game sales and almost feel unjust from the developers perspective. However, a game with a difficulty level that can be considered "cheap" is usually a signal to the community that a game has poor production values or has been rushed. Rather than spend the time to make a game difficult in a fair way, the difficulty is made cheap in order to extend the playtime without having to do any additional work. The best way to determine a fair and enjoyable difficulty level in a game is to play lots of other games. Learn from the experience of what frustrated you about other games. A programmer should never QA their own code, just like a level designer should never QA their levels. By playing other similar games, you get to gain all the valuable feedback of QA testing without the cost of development time. Whatever way a developer attempts to implement difficulty scaling in a game, the key thing is to make sure corners are never cut that can make the difficulty level seem cheap.