This is an interesting discussion – i found it after googling ‘why does django have apps’.
I hate all frameworks and am hoping to find the one i hate the least. i used django 10 or 15 years ago, and revisting for a bit now.
i was going thru the ‘build your first app tutorial’ and got confused when i realized the app, ‘polls’, was given a directory next to the ‘mysite’ directory, which is named so because the project i created to hold all the apps is called ‘mysite’.
https://docs.djangoproject.com/en/3.2/intro/tutorial01/
duplicate directory/subdirectory names is confusing to me.
having an ‘app’ next to a ‘project’ folder is confusing to me.
having ‘apps’ inside my app – my web app, my web application, the one i’m building – is confusing to me. i’m a bit of a psycho when it comes to the importance of naming, tho, so.
the idea that you would need multiple django apps out of the gate is confusing to me. for instance, let’s say the application i’m building has 10 ‘modules’ or ‘areas of functionality’, and each had 30 or 40 models, views, whatever – that’s totally fine – they can get their own directories. i don’t want a big crazy directory structure - i just want a general idea of where things are, and my IDE or command-completion will help me get to them. i think of the ginormous java-based frameworks from back in the day – disaster. the idea that you have to have this logical separation of pluggable apps seems like overkill to me – sort of like how we all used to talk about, “Well, we can’t use Oracle-specific SQL because, you know, we might want to migrate to SQL Server at some point.” Of course we never migrated to SQL Server or anything else. 
all that said, i’m currently hating Django less than all the other frameworks out there. 
Laravel is still in the running, tho their new version dialed-up the Java-oriented abstraction-for-abstraction-sake crazy to a new level.
and Rails is in the mix despite the distasteful stuff going on with its owners.
one case i could see for an ‘apps’-like structure is something like SaasPegasus – a saas boilerplate framework for django that i’m a fan of despite having never used it.
in this case, i could see wanting to be able to plot that in its own ‘app’ directory and have it be separately-upgradeable, bug-fixable, etc. – completely outside the scope of my own stuff. maybe that couldn’t happen without the ‘apps’ complexity that is currently built into django, but i doubt it.
i would also say, i appreciate the stability of django. so, if someone asked me, as benevolent dictator, would i scrap ‘apps’, i’d lean heavily towards ‘yep’. i’d listen to the args, etc., but i’d at least like to find a way to simplify things so that a starter project would not have a project and project subdirectory, and separate ‘apps’ directories and the need to wire up your app with the ‘core’ app/project – it would all just work out of the box.
that’s a funny part about Nuxt – the JS framework for the Vue framework (yes, framework for a framework) – they have super-advanced feature called ‘file system routing’ – you drop a page/vue component inside a certain directory, and voila – you can then put that path in your browser location bar and the page just shows up!
if Django were javascript-based, it’d already have 10 new and popular direct siblings/competitors, splintering everything.
i’m gonna study that Beith and other layouts just for kicks.
i wonder if you could accommodate the existing apps system, but create a new create ‘startapp’ switch called ‘–keepitsimple’ that effectively removed ‘apps’ from the framework.