niedziela, 9 lutego 2014

10 lat Facebooka

Dawno nie pisałem o pracy. W zeszłym tygodniu Facebook obchodził 10 lecie, ja pracuje już ponad rok, więc jest dobra okazja żeby znowu poruszyć temat firmy (uwaga - pewnie sporo się powtarzam ze wcześniejszych wpisów, bez zdjęć, dużo czytania i mojego zachwytu firmą ;-) ).

Dlaczego Facebookowi się udało?


Jest to dobre pytanie. Postaram się trochę odpowiedź, na tyle, na ile mogę. Nie będę jednak pisał o produktach - nie znam się na tym i najczęściej późno (jak na kogoś w IT) adoptuje nowinki. Skupię się na tym, co według mnie od kuchni sprawia, że Facebook jest sukcesem.

Szczęście


Nie ma się co oszukiwać - w tym biznesie szczęście jest podstawą. Jest ono niezbędne ale to tylko 1% sukcesu.

Pracownicy


Mark Zuckerberg jest jednym z głównych powodów. Właściwy człowiek na właściwym miejscu. Dzisiaj, nawet mimo niewyobrażalnej fortuny którą posiada, nadal mocno stąpa po ziemi, będąc jednocześnie wizjonerem (ale nie w stylu Jobsa) - aktualnie jednym z takich projektów w firmie jest www.internet.org, którego celem jest zapewnienie dostępu do internetu ludziom na całym świecie (jest to dość ambitny cel, nie ma co). Mark jest też otoczony jest przez ludzi o różnych poglądach i lubi trudne pytania - czasami pojawią się naprawdę ciężkie, zadawane zarówno przez szeregowych pracowników, jak i "wyżej postawione" osoby. A głos pracowników jest słyszany i wpływa na politykę i priorytety firmy.
Zuck nie jest jedyny - każdy ma wpływ na firmę (wiem, brzmi to jak slogan rekrutacyjny, ale tutaj to więcej niż slogan). Mamy masę mądrych i odpowiedzialnych ludzi (choć jak na mój gust - za dużo hipsterów :P) którzy czują się związani z firmą. "Nic nie jest problemem kogoś innego" bardzo dobrze oddaje ten klimat. I jest to też przez firmę doceniane: np. pomoc innym zespołom w naprawianiu ich problemów jest bardzo dobrze widziana w trakcie oceny Twojej wydajności jako pracownika (piszę to z doświadczenia).


Proces decyzyjny


Decyzje technologiczno-produktowe często idą od dołu do góry - pracownicy mają pomysły na produkty/usprawnienia/etc a kadra zarządzająca stara się je koordynować i wybierać obszary na których firma powinna się skoncentrować. Jeśli chodzi o produkty, to hackathony (odbywające się co 2-3 miesiące, sesje w trakcie których możesz pracować nad czym masz tylko ochotę - ściana w stylu Mario, z poprzedniego wpisu też na nim powstała) są kwintesencją tego - sporo produktów miało tam swój początek. Ale nie pracuje blisko samych produktów, więc za dużo też się nie mogę wypowiadać na ten temat.

Infrastruktura


