Co mi dalo pět let v Seznamu

Už na pohovoru mi Petr, (v té době) budoucí nadřízený, říkal, že se nejedná o veřejný projekt. Abych nebyl zklamán. Zřejmě byl překvapen, když mne to naopak potěšilo a bral jsem všemi deseti. :-) Utíkal jsem totiž od klientů/uživatelů, s kterými jsem si užil svoje. Chtěl jsem přestat řešit věci, které mne nebaví, a zaměřit na věci, které mne naopak baví. A to vývoj.

Když jsem nastoupil, moc jsem toho neuměl. Nevěděl jsem ani, že je rozdíl, zda definuji proměnou v initu nebo na třídě. Ani verze Pythonu mi moc neříkaly, resp. bylo mi úplně jedno, jaká kde je. Verzování pro mne bylo pouze commit. Testy jsem věděl, že jsou dobré a chtěl je psát, ale zkušenost žádná.

Přišel jsem jako jeden z pomocníků k projektu, který už nějaký rok běžel se spoustou úkolů a žádný čas na řešení technického dluhu. Seznam má naštěstí výhodu v podporování teambuildingů a tak jednou v hospodě jsme se s kolegou dohodli, že zavedeme code review. A bylo. Když to ulehčím. Samozřejmě jsme si to dlouho ladili a ladíme neustále.

To vyvolalo diskuze o tom, co vlastně používáme. Framework uplácaný na koleni z dob, kdy frameworky ještě pořádně nebyly. Což o to, na dobu vzniku dobré, ale nijak dál se nevyvíjelo. Takže čas migrovat. Měl jsem v té době hodně rád Django, takže jsem přispěl s refaktoringem modelů na něco jako modely v Djangu. Aby se to mohlo jednou na Django převést. Kéž bych v té době viděl do budoucnosti…

…a věděl, že bez testů je refaktoring blbost. Potřebovali jsme testy. Měl jsem o testování velký zájem, takže jsem byl pověřen nastudováním, vyslán na školení, zavedení na projektu a zaškolení kolegů. Zpětně se těm úplně původním testům doslova řechtám. Ale bylo potřeba nějak začít a úkol to splnilo.

Jedna z vtipných věcí byl pětiřádkový SVN hook, který testy pustil a poslal mail. Ještě že Petr viděl za včas kam to směřuje a poukázal na sluhu Jenkinse. Slouží nám dobře dodnes. Jen jsme ho postupně zahltili více a více úkoly. O tom za chvíli.

…a taky, že když na měsíc odjedu, nakonec se rozhodne pro Flask a SQL Alchemy. Při prototypování vyšel jako vítěz co se týče možností poskládat a postupně rozšířit do celé aplikace bez nutnosti zastavit vývoj nových featur. Takže rozhodně nelitujeme.

Což jsem už v době, která byla pro mne i tým zlomová. Dostal jsem celý tým na starost. Kluk, který rád programuje a nemá rád lidi, se má najednou postarat o celý tým. Mám však rád výzvy, tak jsem do toho šel. Spoiler alert: dnes už vím, že mne to děsně baví!

A proč to bylo zlomové pro tým? Protože mám asi tak trochu úchylku na automatizaci. Ne že bych si automatizoval úplně vše, ale mezi slepými jednookým králem, že. Začalo to už chvíli po nástupu do Seznamu, kdy jsem si udělal několik utilitek. Jmenovitě například pro balení deb balíků a jejich instalaci na testovací servery či pro práci s logy.

Což bylo fajn, ale chtěl jsem je dotáhnout mnohem dál. Takže jsem postupně projekt vedl k bodu, kdy nasadit na test neznamená sedět u počítače půl hodiny a bouchat něco do konzole. Nemluvě o nasazení do provozu. Ale nedělat nic, naopak si vychovat sluhu. Jenkinse. Což teda znamenalo spoustu práce na pozadí, která není ani vidět (a produkťáci se pro jistotu ani nesmí dozvědět :-)), ale přijít do práce a vidět v e-mailu, které tickety byly samy přes noc nasazeny, je slast.

A ještě větší radost je, když už od vývoje do provozu nejsou průměrně dva měsíce, ale týden. Pro to jsme museli změnit styl verzování a zlepšit testy a code review. Se vším jsme se poprali. Dnes už větvíme o sto šest a všichni vyjmenují základy Gitu i ve dvě ráno. S integračními testy nám pomohl pytest a Selenium (o čemž jsem už párkrát vyprávěl na různých akcích a konferencích; například v Bilbau a českém PyCONu). Jen code review nám dlouho haprovalo. Dnes se už můžeme chlubit párováním, což je nejlepším code review. Odhadem tak třetina, možná i polovina, kódu se páruje a zvyšujeme.

Druhý tool jsem měl pro stahování a parsování logů. Jenže, i když jsem téměř nemusel nic dělat, stále trvalo půl hodiny dostat se k požadovaným informacím. Navíc se hledalo jen to, co se nahlásilo. Takže jsem opět pomaličku nepozorovaně dostal na televizi téměř real-time chyby z provozu se všemi potřebnými informacemi k rychlému vyřešení. (Všichni sborově: áááh.)

Když jsem si říkal, že už jsem udělal dost a zasloužím si po pěti letech změnu, pustil jsem se ještě do jedné věci na rozloučenou. Dokumentace. Abych mohl vše, co o aplikací vím, sepsat. A nejen já, ale všichni v týmu mohli mezi sebou sdílet informace, proč se kde co jak vlastně udělalo. A jak to vlastně používají samotní uživatelé.

Ano. Po pěti letech projekt opouštím a bude mi hodně chybět. Přeci jen to byla parádní jízda a těch pět let mi dalo opravdu hodně. A nebude mi chybět pouze, co jsme na projektu dokázali a jak nám funguje, ale i kluci. Přeci jen celý tým jsem si sám poskládal dle svých představ. Cítím však potřebu změny a věřím, že díky schopnosti kluků moje absence nebude vlastně ani znát. Těším se, až si za dalších několik let sedneme s Viktorem (mým nástupcem) a budeme se smát dnešní situaci jako se nyní smějeme té před pěti lety. Protože je stále co zlepšovat a hlavně je v backlogu spoustu zajímavých projektů. Pro které mimochodem Viktor určitě uvítá dalšího pomocníka.

Každopádně nejdu moc daleko. Seznam mám rád, takže se jen přesunu o pár stolů dál, kde se budu dál zlepšovat na projektu doporučování a cílení.

2 responses
Pěkné, dost mi to připomíná mou historii v Avastu :-) Btw. k nahrazování code-review párováním. Původně jsem o tom taky takhle uvažoval, ale pak jsem si uvědomil, že klasické code-review má tu velkou výhodu, že reviewer vidí věc z jiné perspektivy. Při párování totiž lidi tak trošku splynou a tak se u nich může projevit stejný druh slepoty, kterým ale někdo s odstupem trpět nebude. Takže bych klasické code-review úplně neodsuzoval :-)
@Augi S tím souhlasím, každopádně více ovoce nám dává párování. Při párování si častěji všimneme dalších detailů, které by při běžném review bylo přehlédnuto. Plus je to skvělý nástroj pro zaučení juniorů či nováčků. Ale ještě sbírám poznatky. Mám v plánu o tomto tématu napsat samostatný blogpost. :-)