I think you left off the biggest reasons, commercial:
* No piracy. Can't crack code you aren't running.
* Immediate installs/updates. No need to tell people to ever update stuff, or to install your program in the first place.
* You can charge subscriptions. It's much easier to justify a subscription when you pay for server costs, even though the customer would be happier just running your application locally.
* Easier deployment. You can handle complex integrations on the server, without the customer having to open ports or whatever.
Good points. I was more focused on the technical side.
I want to add a bit more to "easier deployment" -- traditional model is that you push updates at some interval (regular interval like semi annually/annually or non regular intervals), and you need to manage multiple versions and potentially patch multiple versions for severe bugs or security issues. Lots of software still works that way. But with office 365, jira etc you only have one version to worry about. Of course it means different risk levels, SLAs etc, but that's a different topic.
* No piracy. Can't crack code you aren't running.
* Immediate installs/updates. No need to tell people to ever update stuff, or to install your program in the first place.
* You can charge subscriptions. It's much easier to justify a subscription when you pay for server costs, even though the customer would be happier just running your application locally.
* Easier deployment. You can handle complex integrations on the server, without the customer having to open ports or whatever.