To mi zdecydowanie bliższy temat. W skrócie - jest naprawdę wysokiej klasy. Wiadomo, są obszary które ciągle wymagają sporo pracy a i pojedyncze głupoty mogą czasem mieć nieprzewidywalne duże skutki. Ale ogólny stan jest niezły. W szczególności, rozmawiając z ludźmi którzy pracują tutaj >5 lat - nie jesteśmy już w stanie permanentnego gaszenia pożarów. Ale nie zostało to osiągnięte przez narzucanie procedur i oddzielanie programistów od produkcji. Składa się na to parę głównych rzeczy. Są one pewnie dość oczywiste w większości, ale są zakorzenione głęboko w kulturze pracy, dzięki czemu nie są tylko sloganami reklamowymi:
  • Budowanie świadomości o tym jakie skutki mogą mieć Twoje zmiany. Jest to też skomplikowana sprawa - od zrozumienia i uświadomienia sobie zależności komponentów nad którymi pracujesz (swoją drogą, jest to jedno zadań osób pracujących na stanowisku jak ja), poprzez automatyzację i testowanie. Ale na koniec dnia, decyzja o wrzuceniu czegoś na produkcję to kwestia prywatnego osądu - nie muszę przechodzić przez proces aprobaty zmian, komitety czy papierkologię (nie widziałem ani jednego papierka w pracy odkąd zacząłem pracę a pracowałem nad bardzo różnymi rzeczami - od pierdół małych, poprzez przepisywanie głównych komponentów pracujących w reklamach, narzędzia do wykazywania zgodności z audytami finansowymi, za których zgodność z prawdą zarząd odpowiada karnie (podziękowania dla Enronu i innych firm od kreatywnej księgowości), czy też zmiany mogące przeciążyć zasilanie klastrów w datacenter).
    W wypadku kodu - review, commit, zbudowanie nowej wersji paczki i można zaczynać aktualizację. Są zespoły które mają wewnętrznie ten proces bardziej sformalizowany (jak WWW - nowe wydanie 2 razy dziennie, rano i popołudniu) albo mniej (duża część mniejszych komponentów działający w backendzie - wydanie następuje kiedy programiści uważają za stosowne - bardzo źle jeśli ktoś uważa środek nocy za stosowny czas :-) ).
    No ale ok - z takim luźnym procesem, czemu nie gasimy non-stop pożarów? Raz - komunikacja - zrozumienie zależności pozwala na komunikację przed uruchomieniem i w trakcie (i jest to luźna komunikacja - podejście do biurka i zapytanie: "hej, zmieniam X na Y, czy ma to wpływ na Ciebie?"). Dwa - dane.
  • Użytkownicy umieszczają olbrzymie ilości danych na Facebooku. Ale wewnętrznie też wytwarzamy ich olbrzymią ilość. Raz - aby rozumieć jak ludzie nas używają i na podstawie tego rozwijać produkty. Ale dwa, z mojego punktu widzenia ważniejsze - aby rozumieć co się dzieje w infrastrukturze.
    Olbrzymia ilość danych, bez narzędzi do ich obróbki w czasie rzeczywistym jest bezużyteczna (generowanie raportu z danych, która potrwa parę godzin, gdy wszystko się zaczyna sypać to nie jest dobry pomysł). Takich narzędzi mamy niezliczoną ilość i ciągle budujemy nowe - od "prostych" systemów do obróbki prostych serii punktów na wykresach, poprzez dużo bardziej wyrafinowane systemy, pozwalające na agregację i analizę olbrzymich zbiorów wielowymiarowych danych w czasie rzeczywistym (są one aktualnie jedynymi z moich ulubionych narzędzi, ale zajęło mi chwilę zanim sobie uświadomiłem ich potęgę - teraz jestem pewien, że jeśli kiedyś zmienię pracę i nowa firma nie będzie miała takich narzędzi, to pierwsze czym się zajmę to będzie ich budowa :-) ) po bardzo wyspecjalizowane narzędzia do analizy bardzo specyficznych danych.
    Efekt? Błyskawiczne odpowiedzi na pytania, kiedy coś się psuje. Idealnie, jeśli ludzie korzystają z tego także przy rozwijaniu albo uruchamiają coś bardzo powoli i obserwują efekt ich zmian. Ale nawet jeśli nie, dzięki takim potężnym narzędziom do analizy danych możemy szybko namierzać źródła problemów.
    Potem, w trakcie analizy "pośmiertnej" dużych problemów główne pytania które są zadawane to zarówno jak zapobiec podobnym problemom w przyszłości (ale bardzo ostrożnie - nie przez blokowanie pracy ludzi, a dodatkowe testy/zabezpieczenia w kodzie/edukację/etc) ale i także - czy mieliśmy odpowiednie dane/narzędzia pozwalające namierzyć problem/wyeksponować go zanim w ogóle będzie on problemem, czy też poruszaliśmy się na ślepo. I nawet zaryzykuję stwierdzenie, że to drugie pytanie jest ważniejsze - oprogramowanie będzie miało zawsze błędy/nieprzewidziane skutki albo ludzie będą podejmować błędne decyzje - posiadanie danych pozwalające to szybko namierzyć jest ważniejsze.
  • Inżynierowie są odpowiedzialni za kod na produkcji. Nie mamy działu operacji. Nie mam ludzi którzy będą niańczyć kod jeśli się sypie czy przeprowadzać odbiory przed wrzuceniem na produkcje. To Ty będziesz budzony w nocy, jeśli twój komponent się sypie. Mamy ludzi (np. jak mój zespół), którzy dużo lepiej rozumieją środowisko i pomogą Ci w zrozumieniu co się dokładnie sypie, ale nie mamy ludzi które są odpowiedzialni za naprawianie i utrzymywanie tegoprzy życiu. Bardzo dobrze to wpływa na jakość kodu - "ból" błędów w kodzie powinien być aplikowany do osób które mają na to wpływ.
  • Wydajność. W infrastrukturze staramy się nie rozwiązywać problemów poprzez budowanie nowych data center. Wiadomo, są rzeczy które da się rozwiązać tylko przez inwestycję w sprzęt, ale jeśli chcesz np. 2x więcej zasobów pod swój projekt, to uzasadnienie tego zwykłą regresją w kodzie to zły pomysł. Do tego mamy ludzi których pasją jest namierzanie regresji/niewydajności w kodzie, i ich poprawianie (efekt może być miażdżący - w naszej skali np. zaoszczędzenie 1% czasu procesora w dużych komponentach to oszczędności milionów dolarów rocznie).
    Wydajność to nie tylko przez kod, ale też w budowanie całej infrastruktury - jesteśmy jednymi z pionierów jeśli chodzi o optymalizacją budowy data center i samych serwerów. I co najfajniejsze - efekty naszej pracy udostępniamy za darmo i staramy się zbudować środowisko wokół nich, poprzez projekt Open Compute - giganci jak AMD, ARM, LSI, Microsoft, Rackspace czy wiele innych firm współpracuje z nami. Możesz ściągnąć z internetu dokładne schematy naszych data center czy serwerów i zbudować je samemu - jest to unikatowe inni giganci internetu tworzą własny sprzęt od dawna (jak np. Google) ale nie dzielą się swoimi osiągnięciami.
  • PHP. Język znienawidzony przez ludzi (w tym mnie i dużą ilość innych pracowników - całe szczęście backendu nie tworzymy w PHP, więc nie dotykam tego języka) i jest bardzo dużo dobrych powodów do tego żeby go nie lubić. Ale ma jedną niepodważalną zaletę - szybkość pracy. Nie chodzi o szybkość wykonywania (choć z HHVM u nas PHP jest też teraz diabelsko szybki) ale o szybkość dla programisty - zapisujesz zmianę, przeładowujesz stronę i gotowe - widzisz efekt. Nie czekasz ileś tam minut na kompilację i przeładowanie serwera, w trakcie których zapominasz nad czym w ogóle pracowałeś. Wiadomo, dzisiaj Python czy Ruby oferują podobne możliwości, ale świat wyglądał inaczej 10 lat temu. Oprócz tego staramy się naprawiać sam język - sforkowaliśmy go i stworzyliśmy Hack, który dodaje opcjonalne typowanie i usuwa parę głupot z języka. Polecam świetny wykład Keitha na temat historii i przyszłości PHP - http://www.infoq.com/presentations/php-history

