Bij verticale segmentering wordt een verhaal opgedeeld op basis van gebruikersresultaten; bij horizontale segmentering gebeurt dit op basis van technische lagen. Die ene keuze bepaalt of elke segment iets oplevert of niets. Verticale segmenten leveren waarde op. Horizontale segmenten leveren beloften op.

Horizontaal snijden is hetzelfde als de manier waarop een mes deeg doorsnijdt: u krijgt twee helften van niets.

Het verschil

Bij horizontale opdeling wordt het werk verdeeld over architecturale lagen: deze sprint de frontend, de volgende sprint de backend en de sprint daarna de database. Het werk past binnen de sprints, maar geen enkele sprint levert iets op dat gebruikers daadwerkelijk kunnen ervaren. De velocity-cijfers van het team stijgen; het changelog voor gebruikers blijft echter leeg.

Verticale opdeling vindt plaats op basis van gebruikersresultaten. Een dunne segmentatie die elke laag raakt: één enkele knop die daadwerkelijk van begin tot eind functioneert, zelfs als deze slechts één invoergeval afhandelt. Het team levert minder per segment, maar elk segment is een echt, leverbaar geheel. Het wijzigingslogboek vult zich, gebruikers zien vooruitgang en het team kan de koers bijstellen op basis van daadwerkelijk gebruik in plaats van voorspeld gebruik.

A layered cake split horizontally versus the same cake split vertically Horizontal Vertical UI Logic Data → shipped nothing for users until all three land UI Logic Data slice 1 ships end-to-end, on its own sprint 1: nothing usable sprint 1: working slice
Horizontale segmenten worden laag voor laag geleverd. Verticale segmenten worden per werkkolom geleverd: een klein deel van elke laag, dat nu al bruikbaar is.

Wanneer horizontale segmentering noodzakelijk lijkt

Dat is meestal niet het geval. „We hebben het databaseschema nodig voordat we de gebruikersinterface kunnen bouwen” is de klassieke rechtvaardiging, en die maakt bijna altijd plaats voor „we kunnen het antwoord hardcoderen, de gebruikersinterface opleveren en de database in de volgende fase bouwen.” Het ongemak van het opleveren van een nep-backend is reëel, maar het is minder groot dan het ongemak van het drie sprints lang niets opleveren.

De uitzondering: fundamenteel platformwerk

Sommige infrastructuuronderdelen hebben geen voor de gebruiker zichtbaar onderdeel totdat ze volledig zijn voltooid: de migratie naar een nieuwe authenticatieprovider, het vervangen van een wachtrij-backend of het vernieuwen van de implementatiepijplijn. Dit zijn projecten, geen user stories. Behandel ze dan ook als zodanig: splits ze niet horizontaal op en doe niet alsof. Bepaal de omvang ervan als een project, communiceer de tijdlijn en accepteer dat de snelheid van het team een weerspiegeling zal zijn van de investering. Het opdienen van een migratie van drie sprints als drie „stories“ misleidt alleen de burndown-grafiek.

Als een slice niets bevat wat een gebruiker kan gebruiken, is het geen slice.

Veelgestelde vragen

Wat houdt ‘verticaal opdelen’ in bij agile?

Bij verticaal opdelen wordt een verhaal opgesplitst op basis van gebruikersresultaten, zodat elk deel een dunne doorsnede vormt door alle lagen heen (gebruikersinterface, logica en gegevens) en iets oplevert dat een gebruiker daadwerkelijk kan gebruiken, zelfs als het slechts één specifiek geval afhandelt. Elk deel kan afzonderlijk worden uitgebracht.

Wat is het verschil tussen horizontaal en verticaal segmenteren?

Bij horizontale opdeling wordt er per technische laag gewerkt: de ene sprint is voor de frontend en de volgende voor de backend, waardoor er in geen enkele sprint iets wordt opgeleverd dat de gebruiker daadwerkelijk kan gebruiken. Bij verticale opdeling wordt er per gebruikersresultaat gewerkt, zodat elke opdeling een werkend end-to-end-traject oplevert. Verticale opdelingen leveren waarde op; horizontale opdelingen leveren beloften op.

Waarom is verticale opdeling beter?

Omdat elke ‘slice’ een concreet, leverbaar onderdeel is. De changelog vult zich, gebruikers zien vooruitgang en het team kan de koers bijstellen op basis van daadwerkelijk gebruik in plaats van voorspeld gebruik. Horizontale opdeling verhoogt de snelheidscijfers, terwijl het product dat de gebruiker te zien krijgt gedurende meerdere sprints tegelijk ongewijzigd blijft.

Wanneer is horizontale opsplitsing aanvaardbaar?

Wanneer het gaat om fundamenteel platformwerk zonder een voor de gebruiker zichtbaar onderdeel dat nog niet voltooid is: het migreren van authenticatieproviders, het vervangen van een wachtrij-backend of het vernieuwen van de implementatiepijplijn. Dit zijn projecten, geen user stories: beoordeel de omvang ervan als zodanig en communiceer de tijdlijn, in plaats van te doen alsof ze in kleinere delen kunnen worden opgesplitst.

Aanbevolen lectuur