Kann mir Trunk-basierte Entwicklung dabei helfen, effizienter zu programmieren?

May 02, 2019

Trunk-basierte Entwicklung hilft, das Programmieren in Teams effizienter zu gestalten, bedeutet aber auch, Kontrolle abzugeben. Dieser Artikel gibt einen kurzen Einblick, was Trunk-basierte Entwicklung ist und wem sie nutzt.

Git, Github, Gitflow & Co.

Moderne Softwareentwicklung kommt nicht mehr ohne Teamarbeit und effizientes Versionsmanagement aus. Paralleles Arbeiten wird einfacher, Änderungen bleiben nachvollziehbar und entstandene Fehler können korrigiert werden. Dabei ist Git mit ca. 70% das mit Abstand meist verwendete Version-Control-System, etwa bei GitHub. Bei Git werden vom Hauptprojekt Branches, Kopien des Programmes, gezogen an denen neue Features geschrieben werden. Ist ein Projektabschnitt fertig, werden die Branches wieder zusammengefügt. Wie genau bestehende und neue Programmabschnitten zusammenkommen, unterscheidet die beliebtesten Git Formen: Git Flow und Trunk-basierte Entwicklung. Bei Git Flow werden Branches per Pull Requests zurückgeschickt. Bevor ein Branch aufgenommen wird, wird er begutachtet. Verbesserungsvorschläge können formuliert oder Änderungen abgelehnt werden. Erst nach diesen Feedbackrunden und eventuellen Änderungen ist der neue Abschnitt Teil des bestehenden Programmes. Die Entwickler arbeiten also an Develop Branches (Forks bei GitHub). Auf den Hauptbranch hat die Person, die das Projekt verantwortet, exklusiven Zugang.

In der Praxis kann dieser Prozess für beide Seiten sehr zeitaufwändig und mühsam werden, da jeder einzelne Pull Request bearbeitet werden muss. Wenn zwischen einzelnen Branch Versionen Konflikte auftreten, muss das Team durch die Merging-Hölle, bevor wieder eine einheitliche Version des Projektes vorliegt. Besonders in der finalen Phase eines Projektes, wenn die Zeit knapp wird, kann dies zur Belastung werden. Außerdem besteht die Gefahr, sich mit Details des jeweiligen Pull Requests aufzuhalten, statt den Code als Ganzes zu betrachten.

Was macht Trunk-basierte Entwicklung anders?

Trunk-basierte Entwicklung verschlankt diesen Prozess deutlich. Jeder Entwickler bekommt
direkten Zugriff auf den Hauptzweig des Projektes, den Masterbranch oder auch Trunk („Stamm“). Jeder Entwickler steht nun selbst in der Verantwortung seine Arbeit zu überprüfen. Der Entwicklungsprozess wird deutlich vereinfacht und effizienter. Sollten Fehler am Trunk auftreten, müssen diese direkt behoben werden. Die Neuausrichtung eines Projekts kann dadurch deutlich schneller umgesetzt werden.

Der zentrale Entscheidungsträger wählt nur den Zeitpunkt, an dem ein Projekt veröffentlicht wird. Verwendet wird Trunk-basierte Entwicklung etwa bei großen Akteuren wie Google und Facebook. Die Entwickler können autonomer agieren, haben mehr Freiraum und ihnen wird Vertrauen entgegengebracht. Dieses Vertrauen bedeutet natürlich auch, Kontrolle abzugeben. Da das gesamte Team „in den Trunk“ programmiert, lassen sich später entstandene Fehler deutlich schwieriger korrigieren. Enthält der Trunk Fehler, fällt das gesamte Team auf die letzte funktionierende Version zurück. Entscheidend ist deshalb möglichst kontinuierlich, kleine Änderungen vorzunehmen. Die Prozesse, welche den Code testen, sollten optimiert sein. Darüber hinaus sind einheitliche Standards unerlässlich. Schreibt ein einzelnes Teammitglied Fehler in den Trunk, wird – unter Umständen – das gesamte Team aufgehalten. Diese kontinuierlichen, gleichmäßigen Änderungen sollten sich auch in den Tickets widerspiegeln, die Produktmanager ihren Entwicklern aufgeben.

Zusätzlich stehen unerfahrene Teams vor der Herausforderung, dass kontinuierliche Code Reviews wegfallen. Damit wird Code Review zur eigenständigen Aufgabe, die sich zwar flexibler gestalten lässt, aber auch unabhängig vom eigentlichen Programmieren ausgeführt werden muss. Auch hier sind Vertrauen und Kommunikation unabdingbar. Um langwierige Aufgaben durchzuführen, ohne dabei den Rest des Teams aufzuhalten, oder gar die Veröffentlichung eins Projekts zu gefährden, können Entwickler auf Branch by Abstraktion zurückgreifen. Wie beim Reifenwechsel eines Formel-1-Wagens helfen hier klar definierte Schritte, Veränderungen anzukündigen, eigenverantwortlich umzusetzen und kontrolliert wieder in den Trunk einzubinden. Ein weiteres nützliches Instrument Trunk-basierter Entwicklung sind Feature Flags, die als Schalthebel im bestehenden Code neu entwickelte Features zu- und abschalten.

Zusammenfassend lässt sich Trunk-basierte Entwicklung für eingespielte, erfahrene Teams empfehlen, denen die schnelle Umsetzung von Ideen wichtiger ist als absolute Sicherheit. Für Open-Source-Projekte, etablierte Produkte und unerfahrenen Teams eignet sich dieser Ansatz hingegen weniger. In diesen Fällen, wenn die Möglichkeit auf Sicherheit zu verzichten, nicht gegeben ist, stellt Git Flow die sichere, aber langsamere Lösung dar.

 

Für einen tieferen Einblick in Trunk-basierte Entwicklung:

• Paul Hammant hat auf trunkbasemendevelopment.com verschiedenste Aspekte der
Thematik zusammengetragen.
• In diesem Talk zeigt Matthias Huttar auf, welche Entwicklung Teams beim Umstieg von Git
Flow auf Trunk-basierte Entwicklung typischerweise durchlaufen.

Um diese Website zu verbessern, verwenden wir Cookies. Für weitere Informationen lesen Sie bitte unsere Datenschutzerklärung. Um der Verwendung von Cookies auf dieser Website zuzustimmen, klicken Sie bitte auf "Zustimmen".