Jasno je kakve veze ima Mobile tim s Photomath aplikacijom, no kako ostali inženjerski timovi doprinose vrhunskom edukacijskom sadržaju i korisničkom iskustvu?
Osnovna ideja Photomatha bila je da će to biti mobilna aplikacija koja će omogućiti učeniku da dobije instantnu pomoć pri učenju matematike. Sve što on treba učiniti je uslikati matematički zadatak s kojim ima problema. Relativno je jednostavna ideja, ali da bi izvedba bila “na svjetskoj razini” ima jako puno teških izazova.
Dva su neka veća područja problema: prvo je kako uopće izgleda taj vrhunski matematički sadržaj u ovakvom digitalnom, mobilnom formatu koji će stvarno pomoći učenicima razumijeti, a drugo je kako to uopće sve tehnički izvesti da radi na mobilnim telefonima milijuna korisnika uz vrhunsko korisničko iskustvo i jednostavan proces kontinuiranog proširivanja sadržaja.
Izazovima iz prvog područja se pretežito bave naši stručnjaci za matematiku, dok ćemo vam u nastavku pokušati više približiti naše različite inženjerske timove i njihove izazove.
Kod razvoja prvih verzija Photomath mobilne aplikacije, struktura inženjeringa je bila jednostavna i dijelila se na dva odjela: App i Core.
App je radio na Photomath mobilnoj aplikaciji i korisničkom sučelju za Windows Phone, iOS i Android, dok je Core radio na Photomath solver sistemu koji se brinuo za interpretaciju i rješavanje matematičkih zadataka sa korak-po-korak objašnjenjima postupaka. Solver sistem se u obliku djeljene biblioteke ugrađivao direktno u sve tri varijante nativne mobilne aplikacije. Ovako je mobilna aplikacija bila jako blisko povezana sa sustavima za interpretaciju i rješavanje matematičkih zadataka, pa su i ta dva tima jako blisko surađivala.
Ovakav setup je jako dobro funkcionirao prvih par godina, nakon čega je došlo prvo proširenje inženjeringa u obliku QA tima.
Ovo je bio prirodan idući korak jer u jednom trenutku više nije bilo održivo da inženjeri koji rade na mobilnoj aplikaciji ujedno rade i ekstenzivno testiranje aplikacije i solving sustava prije svakog app release-a. U ovom trenutku su i App i Core team brojili nekoliko developera i širina matematičkog sadržaja je prilično rasla, pa je rasla i šansa da se uvede regresija. QA testeri su radili s oba inženjerska tima da pomognu u otklanjanju pogrešaka u aplikaciji, ali i postupcima rješavanja koje je generirao solver sustav.
Jedan od razloga zašto volim raditi u Photomathu je ta naša neumorna ambicija da konstantno nadmašimo sami sebe. Iz godine u godinu napadamo sve teže i teže probleme – što matematičke, a što tehničke. Mogućnost da se zadaci samo uslikaju i budu automatski prepoznati, kasnije da se i utipkaju uz realtime rezultat, prepoznavanje zadataka iz udžbenika, prepoznavanje rukom pisanih zadataka, animirana objašnjenja postupka, identificiranje i rješavanje popularnih zadataka, samo su neki od primjera izazova koje smo stavili ispred sebe i uspješno ih riješili. Naravno, to je zahtjevalo kontinuirano proširivanje i evoluciju naših inženjerskih timova.
Nakon App i Core software development timova, počeo se formirati “Web” tim koji je, koristeći web tehnologije, razvijao naše alate za izradu i koordinaciju matematičkog sadržaja. Krenuli smo graditi sve ozbiljnije custom alate, jer je softverska potpora procesu proširivanja matematičkih sposobnosti aplikacije postala ključna. Što imamo bolje alate, to naš sadržaj može biti kvalitetniji, ali i brži za izradu. Alate nisu više koristili samo inženjeri, nego i naši matematičari, koji su zajedno s inženjerima razrađivali matematičke procedure i postupke da bi se osigurala visoka kvaliteta i pedagoška ispravnost.
U međuvremenu je web tim podjeljen na dva specijaliziranija tima: Internal Tools, tim koji razvija web alate i komponente koji se koriste od strane internih Photomath zaposlenika, te Expert Marketplace tim, koji razvija našu web platformu za izradu matematičkih rješenja od strane vanjskih matematičkih suradnika. Oba tima, u principu, koriste slične web tehnologije, no krajnji korisnici njihovih sustava (a time i zahtjevi) su nešto drugačiji.
Alati u obliku web aplikacija su se, za naše use-case-ove, pokazali iznimno praktičnim. U jednom paketu se rješava problem distribucije aplikacije, pohrane podataka, prava pristupa, syncanje podataka između više korisnika, razne statistike rada i korištenja, deployment sadržaja, backup itd. Uz to možemo leverageati razne moderne web tehnologije i tooling koji se danas razvijaju nevjerojatnom brzinom tako da je developer experience na visokom nivou. Naši timovi razvijaju razne custom web sustave: od onog koji podržava naših 20-tak prevodioca u prevođenju objašnjenja matematičkih postupaka i koncepata, do onog koji omogućuje našim anotatorima vizualno anotiranje slika za potrebe machine learninga. Dosta tih sustava koristi razne specijalizirane, dijeljene web komponente koje također razvijamo in-house.
Sve veći broj raznih web alata kao i preseljenje naših sustava za generiranje rješenja u Cloud tražilo je specijalizirani tim koji bi se brinuo da sve to radi dobro i pouzdano. S jedne strane, imamo desetke milijuna korisnika koji računaju na pouzdanost i brzi rad mobilne aplikacije, a s druge strane, imamo naše matematičare-eksperte tj. kreatore raznog matematičkog sadržaja kojima posao ovisi o ispravnom radu web sustava. S treće pak strane nalaze se softverski inženjeri koji kontinuirano rade na razvoju tih Cloud sustava, pa je stoga bilo nužno uspostaviti stručan Infra tim koji se brine da cijela naša Cloud mašinerija bude sigurna i funkcionalna. Uz to, tvrtka je u nizu svojih segmenata veoma data-driven i postoje velike količine podataka koje generiramo ili sakupljamo s jedne strane radi machine learning potreba, s druge radi raznih analiza i usmjeravanja razvoja. Organizirati sve te podatke i učiniti ih lako dostupnim te probavljivim timovima koji o njima ovise nije maleni pothvat. S toga se odnedavno gradi i specijalizirani tim za Data Engineering koji se bavi upravo ovom problematikom.
Fun infra facts: na nekim endpointovima hendlamo i preko 1000 RPS, cloud infrastruktura nam se vrti u 11 k8s clustera od kojih je dio multiregion, produkcijski clusteri dnevno skaliraju i do 100 node-ova, prošli mjesec smo pročešljali preko 20 petabajta analytics podataka u BigQuery-u, dok smo sakupili preko 30 milijuna slika matematičkih zadataka za potrebe unaprijeđenja naših sustava.
Photomath ne bi imao svoje čarobno korisničko iskustvo uslikavanja matematičkog zadatka i instantnog dobivanja objašnjenja bez nekoliko machine learning-based tehnologija koje u pozadini pogone njezine mogućnosti interpretacije onog što korisnik gleda. Za razvoj ovih tehnologija, ali i nekoliko drugih ML tehnologija, koje ne koristi mobilna aplikacija direktno, nego naše web platforme, zadužen je naravno naš AI tim. Prve verzije Photomatha oslanjale su se na Microblink OCR tehnologiji, no danas Photomath (koji od 2014. godine djeluje kao samostalna tvrtka) razvija svoje ML tehnologije kompletno in-house od strane tima koji broji preko 10 članova.
Vrijedi napomenuti da su i naši “stari” timovi s vremenom proširili svoj scope: Core team sada, osim našeg solver sistema, razvija i niz okolnih web servisa koji pružaju solver funkcionalnosti ovisnim sustavima, ali i set potpornih alata za izradu tj. proširivanje solver contenta. App team uz mobilne aplikacije razvija i skup web servisa koji nadopunjuju njezinu funkcionalnost (korisnički profili, praćenje pretplata i slično). QA team proširuje domenu svojeg djelovanja na web sustave, web API-je te uvodi ekstenzibilan test automation.
U Photomathu gradimo najbolju aplikaciju za učenje matematike na svijetu. Da bismo to postigli, uz niz drugih stvari, trebamo vrhunsku tehnologiju. Gradimo state-of-the-art AI-bazirane sustave, niz sofisticiranih web platformi i alata za izradu matematičkog sadržaja, napredne softverske sustave za generiranje i deliveranje tog sadržaja korisnicima te, naposlijetku, vrhunsko mobilno iskustvo za svoje korisnike. Za to nam je potreban veliki broj pametnih inženjera koji mogu efikasno razvijati sve te kompleksne sustave.
Zato smo se okrenuli prema end-to-end filozofiji organizacije timova. To znači da bi svaki tim trebao biti u stanju od početka do kraja izgraditi i isporučiti svoj “paket”, bio on kompletno, user-facing rješenje ili komponenta koja se uklapa u veći, krosfunkcijski sustav. Ovo u praksi znači da timovi imaju veći miks ljudi drugačijih skillsetova koji su potrebni da bi se njihovi projekti mogli neovisno realizirati. Smatramo da ovakav pristup omogućuje puno bolje skaliranje kapaciteta timova, a naposlijetku, i outputa cijele organizacije. S druge strane, omogućuje samim timovima da imaju veću raznolikost u svojem radu i međusobnom djeljenju znanja unutar tima.
Prvi interni inženjerski hackathon u Photomathu
Nedavno je cijeli Photomath engineering odjel putovao u Istru na prvi trodnevni interni “Photomath Hackathon”. Uz opuštenu atmosferu, 12 timova natjecalo se u izradi nekog, što kul, što korisnog ili naprosto zabavnog projekta. Bilo je tu web aplikacija za rješavanje matematičkih kvizova, mobilne aplikacije za rezervaciju parkirnog mjesta za zaposelnike do funkcionalnog prototipa Photomath aplikacije s automatskom segmentacijom matematičkih zadataka (npr. slikaš list pun matematičkih zadataka, sustav ih sve prepozna i istakne, ti onda samo tapkaš na koji želiš da ti ga Photomath detaljno pojasni). Sve u svemu, jako lijepo, pozitivno iskustvo koje je dalo ljudima priliku da se upoznaju i udruže s kolegama iz različitih inženjerskih timova, a usput da rade na nečemu što smatraju da će biti fora za pokazati ostalima. Naravno, ne smijemo zaboraviti i obavezan party na kraju hackathona, kojim su ekipe proslavile uspjeh svojih projekata 🙂
Napisao: Marko Mihovilić, Chief Architect u Photomathu
O autoru: Jedan od prvih inženjera koji je radio na Photomath mobilnim aplikacijama. Danas nadgleda i usmjerava sve veće inženjerske projekte u Photomathu koji se protežu od mobilnih aplikacija do web servisa i raznih komponenti te internih te eksternih web sustava za izradu raznog matematičkog sadržaja. Posjeduje višegodišnje iskustvo u izradi razne vrste softvera u C++-u, nativnih mobilnih aplikacija, web servisa i frontend aplikacija, ali i rada u inter/intra timskim okolinama te prevođenju produktnih zahtjeva u kompleksne tehničke sustave.