Bok! Zovem se Aleksej Pjankov, glavni sam programer u tvrtki Sportmaster. Odmah ću reći da "glavni" ne znači "najglavniji od svih programera", ne, to je samo naziv, tako šarmantan prijevod za "Senior+".
U tvrtki Sportmaster radim od 2012. godine, i tijekom tog vremena tim za razvoj izradio je mnogo rješenja zanimljivih s tehničke strane. No danas bih želio govoriti o našem radu s naglaskom na način na koji smo razmišljali u određenim nejasnim situacijama.
U ovom članku neće biti konkretnih tehničkih rješenja (pa ni općenito nečega tehničkog) koja bi trebalo uzeti i primijeniti u svom projektu. Radije – to je refleksija na obavljenom radu. Bilo je posebnih trenutaka koji su utjecali na nas kao tim – zbližili su nas, ojačali i stavili na ispit. O tim momentima, o atmosferi rada u timu, o našim zamkama i nizu psiholoških zamki u koje se ponekad sami uhvatimo, pokušat ću danas govoriti.

I započet ću upravo s 2012. godinom.
Došao sam 2012. s glavnim ciljem u to vrijeme – radom na našoj zastavnoj stranici. Tada je to bio "Frankensteinov monstrum": dio tima radio je s našim starim sustavom, koji nije baš najbolje podnosio opterećenja (Bitrix), dok je drugi dio tima (gdje sam bio i ja) pokušavao implementirati novi sustav, koji smo odabrali prema kriteriju "Ako je ovo najskuplja e-commerce platforma na svijetu, uzimamo je". Upravo "pokušavali smo implementirati" – jer je sustav očajnički pružao otpor, i na svaki trenutak s kojim smo se uspijevali suočiti, obvezno se pojavila "iznenađenja" kao odgovor. Puno smo radili, ali napredovali smo brzinom puža.
Osobno, posljednja kap koja je prelila čašu za mene bila je upoznavanje s kodom jedne metode u ovom "najskupljem e-commerce sustavu na svijetu", kada je nekoliko sati usredotočenog rada na zamršenom bugu dovelo do otkrića da je razlog negdje u custom-tag-u koji se koristi pri generiranju HTML-a u JSP-u. Zadatak tog custom-tag-a je prikazati zbroj nekih vrijednosti. To nije loše, jer je to za što je custom-tag i namijenjen. No, iznenađenje je bilo u tome što se pritom mijenjaju neki podaci u bazi, a to utječe na ponašanje na sljedećim stranicama, i ako pritisnete F5 — ponavlja se poziv, što narušava dosljednost podataka. Osim toga, to se očitavalo tek kroz nekoliko koraka, na 3. stranici sekvencije. Ne, nisam protiv da takav "majstor-nindža" bude u timu i svojom kodom održava koncentraciju kolega. Ali ne na taj način, u najskupljem sustavu!
Bilo je to u petak. A subotu i nedjelju smo s kolegom proveli u uredu s ciljem da shvatimo koje zadatke poslovanje postavlja pred sustav upravo danas i koje zadatke bi mogli smisliti za godinu dana. Shodno tome, kako bismo ih rješavali, da nismo bili prisiljeni koristiti ovaj najskuplji i najiritantniji sustav.
Rečeno — učinjeno. Napravili smo pilot-projekt, u kojem smo postavili temelj za razvoj nove web stranice Spormaster. Mnoge od tih ideja su zaživjele i upravo sada se njihovo nastavak aktivno vrti na web stranici.
Faze pilota i vremenski okviri
2 dana. Napravili smo mikroprototip — tijekom vikenda selimo našu bazu u ElasticSearch, radimo facetan pretraživanje. Voilà! U tom kupljenom sustavu takva postavka "pojedla" je 2 tjedna. A ovdje — doslovno za nekoliko sati! I radi brže. Štoviše, brže za red veličine.
2 tjedna. Radimo na prototipu, dodajemo funkcionalnost za adekvatno personalizirano ishođenje.
Na primjer, korisnik ima nekoliko popusta i akcija koje su relevantne baš za njega — tada u rezultatima pretraživanja proizvoda treba prikazati upravo onu cijenu koju može dobiti primjenom svih dostupnih pogodnosti na najisplativiji način.
S akcijama nije sve tako jednostavno. Na primjer, kupio sam skije, sada je popust od 40% na kapu, ali se ukida welcome popust od 10% na cijelu narudžbu. Da, to je pravi slučaj 🙂 I da bih postavio takvu akciju u sustavu, plaćeno je 3 savjetovanja s dobavljačem, nakon kojih smo dobili mnogo primjera kako napraviti različite druge akcije. Vrlo diplomatski, a uzimajući u obzir cijenu savjetovanja — to je vrlo ekonomično.
P pokazali smo biznisu detaljnu demonstraciju. Objavili su da će brzo sastaviti pilot projekt i odmah su se uhvatili u koštac s time.
2 mjeseca. Pilot projekt — radimo u obliku funkcionalne web stranice s pretraživanjem po katalogu. Pretraživanje s faceteima, rezultati pretraživanja — s osobnim popustima, izgleda da pilot gotovo kao web stranica Sportmastera, a i proizvode koje smo stavili su isti. Slatkiš!
Dodajemo "Rhetorics:100" našeg šefa odjela, i prezentacija biznisu prolazi odlično! Daju nam slobodne ruke da razvijemo eCommerce platformu sami.
A to znači, držite, dečki, tim, držite, dečki, budžet. Super, zar ne?
2 godine. Izlazak web stranice u produkciju. Da, traje dugo. Sve što smo tada znali, isprobali smo samo u razmjeru prototipa. Dva ljudi lako stvaraju usklađeni tim. A zadaci koje smo "škicnuli" — u suštini su to bili mali dodaci "Hello World" u novim tehnologijama. Lako smo generirali nove hipoteze, brzo ih provjeravali, nismo se vezali i stoga ih bez žaljenja "ubijali". Kada nas je postalo 10, po inerciji smo ekstrapolirali našu brzinu rada na sve ostale. I obećali smo rokove za izvršenje zadatka, koji su jednaki percepciji savršenstva pomnoženo s našim entuzijazmom.
Poznata situacija? 🙂
Dakle, već znate što će se dogoditi dalje?
Zamka br. 1. "Ekstrapolator-superstar"
Jasno je da nove tehnologije izgledaju vrlo cool u prezentacijama i izvrsno se pokazuju u aplikaciji tipa "Hello World". No, stvarnost je obično malo dalje od toga.
Dakle, uzimamo biblioteku, pišemo hrpu aplikativnog koda. Jedini testovi nam izgledaju kao smetnja (mi smo super i radimo na supersoniku ovdje, kod je moderan i sve ostalo). Kontinuirano mijenjamo i doradimo API u hodu — pa kakvi tests ovdje, ozbiljno. I sve to pod krinkom "super optimizirali smo proces razvoja" (da, sada je čak strašno opisivati to).
I onda je sve prilično očito.
Implementiramo novu verziju na uat. Dečki iz poslovanja energično testiraju i pritisnuju dugmiće. Ponekad to rade prilično kreativno — nešto se prekida. Trebali bismo saznati što su za to učinili. No, s druge strane monitora nije oduševljeni tester koji će ti iznijeti sve karakteristike okruženja uzimajući u obzir vremenske uvjete u regiji, nego klijent iz poslovanja. Njegova povratna informacija je jednostavno "ne radi". A to znači da nije zadovoljan. Pitaj ga — i on će biti strašan nezadovoljan!

