I would like to take a moment to talk to you about a peeve that I've been feeding, caring for, and walking for the last ten or so years -- well, not so much walking lately, as this peeve is now over seventy in peeve-years, and her health is declining.
The Desire to Separate Everything Into Files by the Type of Thing, an Pet Peeve
Programmers are peculiar creatures who constantly deal with the fact that computers are infuriatingly logical and reproducible, while brains are infuriatingly illogical and take nine months to reproduce a stupid basic model. As such, programmers like to rely on organization to deal with large amounts of information, since brain reproduction is expensive and, in my limited experience, unlikely to produce programming help let alone wash their own dishes.
The challenge, though, is that programming as a profession or hobby selects for odd people, and none of the sort who partake in it are willing to come up with an organization scheme that's specific to a specific project. No, once a programmer has poured the epoxy resin and knocked all the bubbles out, this must be how all projects are structured. Therefore, the organization scheme must organize only concepts present in all projects - whether they be models, views, and controllers, or components and states, functions and types, or what not. I'm told its actually illegal to write React or Terraform without doing this.
And now this is why most sci-fi novels written by programmers are just sequences of letter-number pairs, with each letter identifying the appropriate appendix, and each number identifying the appendix entry that defines the word. Appendix A is nouns, and appendix B is verbs, and so forth. A1, Harry Potter. B7, shot. A9, Voldemort. Reading such a novel is easy, because you can find where the words are defined immediately without having to know the whole structure of the book.
But let us now sink this battleship.
Can we instead organize things into files based on related domain concepts? Models, views, controllers in one package, living together, as long as they are all about customer batch processing, for example? The ability to understand a function of the software through the reading through a file, laid out like an essay - first defining basic concepts and operations, layering on top of it building more complicated operations out of simpler ones, then tying it all together into a feature?
I get it - this is messy and hard. Concepts are related in weird ways and there's no right way to separate them, it can be subjective which way to present the software's concepts, and who wants to think about the customer anyway? This is deeply uncomfortable for nerds of our ilk. But I assure you, this readability is much better.