Kako sam napisao svoju prvu aplikaciju?

Kako sam napisao svoju prvu aplikaciju?


Photo by Opollo Photography on Unsplash.

Ono što se desilo svakome ko se bavi programiranjem je da vidi novu tehnologiju, framework, dobije neku ideju, krene sa tim projektom i nikada ga ne završi.

Razlozi su mnogobrojni i mislim da nisam jedini kojem je disk pun "skoro" gotovih projekata i proizvoda. Obično bih naučio to što me je zanimalo i ne bih priveo kraju, jer posle posla malo vremena ostaje da se radi na sopstvenim idejama.

Drugo, težimo previše perfekciji. Proizvod ne mora da vam bude dobar, već dovoljno dobar. Kod ne mora da bude dobar, već dovoljno dobar. Dizajn i UX je nešto na čemu treba da radite konstantno - ne mora da odmah bude savšeno. Pa šta onda treba da bude?

Treba da donosi vrednost krajnjem korisniku i da ispunjava minimalno da kažete da "radi" posao. Zatim to treba da prezentujete nekome da biste imali osećaj "završetka" iako i sami znate da je od onoga što zaista želite da bude vaš projekat još dug put.

Kako sam ja uspeo da izbegnem sve ove zamke i da dovršim nešto dovoljno da pokažem ljudima?

tl;dr;

  • Držite se poznatih tehnologija
  • Ograničite vreme sebi za probavanje novih stvari koje bi vas odvukle od cilja
  • Iterirajte nad ciljevima - verovatno ste uzeli prevelik zalogaj
  • Delite sa ljudima vaš napredak - daće vam energije za napredak
  • Tražite pomoć - ako se dugo vrtite u krug demotivisaćete se
  • Ne mora sve odmah da bude savršeno

Hteo sam da radim malo backend. Kao Staff Engineer, ali za frontend,skoro sve što postoji na roadmapi sam imao sreće da već radim u svojoj karijeri i to sa sjajnim ljudima i inženjerima. Daleko od toga da sam obrnuo igricu, ali jasno vam je zašto sam želeo novi izazov.

Pre desetak godina, radeći u opštini Inđija, napravio sam svoju prvu Android aplikaciju, koja je živela na Play Store neko vreme i predstavljala je red vožnje za javni prevoz. Ništa fensi, radila je posao, bila je užasno napisana i izgledala je još gore. Ali je radila posao.

NestJS i gde sve ovo postaviti

Dobio ideju da napišem celu platformu, koja će imati backend napisan u NestJS framework-u. Administratorsku aplikaciju sam uradio u React-u, a mobilna aplikacija je urađena u React Native.

Prvo što me je moglo "slomiti" je što sam u toku rada otkrio Remix.run i da bi mi neke stvari bile mnogo lakše da sam krenuo da ne radim odvojene aplikacije za BE i FE admin panel.

Autorizaciju sam rešio uz pomoć Auth0 koji ima sjajan tutorijal kako da napravite sve što vam je potrebno za osnovno upravljanje korisnicima vaše aplikacije, te pruža i osnovni nivo zaštite.

Dakle izbegao sam sledeći "metak" tako što sam značajan deo problema koje user management donosi, prepustio biblioteci koja mi to rešava umesto mene.

Postavio sam backend aplikaciju na Heroku. Razlog je jednostavan - ranije sam postavljao stvari na Heroku, imao sam nalog, relativno jednostavan je za korišćenje i nisam želeo da potrošim dodatno vreme na Azure i AWS ovoga puta.

Administratorska (Back office) aplikacija