Tada, kako bismo reproducirali grešku, moramo proći kroz sve i pomicati stvari. Naravno, nismo zanemarili niti jednu pritužbu i sve smo ispravili. Odustali smo od planiranih zadataka, ali "gasili smo požar".
Tako smo iskopali svoju sljedeću jamu.
Mamac br. 2. "Shtakhanov"
Stigla ti je neugodna greška. Počinješ se truditi da shvatiš. Ne ide — bijes — pokušaj da to ponovo shvatiš — nova nevolja — provjeriš sve što možeš — opet nije to — razmišljaš o tome kako si već star i svi imaju djecu i hipoteku — ponovno pokušavaš — opet nije to. Nekoliko šoljica kafe, i sve se ponavlja. 12-14 sati rada zaredom — gotovo kao norma. I eto, kada svi već dosegnu svoje limite — bum, prosvjetljenje!

Možda, s vanjske strane, procjena efikasnosti takvog dana izgleda dobro i ispravno. A iznutra — može biti različito.
U mom slučaju, dojam takvog rada bio je "Pohvalan sam, ja sam sjajan, riješio sam to". Ne uvijek svjesno, ali nesvjesno — uvijek!
I na to se navikneš, bez šale. Ispostavlja se da se unutarnje metrike uspješnosti pomjeraju s rezultata na broj uloženih truda i nivo onoga što si postigao, koliko si patio pokušavajući riješiti problem.
Vjerovatno je ovo najstrašnija zamka.
Dalje će biti lakše i zabavnije 🙂
Zamka br. 3. "Moć Hello world"
Naš tehnološki okvir tog razdoblja: ElasticSearch, Hazelcast, Pentaho, freemarker (i provjereni Java, Spring, Tomcat, nginx). Freemarker nije bio vrlo informativan u izbacivanju poruka o greškama. No, ElasticSearch, Hazelcast, Pentaho morali smo patchati više puta — talentirano smo pronalazili slučajeve u kojima nisu radili onako kako je dokumentacijom zadano.
Lagan start i brzi rezultati korištenja nove tehnologije su dobri, ali nas uvode u euforiju i smanjuju budnost. Jer nova tehnologija ima greške, obavezno sadrži greške. I ako o tome još nije pisano – raduj se, ti ćeš biti taj pionir koji će svakako naići na nešto pogrešno i otići tražiti informacije na Google-u ili Stack Overflow-u. Naravno, "pogrešno" se može naći u provjerenim proizvodima, ali u novima je to mnogo jednostavnije.

