Two colleagues reviewing a data model lineage diagram on a monitor in a modern office

dbt in a Nearshore Team: Who Owns the Models?

dbt in a Nearshore Team: Who Owns the Models?

A column gets renamed on a Tuesday. By Wednesday morning three dashboards are empty and everyone in the thread is sure the break was not their change. The engineer shipped exactly what the ticket described. The analyst assumed someone would check what depended on it. The client’s data lead was on leave. Nobody was careless. Nobody owned the model.

This article explains how to answer the ownership question before the first model ships: what there is to own, who should own each part when the build is done by an analytics engineering team from Itelence in Poland or by any other external team, and how to write that answer into dbt and Git so it holds under pressure.

Key Insights

  • Ownership of a dbt model is four separate questions, not one. Who wrote the code, who decides what the model means, who guarantees its output shape to downstream users, and who gets paged when it fails often have four different answers.
  • The workable split puts meaning with the client and build and run with the team. Your organization owns definitions and the right to approve changes to them. The nearshore team owns implementation, tests, documentation and day-to-day operation.
  • Ambiguity is the default, not the exception. In dbt Labs’ 2026 State of Analytics Engineering report, 41% of respondents said ambiguous data ownership is still a challenge, essentially unchanged year over year.
  • dbt can record ownership in the project itself. Groups carry a named owner, access levels control who can reference a model, and contracts enforce its output shape at build time, so the agreement does not live only in a contract PDF.
  • Git is where ownership is enforced. A CODEOWNERS file plus a branch rule requiring code-owner review means no change to a model merges without someone on the owning side approving it.
  • Heavy governance can be too much, too early. dbt’s own documentation warns that governance features add maintenance and can make rollbacks harder, so start with groups and review rules before enforcing contracts everywhere.

Who Owns a dbt Model in a Nearshore Team?

In a nearshore team, the client should own what each model means and who may change it, and the nearshore team should own how it is built, tested, documented and run. Splitting ownership this way keeps accountability for the business logic with the people who answer for the numbers, while giving the engineers clear responsibility for quality and uptime.

“Owning the model” hides four separate things: the code, the definition, the interface and the operation. Teams run into trouble when they treat these as one. An engineer can own the code and still have no authority over what a metric should mean. A business owner can own the definition and have no idea that three dashboards depend on a column name. Naming each layer and assigning it is most of the work.

Why Is Model Ownership the Most Common Dispute in Distributed Data Teams?

Model ownership is the most common dispute in distributed data teams because many people touch the same models, changes are small and frequent, and nothing forces anyone to decide who has the final say. In Itelence’s data engineering work it is the point where distributed teams most often disagree, usually after a change has already caused a problem.

  • “I only built what the ticket said.” The engineer is not accountable for downstream impact because nobody told them they were.
  • Definition drift. Two teams edit the same model to fit their own needs, and the metric quietly means two things.
  • Nobody approves changes. Every pull request is reviewed for syntax, and nobody reviews it for meaning.
  • Nobody is on the hook at 7 a.m. A failed run is noticed by a dashboard user before anyone responsible.
  • The model outlives its author. When the engineer who built it rotates off, nobody can say why it is written the way it is.

Distance does not cause any of these, but it removes the informal fixes. In a co-located team, the engineer leans over and asks. In a distributed one, the question waits, or does not get asked. That is why nearshore software development Poland engagements work best when ownership is settled before the first sprint.

What Exactly Can Be Owned: Code, Definition, Interface or Operation?

Four layers can be owned, and each needs its own owner and its own mechanism. The table shows who usually owns each in a client and nearshore setup and how to make it explicit in dbt and Git.

LayerWhat it meansWho should usually own itHow to make it explicit
CodeSQL, tests, documentation, structure of the projectNearshore team, to the client’s standardsStyle guide, tests required in review, documentation in the same pull request
DefinitionWhat a metric or dimension means and what is includedClient: a named business or data ownerGroup owner in dbt, model description, approval rule in Git
InterfaceColumns, types and names that downstream users rely onClient owner approves, team implementsAccess level, model contract on shared models
OperationRuns on schedule, failures are noticed and fixedNearshore team, under an agreed response timeAlerting, run ownership in the support agreement