Za back office aplikaciju sam odlučio da koristim Typescript, React, Chakra-UI i Vite. Tokom rada shvatio sam da bi mi bilo lakše da sam kod organizovao u jednom repozitorijumu i da bi mi Nrwl ili Turborepo značajno olakšali posao, ali sam se odupreo porivu da počnem da prebacujem sam kod na jedno mesto. Smatram da je to ispravan put, ali bi to oduzelo još vremena koje nisam želeo da gubim na putu ka cilju. Stavi u TODO kad dođe na red rešićemo. Deploy sam uradio na Netlify jer imam dobra iskustva sa njim te nisam hteo da eksperimentišem. Nije dovoljno responsive aplikacija, fali lep error handling, fali paginacija na nekim tabelama, ali je dovoljno dobro. Vidi se namera, mogu da se raspišu dalji taskovi, autorizacija i autentikacija rade, idemo dalje.

Flutter ili React Native

Najmanje vremena sam potrošio na mobilnu aplikaciju. Nju sam želeo da napravim kako bi krajnji korisnici imali instant benefit od cele platforme, mada mi je ideja da

  • Kad platforma bude gotova ona bude nepotrebna
  • Da pozovem druge ljude da prave klijentske aplikacije
  • Da se ne vratim u mobile development

Urađena je u React Native u Expo ekosistemu. Pokušao sam tri dana da radim u Flutter-u. Dopao mi se, ali bi pomerio moj timeline previše da naučim dovoljno dobro. Zato sam se preorjentisao na nešto ipak poznatije - React Native. Dok sam je pravio, otkrio sam dosta bugova na BE platformi, tako da mi je dosta poslužila ruku na srce. Ograničio sam sebe da će da ima dva taba - gradski i prigradski. Filter koji će vam pomoći da odaberete stanicu i na osnovu toga da se ispišu vremena. Ne komplikuj Radovane, nemoj da šalju dal kasni bus, ne trebaju ti sad notifikacije, naučićeš Flutter kasnije, ne treba ti ništa sem da znaju kad je sledeći autobus.

Borba sa unosom podataka

Tad je došao verovatno najgori i najteži deo za izdržati mentalno. Administratorski panel je dobar ali nije odgovarajući za unos velike količine podataka. Polazaka je bilo stotine, vremena na hiljade. OK, ide u TODO pričaj sa nekim ko se razume u UX izloži problem, pa ćeš napraviti u jednom trenutku upotrebljivu stranicu. Do tad - import CSV, samo... CSV moraš sam napraviti.

Plan mi je bio da do 01. juna ubacim sva vremena. Nisam uspeo iz više razloga, ali nisam ni odustao. Nisam želeo da prikažem aplikaciju dok ne unesem sve podatke. Razlog je što me to čeka ponovo 01. jula za letnji red vožnje, pa 01. oktobra za zimski red vožnje. Hoću da prođem kroz sve rasporede, unesem stanice, vremena, napravim algoritme koji će to da rade i da imam funkcionalnu aplikaciju.

Završio sam 16. juna sa unosom podataka. Usledila je borba sa Google Play Store, na kojem imam developerski nalog još od te prve aplikacije. App Store ostavljamo za neki drugi put. Posle više sati borbe sa potpisivanjem aplikacije i podizanja na review od strane Google uspeo sam.

Glorious victory

Sve tri aplikacije su gotove. Pune bagova, sa lošim UX, sa mnogo mesta za napredak - ali gotove. Uhvatio sam par screenshots, Irfan mi je pomogao sa video zapisom aplikacije na mobilnom telefonu i podelio sam ideju sa lokalnom IT zajednicom. Ukoliko neko želi da se pridruži da završimo ovo za naš grad ili želi da nauči bilo koju od tehnologija koju sam koristio - tu sam, ako ne žele i to je ok.

Osećaj je bio sjajan. Nije bio osećaj pobede, već olakšanja. Pritiskao sam i gurao sebe i odvajao vreme od porodice da bih ovo završio. Da bih nešto naučio i da bih istrajao. Uspeo sam u nameri da pobedim sebe i odlaganje. Sigurno možete i vi.

Znam da vam stoje projekti na diskovima, oduvajte prašinu sa njih, primenite nešto od ovoga što ste pročitali i dovršite posao do kraja.