It is complexity that is accepted in small amounts across dozens of projects over many years. Projects that add real value to the business while contributing to this invisible debt that from the business point of view, matters only once it has started directly affecting your revenue.
Eventually an organization can't scale without a major refactoring, rewrite, or an entirely new market vertical.
Incompetence is to spend too much time making software into a golden, egg laying donkey. As is building software that becomes impossible to change after a couple of years. Finding the fine line in between these extremes is what professional software engineering is all about.
IMO there is no good fix for that past certain company size.
Most of these problems are likely contributed to legacy code and backwards compatibility.
It takes me a couple of lines of code now to spin up a web server than can handle thousands of connections. Or an app with beautiful fluid UI.
But I remember that I am standing on the shoulders of giants. What seems like zero complexity to someone on the shoulder is actually not.
Sometimes the giants fuck up too. Ultimately it is incompetence. But not the kind that is attributable to laziness or stupidity. Engineers at Microsoft, I would assume are like engineers everywhere - no smarter, no dumber.
Just because I can build a Lego bridge perfectly, doesn’t make the guys who’ve built an imperfect actual bridge are incompetent. They’re just solving very different problems.
Or perhaps that due to survivorship bias, the evidence for incompetence that we see sticking around longest is also the most pathological.