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:
- There is a difference between New and Edit modes (Settings may not have this issue). If there are lots of mandatory fields, you must have an OK. Auto-submitting (this is what I called the OK-Cancel-less mode) won't work.
- If there are validations, especially things that are interrelated, it may get difficult for auto-submit mode. Need to think these through.
- Auto-submit works great for non-text input like switches, dropdowns, radios. For text input, you are really not sure when the user is "done". OK-Cancel works better. One way around this to have a small dialog for editing any text, like x-editable. Another way is to use events such as Lose Focus and Enter Key to confirm changes (e.g. on the Mac: Terminal preferences -> Window -> Rows).
- Mixing the two modes in the same app is a bad idea: the user will be confused as to which one works where.
- OK-Cancel helps in reviewing before saving. An auto-submit may feel the need for an "Undo" action in some cases.
- OK-Cancel requires indication and handling of unsaved changes. In case of a form in a web app, you'll need to warn the user when navigating away from a page with unsaved changes.
- OK-Cancel may need a "Saved successfully" message (my app does), where as for Auto submit, the user expects a message only in case of errors.
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.