Scaling in RPG games are, imo, the worse game mechanic since reducing your carry weight limit then add more skills to increase it. And I'll write here the reasons why I think it is:
1. it defeats the point of a leveling systems, and robs the satisfaction of progression away from players.
2. it does not result in more interesting interactions, just longer and more repetitive ones.
3. it's actually harder to make it balanced.
Why? Because:
A. a leveling system exists because it's supposed to represent, in a RPG system, characters getting better at what they do. So I ask you, what do you a compare character's abilities to for references? Numbers on a screen or how they perform in the game? In older RPGs if a character was level 1 and gets killed by a level 10 Orc Marauder, you know why. If the same character got to level 15 you should be reasonably sure that that character now has the means it needs to beat that level 10 Orc.
With scaling, a level 1 player is only marginally better than a level 10 player because the mob it's up against is scaled to its level.
B. A natural result of A: the higher leveled the player character is, the higher the enemies' levels must be, is that it is actually worse for the players to have higher level characters. On higher levels, a player might have more tools, but the game most also account for those new tools. Oh you got this ability to do 10 damage to all enemies and has a 3 turn CD? I guess I'll just have to multiply the enemy hp by 3 to compensate -- well I guess but it also makes that ability pointless, odds are at that point straight up attacks are better. Nothing new happens, just the same old thing, but now, you gotta deal 3x the damage.
C. A natural deduction from B is that, balancing a game is more than just playing with scalars. This is especially true when a game has, say, 18 classes each with different abilities. I've seen no game doing it right -- not even witcher where shit got annoying beyond lv.50 and only one or two builds are viable anymore because some monsters can now one-two shot Geralt whereas they couldn't before.
Solutions? Why, it's never easier:
Just add new, stronger enemy types with new abilities into encounters according player party level.
I. It solves A because it does not entirely remove low level grunts, something higher level character can probably defeat easily, and it makes leveling up low level characters possible without them dying to high level enemies late-game.
II. It solves B because now there are new and fresh things in an encounter. For example, in a specific encounter in say, a orcoid-infested forest, instead of having a 50% chance to face 3 lv.3 goblins and 1 lv.5 goblin chief at party level 4-15, or whatever, there is now a 33.3% chance for a group of 2 lv.3 goblin, 2 lv.10 Orcs at party level 24 (with the other one also 1/3 chances of happening). Say at party lv.60, you have a small chance of facing 2 lv.10 Orcs, 1 lv.20 Orc Shaman and 1 lv.25 Orc Warchief. Look, it's almost as if you are fighting a mini-boss battle in a random encounter now.
III. Now there are no scalars to worry about. Sure it's not a sure thing. But you can be reasonably sure that every single enemy is exactly how you want them to be regardless of player character levels. It may seem more work, but it's actually less to deal with because things don't have a million different states due to changes in the scalars.
This is the method most old RPG games used. And to this day, games like Dark Souls (NG) and Darkest Dungeons still use it. Because it's deceptively simple to balance. And it really just takes 1 or maybe 2 new behaviors for a stronger version of an enemy type to make it work, the rest is just static numbers tweaking.
What duh? Sounds like headaches:
Not really. A table is often enough for this sort of thing.
[[type_1_mobs_1, type_1_mobs_2, type_1_mobs_3, ...],
[type_2_mob_1, type_2_mob_2, type_2_mob_3, ...],
[type_3_mob_1, ...],
...]
And just have a switch statement to random.choice a group from a row on the table based on party levels.
There's also what I know as the "Yahtzee method". Basically have a list of enemies for a biome/dungeon/room/etc.. Mod the party level by a constant, say 5, so it will take 5 whole levels for encounters to change. Select from the range [party_level //5 + 3] so only enemies from index 1 to index 4 are encountered for a given level. You loss old enemy encounters later on but as long as you pad the list out with duplicates properly (to avoid out of bound errors, you'll also need a hard level cap) you void having to populate a mess of a table.
Holy shit, that's a shit load. But I just gotta say I don't hate balance in games, I just really, really hate enemy scaling as a mechanic. It seems like a magical band-aid, but it really isn't. It's at best a plaster to cover up the underlying ugliness of the inherent disconnect between leveling mechanics and challenge in games.