We know quite a lot about the matchmaking system, actually. Not everything, of course, but it’s not all that secret, it’s just that what we’ve been told is broken up into bits and pieces explained here and there over the years. Most people don’t bother to read it, even though the collected information has been put together into a continuously updated document.
But yes, we do know that they try to balance games so that each team has an equal chance of winning. That’s called making a fair match, when you have two teams of equal average skill.
For a variety of reasons, it isn’t always successful, and even when it is successful, hero choices, communication issues, or even differences in map familiarity can cause a game to feel very one-sided.
People attribute this to the matchmaker specifically persecuting them as individuals or specifically favoring other individuals through some conspiratorial hidden criteria, but honestly… it’s just variance. The matchmaker has no way to know who’s better at Hanamura and who’s better at Busan, who’s better at Mercy and who’s better at Lucio … it could, in a more complex system, but it doesn’t currently score players per-map or per-hero.
Even with the most fine-tuned of systems, the game has no way to know if your main tank is in top shape, just got home from an exhausting day of work, or is on a day off and just smoked a bowl of the high-grade stuff.
It’s really just not realistic to expect a close match every time, not even when the matchmaker does its job as perfectly as possible. That, however, is the ideal so many people rate it against, but of course it falls short of achieving the impossible.
Also, I don’t know if you saw it but Kaawumba pointed out the current edition of the document: