Tere! Minu nimi on Aleksei Pjankov, olen ettevĂ”tte Sportmaster peamine programmeerija. Ătlen kohe, et "peamine" ei tĂ€henda "kĂ”ige tĂ€htsamat kĂ”igi programmeerijate seas", ei, see on lihtsalt tiitel, selline armas tĂ”lge "Senior+".
EttevÔttes Sportmaster olen töötanud alates 2012. aastast ja selle aja jooksul on arendusmeeskond loonud palju tehniliselt huvitavaid lahendusi. Kuid tÀna tahan rÀÀkida meie töödest, keskendudes pigem sellele, kuidas me mÔtlesime teatud mitmetÀhenduslikes olukordades.
Selles artiklis ei ole konkreetseid tehnilisi lahendusi (ega ka midagi tehnilist), mida vĂ”iks haarata ja enda projektis rakendada. Pigem on see arutelu tehtud töö ĂŒle. Olid erilised hetked, mis mĂ”jutasid meid kui meeskonda â sidusid, tugevdasid ja panid meie vastupidavust proovile. Nendest hetkedest, meeskonna töö atmosfÀÀrist, meie graalidest ja mitmest psĂŒhholoogilisest lĂ”ksust, kuhu me end mĂ”nikord takerdame, pĂŒĂŒan ma tĂ€na rÀÀkida.

