<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Monorepo vs Multi-repo for Databricks Asset Bundles: A Decision Framework in Community Articles</title>
    <link>https://community.databricks.com/t5/community-articles/monorepo-vs-multi-repo-for-databricks-asset-bundles-a-decision/m-p/165123#M1410</link>
    <description>&lt;P&gt;When teams scale their Databricks Asset Bundles (DABs) adoption, one of the first infrastructure questions that comes up is: should we keep all our bundles in a single monorepo, or split them across dedicated repos per domain? Having run both models at a regulated financial institution with roughly 30 engineers across 5 data domains, here is the decision framework we landed on.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Core Trade-off&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Monorepo gives you a single source of truth for shared libraries, notebooks, and configuration variables. Multi-repo gives you clean deployment boundaries, independent release cycles, and fine-grained access control per domain. Neither is universally better — the right answer depends on four factors.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 1: Team Size and Domain Count&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Fewer than 20 engineers, fewer than 4 domains: Monorepo. The overhead of cross-repo dependency management costs more than you gain.&lt;/LI&gt;&lt;LI&gt;20–50 engineers, 4–8 domains: Monorepo with clear bundle boundaries. This is the sweet spot where shared libraries deliver the most leverage.&lt;/LI&gt;&lt;LI&gt;More than 50 engineers or more than 8 domains: Consider splitting. Coordination cost grows super-linearly at this scale.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 2: Release Cadence&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;All domains ship on a unified release cycle: Monorepo. Synchronized releases are simpler to manage from one place.&lt;/LI&gt;&lt;LI&gt;Domains have independent release cycles (e.g. Risk deploys weekly, Marketing deploys daily): Multi-repo. Coupling release pipelines across domains creates unnecessary blocking.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 3: Access Control Requirements&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;All engineers can see all code: Monorepo. No complications here.&lt;/LI&gt;&lt;LI&gt;Some domains contain sensitive models or regulated data logic visible only to specific teams: Multi-repo. Repo-level access control is simpler than implementing fine-grained path-level controls within a monorepo.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 4: CI Pipeline Speed&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Full CI runs in under 15 minutes: Monorepo is fine. Every push validates everything together.&lt;/LI&gt;&lt;LI&gt;CI takes longer than 15 minutes: Path-based filtering becomes mandatory. If your CI tooling does not support it well, consider splitting.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Summary&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Start with monorepo if: team is under 50 engineers, domains share a release cycle, no strict access control boundaries exist, and CI runs in under 15 minutes. Move toward multi-repo when: teams exceed 50 engineers, domains need independent deployments, access control becomes a compliance requirement, or CI times exceed 15 minutes despite path filtering.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Making Monorepo Work: Three Shared-Asset Patterns&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;If you go monorepo, the three main shared-asset problems are libraries, notebooks, and variables. Here is how to handle each.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 1: Shared Python Libraries as Wheel Artifacts&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Place shared library code in a top-level shared_libraries folder. In each bundle's databricks.yml, declare a Python wheel artifact with type set to whl, path pointing to ../shared_libraries, and a build command of "pip install build and python -m build". Bundles reference the built wheel as a cluster library. This avoids duplicating library code and ensures all bundles use the same version.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 2: Shared Notebooks via Relative Path References&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Put utility notebooks in a top-level shared_notebooks folder. Reference them from bundle notebooks using relative paths like ../../shared_notebooks/transform_utils. Never copy notebooks between bundles — a single source of truth prevents version drift. This is the simplest pattern to adopt first.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 3: Shared Variables via Root Include&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Define environment-agnostic variables (catalog name, service account, common tags) in a root-level variables.yml. In each bundle's databricks.yml, add an include directive pointing to ../variables.yml. Bundle-specific overrides go in the bundle's own variable files. This keeps environment configuration consistent without duplication.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;When to Split a Domain Out&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Even if you start monorepo, watch for these signals that it is time to split a domain out:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;That domain's CI/CD changes no longer benefit from shared libraries&lt;/LI&gt;&lt;LI&gt;The team wants a different deployment cadence from the rest&lt;/LI&gt;&lt;LI&gt;Access control requests for that domain keep escalating&lt;/LI&gt;&lt;LI&gt;That domain's bundle tests account for more than 40% of total CI time&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Splitting one domain out of a monorepo is a tractable migration. Consolidating multiple repos into one later is much harder. So if you are unsure, start monorepo and split intentionally when the signal is clear.&lt;/P&gt;&lt;P&gt;Happy to discuss any of these patterns further — especially the wheel artifact build pipeline and CI path-filtering setup, which tend to be where teams get stuck first.&lt;/P&gt;</description>
    <pubDate>Sat, 08 Aug 2026 03:15:54 GMT</pubDate>
    <dc:creator>DoTA</dc:creator>
    <dc:date>2026-08-08T03:15:54Z</dc:date>
    <item>
      <title>Monorepo vs Multi-repo for Databricks Asset Bundles: A Decision Framework</title>
      <link>https://community.databricks.com/t5/community-articles/monorepo-vs-multi-repo-for-databricks-asset-bundles-a-decision/m-p/165123#M1410</link>
      <description>&lt;P&gt;When teams scale their Databricks Asset Bundles (DABs) adoption, one of the first infrastructure questions that comes up is: should we keep all our bundles in a single monorepo, or split them across dedicated repos per domain? Having run both models at a regulated financial institution with roughly 30 engineers across 5 data domains, here is the decision framework we landed on.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Core Trade-off&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Monorepo gives you a single source of truth for shared libraries, notebooks, and configuration variables. Multi-repo gives you clean deployment boundaries, independent release cycles, and fine-grained access control per domain. Neither is universally better — the right answer depends on four factors.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 1: Team Size and Domain Count&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Fewer than 20 engineers, fewer than 4 domains: Monorepo. The overhead of cross-repo dependency management costs more than you gain.&lt;/LI&gt;&lt;LI&gt;20–50 engineers, 4–8 domains: Monorepo with clear bundle boundaries. This is the sweet spot where shared libraries deliver the most leverage.&lt;/LI&gt;&lt;LI&gt;More than 50 engineers or more than 8 domains: Consider splitting. Coordination cost grows super-linearly at this scale.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 2: Release Cadence&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;All domains ship on a unified release cycle: Monorepo. Synchronized releases are simpler to manage from one place.&lt;/LI&gt;&lt;LI&gt;Domains have independent release cycles (e.g. Risk deploys weekly, Marketing deploys daily): Multi-repo. Coupling release pipelines across domains creates unnecessary blocking.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 3: Access Control Requirements&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;All engineers can see all code: Monorepo. No complications here.&lt;/LI&gt;&lt;LI&gt;Some domains contain sensitive models or regulated data logic visible only to specific teams: Multi-repo. Repo-level access control is simpler than implementing fine-grained path-level controls within a monorepo.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Factor 4: CI Pipeline Speed&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Full CI runs in under 15 minutes: Monorepo is fine. Every push validates everything together.&lt;/LI&gt;&lt;LI&gt;CI takes longer than 15 minutes: Path-based filtering becomes mandatory. If your CI tooling does not support it well, consider splitting.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Decision Summary&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Start with monorepo if: team is under 50 engineers, domains share a release cycle, no strict access control boundaries exist, and CI runs in under 15 minutes. Move toward multi-repo when: teams exceed 50 engineers, domains need independent deployments, access control becomes a compliance requirement, or CI times exceed 15 minutes despite path filtering.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Making Monorepo Work: Three Shared-Asset Patterns&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;If you go monorepo, the three main shared-asset problems are libraries, notebooks, and variables. Here is how to handle each.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 1: Shared Python Libraries as Wheel Artifacts&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Place shared library code in a top-level shared_libraries folder. In each bundle's databricks.yml, declare a Python wheel artifact with type set to whl, path pointing to ../shared_libraries, and a build command of "pip install build and python -m build". Bundles reference the built wheel as a cluster library. This avoids duplicating library code and ensures all bundles use the same version.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 2: Shared Notebooks via Relative Path References&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Put utility notebooks in a top-level shared_notebooks folder. Reference them from bundle notebooks using relative paths like ../../shared_notebooks/transform_utils. Never copy notebooks between bundles — a single source of truth prevents version drift. This is the simplest pattern to adopt first.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pattern 3: Shared Variables via Root Include&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Define environment-agnostic variables (catalog name, service account, common tags) in a root-level variables.yml. In each bundle's databricks.yml, add an include directive pointing to ../variables.yml. Bundle-specific overrides go in the bundle's own variable files. This keeps environment configuration consistent without duplication.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;When to Split a Domain Out&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Even if you start monorepo, watch for these signals that it is time to split a domain out:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;That domain's CI/CD changes no longer benefit from shared libraries&lt;/LI&gt;&lt;LI&gt;The team wants a different deployment cadence from the rest&lt;/LI&gt;&lt;LI&gt;Access control requests for that domain keep escalating&lt;/LI&gt;&lt;LI&gt;That domain's bundle tests account for more than 40% of total CI time&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Splitting one domain out of a monorepo is a tractable migration. Consolidating multiple repos into one later is much harder. So if you are unsure, start monorepo and split intentionally when the signal is clear.&lt;/P&gt;&lt;P&gt;Happy to discuss any of these patterns further — especially the wheel artifact build pipeline and CI path-filtering setup, which tend to be where teams get stuck first.&lt;/P&gt;</description>
      <pubDate>Sat, 08 Aug 2026 03:15:54 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/monorepo-vs-multi-repo-for-databricks-asset-bundles-a-decision/m-p/165123#M1410</guid>
      <dc:creator>DoTA</dc:creator>
      <dc:date>2026-08-08T03:15:54Z</dc:date>
    </item>
  </channel>
</rss>

