Zdravstvo / SaaS
SaaS platforma za upravljanje radnom snagom u zdravstvu
Arhitektura i CI/CD za proizvod koji raste — prelazak nasleđene baze koda otporne na promene na mikroservisnu arhitekturu sa deljenom bibliotekom komponenti, bez zaustavljanja isporuke.
Pregled
Proizvod za upravljanje radnom snagom u zdravstvu bio je pronašao stvarnu trakciju, a sada ga je kočilo ono što ga je tu dovelo: kod koji je isporučio prvu verziju. Ovo je bilo manje izgradnja na čistom terenu, a više pažljiva transplantacija — držati pacijenta na nogama dok se arhitektura ispod menja.
Problem
Simptomi su bili klasični za proizvod koji je prerastao svoje početke. Izdanja su bila spora i nervozna. Rad na UI-ju se dupliciravao kroz projekte jer nije postojao deljeni temelj na kojem bi se gradilo. A i sama arhitektura se opirala promeni — svaka nova funkcionalnost je doticala više nego što bi trebalo, pa su procene rasle, a poverenje opadalo. Ništa od ovoga nije kriza u bilo kom pojedinačnom danu; to je porez koji se kumulira dok tim ne izgubi sposobnost da se pomeri.
Rešenje
Dizajnirao sam i implementirao softversku arhitekturu i CI/CD procese da bih isporuku vratio pod kontrolu:
- Laravel backend API-jevi kao granica servisa, sa Vue i React frontendovima koji ih konzumiraju.
- Deljeni repozitorijum komponenti tako da se jednom napravljen UI mogao ponovo koristiti kroz projekte umesto da se iznova implementira — čime je dupliciranje ubijeno u korenu.
- Vođen prelazak sa nasleđene baze koda na mikroservisnu arhitekturu, urađen inkrementalno umesto kao veliko prepisivanje od jednom.
Ishod su bila brža, sigurnija izdanja i baza koda na kojoj je više timova moglo da gradi paralelno bez gaženja jedni drugima.
Arhitektura
Prelazak na mikroservise bio je vođen topologijom timova koliko i tehnologijom: cilj je bio da odvojeni timovi vlasništvo drže nad odvojenim servisima i isporučuju sopstvenim tempom. Backend sposobnosti su izdvojene iza Laravel API-jeva sa jasnim ugovorima; frontendovi su postali konzumenti tih ugovora umesto da posežu u deljeno monolitno jezgro.
Deljena biblioteka komponenti zaslužuje poseban pomen jer je najmanje glamurozan i najveći deo poluge. Zajednički temelj dizajn-sistema značio je da dugme, forma, tabela izgledaju i ponašaju se isto svuda, budu pristupačni po podrazumevanoj vrednosti, i budu popravljeni na jednom mestu. To je razlika između tri tima od kojih svaki održava svoj malo pokvaren birač datuma i jednog dobrog.
Tehnički izazovi
Zaista težak deo svake modernizacije nasleđa jeste to da ne možeš da zaustaviš posao dok je radiš. Migracija je morala da bude inkrementalna: davi nasleđene putanje jednu po jednu sposobnost, drži i staro i novo da rade jedno uz drugo tokom predaje, i nikada ne stavljaj tim pred dan velikog prelaska. To zahteva disciplinu oko šavova — tačno znanje gde nova arhitektura sreće staru, i činjenje tih granica eksplicitnim i povratnim.
CI/CD je bio omogućavajući posao koji je ostalo učinio sigurnim. Ne možeš da migriraš sa poverenjem ako je svaki deploy ručan, strašan događaj; automatizovanje puta od komita do produkcije je ono što je „veliko rizično izdanje” pretvorilo u „mnogo malih dosadnih”.
Naučene lekcije
Modernizacija je problem ljudi u kostimu tehnologije. Arhitektonski izbori su bili važni, ali su deljena biblioteka komponenti i CI/CD pipeline bili važniji, jer su promenili kako timovi rade iz dana u dan. Daj ljudima brzu povratnu informaciju i temelje koji se mogu ponovo koristiti i dobar deo problema „kod se opire promeni” se sam od sebe rasplinjuje. Inkrementalno pobeđuje herojsko — svaki put.