Skip to content

ADR 002 Adopting Trunk‐Based Development for Branching Strategy

Jason Taylor edited this page Apr 7, 2024 · 4 revisions

Title

ADR 002: Adopting Trunk-Based Development (TBD) for Branching Strategy

Status

Accepted

Context

Traditionally, software teams have used various branching strategies like feature branching, where each new feature is developed in a separate branch before merging it back into the main codebase. While this method offers isolation and the ability to work on different features simultaneously, it often leads to complex merge conflicts and integration challenges. Trunk-Based Development, on the other hand, encourages developers to commit their code directly to the trunk in small, frequent increments, thereby minimizing divergence from the main code line.

Decision

The Clean Architecture Solution Template has accepted Trunk-Based Development and includes Trunk-Based Development GitHub Workflow scripts.

Consequences:

Pros:

  1. Enhanced Collaboration: With all developers working on a single branch, there's a heightened sense of collaboration and transparency. Changes are visible to the entire team, fostering a more cohesive development environment.
  2. Continuous Integration: TBD facilitates continuous integration, where code changes are immediately tested and merged, leading to quicker detection and resolution of bugs.
  3. Faster Release Cycles: By minimizing long-lived branches, TBD enables faster iterations and more agile response to market changes or customer feedback.
  4. Reduced Integration Hassles: Since there's only one branch, integration issues are significantly reduced, as there's no need to merge disparate feature branches constantly.

Cons:

  1. Risk of Breaking Changes: Frequent commits to the main branch can increase the risk of unstable or breaking changes, especially if the team lacks rigorous testing practices.
  2. Learning Curve: For teams accustomed to feature branching, transitioning to TBD can be challenging, requiring a shift in mindset and potentially leading to initial productivity dips.
  3. Requires Discipline: Successful implementation of TBD demands strict adherence to best practices like feature toggles and comprehensive testing, which may require additional upfront investment.

Rationale:

The rationale for choosing Trunk-Based Development hinges on several factors. For teams aiming for rapid delivery and high adaptability, TBD offers a compelling framework. It aligns well with DevOps principles, promoting a culture of continuous integration and continuous delivery (CI/CD). Moreover, in an era where customer feedback is invaluable, the ability to iterate quickly and push updates faster provides a competitive edge.

Furthermore, TBD aligns with modern software engineering practices that advocate for small, incremental changes, reducing the risk associated with large, infrequent releases. By fostering a culture of shared responsibility for the codebase, it also enhances team cohesion and accountability.

In conclusion, while Trunk-Based Development is not a one-size-fits-all solution, its benefits in terms of collaboration, integration, and agility make it a worthy consideration for teams striving to optimize their development process. However, successful adoption hinges on the team's ability to embrace the necessary practices and overcome the associated challenges.