As a new developer dives into a project, the first thing they are always going to see is the layout of files and folders in the project. This is also the element of organization we deal with constantly while editing the project, so it is worth investing thought into the organization. Just looking at the files and folders should already tell you something about the project; it is the highest level of organization and therefore should represent some of the top level concepts of our domain.
So to start out, we need to make sure we know what we are trying to solve with this structure. There are multiple points that we need to address at this level, and they will follow us through every part of the organization of the project; they are:
Approachability
Locality of edits
Fitness for handling change
So let's see what these points are about and how we can optimize for each of those points.