Dalji razvoj starog sistema bivao je sve teži.
Aplikacija je radila na .NET Frameworku, njeni delovi su se povezivali preko WCF-a, a veliki deo poslovne logike nalazio se u uskladištenim procedurama baze podataka. Zbog toga je bilo teško pratiti koje delove sistema neka izmena zahvata, a dalji razvoj je zahtevao mnogo usaglašavanja i opreza.
Bilo je potrebno rešenje uz koje svakodnevni rad može da se nastavi, dok sistem postepeno postaje lakši za održavanje i proširivanje.
Arhitekturu smo menjali korak po korak.
Isplanirali smo pravac modernizacije, a važne tehničke odluke smo dokumentovali i usaglasili sa klijentom. Novi moduli su postepeno preuzimali zadatke starog koda, pa tokom preoblikovanja nije bilo potrebno odjednom zameniti celu aplikaciju.
Izgradili smo više modularnih monolita sa kodom organizovanim po principima Clean Architecture i sa jasno razdvojenim odgovornostima. Komunikaciju između modula organizovali smo preko medijatora, kako bi njihov rad bio pregledniji, a dalji razvoj lakši za vođenje.
Testiranje smo učinili delom razvojnog procesa.
U razvojni proces uveli smo okvir za testiranje koji je pokrivao celu piramidu testiranja. Rad sistema proveravali smo na više nivoa, od jediničnih testova preko integracionih do testova koji proveravaju cele procese.
Tako je testiranje pratilo i modernizaciju i razvoj novih funkcija. Provere su pomagale u otkrivanju grešaka i u proceni da li je postojeće ponašanje uz izmene ostalo ispravno.
Razvili smo module za višekratnu upotrebu.
Upravljanje ovlašćenjima napravili smo kao samostalan modul za višekratnu upotrebu, koji je kasnije uveden i u tri druga proizvoda tadašnjeg naručioca. Učitavanje podataka za modul izveštavanja realizovali smo pomoću Azure Data Factoryja.
Na ta dva modula razvili smo i novi proizvod. Tako su rešenja nastala tokom modernizacije mogla da se iskoriste i van postojeće platforme.
Automatizovali smo obradu podataka iz dokumenata.
Napravili smo zaseban Azure Functions servis koji je pomoću Azure OpenAI-ja izdvajao strukturirane podatke iz otpremljenih dokumenata i prosleđivao ih u bazu podataka. Time smo obradu dokumenata povezali sa procesom upravljanja podacima na platformi.
Razvojni rad podržali smo i AI alatima.
U svakodnevnom razvoju koristili smo GitHub Copilot i Claude. Pored toga, napravili smo sopstveni MCP server koji je agentima za kodiranje pomagao da pronađu delove koda i informacije o projektu potrebne za zadatak.
Te alate smo uklopili u rad tima, uz tehničko projektovanje, razvoj i testiranje.
Modernizacija je postavila temelje i za dalji razvoj.
Od stare aplikacije postepeno smo izgradili modularnu platformu koja može da se proširuje korak po korak. Moduli za višekratnu upotrebu podržali su razvoj daljih proizvoda, a ugrađeni okvir za testiranje pomagao je da se rad sistema proverava na više nivoa.
Iskustvo stečeno u tom zajedničkom radu prenosimo i u projekte firme operandor: razumevanje postojećeg sistema, postepeno preoblikovanje i razvoj koji može da se proveri.