(not arguing, hope it doesn’t come across that I am)
9.0 mage had great single target, amazing aoe, int buff, cc, defensives, immunities.
Balance druid had amazing burst, uncapped aoe, brez, treants, aoe silence
Rogue has several immunities/cheat deaths, aoe stealth, great cc, great aoe, misdirects
Just going off those alone, they do the best dps (or near it) while also ticking every box for utility, raid buffs, immunities, cc, defensives.
They take less healing, can ignore more mechanics, help the tank the most, all while still out dpsing most others. You create encounters that require more non-dps utility? The best dps specs already had it! They’d still be brought.
That’s where the problem was, not just dps. There are times that a spec with higher overall dps might not be taken because something with near enough has more of the other stuff.
Edit: you also run into things like the following; feral brings roughly the same utilities as boomkin but it’s melee (negative) and their aoe wasn’t as great. So there’s pretty much no reason to bring a feral over a boomkin.