Engineering Note
Your Git strategy can create more engineering problems than your code does.
Early in a startup, it's tempting to create separate repositories for everything.
Rails backend.
React frontend.
Background workers.
Infrastructure.
Shared libraries.
It feels clean.
But suddenly a small feature can involve:
3 repos → 3 PRs → 3 pipelines → 3 deployments.
That's where the trade-off starts becoming real.
With a monorepo, related applications and services can live together.
One change can be reviewed together.
Shared code is easier to manage.
Local development can be simpler.
But a monorepo can also become difficult when:
* Teams need independent ownership
* Deployments have very different lifecycles
* Repository size becomes a problem
* Build and CI boundaries aren't well defined
With multi-repo, teams get stronger isolation.
But you pay for it with coordination.
More repositories.
More pipelines.
More versioning.
More cross-repo changes.
For an early-stage SaaS, I usually start with the simplest structure that keeps the team moving.
Don't create repository boundaries because the architecture diagram looks cleaner.
Create them when there is a real ownership, deployment or scaling reason.
Important learning:
Your Git strategy is an engineering decision, not just a Git decision.
At startup stage, every unnecessary boundary adds coordination cost.
Optimize for team speed first.
You can split a repository later.
Removing unnecessary coordination is much harder.
Rails backend.
React frontend.
Background workers.
Infrastructure.
Shared libraries.
It feels clean.
But suddenly a small feature can involve:
3 repos → 3 PRs → 3 pipelines → 3 deployments.
That's where the trade-off starts becoming real.
With a monorepo, related applications and services can live together.
One change can be reviewed together.
Shared code is easier to manage.
Local development can be simpler.
But a monorepo can also become difficult when:
* Teams need independent ownership
* Deployments have very different lifecycles
* Repository size becomes a problem
* Build and CI boundaries aren't well defined
With multi-repo, teams get stronger isolation.
But you pay for it with coordination.
More repositories.
More pipelines.
More versioning.
More cross-repo changes.
For an early-stage SaaS, I usually start with the simplest structure that keeps the team moving.
Don't create repository boundaries because the architecture diagram looks cleaner.
Create them when there is a real ownership, deployment or scaling reason.
Important learning:
Your Git strategy is an engineering decision, not just a Git decision.
At startup stage, every unnecessary boundary adds coordination cost.
Optimize for team speed first.
You can split a repository later.
Removing unnecessary coordination is much harder.