Horde, due to two very unfortunate circumstances created by Blizzard which prevented it from ever being better than Alliance:
- Vanilla zone design
- BfA being much worse repeat of MoP
Anyone who plays Vanilla might notice something interesting: While Alliance fights local threats in its early zones, Horde fights the Alliance. This resulted in Alliance being far stronger when judged by the amount of camps, fortifications and settlements it has. Just look at Silverpine, second zone of the Forsaken. They get Sepulcher and a single farm. Alliance has entirety of the south. Even the worgen Pyrewood village is friendly to Alliance during the day.
So, when Cataclysm came and Blizzard switched to stories focused on faction conflict, suddenly they were presented with a conundrum: Horde had much smaller presence in the world. So, they balanced things out by Horde destroying bunch of Alliance places. Ashenvale became much more balanced, Silverpine and Hillsbrad were put on the same level as Alliance 2nd and 3rd zones (a.k.a., the other faction places got destroyed either before or during the zone´s questline) and everyone lived happily ever after.
You know, if we ignore the fact that Horde went on a rampage throughout Kalimdor and Lordaeron while Alliance destroyed…Taurajo. To put insult to the injury, Theramore was destroyed in MoP and Garrosh was made into a villain, which meant that, as Horde, you do some pretty bad stuff (albeit in MoP, at least Alliance is somewhat trying to equalize the warcriming).
At the end of MoP, we have Horde that is arguably worse than the Alliance, but at least, because of Darkspear Rebellion that ended up with everyone except Kor´kron, Dragonmaw and Blackfuse joining, Horde has already done some redemption by standing up to the Warchief.
Coming into BfA, we were in a perfect position for the Alliance to get a shot at being the ones who turn small-scale conflicts into world war and have some gamer moments of their own. Instead, Blizzard had the Horde repeat their evil Warchief storyline, but with added benefit of the rebellion being only a minority rather than almost the entire Horde.
You know how every single Horde race stood against Garrosh? Well, this time it´s different. Despite almost every single Horde leader joining the rebellion, somehow majority of the Horde stood with Sylvanas. Somehow, the Loyalist Horde army was the only force in the entire world that could stand to N´zoth. Somehow, combined forces of Alliance and Rebels were only enough for one last attack on Orgrimmar. Orgrimmar that didn´t have Blackfuse and his miracles, spoils of Pandaria, mantid allies or heart of an Old God.
Somehow, after Teldrassil, after all the attrocities, after dealing with evil Warchief few years before, after their leaders rebelled against her, the Horde decided that this Sylvanas person is actually awesome.
Blizzard spent years villainizing the Horde, followed the villainization with half-hearted “we´re good now”, before again villainizing the Horde. At the same time, any attempts at Alliance being the villain are either accidental, removed before going to live due to player outcry, or part of out of game media. Of course the end result is Horde being much more evil than the Alliance. Blizzard never seemed to have bothered asking the question “How will the stories we tell influence how the factions are viewed?”