90s and 00s Microsoft was successful in part because they were an incredibly stable platform to develop against.
10 year support goes a long way, and if you paid enough money you could email in your bugs and get custom hot fixes made for issues that annoyed you.
Even their /bad/ technologies had long term support. If you built on top of shiny new thing and Microsoft dropped it in the next release, it was still going to get patches, bug fixes, and the documentation for it wasn't going to vanish from the world as if it never existed.
Of course this was all before cloud services existed. Back then you'd pay for a product and you got software on a disk/CD and there was an expectation that it'd keep working.
One thing that gets overlooked so frequently, by all companies, is that ongoing costs are ongoing. Whenever I see a new fitness tracker kickstarter advertising amazing cloud services for free, my first thought is that the costs from cloud services will eventually exceed the tiny profit that comes from selling physical consumer hardware.
And a few years later another "It's been a great journey" message goes out as the company runs out of money.
Obviously Google won't run out of $, but costs do add up.
Doing the math on how to distribute funding to bundled cloud services is actually rather hard. You have to figure out for a given product / subscription, how much of that purchase price needs to be distributed to the various teams. That sort of attribution is not easy, and not properly allocating those funds to development resources can kill a product. e.g. someone buys a Chromebook, of course the OS team gets money, but the team making Google docs can argue they deserve a split, after all without them the Chromebooks would be somewhat useless. Analytics helps, but only to an extent.