Hello everyone,
I’m currently the sole developer on a Phoenix/Elixir application (a cybersecurity platform). It’s a standard monolith with a core authentication system and a shared root layout.
We are now scaling the team by adding two new, separate teams to build two new, distinct modules.
My goal is to structure the project so that these teams can work autonomously on their modules, but still leverage the existing authentication (Plug) and the root.html.heex layout seamlessly.
I’m considering two main approaches:
-
Stricter Bounded Contexts: Keep the single monolith structure but enforce very strong boundaries between Phoenix contexts. Each team would own their context (/lib/my_app/module_a, /lib/my_app/module_b).
-
Umbrella Project: Migrate to an umbrella structure with a core app (for the Repo, Accounts), a web app (for Phoenix endpoints, router, layout), and a separate app for each new module (/apps/module_a, /apps/module_b).
My questions are:
-
What are the main pros and cons of each approach for this specific scenario (2 new teams, shared core)?
-
Is the upfront complexity of an Umbrella project justified for this scale, or is it overkill?
-
Are there best practices for Git workflows (e.g., code ownership, PRs) that pair well with either structure to minimize team conflicts?
Thanks for any advice!