When developing a package, we have three possibilities to define new `setf`-forms:

- We can define a function whose name is a list of two symbols, the first one being `setf`, e.g. `(defun (setf some-observable) (…))`.

- We can use the sort form of `defsetf`.

- We can use the long form of `defsetf`.

- We can use `define-setf-expander`.

I am not sure what is the right or intended use-case for each of these possibilities.

A response to this question could hint at the most generic solution and outline contexts where other solutions are superior.