I don’t think you can pick just one style. If you do packages by feature you’ll start to find code that is shared and then you end up with a common area that has a different structure. If you go by architecture you’ll find too much lumped into the same bucket and things that are related nowhere near each other. We do it differently by module with the one that makes sense for the type of code that is in that system. We do NOT do packages by model/view/controller because that means you hop around packages to find all the parts of one related thing. It is a guaranteed bad split for that type of system. Since we have to register our controllers at some top-level, that is where you can go to find all controllers (their bindController calls), from there the IDE guides you into the actual controller, model and so on which tend to be grouped a lot of time in the same file. We split files by what makes sense for the code in the file, not some arbitrary rule. so in other words, I think you have to feel your way into a model that works well, and don’t decide some split by file or packages that uniformly serves to ruin your day.