Utviklerteam bør være stream-aligned

Hvordan skal man strukturere teams gitt en mikrotjeneste arkitektur?
Taylorism , feature based eller stream-aligned?

Stream-aligned er som regel best og her er hvorfor:

Taylorism

Her deler man teamene inn i siloer for de forskjellige delene av tech-stacken. Ett team eier presentasjonslaget (frontend), ett businesslaget (backend) og ett siste team data-laget (database admins). For å kunne implementere én feature må man kommunisere mellom alle disse lagene og gjøre en handoff. Dette er dårlig fordi Kommunikasjon mellom mennesker er lossy AF. Som Conways lov tilsier så vil den skjøreste biten i programvare være kommunikasjonen som skal skje mellom produkter laget av forskjellige team.

Feature based

Her eier hvert team én feature. Her eier alle i teamet hele stacken. Problemet er at feature som regel går på tvers av hverandre i samme kodebase. To teams må endre samme backend A, og det skaper problemer når de må endre samme kode samtidig. Både med tanke på merge-konflikter og deployment & testing.

Stream aligned

Her eier hvert team en "stream", eller område. I en bank kan det f.eks. være ett team som eier aksjebehandling, et annet som eier betaling og ett som eier bankoverføringer. Her eier hvert team en hel løsning. De eier alle mikrotjenestene innenfor sitt domene. Dermed går man ikke på tvers av hverandre, og man kan levere features som et team.
Dette betyr ikke at alle må være generalister. Man trenger både spesialistene og generalistene.

I tillegg til å ha disse "vertikale" teamene kan man ha horisontale teams som lager støtteverktøy som er felles for alle teamene. Eventuelt en gruppe med eksperter som kan hjelpe der det trengs. Ting som arkitektur, plattform og sikkerhet. Der med kan man redusere Accidental Complexity for hvert team slik at de kan fokusere på å løse selve kjerneproblemet.