Open source


W dolinie krzemowej jest bardzo mocno konkurencja o pracowników. Bardzo dużo ludzi lubi open source i udziela się w takich projektach. My też korzystamy w zdecydowanej większości z produktów open source ale także staramy się open sourcować część naszej pracy (https://code.facebook.com/projects/ - w tym roku planujemy wypuszczenie kolejnych ciekawych rzeczy).

Ludzie


Bez ludzi nie byłoby Facebooka. Czasem psujemy za dużo rzeczy dla nich i ich wkurzamy przez to (całe szczęście - poprawia się to). Ale ilości ludzi którzy z nas korzystają jest niewyobrażalna - aktualnie ponad 1.2 miliarda użytkowników aktywnych co najmniej raz w miesiącu i ponad 750 milionów ludzi logujących się codziennie. To daję niespotykaną moc. Firma twierdzi, że zmieniamy świat, i zgadzam się z tym. Wiadomo - jest masa ludzi którzy wykorzystują FB do głupot, narzekania na świat, wrzucania zdjęć kotów, etc. Ale jest też masa ludzi dla których Facebook (albo inne media społecznościowe) oznacza totalną zmianę życia. Historii jest niezliczona ilość - od odnajdywania zagubionych rodzin, organizację pomocy charytatywnej po odgrywanie ważnej roli w rewolucjach (Egipt). Takie historię motywują do pracy.

Reklamy


Pracuje przy reklamach. I jednocześnie nie lubię większości reklam. Ale im bardziej rozumiem ten rynek i podejście Facebooka do tego, tym bardziej uważam że idziemy w dobrą stronę. Wiadomo, dla inwestorów ważne są wyniki finansowe a rynek reklamowy jest olbrzymi. Ale staramy się sprawić aby reklamy nie były wkurzające. Nie mam żadnych banerów czy innych reklam które blokują użytkownika - pasek po prawej stronie i od jakiegoś czasu historie reklamowe w strumieniu nowości (i ciekawostka - większość rzeczy które ludzi uważa tam za reklamy, wcale nimi nie są - to organiczne historie ze stron które polubiłeś/subskrybujesz - jeśli uważasz że reklam jest za dużo, zacznij od wyczyszczenia tego).
Nawet te w strumieniu są praktycznie bezinwazyjne - jak Cię coś nie interesuje to przewijasz dalej, tak samo jak historię od znajomych którzy co sobotę piszą o kacu gigancie (i tak samo - jeśli ich nie lubisz, to może czas wyczyścić listę znajomych, albo chować takie treści - jak coś chowasz, to algorytmy będą się starały później nie pokazywać historii tego typu - dotyczy to też reklam).
Co jest więc innego? Fakt, że wiemy kim jesteś i czym się interesujesz. Wiadomo - tutaj zaczyna się cienka linia między prywatnością a reklamami i w pełni rozumiem ludzi którzy nie chcą się tym dzielić. Ale nie będę poruszał tego temat. Chce spojrzeć na to z trochę innej strony. Np. reklamy w telewizji są wkurzające, bo najczęściej nas nie dotyczą - nie ważne ile razy obejrzę reklamę tabletek na problemy kobiece, to nigdy ich nie kupię, bo nie jest to produkt skierowany do mnie. Informacja o tym kto jest po drugiej stronie całkiem to zmienia. Raz - dla ludzi - dostają mniej reklam, ale jedynie te które naprawdę Cię interesują (Google jest tutaj świetne i dlatego mają olbrzymie dochody z reklam w wyszukiwarce - wiedzą dokładnie czego chcesz w danym momencie, więc mogą Ci pokazać reklamę dotyczącą dokładnie tych rzeczy). Dwa - dla firm - pozwalają obniżyć koszta i osiągnąć wyższy zwrot z inwestycji w nie (nikt nie chce płacić za pokazywanie reklam ludziom którzy nie są zainteresowani ich produktem i nie są potencjalnym klientem).

Wiadomo - nie jesteśmy idealni, ale staramy się zmierzać w stronę reklam które Ciebie mogą naprawdę zainteresować, a nie ślepo rzucać reklamami. Takie reklamy są też super dla małych lokalnych biznesów - pozwalają im znaleźć potencjalnych klientów, w ich okolicy, bez wydawania kasy, której nie mają. Otwieram siłownię? Informacja o tym, skierowana do młodych osób mieszkających w promieniu paru kilometrów, interesujących się sportem będzie względnie tania i ma dużą szansę być skuteczną i dobrą dla obu stron.

A, i na koniec wyjaśnienie najczęstszego mitu - nie sprzedajemy żadnych danych użytkowników. Pozwalamy skierować reklamy do użytkowników o określonych cechach (demografia, miejsce zamieszkania, zainteresowania, etc) ale nigdy nie pozwalamy na poznanie tych użytkowników (jak kogoś to interesuje to niech przeklilka przez system reklamowy aby poznać jego możliwości). A czemu ich nie sprzedajmy i ludzie powinni nam wierzyć gdy tak mówimy? Powód jest bardzo, bardzo prosty - sprzedaż danych użytkowników nie jest dobrym biznesem. Firma kupuje raz i nie wraca :-). 


