{"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\/da\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","title":{"rendered":"A retrospective of pitfalls. How a custom solution turned out to be better than a paid one","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej! Mit navn er Alexey P'yankov, jeg er hovedprogrammer i virksomheden Sportmaster. Jeg vil sige med det samme, at \"hoved\" ikke betyder \"den mest vigtige af alle programm\u00f8rer\"; nej, det er bare en betegnelse, en charmerende overs\u00e6ttelse for \"Senior+\".<\/p>\n<p><\/p>\n<p>Jeg har arbejdet i Sportmaster siden 2012, og i l\u00f8bet af denne tid har vores udviklingsteam skabt mange interessante tekniske l\u00f8sninger. Men i dag vil jeg gerne tale om vores arbejde med fokus p\u00e5, hvordan vi t\u00e6nkte i visse tvetydige situationer.<\/p>\n<p><\/p>\n<p>Denne artikel vil ikke indeholde specifikke tekniske l\u00f8sninger (eller overhovedet noget teknisk), som man b\u00f8r tage og implementere i sine projekter. Snarere er det en refleksion over det arbejde, vi har udf\u00f8rt. Der var s\u00e6rlige \u00f8jeblikke, der p\u00e5virkede os som team \u2014 samlede os, h\u00e6rdede os og testede os p\u00e5 vores styrker. Om disse \u00f8jeblikke, om atmosf\u00e6ren i teamet, om vores faldgruber og en r\u00e6kke psykologiske feller, som vi nogle gange selv falder i, vil jeg fors\u00f8ge at fort\u00e6lle i dag.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A retrospective of pitfalls. How a custom solution turned out to be better than a paid one\" src=\"\/wp-content\/uploads\/2020\/03\/1651640dbf2cb45d48e1e046a78c931f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg vil starte netop fra 2012.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Jeg kom i 2012 med det prim\u00e6re m\u00e5l for den tid \u2014 at arbejde p\u00e5 vores flagskibswebsted. P\u00e5 det tidspunkt var det en \"Frankenstein-monster\": en del af teamet arbejdede med vores gamle system, som ikke klarede belastningerne s\u00e6rlig godt (Bitrix), mens en anden del af teamet (hvor jeg ogs\u00e5 var med) fors\u00f8gte at implementere et nyt system, som vi valgte efter kriteriet \"Da det er den dyreste e-commerce i verden, tager vi den\". Det var faktisk \"fors\u00f8gte at implementere\" \u2014 fordi systemet gjorde voldsom modstand, og til hvert problem, vi fik l\u00f8st, opstod der altid en \"overraskelse\" som svar. Vi arbejdede meget, men gjorde fremskridt i sneglefart.<\/p>\n<p><\/p>\n<p>For me, the last straw was encountering the code of a method in this \"most expensive e-commerce in the world,\" when several hours of focused work on a convoluted bug led to the discovery of the cause somewhere in the custom-tag that executes during the HTML generation in JSP. The purpose of this custom-tag is to display the sum of certain values. That's fine; that's what custom-tags are for. But the surprise lay in the fact that during this process, some data in the database was altered, which affects behavior on subsequent pages, and if you press F5 \u2014 the call repeated, disrupting data consistency. Moreover, it disrupted it in such a way that it only manifested after several steps, on the 3rd page of the sequence. No, I don't mind having such a \"master ninja\" in the team keeping his colleagues alert with his code. But to have it this way, in the library of the most expensive system!<\/p>\n<p><\/p>\n<p>It was Friday. And we spent Saturday and Sunday in the office with the goal of figuring out what tasks the business is currently setting for the system today and what challenges it might come up with in a year. Accordingly, how we would solve them if we hadn't been constrained by the framework of this most expensive and infuriating system.<\/p>\n<p><\/p>\n<p>Done. We created a pilot project laying the foundation for the development of the new Sportmaster website. Many of these ideas have taken root, and their continuation is actively running on the site right now.<\/p>\n<p><\/p>\n<h2 id=\"etapy-pilota-i-vremennye-ramki\">Pilot stages and timelines<\/h2>\n<p><\/p>\n<p><strong>2 days.<\/strong> We created a micro-prototype \u2014 over the weekend, we migrated our database to ElasticSearch, implementing faceted search. Voila! In that very purchased system, such a setup took 2 weeks. Here, it was done in just a couple of hours! And it works faster, significantly so.<\/p>\n<p><\/p>\n<p><strong>2 weeks.<\/strong> We are \"chop-chopping\" the prototype, adding functionality for adequate personalized output. <\/p>\n<p><\/p>\n<p>For example, if a user has several discounts and promotions that are specifically relevant to them \u2014 then the search results for products need to display exactly the price that can be obtained by applying all available perks in the most beneficial way.<\/p>\n<p><\/p>\n<p>Med kampagner er alt ikke s\u00e5 enkelt. For eksempel, hvis du k\u00f8ber ski, f\u00e5r du nu 40% rabat p\u00e5 en hat, men samtidig annulleres velkomstrabatten p\u00e5 10% p\u00e5 hele ordren. Ja, det er en reel case \ud83d\ude42 Og for at indstille en s\u00e5dan kampagne i k\u00f8besystemet blev der betalt for 3 konsultationer med leverand\u00f8ren, hvor vi fik mange eksempler p\u00e5, hvordan man kan lave forskellige andre kampagner. Meget diplomatisk, og i betragtning af omkostningerne til konsultationerne \u2014 en rigtig god besparelse.<\/p>\n<p><\/p>\n<p>Vi viste virksomheden en detaljeret demo. Vi lovede hurtigt at samle et pilotprojekt og gik straks i gang.<\/p>\n<p><\/p>\n<p><strong>2 m\u00e5neder.<\/strong> Pilotprojektet \u2014 vi laver det i form af en live hjemmeside med s\u00f8gning i kataloget. S\u00f8gning med facetfilter, s\u00f8geresultaterne viser personlige rabatter, piloten ser n\u00e6sten ud som Sportmaster's hjemmeside, og vi har endda uploadet de samme varer. En k\u00e6mpe succes! <\/p>\n<p><\/p>\n<p>Vi tilf\u00f8jer 'Rhetoric:100' fra vores afdelingsleder, og pr\u00e6sentationen for virksomheden g\u00e5r igennem med bravour! Vi f\u00e5r frie h\u00e6nder til selv at udvikle eCommerce-platformen.<\/p>\n<p><\/p>\n<p>Og det betyder, hold fast, drenge, hold styr p\u00e5 budgettet. Fedt, ikke?<\/p>\n<p><\/p>\n<p><strong>2 \u00e5r.<\/strong> Lancerer hjemmesiden i produktion. Ja, det tog lang tid. Alt hvad vi dengang kunne, fors\u00f8gte vi kun i prototypens omfang. To personer kan let danne et velfungerende team. Og de opgaver, vi 'fik klaret' \u2014 det var stort set blot sm\u00e5 justeringer af 'Hello World' i nye teknologier. Vi genererede let nye hypoteser, testede dem hurtigt, og da vi ikke n\u00e5ede at forpligte os, 'dr\u00e6bte' vi dem uden fortrydelse. Da vi blev 10 personer, ekstrapolerede vi instinktivt vores arbejdshastighed til alle de andre. Og vi lovede opgavetidslinjer, der var lig med vores forestilling om det perfekte ganget med vores entusiasme.<\/p>\n<p><\/p>\n<p>Kender du det? \ud83d\ude42<\/p>\n<p><\/p>\n<p>S\u00e5, ved du allerede, hvad der kommer n\u00e6ste?<\/p>\n<p><\/p>\n<h2 id=\"lovushka-1-ekstrapolyator-krutysh\">F\u00e6lde nr. 1. 'Ekstrapolatoren'<\/h2>\n<p><\/p>\n<p>Det er klart, at nye teknologier ser meget flotte ud i pr\u00e6sentationer og viser sig godt i eksempler af typen 'Hello World'. Men virkeligheden ligger normalt lidt l\u00e6ngere v\u00e6k.<\/p>\n<p><\/p>\n<p>S\u00e5dan er det. Vi tager et bibliotek og skriver en masse anvendelseskode. Unit-tests ser vi som en byrde (vi er jo seje og arbejder i superhastighed, koden er moderne osv.). Vi \u00e6ndrer og opdaterer API'erne undervejs \u2014 hvad skal der v\u00e6re af tests, seri\u00f8st. Og alt dette under overskriften 'vi har optimeret udviklingsprocessen' (ja, det er endda skr\u00e6mmende at beskrive nu).<\/p>\n<p><\/p>\n<p>Og s\u00e5 bliver alt ret \u00e5benlyst.<\/p>\n<p><\/p>\n<p>Vi ruller en ny build ud p\u00e5 UAT. Folkene fra forretningen g\u00e5r energisk i gang med at teste og trykke p\u00e5 knapperne. De trykker nogle gange ret kreativt \u2014 noget falder ud. Her burde man g\u00e5 hen og finde ud af, hvad der er blevet lavet for at l\u00f8se det. Men der p\u00e5 den anden side af sk\u00e6rmen sidder ikke en fr\u00e6k tester, der kan give dig alle specifikationer for milj\u00f8et med hensyn til vejret i regionen, men en kunde fra forretningen. Han mener bare, \"det virker ikke.\" Og det betyder, at han er utilfreds. Sp\u00f8rg ham \u2014 og han vil <em>v\u00e6rre<\/em> utilfreds!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A retrospective of pitfalls. How a custom solution turned out to be better than a paid one\" src=\"\/wp-content\/uploads\/2020\/03\/9d980b25fabea5e0a34a428fb9dbb85e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For at kunne reproducere fejlen, skal man g\u00e5 ud og trykke sig frem ad alle muligheder. Selvf\u00f8lgelig har vi ikke overset nogen klager, og vi har fikset alle problemstillinger. Vi droppede planlagte opgaver, men \"slukkede ilden.\"<\/p>\n<p><\/p>\n<p>S\u00e5 vi gravede en ny f\u00e6lde.<\/p>\n<p><\/p>\n<h2 id=\"lovushka-2-stahanovec\">F\u00e6lde nummer 2. \"Stakhanovets\"<\/h2>\n<p><\/p>\n<p>Der frustrerer en ubehagelig fejl dig. Du begynder at finde ud af det. Det fungerer ikke \u2014 vrede \u2014 fors\u00f8ger at finde ud af det igen \u2014 ny skuffelse \u2014 sp\u00f8rger alt hvad du kan \u2014 igen ikke det rigtige \u2014 t\u00e6nker p\u00e5, at du allerede er gammel og har b\u00f8rn og realkreditl\u00e5n \u2014 pr\u00f8ver igen \u2014 stadig ikke rigtigt. Et par kopper kaffe senere, og det hele gentager sig. 12-14 timers sammenh\u00e6ngende arbejde \u2014 n\u00e6sten som normen. Og s\u00e5, n\u00e5r alle er p\u00e5 kanten, bang, en \u00e5benbaring!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A retrospective of pitfalls. How a custom solution turned out to be better than a paid one\" src=\"\/wp-content\/uploads\/2020\/03\/8f66e2ca834ffafd72bde53fd397bcb7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e5ske, set fra siden, er bed\u00f8mmelsen af effektiviteten af en s\u00e5dan dag synlig og korrekt. Men indefra kan det v\u00e6re anderledes.<\/p>\n<p><\/p>\n<p>I mit tilf\u00e6lde indeholdt indtrykket af s\u00e5dan arbejde \"Jeg er fantastisk, jeg er sej, jeg har l\u00f8st det.\" Ikke altid bevidst, men ubevidst \u2014 altid!<\/p>\n<p><\/p>\n<p>Og det bliver man afh\u00e6ngig af, uden at sp\u00f8ge. Det ender med, at de interne m\u00e5linger for succes forskydes fra resultatet til m\u00e6ngden af anvendte kr\u00e6fter og niveauet for de bedrifter, du har opn\u00e5et, hvor meget du har lidt, mens du fors\u00f8gte at l\u00f8se opgaven.<\/p>\n<p><\/p>\n<p>Det m\u00e5 v\u00e6re den mest forf\u00e6rdelige f\u00e6lde.<\/p>\n<p><\/p>\n<p>Det bliver lettere og sjovere herfra \ud83d\ude42<\/p>\n<p><\/p>\n<h2 id=\"lovushka-3-sila-hello-world\">F\u00e6lde nummer 3. \"Kraften i Hello world\"<\/h2>\n<p><\/p>\n<p>Vores teknologistak i den periode: ElasticSearch, Hazelcast, Pentaho, freemarker (og velkendte Java, Spring, Tomcat, nginx). Freemarker gav ikke s\u00e6rlig informative fejlmeddelelser. Men ElasticSearch, Hazelcast, Pentaho skulle vi patch'e flere gange \u2014 vi fandt talentfuldt sager, hvor de ikke fungerede som angivet i dokumentationen.<\/p>\n<p><\/p>\n<p>En nem start og hurtige fordele ved at bruge ny teknologi er godt, men de kan f\u00f8re til eufori og s\u00e6nke \u00e5rv\u00e5genheden. For ny teknologi har fejl, det har bestemt fejl. Og hvis de ikke er blevet rapporteret endnu - gl\u00e6d dig, det er dig, der st\u00e5r over for at finde noget sk\u00e6vt og skal til at google eller s\u00f8ge hj\u00e6lp p\u00e5 SO. Selvf\u00f8lgelig kan 'sk\u00e6vt' findes i etablerede produkter, men i nye er det meget lettere.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A retrospective of pitfalls. How a custom solution turned out to be better than a paid one\" src=\"\/wp-content\/uploads\/2020\/03\/86d505a5125b8106503497b72ff7761e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e5 trods af alle udfordringer, n\u00e5ede vi ud i produktion. Ja, med lag. Ja, ikke s\u00e6rlig stabilt. Men samlet set - uden katastrofer.<\/p>\n<p><\/p>\n<p>S\u00e5 lad mig endnu engang p\u00e5pege de f\u00e6lder, hvor det sunde syn p\u00e5 arbejdsprocessen forvr\u00e6nges.<\/p>\n<p><\/p>\n<ol>\n<li><strong>\u00abEkstrapolator-geniet\u00bb<\/strong>. Under indtrykket af de nuv\u00e6rende succeser g\u00e5r vi fremad og ekstrapolerer gl\u00e6deligt udviklingshastigheden til kommende projekter.<\/li>\n<li><strong>\u00abStakhanovets\u00bb<\/strong>. Vi arbejder til det yderste, er tilfredse med os selv, men bem\u00e6rker ikke, at de problemer, vi l\u00f8ser, er konsekvenserne af vores egne fejl\/mangler\/forvildelser. Works not to be done.<\/li>\n<li><strong>\u00abKraften i Hello World\u00bb<\/strong>. Vi haster med at implementere alt det nyeste og mest interessante i produktion.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"pochemu-vsyo-poluchilos\">Hvorfor det lykkedes<\/h2>\n<p><\/p>\n<p>Selvf\u00f8lgelig har jeg ikke n\u00e6vnt alle de fejl, vi har haft i denne tid, men de mest almindelige, der er sandsynlige for ethvert projekt. Denne registrering af fejl hj\u00e6lper os med at undg\u00e5 dem i fremtiden.<\/p>\n<p><\/p>\n<p>Lidt om, hvordan vi overhovedet lykkedes med at skabe s\u00e5dan en mini-startup inden for virksomheden og overbevise forretningen om at skifte fra det allerede k\u00f8bte system til noget selvudviklet.<\/p>\n<p><\/p>\n<p><strong>Betingelse \u21160<\/strong>. Et sundt klima i virksomheden. Det handler ikke kun om de \u201ebr\u00e6ndende \u00f8jne\u201c fra medarbejderne og kommunikation i stressede forhold til produktionen af sm\u00e5kager, nej. Det handler om al interaktion.<\/p>\n<p><\/p>\n<p><strong>Betingelse \u21161<\/strong>. At tro p\u00e5 det, man g\u00f8r. Seri\u00f8st, jeg tror ikke, vi ville have haft nogen chance, hvis vi havde startet piloten uden at have unders\u00f8gt det k\u00f8bte system \u201etil bolten\u201c - det vil sige, tilbageholdende og ubevidst vidende, at dette system er bedre og vil overg\u00e5 os.<\/p>\n<p><\/p>\n<p>Hvad vi gjorde: 1) Vi forstod det k\u00f8bte system, og ved hj\u00e6lp deraf l\u00f8ste vi de vigtigste anmodninger fra forretningen 2) Vi udarbejdede en opgaveliste, som ikke blot er aktuel nu, men ogs\u00e5 vil v\u00e6re det i overskuelig fremtid 3) Vi fandt en l\u00f8sning, som passer bedre. Og s\u00e5 var vores bed\u00f8mmelse af l\u00f8sningen en vurdering af eksperterne.<\/p>\n<p><\/p>\n<p>Ville de give os noget, hvis vi bare kom og sagde: \"fyre, alt er skidt, vi vil ikke besk\u00e6ftige os med det og har besluttet at starte fra bunden\"? Sandsynligvis ikke. Og svaret ville komme i en form, der ville v\u00e6re sv\u00e6rt at glemme \ud83d\ude42<\/p>\n<p><\/p>\n<p><strong>Betingelse nr. 2<\/strong>. Vi tager det f\u00f8rste skridt lille. Vi genererer den f\u00f8rste hypotese og tester den. Man kan bruge sin egen tid p\u00e5 det. Hvis man ikke \u00f8nsker at bruge sin tid \u2014 s\u00e5 er det slet ikke v\u00e6rd at tage fat p\u00e5 s\u00e5dan et projekt. Og hvis man ikke \u00f8nsker at teste en lille hypotese, men hellere vil g\u00f8re det stort og flot med det samme \u2014 s\u00e5 hold dig v\u00e6k fra s\u00e5danne personer!<\/p>\n<p><\/p>\n<p>Vi var heldige, og den allerf\u00f8rste hypotese fungerede. Men det sker ikke altid. For eksempel i et af de f\u00f8lgende projekter, hvor vi promoverede adminpanelet i rammerne af et lignende pilotprojekt, virkede kun den 18. mulighed. Og de f\u00f8rste 17 tilgange til problemet var spildt. I \u00f8vrigt, i historien om oprettelsen af adminpanelet var plotvendingerne p\u00e5 niveau med brasilianske s\u00e6beoperaer, fordi holdet bestod af fyre, der p\u00e5 det tidspunkt allerede var veteraner, \u00e6gte \"gamle r\u00e6ve\".<\/p>\n<p><\/p>\n<p><strong>Betingelse nr. 3<\/strong>. Vi laver MVP og identificerer smertepunkterne hos beslutningstageren. Selvf\u00f8lgelig kan der allerede v\u00e6re et udtryk af r\u00e6dsel i hans ansigt bare ved det faktum, at du for den tredive gang pr\u00e6senterer ham for en eller anden id\u00e9. Men alligevel. Og vi viser absolut, hvordan vi l\u00f8ser hans problemer med vores produkt.<\/p>\n<p><\/p>\n<p><strong>Betingelse nr. 4<\/strong>. Vi laver hurtigt en prototype, der ser <em>omtrent<\/em> ud som det endelige resultat. At g\u00f8re alt virkelig fantastisk er fristende, men man kan st\u00f8de ind i perfektionisme, som kan f\u00f8re til, at man vil vise en pilotversion af et allerede perfekt produkt. Det findes ikke. Derfor skal du bare lave det, selv hvis det kun er med klodser.<\/p>\n<p><\/p>\n<p><strong>Betingelse nr. 5<\/strong>. Produktet. Projektet vokser, f\u00e5r finansiering, der kommer specialister med solid erfaring.<br \/>\nOg hvis du er en klassisk startup-grundl\u00e6gger, s\u00e5 er det det \u00f8jeblik, hvor du skal tage flugten. Fordi lette flyvninger h\u00f8jt oppe og f\u00f8lelsen af generel harmoni hurtigt forsvinder.<\/p>\n<p><\/p>\n<p>At g\u00e5 i produktion \u2014 det er at m\u00f8de reelle belastninger, integration med et dusin systemer, og n\u00e5r du skaber nye funktioner, s\u00e5 arbejder du samtidig p\u00e5 at vedligeholde de gamle versioner. Alt dette er udfordringer, der er meget mere alvorlige end blot at finde p\u00e5 en id\u00e9 og l\u00f8se, om end godt, blot et enkelt problem for en kunde.<\/p>\n<p><\/p>\n<p>Det er her udfordringerne og udviklingen af f\u00e6rdighederne sker.<\/p>\n<p><\/p>\n<p>Tak for at l\u00e6se med. Happy New Code!<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Retrospektiv over fejl. Hvordan en hjemmelavet l\u00f8sning viste sig at v\u00e6re bedre end den betalte | ProHoster","description":"Hej! Mit navn er Alexey Pjankov, jeg er chefprogrammerer hos Sportmaster.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/retrospektiva-grablej-kak-samopisnoe-reshenie-okazalos-kruche-platnogo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/73944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=73944"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/73944\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/73945"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=73944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=73944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=73944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}