Trunk-based development

Trunk-based development (TBD) er en programvareutviklingsstrategi der ingeniører slår sammen mindre endringer hyppigere til hoveddatabasen

Hva er Trunk-based development?

Trunk-based development (TBD) er en programvareutviklingsstrategi der ingeniører slår sammen mindre endringer hyppigere til hoveddatabasen og jobber fra trunk-kopien fremfor å jobbe på langlivede feature branches. Denne utviklingsmodellen benyttes ofte som del av et continuous integration-arbeidsflytopplegg.

Hvorfor bruke Trunk-based development?

Med mange ingeniører som jobber i den samme kodebasen er det viktig å ha en strategi for kildekontroll og hvordan enkeltpersoner jobber sammen. For å unngå å overskrive hverandres endringer oppretter ingeniører sin egen kopi av kodebasen, kalt branches. I analogi med et tre kalles hovedkopien noen ganger for mainline eller trunk. Prosessen med å innlemme endringene fra en individuell kopi inn i hoved-trunken kalles merging.

For å forstå Trunk-based development er det nyttig å først se på den alternative strategien, feature branch-utvikling.

I feature branch-utvikling slår individuelle programvareutviklere eller team av ingeniører ikke sammen sin nye branch før en funksjon er komplett, og jobber noen ganger i uker eller måneder på en separat kopi.

feature branch-utvikling

Denne lange tidsperioden kan gjøre prosessen med å slå sammen vanskelig fordi trunk eller master branch sannsynligvis har endret seg på grunn av at andre ingeniører har slått sammen sine kodeendringer, og versjonskontroll blir vanskelig. Denne feature branching-praksisen kan resultere i en langvarig kodegjennomgangsprosess når man ønsker å opprette en release branch for deployment, noe som ofte resulterer i at mange forskjellige pull requests må analyseres for å løse merge-konflikter.

Fordeler med Trunk-based development

Trunk-based development tar en mer continuous delivery-orientert tilnærming til programvareutvikling, og branches er kortlivede og slås sammen så hyppig som mulig. Branchene er mindre fordi de ofte bare inneholder deler av en funksjon. Disse kortlivede utviklingsgrenene gjør sammenslåingsprosessen enklere fordi det er mindre tid for divergens mellom hoved-trunken og branch-kopiene.

trunk-based-development

Trunk-based development er dermed en metodikk for å raskt lansere nye funksjoner og små endringer, samtidig som det bidrar til å unngå langvarige feilrettinger og «merge-helvete». Det er en voksende populær DevOps-praksis blant smidige utviklingsteam, og kombineres ofte med feature flags eller feature toggles for å sikre at nye funksjoner raskt og enkelt kan rulles tilbake hvis det oppdages feil.

Trunk-based development og feature flags

Praksisen med feature flagging (banebrytende av Martin Fowler), eller å pakke inn nye funksjoner i kode som kan slås av og på eksternt, er én vanlig utviklingsprosess som programvareingeniører benytter for å hjelpe til med å implementere Trunk-based development og samtidig redusere risikoen for å introdusere feil i koden.

Fordi Trunk-based development innebærer å jobbe i en enkelt branch i produksjonsmiljøet, gir feature flags en måte å introdusere nye funksjoner og endringer i koden på en kontrollert måte, og gjør det mulig å raskt slå dem av hvis det oppdages feil.

Feature flags kan også brukes til å rulle ut funksjoner sakte til en liten del av et prosjekts brukerbasis i stedet for å ha én stor lansering, noe som bidrar til å begrense skadeomfanget av potensielt feilbeheftet kildekode.

Trunk-based development og Optimizely Feature Experimentation

Optimizely Feature Experimentation tilbyr en komplett rekke utviklerverktøy som feature flags, feature rollouts, feature variables og A/B-testing som muliggjør Trunk-based development og rask lansering av ny kode, og minimerer risikoen.

Og for utviklere som ønsker å komme i gang med bare feature flags, tilbyr Optimizely gratis feature flagging ubegrenset feature flagging-kapasitet i et dusin av de mest populære språkene og bibliotekene der ute.