Modularizing by layer is an anti-patterm that everyone else moved past 10 years ago, except for Android developers who still cling to it. If your app and consequently the team that works on it gets large enough then you need to split the large team into independent smaller teams or the organizational overhead will kill you. You can split either by technology (what people used to do) or by domain area. If you split by technology then every feature that has to be developed needs to be communicated across many team boundaries: frontend, Backend, mobile, UX, ops. Once again, you will drown in overhead. Which is why everyone has adopted the domain-driven way of vertically integrated teams. The code base has to reflect the organizational structure to enable independent teams, which means vertically integrated feature modules.