There's nothing easy about appcompat shims - diagnosing them, implementing them, or testing them. It involves preserving and testing all sorts of parallel code paths.
It was about doing the only thing possible - software developers were often out of business, never interested in fixing the bugs themselves, and never capable of distributing the fixed versions to customers before the days where you could assume constant internet access (and still not entirely then)
Raymond Chen's blog addresses this a lot. The reason why they did this was because even if it wasn't their fault, people would blame Microsoft for breaking things. Since they can't force third-party developers to fix their broken code or to stop using weird hacks, they chose the best option available to them. Fix it themselves.
I don't see how they did anything wrong or why it wouldn't still be one of the best solutions today. And honestly, it often still is the best or even the only solution today. There's only so much we have control over, no matter who we are.
I still think it's a wonderful solution. If your code CAN make something work, then you do, because nobody else will, and people will be happy their old stuff still works.
It was about doing the only thing possible - software developers were often out of business, never interested in fixing the bugs themselves, and never capable of distributing the fixed versions to customers before the days where you could assume constant internet access (and still not entirely then)