4 évig dolgoztam a Facebooknál - először a dublini irodájukban, aztán pedig Californiában, Menlo Parkban. Amikor oda kerültem, én voltam a második magyar - amikor eljöttem, már sokkal többen dolgoznak magyarok is a különböző irodákban. Egy csomó érdekes projekten vettem részt és rengeteget tanultam - itt a 4 legfontosabb dolog ezek közül.
1. Hiába építik a legjobb emberek a Facebookot, bőven van még mit javítani
Amikor felvettek, akkor elképesztően okos emberekkel kezdtem el dolgozni. Azt hinnéd, hogy ez azt jelenti, hogy minden rendszer a legnagyobb rendben van és csak apróságokat kell csiszolni. Hát, nem egészen.
Én systems engineerként dolgoztam a Facebooknál: a MySQL
adatbázisok infrastruktúráért feleltem, amiből több ezer volt nekünk (mind gépből, mint adatbázisból). És nem volt velük minden a legnagyobb rendben: a fejlesztők legnagyobb és leggyakoribb panasza volt, hogy legalább 6 hónapot kellett várniuk egy DB tábla struktúra változtatásra.
Relációs adatbázisoknál - nem csak a MySQL-nél - mindig problémás a tábla struktúrájának a módosítása. A leggyakoribb megoldás, hogy először létrehozod az új, módosított táblát. A régi táblából elkezded átemelni az adatokat akkora részekben, amekkorát bírnak a szervereid kényelmesen. Közben nyomon követed a változásokat, mióta elkezdted a migrációt, és aztán replayeled ezeket a változtatásokat. Végül pedig kicseréled a két táblát, ami 1-2 másodperces lockingot jelent a végén.
Amikor odakerültem, a Facebooknál ezeket a tábla módosításokat kézzel csinálták, egy-egy ember által, és a backlog már 6 hónapos volt. Én meg megelégeltem, hogy a sok módosítás kérelem miatt nem hagynak dolgozni, úgyhogy fogtam magam, és írtam erre egy rendszert, ami az egészet automatizálta. Ugyanis egy migráció annyi sok hülyeségen elbukhat, amire oda kell figyelni - Ezzel a rendszerrel pedig az adatbázis tábla módosítások kevesebb, mint 24 óra alatt lefutottak. Korábban csak DBA-k nyúlhattak a táblákhoz, viszont az új rendszerrel a fejlesztők maguk csinálhattak változtatásokat, a nem mission critical adatbázisokban. Mondani se kell, hogy a fejlesztők mennyire szerettek érte.
És ez csak - de a legnagyobb - példa volt a sok másik projektből, amit csináltam. A Facebook folyamatosan változik és nő, és vele együtt az infrastruktúrájának az egyes részei is folyamatosan elavulnak. Egészen addig, amíg - mint én tettem - valaki nem fogja, és meg nem javítja őket.
2. Ha bekerülsz ide, kétségbe fogod vonni, hogy elég jó vagy-e
Az imposztor szindrómát a Facebooknál mindenki ismeri, és az első pár hónapban átéli. Amikor bekerülsz az interjúk után, akkor... nem fogod érezni azt, hogy jó vagy. Sőt, meg fogod kérdőjelezni, hogy hogy kerültél be ide. És egy idő után elkezdesz parázni, hogy körülötted az emberek is rá fognak jönni, hogy te igazából nem is vagy elég jó, és akkor majd jól ki leszel rúgva.
És ez az érzés a Facebooknál valamilyen szinten mindenkiben megvan. Mert hiába vagy bármekkora rockstar, körülötted mindenki annyira jó, hogy nem érzed úgy, hogy te is az vagy. Hiába csinálsz bármi nagy dolgot, nem tudsz rá sokáig büszke lenni, mert körülötted mások még zseniálisabb dolgokat csináltak. Például a rendszer, amit én írtam, az 6 hónapról 24 órára levitte az adatbázis vázoltatások idejét. Ez kb 100-szoros, vagy 10,000%-os hatékonyságnövelés. És persze mindenki teljesen oda volt érte, amikor kijött. Viszont a következő héten már egy másik, még nagyobb projektről beszélt mindenki.
Ez a fajta folyamatos versengés ugyanakkor nagyon motiváló is. Ugyanis mivel mindenki ilyen baromi jó, ezért senki nem érzi úgy, hogy ő igazán nagy ász, és mindenki folyamatosan hajt. És az előnye ennek a nagy sebességnek, hogy 1 év alatt a Facebooknál több tapasztalatot szerzel, mint 2 év alatt a legtöbb helyen. 4 év alatt a Facebooknál annyi tapasztalatot szereztem, amihez 10 év is kevés lett volna a korábbi melóimnál.
3. Vészhelyzetben ne kapkodj
Ha a Facebooknál valami leáll, akkor azt mindenki észreveszi. Amikor a Facebook megy le, akkor a Twitter felrobban, a TechCrunch csak erről ír cikkeket, és mindenki erről beszél. Ez elképesztően stresszes, főleg, amikor az én feladatom az volt, hogy ez lehetőleg ne történjen meg.
Én átestem ezen a tűzkeresztségen. Az egyik nap nem figyeltem oda eléggé, és egy olyan parancsot futtattam, ami adatvesztést okozott néhány szerveren. Ezek a szerverek secondary szerverek voltak: vagyis ment rájuk production traffic, de nem ők voltak a source of truth. Ekkor még új voltam a Facebooknál, és a consultingos múltamból tudtam, hogy az ökölszabály: ha észreveszed, hogy adatot vesztesz, akkor kapcsold le a gépeket, ahol ez történik. Ezt azért csináljuk, mert különben a gép tovább sérülne. Viszont ha le van kapcsolva, akkor vissza lehet állítani különösebb gond nélkül.
Szóval éles vészhelyzet volt: adatvesztés gépeken. Miután megbizonyosodtam, hogy tényleg ez a helyzet, higgadtan lekapcsoltam az összes érintett gépet. Konkrétan az adatbázis szerverek 30%-át. És ezeket újraindítani - mint az kiderült - jó sokáig tartott... több óráig. És amíg ez történt, addig a Facebook userek kb 30%-ának sokkal lassabban töltődtek be bizonyos részei az oldalnak. Én meg közben izzadtam, hogy mi lesz ebből... végül csak Twitteren reklamált pár ember arról, hogy valamiért lassú ma a Facebook. A kollégáim pedig megveregették a hátamat és mondták, hogy itt ez mindenkivel megesik - back to work!
Azóta viszont, hogy átestem ezen a tűzkeresztségen - amikor az én hibámból a Facebook egy része jelentősen lelassult -, onnantól kezdve már nincs olyan vészhelyzet, amit ne tudnék (vagy mernék) kezelni. És ezeket ugyanúgy kezelem, mint ezt: bizonyosodj meg róla, mi a gond. Ha van korábbi terved erre, akkor kövesd azt. Ha pedig nincs, akkor se kapkodj - az a legrosszabb, amit tehetsz.
4. Tényleg meg lehet oldani minden problémát
Bennem mindig is megvolt egy természetes megoldás keresés: tegyük jobbá a dolgokat, fejlesszünk jobbat, és a hitem, hogy mindent meg lehet valahogy oldani. Pár év a Facebooknál ezt viszont olyan szintre emelte, hogy most már biztosan mondom, hogy tényleg nincs olyan probléma, amit nem lehet megoldani.
És ez nem azért van, mert tudom, hogy hogy kell megoldani bizonyos dolgokat. Hanem azért, mert tudom, hogy egy szervernél minden a falból jön ki, minden elektromos áramból van, mi meg tudunk programokat írni. Úgyhogy bármilyen probléma, ami hardverrel vagy szoftverrel kapcsolatos: teljesen biztos vagyok benne, hogy meg tudom oldani.
Hogyan is kerülhetsz ide?
Nem kell zseninek lenni, hogy egy olyan cégnél dolgozz, mint a Facebook. Én diploma nélkül jutottam el ide, azzal a mentalitással, hogy minden problémát mindig valahogyan megoldottam. Az én esetem kevésbé a szabványos - én systems engineer, nem software engineer vagyok. Szoftvermérnökként a hagyományosabb úton bekerülni megfelelő eltökéltséggel és alapos felkészüléssel, szintén nem kell zseninek lenni, hogy sikerüljön.
És hogy megéri-e? Ha engem kérdezel: nagyon is. A 4 év alatt, amit itt töltöttem, szakmailag sokkal többet fejlődtem, mint azt bárhol máshol tettem volna.