Notice that “owner” does not mean “only person allowed to touch it”. It means the person who can say yes or no to a change in that layer and who answers when it goes wrong.

Want Model Ownership Settled Before the First Sprint?

Tell us how your dbt project and review process work today — we’ll show you how to split ownership with an external team.

How Do You Write Ownership Down in dbt?

You write ownership down in dbt with groups and access levels. A group is a named collection of models, tests and other resources, and per dbt’s documentation every group has an owner, identified by a name or an email address. You assign models to a group in the project configuration, so ownership is recorded next to the code it describes.

Access levels then control who can build on a model. dbt defines three access levels: private models can be referenced only inside their group, protected models by anything in the same project, and public models by any group, package or project. The default is protected, which means that unless you choose otherwise, any model in the project can depend on any other. dbt recommends setting new models to private so nobody takes a dependency on something that was not designed to be shared.

  • Staging and intermediate models: private to the owning group, so they can change freely.
  • Marts used by others: public, with a named owner and a stable shape.
  • Cross-group references: if a model is private to another group, dbt rejects the reference when the project is parsed, so the dependency is caught before anything runs.

Access settings control references inside dbt only. They do not grant database permissions, so access to the data itself still has to be managed on your platform.

How Do Model Contracts Protect Downstream Users From Silent Changes?

A model contract makes dbt check a model’s output shape before it builds. If you enable a contract and declare each column’s name and data type, dbt verifies the transformation produces a matching dataset or the model fails to build. That turns the Tuesday renaming from the opening into a failed build the engineer sees, not an empty dashboard someone else finds.

Contracts define the shape, not the content. They do not replace tests, which check the data after the build. dbt recommends them for public models that other teams or processes rely on. They also have limits: they do not apply to Python models, ephemeral models, sources, seeds or snapshots, and the documentation cautions that governance features can make rollbacks harder and add maintenance if adopted before a project is ready. Use contracts on the models other people depend on, not on everything.

How Do You Enforce Ownership in Git Reviews?

You enforce ownership in Git with a CODEOWNERS file and a branch rule that requires review from code owners. GitHub documents that code owners are automatically requested for review when a pull request changes files they own, and that an administrator can require their approval before merging.

  • Map folders to owners. Marts that feed shared reporting go to the client’s data owner; staging models can go to the nearshore team lead.
  • Require code-owner review on the main branch. GitHub notes that approval from any one of the listed owners is enough, so list the right people, not everyone.
  • Protect the CODEOWNERS file itself. GitHub recommends assigning an owner to it, otherwise the rule can be edited away in an ordinary pull request.
  • Give owners write access. Code owners must have write permission on the repository.

The result is simple to explain to everyone: the nearshore team can open and prepare any change, and nothing touching a model that carries a business definition merges without the person who owns that definition.

What Should the Contract With a Nearshore Team Say About Models?

The contract with a nearshore IT services Poland partner, or any external team, should say who owns the code and documentation, who approves changes to definitions, what the team must deliver with every model, who responds to failed runs and how quickly, and what happens to knowledge when people rotate or the engagement ends. Written down once, these answers remove most of the arguments described above.

  • Ownership of work product. Models, tests and documentation belong to the client and live in the client’s repository and dbt environment.
  • Definition changes. A named client owner approves any change to the meaning of a shared metric.
  • Delivery standard. Every model ships with tests and a description, in the same pull request.
  • Run ownership. Who monitors scheduled runs, who is alerted and the expected response time.
  • Handover. Documentation requirements and a knowledge-transfer period when a team member rotates off.

From Itelence delivery experience: Itelence engineers work inside the client’s own repository, dbt environment and sprint tooling, and analytics engineers own the transformation layer between raw data and BI consumers. Model ownership is where distributed data teams disagree most often, which is why we ask for the group owners and review rules to be agreed in the first sprint, not after the first incident.

