FARFETCH — eng E-Commerce-App a Produktioun moderniséieren
Problem
FARFETCH ass e Marketplace fir Luxusmode, a seng Android-App hëlt Bestellunge vu Clienten aus der ganzer Welt un. Am Joer 2021 huet de Code Joere vun Entscheedunge mat sech gedroen, déi sech ugesammelt haten: MVC an den eelsten Ecranen, MVVM an deene méi neien, an d'Ofhängegkeeten iwwerall mat der Hand verbonnen. Näischt dovun war falsch, wéi et geschriwwe gouf, a genee dat alles huet all nächst Ännerung méi lues gemaach wéi déi virdrun.
D'Pipeline vun der kontinuéierlecher Integratioun huet fofzeng Minutte pro Laf gebraucht. Fofzeng Minutten ass iwwer der Grenz, wou d'Ingenieure se net méi lafe loossen a laang waarden, ier se hir Ännerungen zesummen erasetzen — an esou fënnt een d'Integratiounsproblemer spéit an deier.
Aschränkung
Näischt duerft ophalen. D'App war a Produktioun an huet Suen erabruecht, op engem Release-Zuch, dee fir Architektur-Aarbecht net gestoppt huet. All Ännerung huet Schrëtt fir Schrëtt musse landen, an déi al wéi déi nei Patterns hunn am selwechte Code musse weiderliewen, sou laang wéi d'Migratioun gedauert huet — an dat waren Joeren, keng Sprinten.
Entscheedungen
- Jetpack Compose Ecran fir Ecran agefouert, hannert der bestehender Navigatioun. Nei Ecrane goufen a Compose geschriwwen; al Ecrane goufe migréiert, wa se souwisou aus anere Grënn opgemaach goufen. Kee Migratiounssprint, kee Feature-Freeze, a kee Branch, dee sechs Méint laang lieft.
- Ëmkéierung vun der Kontroll iwwer Dependency Injection. Dat war d'Ännerung, déi de Rescht iwwerhaapt méiglech gemaach huet. D'Konstruktioun vum Verhalen ze trennen ass dat, wat et erlaabt huet, datt en eenzelen Ecran migréiere kann, ouni all seng Ofhängegkeete mat sech ze schleefen.
- Als éischt d'Moduler, dann de Cache — a genee där Reiefolleg. Eréischt d'Opdeele vum Monolith a Gradle-Moduler huet et méiglech gemaach, de Build iwwerhaapt ze cachen. Mat engem eenzege Modul mécht bal all Ännerung de ganze Build ongëlteg, an e Cache bréngt dann bal näischt; wa mol Grenzen do sinn, beréiert eng Ännerung nach e puer Moduler an de Rescht kënnt aus dem Cache.
- Duerno déi zwee Gradle-Caches, géint zwee verschidde Käschten. De Build-Cache benotzt d'Resultater vun den Tasken nach eng Kéier, vun engem Build op deen aneren a vun enger Maschinn op déi aner, sou datt d'CI net méi nei berechent, wat en anere Laf schonn produzéiert huet. De Configuration-Cache hëlt d'Konfiguratiounsphas aus de spéidere Leef eraus — dee feste Präis, deen all eenzele Build virdru bezuelt huet, egal wéi wéineg sech geännert hat.
Resultat
D'Pipeline ass am Duerchschnëtt vu 15 Minutten op 2,5 erofgaang — erëm ënner der Grenz, wou d'Ingenieure se bei all Ännerung lafe loossen, amplaz laang ze waarden.
Compose an Dependency Injection sinn allebéid de Standard fir all nei Aarbecht ginn an net parallel Experimenter. Dat ass dat eenzegt dauerhaft Resultat, dat eng schrëttweis Migratioun ka bréngen: dee neie Wee muss dee liichte Wee sinn, soss gewënnt deen ale Wee duerch d'Gewunnecht.
Wat ech anescht maache géif
Ech géif d'Moduler virun der Migratioun maachen an net zur selwechter Zäit. Mir hunn déi zwou Saache gläichzäiteg gemaach, an dat selwecht Argument, dat ech fir de Build-Cache maachen, gëllt och fir d'Migratioun: et sinn d'Grenzen tëscht de Moduler, déi eng schrëttweis Ännerung bëlleg maachen. Ouni si huet all Ecran, deen op Compose migréiert gouf, nach ëmmer dat ganzt Netz vun Ofhängegkeeten hannert sech hier gezunn, an d'Migratioun huet eng Steier bezuelt, déi net néideg war. D'Aarbecht un der Pipeline huet de Punkt bewisen — ech hunn en nëmmen an der falscher Reiefolleg bewisen.