How do you decide what belongs in a module as an app grows?
By the boundary that changes together and by build time. A feature module that can be built and tested without the rest pays for itself in compile speed and in making the dependency direction explicit. Splitting by layer — one module of all view models — usually produces modules that always change together, which is the cost without the benefit.