“Nobody sets out to leave a model without an owner. It happens because every change looked small. We ask one question in the first week: if this model breaks, whose name is on it? If the answer is a shrug, we write the name down before we write any more SQL.”

— Szymon Stadnik, CEO, ITELENCE
protectedDefault dbt model access level: any model in the same project can reference it — dbt documentation
1Group a dbt resource can belong to — dbt documentation
Parse timeWhen dbt rejects a reference to another group’s private model — dbt documentation
Build timeWhen dbt checks a model’s output against its contract — dbt documentation

For how teams are staffed around this, see how to build a scalable data engineering team from Poland, and for the day-to-day side, how managed data engineering teams deliver value. The rule that holds across IT nearshoring Poland engagements is the same here: the client keeps the decisions, the team keeps the execution, and both are written down.

When Is Shared Ownership Fine, and When Is dbt Governance Too Much?

Shared ownership is fine in a small project with one or two people, one business owner and no downstream consumers beyond a handful of dashboards. In that case a single group, a CODEOWNERS file and a habit of writing model descriptions are enough, and contracts and strict access levels would only add maintenance.

Governance becomes worth the effort when several teams reference each other’s models, when dashboards or other processes outside dbt rely on specific columns, or when engineers rotate often. The honest sequence for most teams is groups and review rules first, private-by-default access second, and contracts only on the models other people depend on. The same logic applies whether the team is internal, a nearshoring in Poland partner, or a mix, though an external team makes the written version more important because less is carried by habit.

Specific sourcing models change who sits on each side of the table, not the layers. A staff augmentation engineer works to your owner’s decisions, while a managed team usually proposes the structure and you approve it. Wherever you land with nearshore development Poland providers or any others, ask early how they handle ownership in dbt. The answer shows how they work faster than a reference call does.

Get dbt Ownership Written Down Before It Is Argued About

Itelence sets group owners, review rules and run ownership in the first sprint, inside your repository and tools.

Frequently Asked Questions

Questions data teams ask most often when an external team starts working in their dbt project.

Should a nearshore engineer have permission to deploy to production?
It depends on your release process, not on location. Many teams let any engineer open a change and require owner approval and automated checks before merge, with production runs triggered by a controlled job. Apply the same rule to internal and external engineers.
Who should own dbt tests: the engineer or the business owner?
The engineer writes and maintains them, and the business owner decides what they should assert. A test for “orders are never negative” is code, but whether negative orders are allowed is a business rule.
What do we do about models that existed before the engagement started?
Inventory them, assign each to a group with a named owner, and mark models nobody claims. Unowned models are candidates for retirement or for a short ownership review before anyone changes them.
Do dbt groups replace a data catalog or an ownership register?
No. Groups record ownership of dbt resources inside the project. A catalog covers sources, dashboards and other assets that dbt does not manage. Use groups for the dbt part and keep the two consistent.
Should intermediate models be private?
Usually yes. dbt recommends setting new models to private so others do not build on models that were not designed to be shared. Private intermediate models can then change without breaking anyone outside the group.
How do we settle a disagreement between two teams about a metric definition?
Escalate it to a named business owner, not to the engineers. The data team can show the difference and the impact of each version, but the decision belongs to whoever answers for the number. Record the outcome in the model description.
What happens to model knowledge when a nearshore engineer rotates off?
If descriptions, tests and ownership live in the repository, most of it stays. Add a short overlap period with the replacement and require that documentation changes ship with the code, not afterwards.
Can a CODEOWNERS rule slow the team down?
It can if it lists too many people or covers every file. Keep it to the models that carry definitions or feed shared reporting, list owners who can respond quickly, and name a deputy for holidays.
Who owns the intellectual property in models built by an external team?
That is set by the contract, and you should confirm that models, tests and documentation belong to you and are stored in your repository. Check it explicitly rather than assuming; your legal team should review the wording.
Where should we start if our dbt project has no ownership at all today?
Create groups with owners for your main areas, assign the models that feed shared reporting first, and add a CODEOWNERS file with code-owner review on the main branch. Contracts and private-by-default access can follow once that works.
Contact us Join ITELENCE