Thank you both.
@Wolfram With your setup using Unity packages, do you have 1 mono package that has "all the things"? Or are you breaking up your shared code into "modules" of sorts so that a project could bring in more granular code from the shared code base?(i.e. I only need character controller, so I just bring in that package)
We are a very small part time indie studio so maybe I should stick with xlinks for now. One pain point I found in getting setup on xlinks was that I wanted my "core / shared" code to be an actual unity project so I could write Unit Tests on it and what not, but then with xlinks you must take the whole repo's base folder if you want a writable xlink. So it'd be importing a full unity project into my other unity project that is using the "core" codebase project. I ended up doing a read only xlink so that I could at least specify a specific shared code folder and not have to bring in the whole Unity Project. But now it will be a pain when I need to update the shared code project since it's a read only xlink.