Organize codebase in a meaningful folder structure
For initial discussion see: https://gitlab.slack.com/archives/C02PF508L/p1539691724000100 (internal link)
This article: http://tomrothe.de/posts/rails_parts.html proposes a way to organize the code base in "parts" that look like Rails Engines, without the downside of Rails Engines (isolation, no access from engine to the main application etc).
They suggest to use the term "parts", I think it makes much more sense to use the term "components", but other than that, there are a lot of good suggestions there and we can probably adopt all of them.
A few ideas of components we can move together in one place, that will help read and understand the code base easier/better:
components/ci
components/geo
components/registry
components/admin
The advantage of this over a previous proposal I made earlier: https://gitlab.com/gitlab-org/gitlab-ce/issues/49653#note_91902315 is that we are not modifying the behavior of the application. It will work as it works today. We are not breaking the monolith into isolated pieces, we are just organizing it in boxes and placing it into a nice shelf. So we are still keeping the majestic monolith intact.