Unatoč svim teškoćama, izašli smo u produkciju. Da, s kašnjenjima. Da, nije baš stabilno. Ali u globalu – bez katastrofa.
I još jednom ću istaknuti zamke koje iskrivljuju zdravo percepciju radnog procesa.
- „Ekstrapolator-majstor“. Pod dojmom trenutnih uspjeha idemo naprijed i s veseljem ekstrapoliramo brzinu razvoja na nadolazeće projekte.
- „Stahanovist“. Radimo do iznemoglosti, zadovoljni smo sobom, ali ne primjećujemo da su problemi koje rješavamo posljedica naših osobnih grešaka/nepažnje/zanemarivanja. Poslovi koji nisu završeni.
- „Snaga Hello world“. Žurimo implementirati sve najnovije i najzanimljivije u produkciju.
Zašto je sve uspjelo
Naravno, nisam nabrojao sve pogreške koje smo imali u ovom razdoblju, ali one najčešće, vjerojatne za projekt bilo koje specifičnosti. Takvo bilježenje grešaka pomaže u izbjegavanju istih u budućnosti.
Malo o tome kako smo uopće uspjeli stvoriti takav mini-startup unutar kompanije i uvjeriti biznis da se preseli s već kupljenog sustava na nešto vlastito.
Uvjet br. 0. Zdrav klima u kompaniji. To nije samo „zapaljene oči“ zaposlenika i komunikativnost u stresnim uvjetima, ne. To se odnosi na sve interakcije.
Uvjet br. 1. Vjerovati u ono što radiš. Iskreno, ne mislim da bismo imali ikakvu priliku da se bavimo pilotažom, da nismo razradili kupljeni sustav „do najsitnijih detalja“ – tj. odstupivši i podsvjesno znajući da je taj sustav bolji i nadmašuje nas.
Što smo učinili: 1) razjasnili smo se u kupljenom sustavu, s njegovom pomoći riješili glavne zahtjeve od biznisa 2) sastavili smo popis zadataka koji ne postoje samo sada, već će biti i u bliskoj budućnosti 3) odabrali smo rješenje koje najbolje odgovara. I tada je naša procjena rješenja bila procjena stručnjaka.
Da li bi nam nešto dali, da smo jednostavno došli i rekli, kao, "dečki, sve je besmisleno, ne želimo se s time baviti i odlučili smo sve od nule napraviti"? Malo sutra. Odgovor bismo dobili u takvom obliku da bi zauvijek ostao u pamćenju 🙂
Uslov br. 2. Prvi korak radimo mali. Generiramo prvu hipotezu i provjeravamo. Možete potrošiti i svoje lično vrijeme na to. Ako ne želite trošiti vrijeme — ne trebate se ni zabavljati s takvim poslom. A ako ne želite provjeriti malu hipotezu, nego želite odmah nešto sjajno napraviti — držite se podalje od takvih ljudi!
Imali smo sreće i prva hipoteza je upalila. Ali to ne biva uvijek. Na primjer, u jednom od sljedećih projekata, kada smo promirali admin panel u okviru sličnog pilota, upalila nam je tek 18. varijanta. A 17 prvih pristupa su bila uzaludna. Usput, u priči o stvaranju admin panela zapleti su bili na razini brazilske serije, jer su tim činili momci, tada već veterani, pravi "iskusni".
Uslov br. 3. Radimo MVP i tražimo bolne tačke kod donosioca odluka. Naravno, na njegovom licu može se odraziti užas već od same činjenice da mu po trideseti put donosite neku zamisao. Ali nema veze. I obavezno pokazujemo kako mi rješavamo njegove probleme svojim proizvodom.
Uslov br. 4. Na brzinu pravimo pilot koji izgleda približno kao konačni rezultat. Napraviti sve savršeno — primamljivo je, ali može se desiti da upadnete u perfekcionizam, zbog kojeg će se desiti da umjesto pilota želite pokazati pilot verziju već savršenog proizvoda. A takvi ne postoje. Zato jednostavno napravite barem nešto od drveta.
Uslov br. 5. Proizvod. Projekt raste, dobiva sredstva, dolaze stručnjaci s solidnim iskustvom.
I ako ste klasični startuper, onda je to onaj trenutak kada treba napustiti brod. Jer lagani letovi po vrhovima i osjećaj sveopće blagodati brzo nestaju.
Izlazak u produkciju — to je suočavanje s pravim opterećenjima, integracija s desetak sistema, a kada kreirate novu funkcionalnost, u isto vrijeme, u okviru podrške doradite stare verzije. Sve to su izazovi daleko ozbiljniji od izmišljanja ideje i rješavanja možda i dobro, ali samo jednog problema klijenta.
Ovo su izazovi, a razvijanje vještina događa se upravo u ovoj fazi.
Hvala što ste pročitali. Sretno s novim kodom!
Izvor: habr.com
