When coding an application, it is important to stay in sync with the other engineers working on the project. One strategy that helps a team stay in sync with code base changes is trunk-based development. When applying trunk-based development, developers working on a project make all their code changes in a common branch known as “trunk”. There are many benefits to developing with this approach, which we will discuss in this article.
What is trunk-based development?
Trunk-based development is a version control practice where developers merge small, frequent updates into a core or mainline. It is a common practice among DevOps teams and part of the DevOps life cycle as it streamlines merger and integration phases. In fact, trunk-based development is a necessary practice for CI / CD. Developers can create short-lived branches with a few small commits compared to other long-lived feature branching strategies. As the complexity and team size of the code base grows, trunk-based development helps keep production releases flowing.
Trunk-based development (TBD) is a branching model for software development, where developers merge each new function, bug fix, or other code change into one central branch of the version control system. This branch is called “tribe”. Trunk-based development enables continuous integration and continuous delivery by creating an environment where commits to trunk naturally occur several times daily for each programmer. This makes it easy to meet the requirement of continuous integration and have a code base that can be released at any time, which is necessary for continuous delivery and continuous implementation. In trunk-based development, developers push code directly into the trunk. Changes made to the release branches or snapshots of the code when it is ready to be released are usually merged back into the trunk as soon as possible. In this approach, there are cases where bug fixes need to be merged into releases, but these cases are not as frequent as the development of new features in the trunk. In cases where releases occur several times a day, release branches are not required at all because changes can be pushed directly into the trunk and implemented from there. An important advantage of the trunk-based approach is that it reduces the complexity of braiding events and keeps the code up to date by having fewer development lines and by making small and frequent braids.
Trunk-based development and feature flags
In other words, trunk-based development is a method of releasing new features and small changes quickly, while helping to avoid long bug fixes and “merge hell”. It is a growing popular DevOps practice among agile development teams and is often paired with feature flags or feature shifts to ensure that all new features can be rolled back quickly and easily if errors are detected. The practice of marking functions or wrapping new functions into code that can be turned on and off remotely is a common development process that software engineers use to help implement trunk-based development while reducing the risk of introducing errors in the code. Because trunk-based development involves working in a single branch of the production environment, feature flags provide a way to introduce new features and changes to the code in a controlled manner, allowing them to be quickly turned off if errors are detected.
Benefits of trunk-based development
1. Allows continuous code integration
Trunk-based development is a necessary practice for continuous integration. If building and testing processes are automated, but developers work on isolated, long functional branches that are rarely integrated into a shared branch, continuous integration does not live up to its potential. In the trunk-based development model, there is a repository with a gentle stream of commits flowing into the main branch. The addition of an automated test suite and code coverage monitoring for this stream of commits enables continuous integration. When new code is merged into the trunk, automatic integration and code coverage tests are run to validate the code quality.
2. Ensures fast and continuous code review
The fast, small commits of trunk-based development make code crawling a more efficient process. With small branches, developers can quickly see and review small changes.
Enables continuous production code releases
Teams should make frequent, daily mergers to the main branch. Trunk-based development strives to keep the trunk branch “green”, which means it is ready to be implemented at any commit. Automated testing, code convergence and code reviews give a trunk-based development project the insurances it is ready to implement for production at any time. This gives the team the flexibility to frequently implement for production and set additional goals for daily production releases.
4. Faster releases
Trunk-based development enables teams to send new changes to production much faster and is a prerequisite for Continuous Integration and Continuous Delivery (CI / CD).
Trunk-based development best practices
Develop in small batches
Keeping commits and branches small allows for a faster pace of mergers and implementations.
Feature flags compliment trunk-based development by enabling developers to wrap new changes to an inactive code path and activate it at a later time. Function flags directly encourage small batch updates.
Implement comprehensive automated testing
Automated testing is necessary for any modern software project that intends to achieve CI / CD. Automated testing helps trunk-based development by maintaining a small batch rhythm as developers merge new commits. The automated test suite reviews the code for any issues and approves or rejects it automatically. This helps developers quickly create commits and run them through automated tests to see if they introduce new issues.
Braid branches to the trunk at least once a day
High-performance, trunk-based development teams should close and merge all open and merger-ready departments at least on a daily basis.
I hope you found this post helpful, and if you need help with trunk-based development, let us know.