Ja alustan just 2012. aastast.
Tulid 2012. aastal peamise eesmĂ€rgiga â töötada meie lipulaeva veebisaidi kallal. Sel ajal oli see "Frankensteini monster": osa meeskonnast töötas meie vanas sĂŒsteemis, mis ei suutnud koormustega hĂ€sti hakkama saada (Bitrix), teine osa meeskonnast (kuhu kuulusin ka mina) pĂŒĂŒdis rakendada uut sĂŒsteemi, mille olime valinud kriteeriumiga "Kuna see on maailmas kĂ”ige kallim e-kaubandus, vĂ”tame selle." Just "pĂŒĂŒdsime rakendada" â sest sĂŒsteem osutus ÀÀrmiselt vastupanuvĂ”imeliseks, ning iga kord, kui olime millegiga edukalt toimetanud, tuli kindlasti vastuseks "ĂŒllatus". Töö oli palju, kuid edasi liikusime aeglase sisalikuna.
Minu jaoks oli viimane piisk, kui kohtusin ĂŒhe meetodi koodiga "kĂ”ige kallimas e-kaubanduses maailmas", kus mitu tundi keskendunud tööd segases vigas tĂ”id esile, et pĂ”hjus peitus kuskil custom-tag'is, mis töötab html genereerimisel jsp-s. Selle custom-tag'i ĂŒlesanne on kuvada mingi vÀÀrtuste summa. See on arvestatav, sest selleks see custom-tag on loodud. Kuid ootamatus peitus selles, et sellega muudetakse andmeid andmebaasis, mis mĂ”jutab jĂ€rgmiste lehtede kĂ€itumist, ja kui vajutada F5 â kutse kordus, see rikkus andmete jĂ€rjepidevust. Lisaks rikkus see nĂ”nda, et probleem ilmnes alles pĂ€rast mitmeid samme, 3. lehe korral. Ei, ma ei ole vastu, et selline "meister-ninja" oleks meeskonnas ja hoiaks oma koodiga kolleegide tĂ€helepanu teravana. Kuid, et nii juhtuks kĂ”ige kallimas sĂŒsteemis!
See juhtus reedel. LaupĂ€eva ja pĂŒhapĂ€eva veetsime kolleegiga kontoris eesmĂ€rgiga mĂ”ista, milliseid ĂŒlesandeid Ă€ri tĂ€na sĂŒsteemile esitab ja milliseid ĂŒlesandeid vĂ”iks vĂ€lja mĂ”elda aasta pĂ€rast. Vastavalt sellele, kuidas me neid lahendaksime, kui ei oleks piirdunud kasutama seda kĂ”ige kallimat ja kĂ”ige Ă€rritavamat sĂŒsteemi.
Lubatud â tehtud. Me tegime pilootprojekti, mille alla pani aluse uue Spordimeistri kodulehe arendusele. Paljud neist ideedest on ellu jÀÀnud ja nende jĂ€tk on aktiivselt kĂ€imas veebilehel.
Piloodietapid ja ajaraamid
2 pĂ€eva. Me tegime mikroteksti â nĂ€dalavahetusel kĂ€rbime oma andmebaasi ElasticSearch'i, teeme fassaadi otsingu. VoilĂ ! Sama ostetud sĂŒsteemis oli sellise seadistuse tegemine 2 nĂ€dalat. Siin â sĂ”na-sĂ”nalt paar tunni jooksul! Ja töötab kiiremini. Tegelikult kiiremini kordades.
2 nĂ€dalat. "Töötame" prototĂŒĂŒbi kallal, lisades funktsionaalsust adekvaatse isikupĂ€rastatud tulemuse jaoks.
NĂ€iteks, kui kasutajal on mitu allahindlust ja kampaaniat, mis kehtivad just tema jaoks â siis tuleb toodete otsingutulemustes nĂ€idata just seda hinda, mida saab saada, rakendades kĂ”iki olemasolevaid boonuseid kĂ”ige kasulikumal viisil.
Kampaaniate haldamine on keeruline. NĂ€iteks, ostsin suusad, nĂŒĂŒd on mĂŒtsi puhul 40% allahindlus, kuid see tĂŒhistab 10% tervet tellimust puudutava tervitusallahindluse. Jah, see on tĂ”eline juhtum đ Ja et sellist kampaaniat ostuhaldussĂŒsteemis konfigureerida, tuli maksta 3 konsultatsiooni teenusepakkujaga, mille tulemusena saime palju nĂ€iteid, kuidas teha mitmeid teisi kampaaniaid. VĂ€ga diplomaatiliselt ning arvestades konsultatsioonide hinda â majanduslikult vĂ€ga hea deal.
NĂ€itasime Ă€rile ĂŒksikasjalikku demonstratsiooni. Lubasime kiiresti pilootprojekti kokku panna ja hakkasime kohe tööle.
2 kuud. Pilootprojekt â teeme selle elava veebisaidi kujul, mis vĂ”imaldab otsingut kataloogis. Otsing funktsioonide sissetoomisega, otsingu tulemused â isiklike soodustustega, nĂ€eb piloot peaaegu vĂ€lja nagu Sportmasteri veebisait, ja tooted on meil samad. Imeline!
Lisame meie osakonna juhi «Krasnorechie:100», ja esitlus Àrile lÀheb suurepÀraselt! Me saame volitused, et arendada eCommerce platvormi ise.
See tĂ€hendab, hoidke meeskond, hoidke eelarvet, poisid. Ăge, eks!
2 aastat. Veebisaidi viimine tootmisse. Jah, pikalt. KĂ”ik, mida me siis oskasime, katsetasime ainult prototĂŒĂŒbi ulatuses. Kaks inimest saavad kergesti moodustada siseriikliku meeskonna. Ja ĂŒlesanded, mida me âlahendasimeâ â olid peamiselt vĂ€ikesed tĂ€iendavad âHello Worldâ tehnoloogiate tutvustused. Me genereerisime uusi hĂŒpoteese, testisime neid kiiresti, ei jÀÀnud kinni ja seetĂ”ttu tapame neid kahetsemata. Kui meid oli 10, hĂŒpoteetiliselt eeldasime, et meie töö kiirus laieneb teistele. Ja lubasime selliseid tĂ€itmise tĂ€htaegu, mis olid vĂ”rreldavad meie ilusate kujutlustega, korrutatuna meie innukusega.
Kas see tundub tuttav? đ
Noh, kas te juba teate, mis edasi tuleb?
LĂ”ks nr 1. âEkstrapolatsioonikruutâ
On selge, et uued tehnoloogiad nĂ€evad esitluses vĂ€ga Ă€gedad vĂ€lja ja toimivad hĂ€sti âHello Worldâ tasemel rakendustes. Kuid reaalsus on tavaliselt veidi kaugemal.
Nii et. VĂTAME raamatukogu, kirjutame hulga rakenduslikku koodi. Ăhiktestimist peame koormuseks (me oleme ju Ă€gedad ja töötame siin ĂŒlispeediga, kood on kaasaegne jne). Muudame ja tĂ€iustame API-d jooksvalt â noh, mis testid siin, tĂ”siselt. Ja kogu see protsess âoptimeerime arenduseâ lipu all (jah, praegu on seda isegi hirmus kirjeldada).
Ja siis on kĂ”ik ĂŒsna selge.
VĂ€ljastame uue versiooni uat-ile. ĂrijĂ”ud testivad kĂ”ik hoolega ja vajutavad nuppe. Nad vajutavad mĂ”nikord ĂŒsna loominguliselt â midagi laguneb. Siin oleks paslik minna ja uurida, mida selle jaoks on tehtud. Kuid monitori taga ei ole hullu testijat, kes viib sind lĂ€bi kĂ”ik keskkonna omadused, arvestades piirkonna ilmateadet, vaid tellija Ă€rist. Tal on lihtsalt "ei tööta". See tĂ€hendab, et ta on rahulolematu. KĂŒsi temalt â ja ta ĂŒtleb hirmutav rahulolematu!

