One thing that I have observed in macOS; coming form a Windows box is how the system settings, and other dialog boxes don’t contain any confirmation buttons; the settings are applied as soon as you manipulate them. For critical settings you have a lock icon which needs an administrator password.
Where as in a Windows, you have to deal with ‘OK’, and ‘Cancel’, which in IMO is more straight-forward; but probably I am biased because I have been a Windows user for a long time.
What are your opinions on this topic?
IMO:
If an action is severe or irreversible then it needs a confirmation dialog.
If something doesn't have a confirmation dialog then it should have a success or error message (ex: "settings saved").
One thing I don't like is when you are presented with ambiguous choices like, "Are you sure you want to cancel? OK | Cancel" You're left wondering, does Cancel cancel or cancel the canceling?
I had the same quandary for one my apps, which had many CRUD-like forms. I'm sharing a few notes that I jotted down during the decision process:
Overall, I found that the Auto-Submit is better UX, but an OK-Cancel is easier to implement and make consistent, especially when you have to deal with text inputs. Note that even on the Mac, a Dialog box always has an OK Cancel (e.g. on the Mac: Preferences -> Language & Region -> Advanced). All this discussion is only for the main form.
FWIW, the current version of my app uses a Save button, but I'm having difficulty with this mode. Not just UX, but the API structuring and re-use of components is getting a bit messy. So, I'm planning to refactor the app to make it auto-submit. Where there are text fields, I'm going to show a bunch of fields together in a modal dialog. The dialog will have an OK-Cancel. All changes in a page will be saved on the server immediately, and in modals, when the user clicks OK. More like the Mac Preferences. This is some bit of work, but I think it'll be worth it.