Trunk-Based Development

Trunk-Based Development (TBD) ist eine Softwareentwicklungsstrategie, bei der Ingenieure kleinere Änderungen häufiger in die Haupt-Codebasis einpflegen

Was ist Trunk-Based Development?

Trunk-Based Development (TBD) ist eine Softwareentwicklungsstrategie, bei der Ingenieure kleinere Änderungen häufiger in die Haupt-Codebasis einpflegen und an der Trunk-Kopie arbeiten, anstatt an langlebigen Feature Branches. Dieses Entwicklungsmodell wird oft als Teil eines Continuous-Integration-Entwicklungsworkflows eingesetzt.

Warum Trunk-Based Development verwenden?

Bei vielen Ingenieuren, die in derselben Codebasis arbeiten, ist es wichtig, eine Strategie für die Quellcodeverwaltung und die Zusammenarbeit der Einzelnen zu haben. Um gegenseitiges Überschreiben von Änderungen zu vermeiden, erstellen Ingenieure ihre eigene Kopie der Codebasis, sogenannte Branches. In Analogie zu einem Baum wird die Hauptkopie manchmal als Mainline oder Trunk bezeichnet. Der Prozess der Integration der Änderungen einer individuellen Kopie in den Haupt-Trunk wird als Merging bezeichnet.

Um Trunk-Based Development zu verstehen, ist es sinnvoll, zunächst einen Blick auf die alternative Strategie zu werfen: die Feature-Branch-Entwicklung.

Bei der Feature-Branch-Entwicklung führen einzelne Softwareentwickler oder Teams von Ingenieuren ihren neuen Branch erst zusammen, wenn ein Feature fertiggestellt ist – manchmal arbeiten sie wochenlang oder monatelang an einer separaten Kopie.

Feature-Branch-Entwicklung

Dieser lange Zeitraum kann den Merge-Prozess schwierig machen, da der Trunk oder Master Branch sich wahrscheinlich verändert hat, weil andere Ingenieure ihre Code-Änderungen eingebracht haben und die Versionsverwaltung schwierig wird. Dieses Feature Branching kann zu einem langwierigen Code-Review-Prozess führen, wenn es darum geht, einen Release Branch für das Deployment zu erstellen, was oft dazu führt, dass viele verschiedene Pull Requests analysiert werden müssen, um Merge-Konflikte zu lösen.

Vorteile von Trunk-Based Development

Trunk-Based Development verfolgt einen stärker auf Continuous Delivery ausgerichteten Ansatz für die Softwareentwicklung, und Branches sind kurzlebig und werden so häufig wie möglich zusammengeführt. Die Branches sind kleiner, weil sie oft nur einen Teil eines Features enthalten. Diese kurzlebigen Entwicklungs-Branches machen den Merge-Prozess einfacher, da weniger Zeit für Divergenzen zwischen dem Haupt-Trunk und den Branch-Kopien bleibt.

trunk-based-development

Trunk-Based Development ist daher eine Methodik zur schnellen Veröffentlichung neuer Features und kleiner Änderungen und hilft dabei, langwierige Bug-Fixes und „Merge-Hölle" zu vermeiden. Es ist eine zunehmend verbreitete DevOps-Praxis unter agilen Entwicklungsteams und wird oft mit Feature Flags oder Feature Toggles kombiniert, um sicherzustellen, dass neue Features bei Entdeckung von Bugs schnell und einfach zurückgerollt werden können.

Trunk-Based Development und Feature Flags

Die Praxis des Feature Flaggings (von Martin Fowler geprägt), also das Einwickeln neuer Features in Code, der per Fernzugriff ein- und ausgeschaltet werden kann, ist eine gängige Entwicklungspraxis, die Softwareingenieure einsetzen, um Trunk-Based Development umzusetzen und dabei das Risiko der Einführung von Bugs in den Code zu reduzieren.

Da Trunk-Based Development das Arbeiten in einem einzigen Branch in der Produktionsumgebung beinhaltet, bieten Feature Flags eine Möglichkeit, neue Features und Änderungen auf kontrollierte Weise in den Code einzuführen und sie bei Entdeckung von Bugs schnell deaktivieren zu können.

Feature Flags können auch verwendet werden, um Features schrittweise an einen kleinen Teil der Nutzerbasis eines Projekts auszurollen, anstatt einen großen Launch durchzuführen, was dazu beiträgt, den Schadenradius potenziell fehlerhaften Quellcodes zu begrenzen.

Trunk-Based Development und Optimizely Feature Experimentation

Optimizely Feature Experimentation bietet eine vollständige Palette von Entwickler-Tools wie Feature Flags, Feature-Rollouts, Feature-Variablen und A/B-Testing, die Trunk-Based Development und die schnelle Veröffentlichung neuer Code-Änderungen ermöglichen und dabei das Risiko minimieren.

Und für Entwickler, die einfach mit Feature Flags beginnen möchten, bietet Optimizely Free Feature Flagging unbegrenzte Feature-Flagging-Funktionalität in einem Dutzend der beliebtesten Sprachen und Bibliotheken.