Losowa ciekawostka

Będą dwie: pierwsza związana luźno z firmą. Bardzo często odwiedzają siedzibę znane osoby. Masa aktorów, gwiazd, biznesmenów. Dość często, oprócz spotkań biznesowych, udaje się też zorganizować luźne spotkania z nimi. Byłem na kilku - Kasparov, J J Ambras, etc. Niedawno był Ron Garan - astronauta. Najciekawszy cytat:
- Co czujesz przy stracie w kosmos?
- Olbrzymią radość, po każdej eksplozji którą słyszysz przy starcie, gdy masz świadomość że nadal jesteś żywy.

Druga - zima to okres kiedy tutaj pada deszcz. Deszcze wywołują miejscowe podtopienia (tak, dzieje się to na całym świecie, nie tylko w Polsce) a pierwszy dzień mocnych opadów najczęściej totalnie dezorganizuje ruch, nawet gdy nie ma podtopień. Brud, nagromadzony przez parę miesięcy, sprawia że drogi są bardzo śliskie i jest sporo wypadków przez to (jak w Polsce prawie przy pierwszym śniegu) - w piątek bus którym jeżdżę do pracy miał ponad 30min opóźnienia z tego powodu.
Do tego ujawniają się też różne problemy - nowo otwarty most przez zatokę (Bay Bridge - wrzucałem zdjęcia wcześniej), który wielokrotnie przekroczył zarówno budżet jak i planowany czas miał na początku problemy z niektórymi nitami, które opóźniły samo otwarcie. Teraz odkrywają kolejne problemy: przecieka do środka konstrukcji, co może spowodować korozję i "trochę" obniżyć czas życia mostu, przewidziany na ponad sto lat. Problemy z olbrzymimi  inwestycjami w infrastrukturę, w przeciwieństwie do tego co wielu ludzi twierdzi to też nie tylko polska specjalność - jedne z najbogatszych i najlepiej zorganizowanych rejonów świata też się z tym borykają.

PS. Tak, ciągle pada deszcz, dlatego siedzę i piszę :-)

2 komentarze: