Dok veliki HR sistemi pokušavaju da pokriju desetine tržišta i stotine funkcionalnosti, projekat 'mojGO' nastoji da reši jedan vrlo konkretan problem domaćih kompanija i pritom 'razume' srpski Zakon o radu.
Umesto izgradnje još jednog kompletnog HR sistema, fokus servisa mojGO je ostao na odsustvima i pravilima koja prate domaće radno zakonodavstvo. To znači da je odredbe Zakona o radu trebalo pretvoriti u softversku logiku, pokriti je stotinama automatizovanih testova i istovremeno voditi računa o podacima poput JMBG-a, koje ovakav proizvod mora da obrađuje.
Projekat mojGO je bootstrapovan, a tim koji ga razvija zajedno sa prvim korisnicima, nastoji da konkretnu prodaju pokrene tek nakon završene validacije u realnom okruženju.
Sa Goranom Ninkovićem i Marinom Rablov, osnivačima pomenutog alata, razgovarali smo o tome kako izgleda pretvaranje zakona u kod, gde mali lokalni SaaS može da pronađe prednost nad globalnim platformama, koliko je takav model moguće skalirati van Srbije i kako je izgledao razvoj mojGO servisa.
Kako je nastala glavna ideja za osnivanje servisa mojGO?
Goran: Nije nastalo iz analize tržišta, nego iz toga što se Marina žalila kod kuće. Smetalo joj je kucanje rešenja o godišnjem odmoru, pretraživanje tabela i proveravanje ko je koliko dana iskoristio. Rekao sam joj: daj da ti napravim aplikaciju za to.
Tek kada sam ušao u detalje video sam koliko je taj posao složeniji nego što deluje. Godišnji odmori se u većini firmi u Srbiji vode kroz Excel tabelu, mejl i papirno rešenje koje neko ručno kuca. Niko to ne doživljava kao problem jer sve to nekako funkcioniše, dok ne dođe kraj godine i ispostavi se da se saldo dana ne poklapa, ili dok neko ne zatraži rešenje o godišnjem odmoru za dve godine unazad.
Prelomni trenutak je bio kada smo shvatili da to nije problem jedne organizacije ni jedne osobe, nego da se ponavlja u svakoj firmi te veličine, i to na isti način. Firme sa 50 do 300 zaposlenih prevelike su da bi tabela bila pouzdana, a premale da bi kupile veliki HR sistem koji se uvodi mesecima i traži obuku. Taj prostor između je dovoljno širok da opravda zaseban proizvod, umesto da odsustva budu jedan modul u nečemu većem.
To što je Marina taj posao radila godinama naša je najveća prednost. Ne nagađamo kako HR razmišlja i ne moramo da zakazujemo intervjue da bismo saznali gde škripi, jer ta osoba sedi u istoj sobi. Svaka odluka u proizvodu prošla je kroz nekoga ko je taj posao radio ručno.
Koliko je bilo komplikovano pravne odredbe pretvoriti u konkretna pravila koja softver može automatski da primenjuje?
Goran: Komplikovanije nego što izgleda, i to iz razloga koji nije očigledan. Zakon o radu nije pisan da ga izvršava računar, nego da ga tumači čovek. Član koji pročitate za trideset sekundi često krije tri različita slučaja, a svaki od njih u kodu mora da bude posebno obrađen, uz odluku šta se dešava kada se dva pravila sudare.
Uzmite zaposlenog koji se zaposli tokom godine. Zakon kaže da za tu godinu stiče dvanaestinu godišnjeg odmora za svaki mesec rada. Zvuči kao jednostavna formula, dok ne dođete do pitanja: šta je osnovica od koje se ta dvanaestina računa, šta ako je zaposleni na određeno vreme, šta biva sa danima kada radni odnos prestane usred godine i kako se zaokružuje. Na svako od tih pitanja mora da postoji izričit odgovor, jer softver ne ume da kaže “zavisi”. Mi smo na svako od njih odgovorili.
Slično je i sa plaćenim odsustvom. Član 77 razlikuje osnove koji dele zajednički fond od pet radnih dana godišnje od onih koji imaju svoj limit po slučaju, kao što su smrt člana porodice ili dobrovoljno davanje krvi. Jedna rečenica u zakonu, nekoliko različitih pravila u aplikaciji.
Zato je svako takvo pravilo izdvojeno na jedno mesto, sa oznakom člana zakona iz kojeg dolazi, umesto da bude rasuto po aplikaciji. Kada se pravilo promeni, menja se na jednom mestu, a ne na deset.

Kako proveravate da su obračun dana, praznici, preneti odmori i generisana rešenja zaista ispravni i šta se dešava kada se propisi promene?
Goran: Grešku u obračunu dana je teže uhvatiti nego većinu drugih grešaka u softveru, zato što se ne vidi. Ako se aplikacija sruši, svi znaju da ne radi i neko će se odmah požaliti. Ako zaposlenom prikaže dvadeset tri dana umesto dvadeset pet, sve deluje normalno. Taj broj završi u rešenju koje neko potpiše i zavede, a greška izađe na videlo tek na kraju godine, kada se saldo ne poklopi, ili kada zaposleni sam primeti da mu fali dva dana.
Zato smo krenuli od toga da svako pravilo iz zakona ima svoju proveru koja se izvršava sama, bez čoveka. Takvih provera, ili testova, ima blizu 400. Jedni računaju dane i utvrđuju da li je rezultat tačan, a drugi kroz pravi pregledač prolaze ceo put od podnošenja zahteva do gotovog rešenja, isto kao što bi to uradio zaposleni. Svi se pokreću pri svakoj izmeni aplikacije. Ako popravljajući jednu stvar pokvarim obračun prenetih dana, test prijavi grešku i izmena ne može da bude objavljena, pa nikada ne stigne do korisnika.
Testove sam namerno pisao po slučajevima iz zakona, a ne po funkcijama u kodu: zaposlenje usred godine, prestanak radnog odnosa, prenos odmora u narednu godinu, praznik koji padne usred odmora, krsna slava kao plaćen slobodan dan koji ne troši godišnji. Svaki test tako opisuje jedno pravilo. Isti pristup primenjujem i na ostalim svojim projektima, koje sam ukratko opisao na goranninkovic.com/projects.
Kada se propisi promene, pravilo je na jednom mestu i uz njega već stoji test koji opisuje staro ponašanje. Izmena zakona zato znači izmenu pravila i izmenu testa, posao od nekoliko sati, a ne prekopavanje cele aplikacije. Praznici se ne prepisuju iz spiska nego računaju, pa aplikacija već sada zna kada je Vaskrs 2027. godine.
Kako ste pristupili bezbednosti i privatnosti podataka dok proizvod razvija veoma mali tim?
Goran: Upravo zato što je tim mali, bezbednost nije smela da bude nešto što se dodaje kasnije. Način pristupa podacima postavili smo pre nego što je aplikacija imala i jedan ekran, i to je odluka koja se posle ne može nadoknaditi.
Ključna odluka je da se podaci razdvajaju na nivou baze, a ne u aplikaciji. Svaka firma vidi isključivo svoje podatke, a to pravilo je upisano u samu bazu, kroz preko sedamdeset sigurnosnih politika. U praksi to znači da baza neće vratiti tuđe podatke čak ni ako negde u aplikaciji pogrešim i pošaljem pogrešan upit. Ne oslanjamo se na to da greške neće biti, nego na to da greška ne može da prođe.
Podaci se čuvaju na serverima u Evropskoj uniji, kod obrađivača sa kojima imamo ugovore o obradi, uz enkripciju u prenosu i u mirovanju. Pristup zavisi od uloge, pa menadžer i HR administrator ne vide iste stvari. Neaktivan korisnik se automatski odjavljuje, a jednim klikom može da se odjavi i sa svih ostalih uređaja.
JMBG smo posebno pazili, jer nam je potreban samo zato što stoji u rešenju o godišnjem odmoru. Nigde drugde se ne pojavljuje: alati koje koristimo za praćenje grešaka i rad sistema nikada ne vide lične podatke, jer se oni brišu pre nego što bilo šta napusti aplikaciju. Tako je napravljeno namerno, i provereno je testom.
Politika privatnosti pisana je u skladu sa GDPR i Zakonom o zaštiti podataka o ličnosti, sa navedenim pravnim osnovom obrade, rokovima čuvanja i spiskom obrađivača. Sve to stoji javno na sajtu, jer firma koja nam poverava JMBG svojih ljudi ima pravo da zna šta se sa tim podacima dešava, pre nego što pita.