Siis, et viga reprodutseerida, pead minema ja lĂ€bi katsetama kĂ”ik vĂ”imaliku. Loomulikult ei jĂ€tnud me tĂ€helepanuta ĂŒhtegi kaebust ja kĂ”ik probleemid lahendati. Me jĂ€tsime kĂ”rvale plaanitud ĂŒlesanded, et "tulekahju kustutada".
Nii me kaevusime jÀrgmisse auku.
LÔks nr 2. "Stahhanovets"
Sinule tuleb ebameeldiv viga. Alustad uurimist. Ei Ă”nnestu â viha â uus katse uuesti lahti mĂ”testada â jĂ€rgmine ebaĂ”nnestumine â selgitad kĂ”ik, mis vĂ”imalik â jĂ€lle vale â mĂ”tled sellele, et oled juba vana ja kĂ”igil on lapsed ning hĂŒpoteek â proovid uuesti â jĂ€lle vale. Paari koondkooki ja kĂ”ik kordub. 12-14 tundi pidevat tööd â peaaegu norm. Ja siis, kui kĂ”ik on piiril â plĂ”ks, arusaamine!

VĂ”ib-olla on vĂ€ljastpoolt vaadates sellise pĂ€eva efektiivsuse hindamine hĂ€sti ja Ă”igesti nĂ€htav. Kuid seestpoolt â vĂ”ib olla vĂ€ga erinev.
Minu puhul sisaldas sellise töö kogemus "Ma olen vingev, ma olen Ă€ge, ma lahendasin probleemiâ. Mitte alati teadlikult, kuid alateadlikult â alati!
Ja sellele jÀÀd sĂ”ltuvusse, ilma naljata. Tundub, et sisemised mÔÔdikud edusammude kohta nihkuvad tulemusest pingutuste arvu ja alanduste tasemele, mida oled korda saatnud, kui palju oled kannatanud, pĂŒĂŒdes probleemi lahendada.
TÔenÀoliselt on see kÔige kohutavam lÔks.
Edasi lĂ€heb kergem ja lĂ”busam đ
LÔks nr 3. "Hello world" jÔud
Meie tehnoloogiad sellel perioodil: ElasticSearch, Hazelcast, Pentaho, freemarker (ja tĂ”estatud Java, Spring, Tomcat, nginx). Freemarker ei andnud vĂ€ga informatiivseid erroriteateid. Kuid ElasticSearch, Hazelcast ja Pentaho tuli paar korda patĆĄeerida â me leidisime oskuslikult juhtumeid, kus nad ei töötanud nii, nagu dokumentatsioon mÀÀras.
Kerge algus ja kiirete tulemuste saavutamine uue tehnoloogia kasutamisega tundub hea, kuid see toob kaasa eufooria ja vĂ€hendab ettevaatlikkust. Sest uus tehnoloogia sisaldab vigu, see kindlasti sisaldab vigu. Ja kui neist veel ei ole kirjutatud â ole rÔÔmus, just sina oled see esimesena, kes tĂ€ielikult avastab midagi ebaĂ”iget ning hakkab seda Google'is vĂ”i SO-s otsima. Muidugi, âebaĂ”igeâ vĂ”ib leida ka usaldusvÀÀrsetest toodetest, kuid uutest â on see palju lihtsam.

