Glad you liked the book!
I’m not sure that CRUD vs non-CRUD is the most interesting distinction here. It seems to me that stateful vs. stateless will get us farther. We can assume that stateless means we’ll be writing working state to the database and then retrieving it for each request.
Most applications of any size or complexity have a number of elements that might lend themselves to either a stateful or a stateless approach.
We can certainly mix and match these different approaches within the same application, using each where it seems most natural. We can mix and match MVC style components and Channels in the same application as well, depending on the need.
With that in mind, the more interesting exercise to me is examining the domain and determining which approaches to use where. A twist to this is to think about why we might choose the stateless approach in a given situation. Is statelessness inherent to the domain element, or are we choosing it based on our previous experience and familiarity?
I don’t know that there are general answers for these questions. So much depends on circumstance and the particulars of the domain.
The fun part is that Elixir, OTP, and Phoenix give us the tools to experiment more easily with the statefull approach so we can learn more about how and when to use it.