Żyjemy w kulcie sukcesu. Przeszczepiono nam “American Dream” i zamiast generalskiej buławy w plecaku nosimy w sercu mit pucybuta, starletki i Cukiergórów z Twarzoksiążek. O sukcesie się mówi, sukces się pompuje, kto nie miał sukcesu, ten przegrał życie.
“Moja branża” (czyli ogólny hi-tech-kable-i-ekrany) cierpi na nieuleczalną sukcesomanię. Mamy takie spotkania, na których przychodzimy się chwalić, że nie zawaliliśmy projektu. Widownia klaszcze jak u Rubika.
Wydaje się, że pomiędzy pomysłem, wykonaniem a sukcesem nie może minąć więcej niż trzydzieści dni, bo wtedy ktoś mógłby pomyśleć, że sukces został osiągnięty pracą, a branża nowych technologii stoi chińskozupkowymi standardami smaku, czasu wykonania i nieprzystającymi do rzeczywistości oczekiwaniami zwrotu wyhodowanymi na historiach sukcesu, którymi karmią nas poczytne blogi.
Mamy hall of fame, mamy hall of shame, gdzie wpisujemy najbardziej spektakularne katastrofy celem poprawienia sobie humoru kosztem cudzego projektu. Pomiędzy tymi dwoma skrajnościami są jeszcze błędy, które pomagają nam się uczyć. Te, o których nikt nie mówi1 i te, które są najbardziej wartościowe. Podzielę się z Wami moją ulubioną wtopą w nadziei, że poświęcicie chwilę i napiszecie o swoich. W osobnych notatkach, niech Was zobaczą!
Była wiosna. Rok 2003. Moja pierwsza “prawdziwa praca” (taka z podatkami, w której nie trzeba biegać starszym po wódkę). Byłem jednym z trzech programistów w projekcie wspomagającym rekrutację pracowników z branży medycznej do skandynawskich placówek. Standardowy zestaw: wyszukiwarki, filtry, CV i lista wysyłkowa. Moim zadaniem było dopisanie kilku nowych funkcji do listy wysyłkowej i optymalizacja.
Obudziłem się radosny. Było ciepło, byłem wreszcie programistą i nauczyłem się nawet pić kawę. Dochodziła szósta. Posadziłem odwłok za biurkiem i zalogowałem się na serwer w pracy z myślą o ścięciu godziny z czasu biurowego, którą mógłbym poświęcić na konsumpcję obiadu. Dopisałem na szybko możliwość dodawania załączników do mailingu, poprawiłem trochę główną pętlę, która teraz wysyłała e-maile w paczkach i puściłem test. Serwer myślał i myślał, aż do komunikatu, że jest chory. Machnąłem ręką i zabrałem się za pakowanie do pracy.
Dotarłem do biura o ósmej i rozsiadłem się. Zadzwonił telefon. Zignorowałem, bo nie odbieram telefonów, zwłaszcza z biurka Projekt Manażera. Telefon dzwonił, dzwonił. Około dziesiątej pojawił się Marcin, PM. Nie minął kwadrans, gdy do pokoju wpadł Tomek, ówczesny dyrektor (obecnie prezes) i zadał nam proste pytanie: “Coście, kurwa, uczynili?”.
Cośmy?
Okazało się, że nie usunąłem linii, która wysyła e-maile. To znaczy, że mój testowy przebieg rozesłał wiadomość do wszystkich lekarzy i pielęgniarek zarejestrowanych w systemie. Kiedy zalogowałem się ponownie na serwer i przeczytałem pętlę oblał mnie zimny pot. Podczas dodawania kodu do grupowania wysyłki nie resetowałem tablicy. Wyjaśniam.
Pierwszy użytkownik na liście dostał e-maila. Potem drugi użytkownik otrzymał e-maila, a pierwszy dostał drugi e-mail. Potem trzeci dostał pierwszy, drugi drugi a pierwszy trzeci. Czwarty pierwszy, trzeci drugi, drugi trzeci, pierwszy czwarty. I tak chyba dwa tysiące osiemset razy.
Odwróciłem się do Tomka i wyjaśniłem, czego dokonałem w wolnym czasie. Po opierdolu otrzymałem przykaz odpowiadania na e-maile wściekłych klientów. Nigdy dotąd tyle osób na raz nie kwestionowało mojej seksualności, pojemności czaszki, nie wymieniało chorób, na które potencjalnie zapadłem. Po godzinie “jebany pedał z wodogłowiem” brzmiało jak “Dzień dobry, ja w sprawie tego mojego konta e-mail, które ma pięciomegowy limit”.
Tu mógłbym zakończyć historię, gdyby nie fakt, że testowałem też załączniki.
Dzień wcześniej Bartosz poprosił mnie o przykład szyfrowania metodą Cezara w C. Ponieważ jestem słabiak w C, postanowiłem spróbować. Tego właśnie kodu użyłem jako przykładowego załącznika. Jak się nazywał plik?
penis.c
Spędziłem dzień razem z kierownictwem na wymyślaniu akronimu pasującego do słowa penis, abyśmy mogli wydać odpowiedni PR, że ten załącznik nie nazywa się od męskiego organu. Najlepszy dzień w sali konferencyjnej!
Dwie najważniejsze lekcje, które odebrałem tego dnia:
No i trochę o tym, że nie testuje się kodu na biednych użytkownikach. I trochę o blokowaniu portów. I że wymyślanie skrótów do słowa “penis” zbliża szeregowego pracownika z kadrą kierowniczą, bo kiedy jeszcze masz okazję błysnąć pomysłem wśród decydentów?
Nie zostałem zwolniony mimo okresu próbnego.
PS. blogowanie mi strasznie zbrzydło. Przewiduję kwartał ciszy.
Dotarłeś do końca. Czas na nową przygodę.
Eri pokonuje korporacje ołówkiem. Czerski, Piotr dziwi się światu. Waglowski prawi o prawie. Maciej występuje w roli służbisty ateistyczno-sceptystycznej religii. Patryk maca się z technologią. Piwnice i trywialne informacje w tę stronę. Vontrompka, czyli komentarz psychodeliczny.
Są też tacy, którzy gadają. O filmach, scepty-cyźmie, japońskich bajeczkach. Nie zapomnij też, że trzeba rozumieć popularną naukę.
February 11th, 2011 at 08:44
Oooooooo, piękna historia. :D A ja się martwiłam, że paru nędznym dziesiątkom tysięcy userów wysłałam mail z linkiem do testówki zamiast prawdziwej strony.
February 11th, 2011 at 09:09
Notka zacna, ale wstęp o sukcesomanii po prostu bezcenny.
February 11th, 2011 at 09:36
Piękna historia z jeszcze bardziej uroczym wprowadzeniem. Bardzo miły przedfabryczny poranek mi zafundowałeś:)
February 11th, 2011 at 09:38
Emil, zrobiłeś mi poranną trasę tramwajem ;)
February 11th, 2011 at 09:55
Ej! Jakto kwartał ciszy? Kwartał ciszy to można zrobić z wpisami do pamiętnika, a tu ludzie czekają :-)
Mam nadzieję, że szybciej zatęsknisz.
February 11th, 2011 at 10:06
Same here :)
BTW nazwy pliku, dostał mi się kiedyś opierdol za pliki o nazwie dupa.pas (miałem jakąś dziwną tendencję do nazywania tak plików/klas/zmiennych i używania tego słowa jako “Hello world”) i od tego czasu wszystko nazywam test.* a testowe echo/print wita tekstem “Ala ma kota” ;)
February 11th, 2011 at 12:16
U mnie kiedyś było podobnie, tylko na zasadzie “cholera, coś długo wysyła. Poprawić i F5!”
I tak kilkadziesiąt razy.
February 11th, 2011 at 14:48
O, a ja kiedys oddawalem klientowi synchronizacje jego serwisu z CRM-em i okazalo sie ze z testow zostala Sandra Bullock z Anal Sex Department. Na szczescie klient mial poczucie humoru. Od tego czasu nauczylem sie stosowac glupie, nudne nazwy.
February 11th, 2011 at 15:07
Fajnie, fajnie, ale prócz puenty i wniosków brak najważniejszego. Znaczy byś się garścią tych wymyślonych akronimów podzielił ;)
February 11th, 2011 at 15:17
Wysyłanie emaili nigdy nie było proste.
W poprzedniej pracy zdarzyło mi się zrobić małą poprawkę w jednej funkcji w bazie. Pięć minut po poprawce zaczynał się długi weekend majowy i mój urlop. Jakież było moje zdziwienie, gdy w sobotę po południu, kiedy po kilkugodzinnym pałętaniu się na odludziu wróciłem w objęcia zasięgu miłościwego operatora, telefon oznajmił mi, że dzwoni do mnie kiero. Okazało się, że system, nad którym pracowaliśmy, dostał regularnego pierdolca i masowo wysyłał maile. Te same. Do każdego użytkownika. Co minutę. Od 16.30 w piątek. Niektórym w kolejce się zebrało kilka wiadomości, więc dostawali wielokrotną dawkę. Na zawał nie zszedłem tylko dla tego, że kierownik powiedział, że udało mu się już zgarnąć admina, który na szybko zamknął połączenia smtp. Niemniej, resztę urlopu byłem zielony i nawet zimne piwo mnie nie cieszyło.
Analiza post mortem wykazała:
- emaile były wysyłane z kolejki trzymanej w bazie danych.
- do kolejki trafiały wszystkie wiadomości z serwisu (wiadomości wewnętrzne, powiadomienia, zaproszenia dla zewnętrznych użytkowników).
- kolejka była wysyłana co minutę.
- wysyłała funkcja składowana, która w pętli, dla każdej wiadomości brała email docelowy, szablon, treść, łączyła się z serwerem pocztowym i wysyłała. po wszystkim zaznaczała wysłane wiadomości jako wysłane.
- jeśli by kto pytał, dlaczego kolejka: kilka miesięcy wcześniej mieliśmy problem w serwerowni, który objawiał się koszmarnie długimi połączeniami między maszynami w sieci serwerowni. wysyłanie każdego emaila następowało bezpośrednio z aplikacji i trwało za długo. przesunęliśmy więc wysyłanie do kolejki w bazie.
- funkcja działała w 1 (słownie: jednej) transakcji.
- moja zmiana polegała na tym, że kolejka była wysyłana jednorazowo ‘do oporu’, a nie paczkami po 10 sztuk. oczywiście był mutex.
- mniej więcej w połowie wysyłki następował wyjątek, który powodował rollback transakcji.
- wyjątek następował przy próbie wysłania na adres, w którym ktoś podał znak # zamiast @. Serwer odpowiadał, że nie wyśle bo adres docelowy jest być nieprawidłowy.
- jak na zadanie cronowe przystało, minutę później następowała kolejna próba wysłania wiadomości z kolejki, które nie zostały oznaczone jako wysłane. tak przez popołudnie, wieczór, noc, poranek i przedpołudnie. około 1100 razy.
- feralny email wziął się z importu użytkowników z jednego systemu legacy.
- przy imporcie nie sprawdzaliśmy poprawności emaili (wrzutka bezpośrednio do bazy), ufaliśmy, że są dobre, bo system legacy działał bez problemów od kilku lat.
- okazało się, że w systemie legacy nie było walidacji emaili. Można było podać dowolny string jako email.
- fuckup zauważyła dyrektorka, która przypadkiem w sobotę chciała sprawdzić na swoim smartfołnie, jak na tym serwis wyglądał (wyglądał okropnie). Zauważyła, że dość często powtarzały się komentarze, że serwis zaspamował komuś skrzynkę pocztową.
Lista wysyłkowa była długa, ale w sumie poszkodowanych było około 200 użytkowników, w tym sporo spoza systemu, bo dostali zaproszenia od istniejących użytkowników.
Sprawa, na szczęście, rozeszła się po kościach. Było przepraszanie użytkowników, jakieś podarunki z firmy w ramach zadośćuczynienia dla najbardziej poszkodowanych. Dostałem opierdol, głównie za to, że złamałem firmową regułę niewrzucania niczego na produkcję w piątek, zwłaszcza przed urlopem (co mi się oczywiście jeszcze kilka razy potem zdarzyło). Sromota trzyma do dziś.
February 11th, 2011 at 16:38
Historyjka zacna, wstęp rewelacyjny!
February 11th, 2011 at 19:02
Bym napisała, ale jeszcze pracuję. Bywało spektakularnie, również z wizytą u prokuratora ;-)
February 12th, 2011 at 10:47
[...] This post was mentioned on Twitter by Filip Chabik, 10przykazan.com. 10przykazan.com said: Wypijmy za błędy [Bronikowski.com] http://bit.ly/gtE01O [...]
February 12th, 2011 at 17:56
jak zwykle chłodno.
pisz jeszce, bo ostatnimi czasy coś dużo tych przerw :(
February 12th, 2011 at 22:47
Ten art mnie zadziwił. I to na więcej sposobów niż Jenna Jameson zadziwiła Petera Northa.
Zadziwiło mnie, że:
1. Można nie przyznać się do błędu w pracy. Bo z TŻ, to różnie bywa ;)
2. Można odnosić się do pracownika używając wyzwisk personalnych.
3. Można pozwalać odnosić się tak do siebie w pracy. Nawet w pierwszej.
4. Picie kawy stanowi element lansu.
5. Trzeba logować się o 6 rano, żeby wyskoczyć w południe na lancz.
6. Zaraz po malowniczym opisie tuszowania błędu wespół z kierownictwem następuje morał który mówi, że warto się od razu do błędu przyznać.
Ech, ja chyba rzeczywiście w jakimś innym świecie żyję.
A propos uprzejmości słownych. U nas raz była historia, że menedżer odezwał się do pracownika – nazwijmy to – bezpośrednio. Nauczył się chyba do końca życia, że to nie jest właściwe zachowanie…
February 14th, 2011 at 11:40
Co prawda moja historia nie umywa się do Twojej epopei, ale było tak:
Wprowadzaliśmy zmiany do dużego sklepu internetowego. Kolega pisał funkcję, która usuwała w jakiejś tam sytuacji pojedyncze zamówienie. Zachodzę ci ja kiedyś do biura, a kolega blady. Okazało się, że w poleceniu DELETE FROM zapomniał dodać warunku WHERE.
Na szczęście teraz każdy szanujący się serwer ma automatyczny backup, ale i tak chłopak pewnie posrał się na rzadko.
February 14th, 2011 at 15:45
Ale to tak na produkcji sobie grzebał? :)
February 14th, 2011 at 19:23
Padłbyś, jakbym Ci opowiedział, jakie rzeczy “się robiło” :D
Nie będę mówił, co to za firma, bo jakiś czas temu pewna duża korporacja ją przejęła, a kto wie, czy ich agenci nie czytają tego zacnego bloga ;-)
Dodam tylko, że od dawna tam nie pracuję.
July 10th, 2011 at 16:22
popłakałam się :)