Hoolimata kĂ”igist raskustest jĂ”udsime tootmisse. Jah, viivitustega. Jah, mitte vĂ€ga stabiilselt. Kuid ĂŒldiselt â ilma katastroofideta.
KokkuvÔtteks tuletan veel kord meelde lÔkse, kus moonutatakse tervet arusaama tööprotsessist.
- âEkstrapolaator-vingeâ. Praeguste edusammude innustusel liigume edasi ja rÔÔmsalt ekstrapoleerime arenduskiirusest eelnevatele projektidele.
- âStahhanovlaneâ. Teeme tööd lĂ”puni, oleme enda ĂŒle rahul, aga ei mĂ€rkagi, et lahendatud probleemid on meie enda vigade/kohmakuse/hooletuse tagajĂ€rg. Töö, mida pole teostatud.
- âHello worldi jĂ”udâ. Kiirustame tootmisse viima kĂ”ige uuemat ja huvitavamat.
Miks kÔik Ônnestus
Muidugi, ma ei loetlenud kÔiki vigu, mis meil selle aja jooksul oli, aga need on kÔige levinumad, mis vÔivad esineda igasuguste projektide puhul. Selline vigade fikseerimine aitab neid hiljem vÀltida.
Veidi sellest, kuidas meil Ă”nnestus luua selline mini-startup ettevĂ”tte sees ja veenda Ă€ri minema juba ostetud sĂŒsteemilt millegi enda loodud peale.
Tingimus nr 0. Tervislik kliima ettevĂ”ttes. See ei ole ainult töötajate âsĂ€ravad silmadâ ja suhtlemisoskus stressitingimustes kĂŒpsiste valmistamisel, ei. See puudutab kĂ”iki suhtlusi.
Tingimus nr 1. Usuda sellesse, mida teed. TĂ”siselt, ma ei arva, et meil oleks olnud mingit vĂ”imalust, kui oleksime tegelenud pilootprojektiga, ilma et oleksime ostetud sĂŒsteemi âkuni poldiniâ vĂ€lja uurinud â ehkki tagasi astudes teades alateadlikult, et see sĂŒsteem on parem ja seljatab meid.
Mida me tegime: 1) uurisime ostetud sĂŒsteemi, selle abil lahendasime peamised Ă€rivajadused 2) koostasime ĂŒlesannete nimekirja, mis ei ole mitte ainult praegu olemas, vaid ka tulevikus 3) valisime lahenduse, mis sobib paremini. Ja siis oli meie lahenduse hindamine ekspertide hinnang.
Kas nad annaks meile midagi, kui me lihtsalt tuleksime ja ĂŒtleksime: "Poisid, kĂ”ik on jama, me ei taha sellega tegeleda ja otsustasime alustada nullist"? Vaevalt. Ja vastus oleks selline, et see jÀÀks meelde đ
Tingimus nr 2. Esimene samm on vĂ€ike. Loome esimese hĂŒpoteesi ja testime seda. Selleks vĂ”ib kuluda ka teie isiklikku aega. Kui te ei soovi oma aega kulutada â siis ei tasu sellise asja kallale hakata. Ja kui te ei taha vĂ€ikest hĂŒpoteesi kontrollida, vaid tahate kohe midagi lahedat ja sĂ€ravat teha â hoidke sellistest inimestest eemal!
Meil vedas, ja kĂ”ige esimene hĂŒpotees töötas. Kuid nii ei juhtu alati. NĂ€iteks ĂŒhes jĂ€rgmistest projektidest, kui edendasime admin-paneeli sarnases pilootprojekti raames, töötas meil vaid 18. variant. Ja 17 esimest lĂ€henemist olid asjata. Muide, admin-paneeli loomise loos olid sĂŒĆŸeepöörded tasemel Brasiilia telesarjad, kuna meeskonna moodustasid poisid, kes olid sel ajal juba veteranid, tĂ”elised "kogenud tegijad".
Tingimus nr 3. Loome MVP ja otsime valupunkte otsustaja nĂ€os. Muidugi vĂ”ib tema nĂ€os peegelduda hirmsus juba selle fakti tĂ”ttu, et te toote talle kolmekĂŒmnendat korda mingit projekti. Kuid sellegipoolest. Ja kindlasti nĂ€itame, kuidas me tĂ€pselt tema probleeme oma tootega lahendame.
Tingimus nr 4. Kiiresti teeme kĂ€epĂ€rase piloodi, mis nĂ€eb vĂ€lja ligikaudu nagu lĂ”pptulemus. KĂ”ik tĂ€iesti Ă€gedalt teha â ahvatlev, kuid vĂ”ite sattuda perfektsionismi lĂ”ksu, mille tĂ”ttu tundub, et soovite nĂ€idata pilootversiooni juba ideaalsest tootest. Ning selliseid ei ole. SeetĂ”ttu tehke vĂ€hemalt pullidest.
Tingimus nr 5. Toode. Projekt kasvab, saab rahastust, tulevad spetsialistid, kellel on soliidne kogemus.
Ja kui te olete klassikaline startup-ettevĂ”tja, siis on see see hetk, kui tuleb kiirusest pĂ”geneda. Sest kerge lendamine tippudes ja ĂŒldine heaolu tunne hajuvad kiiresti.
Turule minek â see on kohtumine reaalsete koormustega, integreerimine kĂŒmnete sĂŒsteemidega, ning kui loote uut funktsionaalsust, siis töötlete samal ajal olemasolevaid versioone. KĂ”ik need on vĂ€ljakutsed, mis on palju tĂ”sisemad kui idee genereerimine ja ĂŒhe kliendi probleemi lahendamine, isegi kui see on hĂ€sti.
Need on vÀljakutsed, ja oskuste areng toimub just sellel etapil.
AitÀh, et lugesid. Head uut koodi!
Allikas: habr.com
