5. Kompleksiškumo anatomija
Sudėtingumas vs. kompleksiškumas
- Sudėtingumas: kiek komponentų, API, funkcijų.
- Kompleksiškumas: kiek sunku išlaikyti sistemą galvoje.
10 sistemų su aiškiais API – sudėtinga.
1 sistema su magija – kompleksiška.
Geras architektas ne sumažina sudėtingumą, o suvaldo kompleksiškumą.
Kompleksiškumo šaltiniai
- Neaiškios atsakomybės
- Glaudus susiejimas
- Paslėptos priklausomybės
- Neaiški būsena
- Nekonsekventiškumas
- Istorinės priežastys
- Žinių trūkumas
- Techninė skola
- Netinkamas abstrakcijos lygis
- Neaiškūs tikslai
Kompleksiškumo požymiai
- Baimė keisti
- „Magija“
- Ritualai
- Priklausomybė nuo ekspertų
- Ilgas įsitraukimo laikas
- Netikėtos klaidos
- „Restartas padeda“
- Sunkumai testuojant
- Dokumentacijos trūkumas / perteklius
- Lėtas vystymasis
Kaip matuoti kompleksiškumą
Kiekybiniai matai:
- Ciklomatinis kompleksiškumas
- Priklausomybių skaičius
- Kodo dubliavimas
- Kodo eilučių skaičius
- Pakeitimų dažnis
Kokybiniai matai:
- Baimės koeficientas
- Įsitraukimo laikas
- „Bus fix’inta vėliau“ komentarai
- Dokumentacijos kokybė
- Klaidų skaičius
Kompleksiškumo valdymo strategijos
- Aiškios atsakomybės
- Laisvas susiejimas
- Aukšta kohezija
- Abstrakcijos
- Nuoseklumas
- Inkrementinis refaktoringas
- Dokumentacija
- Automatizuoti testai
- Moduliarizacija
- Paprastumas
Kada kompleksiškumas neišvengiamas
- Domeno kompleksiškumas
- Techninis kompleksiškumas
- Istorinis kompleksiškumas
- Organizacinis kompleksiškumas
- Reguliacinis kompleksiškumas
- Evoliucinis kompleksiškumas
Valdymas ≠ eliminavimas.
Praktiniai pavyzdžiai kompleksiškumo mažinimui
- Monolito skaidymas į mikroservisus
- Domeno modelio refaktoringas
- Techninės skolos grąžinimas
- Dokumentacijos gerinimas
- Testavimo strategijos stiprinimas
- Kodo refaktoringas
- Architektūros peržiūra
- Žinių dalijimasis
Kompleksiškumo mažinimas – nuolatinis procesas.