Da li verujete da upravo manji, lokalizovani SaaS proizvodi mogu da budu konkurentniji od velikih globalnih HR platformi?
Marina: Mogu, i to ne zato što su manji, nego zato što u problem ulaze dublje nego što se velikim platformama isplati.
Velika globalna HR platforma mora da pokrije desetine tržišta. Srpski Zakon o radu je za nju jedno polje u podešavanjima, nikada srž proizvoda. Takva platforma ume da vodi evidenciju odsustava, ali ne ume da vam napravi rešenje o godišnjem odmoru sa tačnim pozivanjem na članove zakona, sa JMBG-om i matičnim brojem firme, spremno za štampu i potpis. Za HR u Srbiji je taj dokument sav posao, a za globalnu platformu lokalna specifičnost koja im se ne isplati.
Svesno ne pravimo kompletan HR sistem. Ne radimo obračun zarada, zapošljavanje ni ocenjivanje učinka. Radimo odsustva, i to do kraja. Ta odluka sužava tržište, ali nam daje jedino mesto na kome mali tim može da bude najbolji. Ne takmičimo se brojem mogućnosti, nego time što jednu stvar radimo bolje od svih, a ta stvar je ono čime se HR u Srbiji bavi svakog meseca.
Druga stvar je brzina uvođenja. Veliki sistemi se uvode mesecima i traže obuku. Kod nas se firma registruje, uveze zaposlene iz tabele i reši prvi zahtev za desetak minuta, bez prezentacije i bez IT tima. Za firmu od osamdeset ljudi to je razlika između projekta i alata.
Šta ste do sada naučili od korisnika i na koji način ste projektovali vaš biznis model?
Marina: Trenutno radimo sa jednom firmom, i to je naša odluka. Prodaju smo namerno odložili dok proizvod ne bude gotov, jer nismo hteli da učimo na tuđim podacima.
Aplikacija je gotova i radi. Prelazak u narednu godinu, prenos dana, zastarevanje, praznici koji se svake godine pomeraju, sve to je testirano i ne čekamo januar da bismo videli šta će biti. Isto važi i za obračune zaposlenih primljenih pre osam godina i za one koji će biti primljeni dogodine.
Ta jedna firma nam zato ne služi kao poligon za ispravljanje grešaka, nego kao dokaz da stvar radi u stvarnom poslu, sa stvarnim zahtevima i rešenjima koja idu na potpis. Aplikaciju koriste svakog dana i odmah nam kažu kada nešto može bolje.
Ono najvažnije što smo naučili: HR ne traži više mogućnosti, nego manje koraka. Kada bismo pokazali nešto što deluje korisno, a dodaje jedan klik u svakodnevnom poslu, reakcija je bila mlaka. Kada bismo neki korak uklonili, na primer da se rešenje napravi automatski, čim menadžer odobri zahtev, umesto da ga neko traži, to se odmah primeti.
Druga lekcija je da su presudni upravo detalji koje bismo mi nazvali sitnicama. Krsna slava kao plaćen slobodan dan koji ne troši godišnji odmor je nešto što nijedna strana platforma nema, a za korisnika u Srbiji potpuno prirodno očekivanje. Takve stvari ne smislite unapred, saznate ih samo od ljudi koji taj posao rade svaki dan.
Treća lekcija je da poverenje dolazi pre mogućnosti. Kada od firme tražite JMBG zaposlenih, prvo pitanje nije šta softver ume, nego gde se podaci čuvaju i šta biva ako odustanu. Zato u svakom trenutku možete jednim klikom da preuzmete sve svoje podatke, u JSON formatu, i ponesete ih drugde, a izveštaji se posebno izvoze u Excel i PDF formatu. Evidencija odmora je vaša obaveza po zakonu, pa ne može da bude zarobljena u nečijem softveru.
Poslovni model je godišnja pretplata po firmi, prema broju zaposlenih, bez troškova uvođenja i bez naplate po modulima. Tokom beta faze proizvod je besplatan, bez unosa kartice, a cene najavljujemo unapred, pre zvaničnog lansiranja. Besplatna beta nije popust niti mamac, nego način da prve firme uđu bez rizika dok gradimo reference.
Cena koju ćemo tražiti neće biti mala, jer ovo nije alat za beleške nego softver koji pravi dokument što poslodavac po zakonu mora da izda. Ko taj posao danas radi ručno, plaća ga više nego što misli, samo kroz sate umesto kroz fakturu.

Kako izgleda razvoj SaaS proizvoda kada morate istovremeno da programirate, razgovarate sa korisnicima i razmišljate o prodaji?
Goran: Izgleda tako da nema mesta za ono što nije neophodno. Posao smo jasno podelili: ja radim proizvod, kod i infrastrukturu, a Marina prodaju, razgovore sa firmama, uvođenje novih korisnika i pravno-operativni deo. Bez te podele bi oba posla trpela, jer imaju sasvim različit ritam. Programiranje traži duge neprekinute blokove, a prodaja traži da budete dostupni kada korisnik ima vremena.
Najveća promena u načinu rada je što razgovor sa korisnikom i pisanje koda više nisu odvojene faze. Ono što Marina čuje u ponedeljak često bude u aplikaciji iste nedelje. To je prednost koju velike firme nemaju i ne mogu da je kupe. Ono čime nadoknađujemo malobrojnost je disciplina: sve što gradimo je pokriveno testovima, jer mali tim ne sme sebi da dozvoli da ručno proverava da li nešto i dalje radi.
Cilj je da mojGO ostane bootstrapovan. Ne zato što smo načelno protiv investicije, nego zato što je ovo proizvod kome kapital ne rešava glavni problem. Proizvod je napravljen, a ono što sada gradimo je prodaja, i to je posao koji se novcem ne ubrzava. Otvoreni smo za partnera koji donosi pristup tržištu, ali novac nam nije usko grlo i ne tražimo ga.
Da li lokalna regulativa, koja vam je danas najveća prednost, istovremeno postaje i najveći izazov za skaliranje proizvoda van Srbije?
Goran: Jeste, i jedno i drugo. Ono što nas danas štiti od konkurencije je isto ono što će nas sutra usporiti na stranim tržištima. To smo znali kada smo birali, i izabrali bismo isto, jer je prednost koju imamo sada stvarna, a širenje je odluka koja tek dolazi.
Proizvod ima dva sloja. Prvi je univerzalan: zahtevi, odobravanja, tim kalendar, saldo dana, izveštaji, obaveštenja. To radi isto u Srbiji, Bosni i Hercegovini ili Crnoj Gori. Drugi sloj je lokalni: koliko dana pripada zaposlenom, kako se računa prva godina, koji su praznici i kako izgleda dokument koji poslodavac mora da izda. Taj drugi sloj smo od početka gradili odvojeno, upravo zato da bi mogao da se zameni bez diranja ostatka.
Zbog toga izlazak na novo tržište za nas ne znači nov proizvod, nego nov lokalni sloj i prevod. Aplikacija već radi na dva jezika, pa je ta mehanika postavljena.
Region je logičan sledeći korak, jer su radno zakonodavstvo i navike u HR-u dovoljno slični da se univerzalni deo ne menja, a lokalni se dorađuje, ne piše iznova. Ono što se ne prenosi nije kod, nego znanje: da bismo za neko tržište tvrdili da smo usklađeni sa propisima, treba nam neko ko taj zakon zna kao što mi znamo srpski. To je pitanje partnerstva, ne programiranja, i zato ne ulazimo negde dok tog čoveka nemamo.
Plan za naredni period je namerno uzak. Uvodimo cene i prve plaćene pretplate, pa širimo broj firmi u Srbiji. Region dolazi posle toga, i to sa partnerom koji poznaje tamošnji zakon. Radije ćemo biti očigledan izbor na jednom tržištu, nego jedna od opcija na pet.

Želiš da podeliš svoje mišljenje o ovoj temi? Komentari su otvoreni na našoj Facebook i LinkedIn stranici!