Without entering in the dicussion about MVVM I just wanted to quote here an interesting paragraph of the linked post. It's mainly for my own memories, as it's something related to a topic that I've had in my mind for a while and I want to have this words saved somewhere that I can refer back when I'm lost in the forest of Patterns.
The right Patterns to extract will reveal themselves as the code evolves. Don’t force them. The biggest mistakes I’ve made when designing software have been to enforce my preconceived notions of good design on a problem I didn’t understand yet.
The catch is, until you’re deep in the weeds with actual user and business problems, you don’t understand the problems you’re facing. You can’t predict what users will do with your app. How can you predict what the right design to solve their problems is?
Attempting to apply your pet software design before the code has emerged is the cause of many headaches. Sometimes a ViewModel (assuming we can define what exactly a ViewModel is) is the right fit for a particular ViewController. But let that decision be driven by the needs at hand, not a preconceived notion of what the design should be.