{"id":73944,"date":"2020-03-13T02:42:03","date_gmt":"2020-03-12T23:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo"},"modified":"2020-03-13T02:42:03","modified_gmt":"2020-03-12T23:42:03","slug":"retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","title":{"rendered":"Retrospektiva problema. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0421\u043a\u0430\u0436\u0443 \u0441\u0440\u0430\u0437\u0443, \u0447\u0442\u043e \u00ab\u0433\u043b\u0430\u0432\u043d\u044b\u0439\u00bb \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432\u00bb, \u043d\u0435\u0442, \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0442\u0430\u043a\u043e\u0439 \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u043b\u044f \u00abSenior+&quot;\u00bb.<\/p>\n<p><\/p>\n<p>U tvrtki Sportmaster radim od 2012. godine, i tijekom tog vremena tim za razvoj izradio je mnogo rje\u0161enja zanimljivih s tehni\u010dke strane. No danas bih \u017eelio govoriti o na\u0161em radu s naglaskom na na\u010din na koji smo razmi\u0161ljali u odre\u0111enim nejasnim situacijama.<\/p>\n<p><\/p>\n<p>U ovom \u010dlanku ne\u0107e biti konkretnih tehni\u010dkih rje\u0161enja (pa ni op\u0107enito ne\u010dega tehni\u010dkog) koja bi trebalo uzeti i primijeniti u svom projektu. Radije \u2013 to je refleksija na obavljenom radu. Bilo je posebnih trenutaka koji su utjecali na nas kao tim \u2013 zbli\u017eili su nas, oja\u010dali i stavili na ispit. O tim momentima, o atmosferi rada u timu, o na\u0161im zamkama i nizu psiholo\u0161kih zamki u koje se ponekad sami uhvatimo, poku\u0161at \u0107u danas govoriti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Retrospektiva problema. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog\" src=\"\/wp-content\/uploads\/2020\/03\/1651640dbf2cb45d48e1e046a78c931f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I zapo\u010det \u0107u upravo s 2012. godinom.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Do\u0161ao sam 2012. s glavnim ciljem u to vrijeme \u2013 radom na na\u0161oj zastavnoj stranici. Tada je to bio \"Frankensteinov monstrum\": dio tima radio je s na\u0161im starim sustavom, koji nije ba\u0161 najbolje podnosio optere\u0107enja (Bitrix), dok je drugi dio tima (gdje sam bio i ja) poku\u0161avao implementirati novi sustav, koji smo odabrali prema kriteriju \"Ako je ovo najskuplja e-commerce platforma na svijetu, uzimamo je\". Upravo \"poku\u0161avali smo implementirati\" \u2013 jer je sustav o\u010dajni\u010dki pru\u017eao otpor, i na svaki trenutak s kojim smo se uspijevali suo\u010diti, obvezno se pojavila \"iznena\u0111enja\" kao odgovor. Puno smo radili, ali napredovali smo brzinom pu\u017ea.<\/p>\n<p><\/p>\n<p>Osobno, posljednja kap koja je prelila \u010da\u0161u za mene bila je upoznavanje s kodom jedne metode u ovom \"najskupljem e-commerce sustavu na svijetu\", kada je nekoliko sati usredoto\u010denog rada na zamr\u0161enom bugu dovelo do otkri\u0107a 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\u0161e, jer je to za \u0161to je custom-tag i namijenjen. No, iznena\u0111enje je bilo u tome \u0161to se pritom mijenjaju neki podaci u bazi, a to utje\u010de na pona\u0161anje na sljede\u0107im stranicama, i ako pritisnete F5 \u2014 ponavlja se poziv, \u0161to naru\u0161ava dosljednost podataka. Osim toga, to se o\u010ditavalo tek kroz nekoliko koraka, na 3. stranici sekvencije. Ne, nisam protiv da takav \"majstor-nind\u017ea\" bude u timu i svojom kodom odr\u017eava koncentraciju kolega. Ali ne na taj na\u010din, u najskupljem sustavu!<\/p>\n<p><\/p>\n<p>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\u0161avali, da nismo bili prisiljeni koristiti ovaj najskuplji i najiritantniji sustav.<\/p>\n<p><\/p>\n<p>Re\u010deno \u2014 u\u010dinjeno. Napravili smo pilot-projekt, u kojem smo postavili temelj za razvoj nove web stranice Spormaster. Mnoge od tih ideja su za\u017eivjele i upravo sada se njihovo nastavak aktivno vrti na web stranici.<\/p>\n<p><\/p>\n<h2 id=\"etapy-pilota-i-vremennye-ramki\">Faze pilota i vremenski okviri<\/h2>\n<p><\/p>\n<p><strong>2 dana.<\/strong> Napravili smo mikroprototip \u2014 tijekom vikenda selimo na\u0161u bazu u ElasticSearch, radimo facetan pretra\u017eivanje. Voil\u00e0! U tom kupljenom sustavu takva postavka \"pojedla\" je 2 tjedna. A ovdje \u2014 doslovno za nekoliko sati! I radi br\u017ee. \u0160tovi\u0161e, br\u017ee za red veli\u010dine.<\/p>\n<p><\/p>\n<p><strong>2 tjedna.<\/strong> Radimo na prototipu, dodajemo funkcionalnost za adekvatno personalizirano isho\u0111enje. <\/p>\n<p><\/p>\n<p>Na primjer, korisnik ima nekoliko popusta i akcija koje su relevantne ba\u0161 za njega \u2014 tada u rezultatima pretra\u017eivanja proizvoda treba prikazati upravo onu cijenu koju mo\u017ee dobiti primjenom svih dostupnih pogodnosti na najisplativiji na\u010din.<\/p>\n<p><\/p>\n<p>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\u017ebu. Da, to je pravi slu\u010daj \ud83d\ude42 I da bih postavio takvu akciju u sustavu, pla\u0107eno je 3 savjetovanja s dobavlja\u010dem, nakon kojih smo dobili mnogo primjera kako napraviti razli\u010dite druge akcije. Vrlo diplomatski, a uzimaju\u0107i u obzir cijenu savjetovanja \u2014 to je vrlo ekonomi\u010dno.<\/p>\n<p><\/p>\n<p>P pokazali smo biznisu detaljnu demonstraciju. Objavili su da \u0107e brzo sastaviti pilot projekt i odmah su se uhvatili u ko\u0161tac s time.<\/p>\n<p><\/p>\n<p><strong>2 mjeseca.<\/strong> Pilot projekt \u2014 radimo u obliku funkcionalne web stranice s pretra\u017eivanjem po katalogu. Pretra\u017eivanje s faceteima, rezultati pretra\u017eivanja \u2014 s osobnim popustima, izgleda da pilot gotovo kao web stranica Sportmastera, a i proizvode koje smo stavili su isti. Slatki\u0161! <\/p>\n<p><\/p>\n<p>Dodajemo \"Rhetorics:100\" na\u0161eg \u0161efa odjela, i prezentacija biznisu prolazi odli\u010dno! Daju nam slobodne ruke da razvijemo eCommerce platformu sami.<\/p>\n<p><\/p>\n<p>A to zna\u010di, dr\u017eite, de\u010dki, tim, dr\u017eite, de\u010dki, bud\u017eet. Super, zar ne?<\/p>\n<p><\/p>\n<p><strong>2 godine.<\/strong> Izlazak web stranice u produkciju. Da, traje dugo. Sve \u0161to smo tada znali, isprobali smo samo u razmjeru prototipa. Dva ljudi lako stvaraju uskla\u0111eni tim. A zadaci koje smo \"\u0161kicnuli\" \u2014 u su\u0161tini 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 \u017ealjenja \"ubijali\". Kada nas je postalo 10, po inerciji smo ekstrapolirali na\u0161u brzinu rada na sve ostale. I obe\u0107ali smo rokove za izvr\u0161enje zadatka, koji su jednaki percepciji savr\u0161enstva pomno\u017eeno s na\u0161im entuzijazmom.<\/p>\n<p><\/p>\n<p>Poznata situacija? \ud83d\ude42<\/p>\n<p><\/p>\n<p>Dakle, ve\u0107 znate \u0161to \u0107e se dogoditi dalje?<\/p>\n<p><\/p>\n<h2 id=\"lovushka-1-ekstrapolyator-krutysh\">Zamka br. 1. \"Ekstrapolator-superstar\"<\/h2>\n<p><\/p>\n<p>Jasno je da nove tehnologije izgledaju vrlo cool u prezentacijama i izvrsno se pokazuju u aplikaciji tipa \"Hello World\". No, stvarnost je obi\u010dno malo dalje od toga.<\/p>\n<p><\/p>\n<p>Dakle, uzimamo biblioteku, pi\u0161emo 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 \u2014 pa kakvi tests ovdje, ozbiljno. I sve to pod krinkom \"super optimizirali smo proces razvoja\" (da, sada je \u010dak stra\u0161no opisivati to).<\/p>\n<p><\/p>\n<p>I onda je sve prili\u010dno o\u010dito.<\/p>\n<p><\/p>\n<p>Implementiramo novu verziju na uat. De\u010dki iz poslovanja energi\u010dno testiraju i pritisnuju dugmi\u0107e. Ponekad to rade prili\u010dno kreativno \u2014 ne\u0161to se prekida. Trebali bismo saznati \u0161to su za to u\u010dinili. No, s druge strane monitora nije odu\u0161evljeni tester koji \u0107e ti iznijeti sve karakteristike okru\u017eenja uzimaju\u0107i u obzir vremenske uvjete u regiji, nego klijent iz poslovanja. Njegova povratna informacija je jednostavno \"ne radi\". A to zna\u010di da nije zadovoljan. Pitaj ga \u2014 i on \u0107e biti <em>stra\u0161an<\/em> nezadovoljan!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Retrospektiva problema. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog\" src=\"\/wp-content\/uploads\/2020\/03\/9d980b25fabea5e0a34a428fb9dbb85e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tada, kako bismo reproducirali gre\u0161ku, moramo pro\u0107i kroz sve i pomicati stvari. Naravno, nismo zanemarili niti jednu pritu\u017ebu i sve smo ispravili. Odustali smo od planiranih zadataka, ali \"gasili smo po\u017ear\".<\/p>\n<p><\/p>\n<p>Tako smo iskopali svoju sljede\u0107u jamu.<\/p>\n<p><\/p>\n<h2 id=\"lovushka-2-stahanovec\">Mamac br. 2. \"Shtakhanov\"<\/h2>\n<p><\/p>\n<p>Stigla ti je neugodna gre\u0161ka. Po\u010dinje\u0161 se truditi da shvati\u0161. Ne ide \u2014 bijes \u2014 poku\u0161aj da to ponovo shvati\u0161 \u2014 nova nevolja \u2014 provjeri\u0161 sve \u0161to mo\u017ee\u0161 \u2014 opet nije to \u2014 razmi\u0161lja\u0161 o tome kako si ve\u0107 star i svi imaju djecu i hipoteku \u2014 ponovno poku\u0161ava\u0161 \u2014 opet nije to. Nekoliko \u0161oljica kafe, i sve se ponavlja. 12-14 sati rada zaredom \u2014 gotovo kao norma. I eto, kada svi ve\u0107 dosegnu svoje limite \u2014 bum, prosvjetljenje!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Retrospektiva problema. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog\" src=\"\/wp-content\/uploads\/2020\/03\/8f66e2ca834ffafd72bde53fd397bcb7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mo\u017eda, s vanjske strane, procjena efikasnosti takvog dana izgleda dobro i ispravno. A iznutra \u2014 mo\u017ee biti razli\u010dito.<\/p>\n<p><\/p>\n<p>U mom slu\u010daju, dojam takvog rada bio je \"Pohvalan sam, ja sam sjajan, rije\u0161io sam to\". Ne uvijek svjesno, ali nesvjesno \u2014 uvijek!<\/p>\n<p><\/p>\n<p>I na to se navikne\u0161, bez \u0161ale. Ispostavlja se da se unutarnje metrike uspje\u0161nosti pomjeraju s rezultata na broj ulo\u017eenih truda i nivo onoga \u0161to si postigao, koliko si patio poku\u0161avaju\u0107i rije\u0161iti problem.<\/p>\n<p><\/p>\n<p>Vjerovatno je ovo najstra\u0161nija zamka.<\/p>\n<p><\/p>\n<p>Dalje \u0107e biti lak\u0161e i zabavnije \ud83d\ude42<\/p>\n<p><\/p>\n<h2 id=\"lovushka-3-sila-hello-world\">Zamka br. 3. \"Mo\u0107 Hello world\"<\/h2>\n<p><\/p>\n<p>Na\u0161 tehnolo\u0161ki okvir tog razdoblja: ElasticSearch, Hazelcast, Pentaho, freemarker (i provjereni Java, Spring, Tomcat, nginx). Freemarker nije bio vrlo informativan u izbacivanju poruka o gre\u0161kama. No, ElasticSearch, Hazelcast, Pentaho morali smo patchati vi\u0161e puta \u2014 talentirano smo pronalazili slu\u010dajeve u kojima nisu radili onako kako je dokumentacijom zadano.<\/p>\n<p><\/p>\n<p>Lagan start i brzi rezultati kori\u0161tenja nove tehnologije su dobri, ali nas uvode u euforiju i smanjuju budnost. Jer nova tehnologija ima gre\u0161ke, obavezno sadr\u017ei gre\u0161ke. I ako o tome jo\u0161 nije pisano \u2013 raduj se, ti \u0107e\u0161 biti taj pionir koji \u0107e svakako nai\u0107i na ne\u0161to pogre\u0161no i oti\u0107i tra\u017eiti informacije na Google-u ili Stack Overflow-u. Naravno, \"pogre\u0161no\" se mo\u017ee na\u0107i u provjerenim proizvodima, ali u novima je to mnogo jednostavnije.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Retrospektiva problema. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog\" src=\"\/wp-content\/uploads\/2020\/03\/86d505a5125b8106503497b72ff7761e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Unato\u010d svim te\u0161ko\u0107ama, iza\u0161li smo u produkciju. Da, s ka\u0161njenjima. Da, nije ba\u0161 stabilno. Ali u globalu \u2013 bez katastrofa.<\/p>\n<p><\/p>\n<p>I jo\u0161 jednom \u0107u istaknuti zamke koje iskrivljuju zdravo percepciju radnog procesa.<\/p>\n<p><\/p>\n<ol>\n<li><strong>\u201eEkstrapolator-majstor\u201c<\/strong>. Pod dojmom trenutnih uspjeha idemo naprijed i s veseljem ekstrapoliramo brzinu razvoja na nadolaze\u0107e projekte.<\/li>\n<li><strong>\u201eStahanovist\u201c<\/strong>. Radimo do iznemoglosti, zadovoljni smo sobom, ali ne primje\u0107ujemo da su problemi koje rje\u0161avamo posljedica na\u0161ih osobnih gre\u0161aka\/nepa\u017enje\/zanemarivanja. Poslovi koji nisu zavr\u0161eni.<\/li>\n<li><strong>\u201eSnaga Hello world\u201c<\/strong>. \u017durimo implementirati sve najnovije i najzanimljivije u produkciju.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"pochemu-vsyo-poluchilos\">Za\u0161to je sve uspjelo<\/h2>\n<p><\/p>\n<p>Naravno, nisam nabrojao sve pogre\u0161ke koje smo imali u ovom razdoblju, ali one naj\u010de\u0161\u0107e, vjerojatne za projekt bilo koje specifi\u010dnosti. Takvo bilje\u017eenje gre\u0161aka poma\u017ee u izbjegavanju istih u budu\u0107nosti.<\/p>\n<p><\/p>\n<p>Malo o tome kako smo uop\u0107e uspjeli stvoriti takav mini-startup unutar kompanije i uvjeriti biznis da se preseli s ve\u0107 kupljenog sustava na ne\u0161to vlastito.<\/p>\n<p><\/p>\n<p><strong>Uvjet br. 0<\/strong>. Zdrav klima u kompaniji. To nije samo \u201ezapaljene o\u010di\u201c zaposlenika i komunikativnost u stresnim uvjetima, ne. To se odnosi na sve interakcije.<\/p>\n<p><\/p>\n<p><strong>Uvjet br. 1<\/strong>. Vjerovati u ono \u0161to radi\u0161. Iskreno, ne mislim da bismo imali ikakvu priliku da se bavimo pilota\u017eom, da nismo razradili kupljeni sustav \u201edo najsitnijih detalja\u201c \u2013 tj. odstupiv\u0161i i podsvjesno znaju\u0107i da je taj sustav bolji i nadma\u0161uje nas.<\/p>\n<p><\/p>\n<p>\u0160to smo u\u010dinili: 1) razjasnili smo se u kupljenom sustavu, s njegovom pomo\u0107i rije\u0161ili glavne zahtjeve od biznisa 2) sastavili smo popis zadataka koji ne postoje samo sada, ve\u0107 \u0107e biti i u bliskoj budu\u0107nosti 3) odabrali smo rje\u0161enje koje najbolje odgovara. I tada je na\u0161a procjena rje\u0161enja bila procjena stru\u010dnjaka.<\/p>\n<p><\/p>\n<p>Da li bi nam ne\u0161to dali, da smo jednostavno do\u0161li i rekli, kao, \"de\u010dki, sve je besmisleno, ne \u017eelimo se s time baviti i odlu\u010dili smo sve od nule napraviti\"? Malo sutra. Odgovor bismo dobili u takvom obliku da bi zauvijek ostao u pam\u0107enju \ud83d\ude42<\/p>\n<p><\/p>\n<p><strong>Uslov br. 2<\/strong>. Prvi korak radimo mali. Generiramo prvu hipotezu i provjeravamo. Mo\u017eete potro\u0161iti i svoje li\u010dno vrijeme na to. Ako ne \u017eelite tro\u0161iti vrijeme \u2014 ne trebate se ni zabavljati s takvim poslom. A ako ne \u017eelite provjeriti malu hipotezu, nego \u017eelite odmah ne\u0161to sjajno napraviti \u2014 dr\u017eite se podalje od takvih ljudi!<\/p>\n<p><\/p>\n<p>Imali smo sre\u0107e i prva hipoteza je upalila. Ali to ne biva uvijek. Na primjer, u jednom od sljede\u0107ih projekata, kada smo promirali admin panel u okviru sli\u010dnog pilota, upalila nam je tek 18. varijanta. A 17 prvih pristupa su bila uzaludna. Usput, u pri\u010di o stvaranju admin panela zapleti su bili na razini brazilske serije, jer su tim \u010dinili momci, tada ve\u0107 veterani, pravi \"iskusni\".<\/p>\n<p><\/p>\n<p><strong>Uslov br. 3<\/strong>. Radimo MVP i tra\u017eimo bolne ta\u010dke kod donosioca odluka. Naravno, na njegovom licu mo\u017ee se odraziti u\u017eas ve\u0107 od same \u010dinjenice da mu po trideseti put donosite neku zamisao. Ali nema veze. I obavezno pokazujemo kako mi rje\u0161avamo njegove probleme svojim proizvodom.<\/p>\n<p><\/p>\n<p><strong>Uslov br. 4<\/strong>. Na brzinu pravimo pilot koji izgleda <em>pribli\u017eno<\/em> kao kona\u010dni rezultat. Napraviti sve savr\u0161eno \u2014 primamljivo je, ali mo\u017ee se desiti da upadnete u perfekcionizam, zbog kojeg \u0107e se desiti da umjesto pilota \u017eelite pokazati pilot verziju ve\u0107 savr\u0161enog proizvoda. A takvi ne postoje. Zato jednostavno napravite barem ne\u0161to od drveta.<\/p>\n<p><\/p>\n<p><strong>Uslov br. 5<\/strong>. Proizvod. Projekt raste, dobiva sredstva, dolaze stru\u010dnjaci s solidnim iskustvom.<br \/>\nI ako ste klasi\u010dni startuper, onda je to onaj trenutak kada treba napustiti brod. Jer lagani letovi po vrhovima i osje\u0107aj sveop\u0107e blagodati brzo nestaju.<\/p>\n<p><\/p>\n<p>Izlazak u produkciju \u2014 to je suo\u010davanje s pravim optere\u0107enjima, integracija s desetak sistema, a kada kreirate novu funkcionalnost, u isto vrijeme, u okviru podr\u0161ke doradite stare verzije. Sve to su izazovi daleko ozbiljniji od izmi\u0161ljanja ideje i rje\u0161avanja mo\u017eda i dobro, ali samo jednog problema klijenta.<\/p>\n<p><\/p>\n<p>Ovo su izazovi, a razvijanje vje\u0161tina doga\u0111a se upravo u ovoj fazi.<\/p>\n<p><\/p>\n<p>Hvala \u0161to ste pro\u010ditali. Sretno s novim kodom!<\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/485088\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440. \u0421\u043a\u0430\u0436\u0443 \u0441\u0440\u0430\u0437\u0443, \u0447\u0442\u043e \u00ab\u0433\u043b\u0430\u0432\u043d\u044b\u0439\u00bb \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432\u00bb, \u043d\u0435\u0442, \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0442\u0430\u043a\u043e\u0439 \u043e\u0447\u0430\u0440\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u043b\u044f \u00abSenior+&quot;\u00bb. \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 2012 \u0433\u043e\u0434\u0430, \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041d\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73945,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73944","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u041a\u0430\u043a \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043a\u0440\u0443\u0447\u0435 \u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-12T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-12T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Retrospektiva gre\u0161aka. Kako je vlastito rje\u0161enje ispalo bolje od pla\u0107enog | ProHoster","description":"Bok! Zovem se Aleksej Pjankov, ja sam glavni programer u tvrtki Sportmaster.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u041a\u0430\u043a \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043a\u0440\u0443\u0447\u0435 \u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041f\u044c\u044f\u043d\u043a\u043e\u0432, \u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440.","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-12T23:42:03+00:00","article:modified_time":"2020-03-12T23:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73944","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:24:23","updated":"2022-10-06 05:35:50","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/73944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=73944"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/73944\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/73945"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=73944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=73944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=73944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}