Large IT systems fail in many ways, small and large and I don't think it's possible to isolate a single root cause but I do have one observation which I think is often overlooked.
When a company like Amazon or Google release a new service or a new product, they generally have the luxury of choosing which customer requirements they want to meet. The more customers they satisfy, the more customers they can hope to win.
This freedom means that these companies can follow the common trajectory of releasing a simple realization of their product which is then honed by iteration. But companies contracted to produce government and corporate systems rarely have this freedom in my experience, but for different reasons.
In the case of government systems it is politically (and often morally) unacceptable to exclude specific classes of end users from a system; the requirement to make a system available to nearly 100% of possible users while at the same time catering for the labyrinthine complexities of local and national government is simply very difficult.
In corporate environments, there is a similar pressure to meet 100% of customer needs, but in this case the users are often staff and though the problem is similar at a technical level, the source of the pressure is different:
Google is a large corporation, and when it releases a product like Gmail, users can choose to use it, or not: they can't singly demand changes, so Google has the power to stand up to users and, in short, be a good custodian of the user experience.
When developing software for corporate customers, this relationship is inverted, and very often, every wrinkle in every corporate business process is expected to be modelled in the software. As a contractor, you know you could produce better software for the corporation, if they were willing to adapt some of their processes in the same way customer adapt their behaviour to using Gmail, but they have the power.
The result is the same in both cases: excess complexity.