D-Va might just be a little too tanky.
I think it's balanced by how easy it is to headshot her in comparison to other heroes, because her head is basically right in the middle which is where you'd aim usually anyway. Like I've played against D-Va a lot and if you're chaining headshots right in there, she actually melts pretty quick. She can matrix obviously but she's also doing no damage during that time so you're not losing, and she has to face you for an extended time to actually do damage, so whoever she targets can always do good damage to her in returns. You also want to walk backwards at all times, because it'll put distance between you and her and her damage dropoff is terrible. Like at close range she does ridiculous damage(124 a second with no reloading, not counting headhsots), but as soon as you're even at mid range it drops to like half of that, potentially lower due to pellets not even hitting if you don't have perfect centering and since she moves slower when attacking, if you're walking backward attacking her you put distance naturally between the 2 of you.
Even the heroes that get fucked by armor usually can still do decent if they're aiming for headshots since doubling the damage on small hits makes armor meh. If you're firing in her back though you better have high damage per hit, and she's hard to chase if she runs away. I had a Genji chase me down on D-Va and I still managed to get 3 speed boosts(which is like 15seconds I think?) flying around and picking healthpacks, while he was attacking me the entire time, and obviously hitting since I wasn't dodging anything. He ended up right in the middle of my team by the time he killed my mech.
Killing her after she exits her mech is more difficult though, unless you're Genji or something so you can dash through the robots and kill her near instantly. I have the lowest amount of deaths on D-Va by far because a lot of the time I only lose the mechs, then get another and so on. This is especially true after I charge my first ulti, since I tend to often just ulti when I die(you can activate after you die for like 1sec), which often at least damage something, instantly charging a new mech.
I don't get many kills with the ult, but even using it offensively you rarely do, and this way I can constantly be in mech and never die. Only decent time to ult for kills is like when Mei or Zarya also ult, then you can get team wipes it's pretty hilarious. Also sometimes in certain positions it can be worth it, like if you're above the objective and the enemy team didn't notice you, you can boost upward and ult, assuming there's no roof, the mech will stay far and in the air a long time and a lot of people get confused on where to run/if they have to run at all cause the indicator is yellow instead of red since it's pretty far, and you don't have the massive glowing robot right there to know where to hide. Catch people offguard, but you need good positionning first and you tend to be in a shitty spot afterward(no mech and behind enemy lines).