Trunk-Based Development (TBD) is a Git workflow where all developers collaborate on a single shared branch, typically main
or master
. It encourages small, incremental changes that are merged back frequently — often several times per day — and is a foundational practice for high-velocity teams embracing continuous integration and continuous delivery (CI/CD).
TBD is widely adopted by application engineering teams at high-performing tech companies like Google, Facebook, and Netflix. These teams:
Deploy code to production multiple times per day.
Rely on robust CI/CD pipelines with automated testing, linting, and security scanning.
Use feature flags to safely release incomplete features to production.
Optimize for speed and feedback loops over isolated development.
In these environments, trunk-based development helps eliminate the pain of long-lived branches, messy merges, and delayed integrations.
Developers commit code directly to main
or create short-lived feature branches that are merged back quickly (usually within a day).
Feature flags are used to hide unfinished work from users while still integrating code early.
Each commit triggers CI tests, ensuring code quality.
Deployments are often automated and happen multiple times a day.
Fast integration and feedback: Prevents divergence and reduces complex merge conflicts.
Improved release velocity: Ideal for teams practicing continuous deployment.
Simpler Git history: Fewer long-lived branches to manage.
Encourages small, modular commits: Promotes good engineering discipline.
Requires strong testing practices — weak test suites will lead to breakages.
Feature flags add operational complexity and need to be maintained.
Hard to manage in monolithic codebases or legacy systems.
Not well-suited for teams without CI/CD maturity.
While TBD is commonplace in app development, it’s less widely adopted in data teams — but that’s starting to change.
From my experience, most data teams still use a Git Flow model:
Long-lived dev
, staging
, and main
branches
Features are developed in separate branches and merged upward
Releases are often batched or manually coordinated
This works well for teams that:
Deploy less frequently
Rely on scheduled batch processing
Have limited automation or test coverage
But this model also introduces:
Merge drift (where dev
diverges significantly from main
)
Large/Long-lived PRs that are hard to review and merge cleanly
Delayed feedback loops and increased coordination overhead
Many data pipelines are batch-based, not real-time, so feedback is slower.
CI/CD for data (e.g., dbt, Airflow) is still catching up to application tooling.
Testing data changes is non-trivial: you may not know something broke until a table is empty or a report is wrong.
Legacy data platforms may lack good environment isolation or support for feature flagging.
Tools like dbt Cloud, Datafold, and Great Expectations bring testing and CI to the data world.
Versioned data pipelines and Git-based orchestration (e.g., with Airflow, Dagster, Prefect) enable safer adoption.
Data teams working in modern cloud environments (Snowflake, BigQuery, Databricks) can start mimicking app-team practices.
✅ You’re ready for TBD if:
You have automated testing and CI pipelines in place.
Your team merges code multiple times per day.
You use (or are willing to adopt) feature flags.
You prioritize speed and fast iteration.
❌ Hold off if:
You’re still working with long-lived batch jobs and no automated testing.
Your dev environments are shared or fragile.
You’re managing data manually in production.
Trunk-Based Development is a powerful strategy that aligns beautifully with modern software delivery practices. While it’s most effective for application engineering teams, forward-thinking DataOps and ML Engineering teams can also benefit — especially as testing, CI/CD, and infrastructure-as-code become standard in the data world.
Even if full TBD feels out of reach today, adopting its core principles — like small PRs, short-lived branches, and fast feedback — can meaningfully improve your team’s velocity and quality.