How I organise a large project
ewanvalentine.io
ewanvalentine.io
A developer I hired at one point had read an article written by someone in the OSS community promulgating the virtues of treating your "projects" like OSS projects and if you have a "large project" breaking it down into smaller constituent projects with their own source repository, dependency defs, README's, tests, Vagrant / Docker environments etc...
This fits well with the ideas behind small composable units of work and it also increases clarity.
[EDIT] Essentially, if you have a large project, it's probably time to re-think how you're coupling or de-coupling functional units. The goal being lots of small, documented, and tested units composed to create a "large software product".
I think this structure lets you take either approach, needs some tweaking though for sure.
What if, for example, you completely rewrite your backend system without changing its API spec at all? Having the history of the backend and mobile app linked becomes a bit odd at this point.
What if you're using a system which deploys your repo? It may expect certain things to be in the root of the repo, and you certainly don't want your mobile app code to end up on your application servers.
Honestly, I'm not really aware of any instance where it is actually better to lump together multiple parts of a system into one repository. Maybe you made some bad architectural decisions which makes it easier to do so, but I don't consider that 'better'.
The specific problem usually comes down to the extra work necessary to correlate changes between repositories.
Consider, even the linux kernel is counter to the best practices as they were thought at the time.
I also realize that they could just be an unrelated data point. I just have grown weary of every success story I know about being "in spite of terrible practices." At some point, the best practices theory bows to the results of actual practices.
However, our Vagrant setup just took a massive turn for the worse: due to some compatability issues, these VMs have now all been hooked together using Puppet! During provisioning, if the git repos for the other machines aren't checked out to a particular location, everything dies; which seems like a really cargo-culty choice to me.
I'd be interested in doing things like this with Nix: Disnix to define the relationships between the servers and NixOps to define the VM provisioning. That may be because I'm a functional programming nut who's just switched to NixOS though ;)
Your idea about using Nix might be worth me looking into next! It kinda feels like spinning plates trying to organise vm's and codebases haha.
I thought this structure might be a good start for new comers though :)