יום חמישי, 18 באוקטובר 2018

תום הרץ, בלש קוד פרטי

היה זה עוד יום שצריך לעבור. ישבתי במשרדי החשוך וחסר החלונות. הצצתי לשעון הקיר שרק את חלקו היה ניתן לראות בין כל התיקים, הקרטונים וסתם חפצים שאותם היה צריך לסדר. מתי שהוא גם זה יקרה, חשבתי לעצמי.
על השולחן קרץ לי ידידי הטוב, ג'וני. אמנם השעה הייתה רק 10:30 בבוקר, אבל חבר זה חבר וג'וני ווקר הוא חבר אמתי שלא עוזב אותך בטוב וברע.
הבטתי בדלת. היה אפשר לראות דרך הזכוכית שהיוותה חלק מהדלת שהיה כתוב "תום הר ,  לש וד פרטי". זה בטח הילדים המנוולים האלו שמחקו לי את האותיות.
ג'וני כבר היה באוויר, מחפש לו כוס לחלוק עימה את השכחה, כשלפתע נשמעה דפיקה בחדר. תחילה לא התייחסתי, כי לא צריך לעזור לנושים. אבל קול קטיפתי שלא נשמע בכלל כמו איגור או מוטי מהחברה לניכיון צ'קים, הדהד בחדר כמו גלים של ג'קוזי: "יש כאן מישהו? תום הרץ?"
מיד הסתרתי את ג'וני, העפתי כמה חפצים מביכים לתוך קופסאות קרטון, גייסתי את כל הנון-שלנטיות שעוד נשארה לי ואמרתי: "פתוח, אפשר להיכנס".
היה זה כאילו החדר הואר בנורות לד חכמות שתקשרו עם הלב שלי דרך בלוטות'. לחדר נכנסה האישה היפה ביותר שראיתי, עומדת זקופה בשמלה שחורה שמגלה יותר ממה שהיא מסתירה, ובמשקפי שמש.
"כנסי, כנסי" אמרתי לה ופיניתי כמה שקיות מכיסא האורחים.
היא הביטה רגע בחדר, אח"כ בכיסא, ולא זזה. "רגע, שנייה", אמרתי, מצאתי מגבת שנראית נקייה ושמתי על הכיסא.
"המנקה פשוט חולה השבוע", אמרתי.
"אתה בטוח שהיא לא טבעה בטיטאניק"? היא שאלה, אבל בכ"ז התיישבה.
"איך אני יכול לעזור?" שאלתי.
היא הסירה את משקפי השמש שגילו עיניים ירוקות שגורמות לך לרצות לעשות את כל מה שצריך בכדי שיביטו עליך בחיבה. ניסיתי להתרכז.
"שמי שני פן", היא אמרה, מנהלת פרויקטים בסטרט-אפ ב-stealth mode אבל כבר מאוד מושקע. הוא אמור להיות פלטפורמה לחנות מכוונת שתתחרה אפילו ב"אמזון". יש השקעות במאות מיליוני דולרים, ובכירי המשק בארץ ובעולם עומדים מאחוריו."
"נשמע טוב", אמרתי. "אז למה את כאן?"
"כי ההשקה שלו אמורה להיות בעוד שלשה ימים. כל ההכנות, כולל הפרסום, מוכנים. זה תאריך שהתחייבנו עליו ולשנות אותו יהיה אסון." היא עצרה לרגע, נשמה נשימה עמוקה, והמשיכה. "יש לנו בעיה. בבדיקות גילו שיש הזמנות שפשוט לא מסתיימות כמו שצריך. לא ברור מתי ולמה, רק שזה קורה".

"ולמה לא עשיתם שוב קוד ריוויו ואנליזות למצוא את ה-root cause?" שאלתי.
"כי הבדיקות, כמו תמיד, גילו את זה רק ברגע האחרון, כלומר אתמול, ואין לנו זמן. אנו זקוקים למומחה הכי מקצועי שיש, שיאתר את הבעיה אתמול. בגלל זה אני כאן".
האם שמעתי איזו עוקצנות בדבריה? שאלתי את עצמי, אבל עניתי "אני האיש שלך". זה יעלה לך 100$ ליום + הוצאות.
"אתן לך אפילו 500, רק תציל אותנו!" אמרה שני בייאוש.
"אין בעיה", אמרתי בקול ולעצמי איך לעזאזל אני אצליח לפתור את התסבוכת הזו?
תמונת ביתו של בלש טוב כמעט כמו תום, שרלוק אחד, בלונדון

שעה אח"כ ישבתי עם שרון הבודק.
"מה הסנריו?" שאלתי.
"אחרי שלוחצים על כפתור הקנייה. אתה בוחר מוצר, עובר לעמוד עם הפרטים של אותו מוצר, לוחץ על "קנה", ואחרי שאתה מחויב אתה חוזר לעמוד של המוצר מבלי לקבל הודעה על קנייה. למעשה הקנייה אינה רשומה בבסיס הנתונים ולכן המוצר לא נשלח, אבל אתה מחויב בכל זאת.
"שמע," המשיך שרון, "אני לא יודע מה יגידו לך המפתחים, אבל הם שינו משהו בגרסה האחרונה שקיבלנו אתמול על הבוקר. הם טוענים שרק תקנו באג שקשור ל-UI, אבל אנחנו יודעים שאי-אפשר לסמוך עליהם."
"ממש לא", אמר בודק אחר שישב בחדר והרגיש שגם הוא חייב לומר משהו.
"אז אתה חושב שהם הכניסו קוד חדש שגרם לבעיה?" שאלתי.
"בטח, אחרת איך תסביר שעשינו את אותן הבדיקות שאנו עושים כל הזמן, ורק עכשיו מצאנו את הבעיה?"
"רק שינוי קוד", אמר הבודק השני בפסקנות.
"אתה בטוח?" שאלתי. "אולי עשית משהו שונה? בדיקה חדשה, ערכים חדשים?"
"בטוח" ענה שרון.
"בטוח", ענה השני.
"לך למזל מהבק אנד. היא בטוח עשתה משהו. אני מכיר אותה," סינן שרון.
"כן, מזל", אמר ההד.
"תודה" אמרתי והלכתי למזל.

"שמע," אמרה מזל, "אני יודעת בדיוק מה הבעיה, תודה לאל. הטרנזקציה נופלת בדיוק אחרי שאני מקבלת את הג'ייסון ב-REST API ששולחים לי מהפרונט אנד. אני לא יודעת בדיוק מה יש שם, אבל זה הג'ייסון אשם. הבעייה היא שהקוד של הפרונט הוא כמו מה שהם אוהבים לאכול: ספגטי. אין להם מושג מה קורה שם. בגלל זה נוח לג'ייסון להאשים אותי. אפילו קוד ריוויו אין שם", אמרה בביטול.
הג'ייסון מאשים אותך? שאלתי בתמיהה.
"ג'ייסון, נו, הוא הר"צ של הפרונט".

דקה אח"כ אני אצל ג'ייסון.
"היי", אומר לי הבחור המזוקן עם החולצה הפרחונית ומשקפי השמש. "מה קורה? רוצה לשתות? יש לי כאן חומר טוב, מיץ חמציציות עם גרגירי חומוס טחונים ועוד צמח שאסור לי לומר איזה".
"לא תודה," אמרתי. "תגיד בקשר לבעיה שיש לכם בפלואו של הקנייה".
"לצערי למרות שהייתי רוצה אני לא יכול לעזור," אמר ג'ייסון. "שמע לא שינינו כלום, אז זה יכול להיות רק הבק-אנד. אנחנו שולחים ג'ייסון בדיוק כמו שכתוב בג'ירה. אם הם לא יודעים לפרסר אותו, בעיה שלהם. אתה יודע שאין להם אפילו קוד ריוויו לסטלנים האלה?".

הבנתי שמהליצנים האלה לא יצא לי כלום, ושאלתי את שני איפה ה-DBA.

"בבניין ממול. רד דרך החנייה, הכי קל", היא אמרה.

בדרך חשבתי לעצמי שהבעיה כנראה באמת בג'ייסון. הגיוני לפי הסנריו. התקלה מתרחשת אחרי שהוא מגיע לשרת.

לא הספקתי להגיע ל-DBA. כשהלכתי בחנייה הרגשתי שמישהו כיבה את האורות, כמו שרת בהפסקת חשמל בלי UPS. כשהתעוררתי הייתי על הרצפה עם כאב ראש נוראי. מישהו בכובע גרב עמד מעלי. "תעזוב את החקירה הזו, ברור?" הוא בעט בי בכדי לחדד את ה"ברור" והלך.
חזרתי לשני שדאגה לקרח ולמגבת אותה הצמידה לבליטה בראשי. "אתה תהיה בסדר", היא אמרה. "אבל אם אתה בוחר לא להמשיך זה גם בסדר".
"אני ממשיך," הבהרתי לה.
"מצוין. טוב אם כבר יש קרח, חכה שנייה. היא נעלמה וחזרה עם Chivas Regal. "הוא בן 12 שנה", היא אמרה.
"לא תודה", עניתי מרסן את עצמי בקושי. "אני בתפקיד".
"אתה ממש אמיץ", היא אמרה ולטפה את פני, חייכה והלכה.
הרגשתי כמו רכב אוטונומי שמזהה תהום כמו כביש מהיר, אבל תפסתי את עצמי והתקשרתי לסשה, ה-DBA. שהוא יבוא לכאן הפעם.

"שמע הנתונים בביג דטה בדוקים ואינטגריטי מלא. ה-ETL עובד יופי, הספארק מככב, הקפקא עובד בלי CPU כמעט, האלסטי גמיש והדוחות פצצה". סשה ה-DBA השתתק.
"ו…" שאלתי.
"לא יודע," ענה סשה, נגמרו לי הבאזז וורדס.
"ואתם באמת משתמשים בכל הטכנולוגיה הזו?"
"בטח, מה".
"אפשר לראות את השרתים של האלסטיק? או לפחות להתחבר אליהם?"
מלמול.
"סליחה, לא הבנתי. אתה יכול לחזור?" שאלתי.
"הם לא פעילים עדיין" אמר והביט לכיוון של הנעליים שלי.
"אז איך זה עובד?"
"הקליינט שולח את הפרמטרים בג'ייסון, בשרת הם מפורסרים לשאילתת SQL ומוכנסים לדטה בייס של SQL server."
"כלומר מה קורה כשאני לוחץ על קניה?"
"כשאני לוחץ על "קנייה", בעצם הבקשה, שכוללת פרמטרים כמו שם המוצר, ה-ID שלו, מחיר וכו', עוברת לשרת, שם היא מפורסרת, ואח"כ נבנת שאילתא והמידע מוכנס לבסיס הנתונים."
"ומתי פרטי התשלום מועברים בפועל לבנק? אחרי הרישום בבסיס הנתונים?"
"לא, במקביל. ככה חוסכים זמן".
"מי הגה את הרעיון הזה?"
"הארכיטקט".
"מי זה?"
"גם כן אני".
יופי.

חזרתי לפרונט.
"מה אתה שולח לבק אנד בלחיצה על קניה?"
"כשהלקוח לוחץ על קנייה, נשלח ג'ייסון לבק אנד, עם כל הפרטים של הלקוח כולל הוראת תשלום. יש הרבה פרטים כולל המיקום שלך אם יש, שעה בקליינט, אם אתה רשום, אם יש לך מוצרים בסל וכאלה".

חזרתי לבק-אנד ושאלתי: "ואתם עושים ולידציה לנתונים?"
"בעזרת השם", ענתה מזל.
חשבתי שאולי היא לא. אולי היא עושה ולידציה רק לג'ייסון.

היה לי רעיון. הלכתי לג'ירה לבדוק את הדרישות, פתחתי פידלר, וביצעתי כמה קניות בסביבת הבדיקות בכדי לאושש את התאוריה שלי.

השעה הייתה תשע בערב כשקבעתי את הישיבה עם כל הגורמים.
כולם הגיעו, אפילו המנכ"ל. אני פתחתי.
"אני יודע בדיוק מי אשם ותכף גם אתם תדעו.
"אתה סשה, ארכיטקט גדול. נהוג שטרנזקציה אינה מתבצעת אלא עם כל הצעדים שלה עברו. לא היית בשיעור הראשון הזה?"
"כן, ברור", הוא ענה ונראה לחוץ. "אבל לחצו על מהירות, לפחות עד שנגיע ליישם את הביג דטה…"

"ואתה, שרון. בטוח בבדיקות שאתה עושה?"
"בטח" הוא אמר. "הכי מקצועיות שיש."
"ובדיקות API עשית?"
"אני לא צריך", הוא אמר. "אם הטרנזקציה עובדת הכל טוב."
"אבל הנה יש בעיה והטרנזקציה לא עבדה".
"זה לא קשור, המערכת יודעת מה אני רוצה לקנות".
"האמנם"? שאלתי שאלה רטורית. "אתה אפילו לא יודע מה הסנריו המדויק".

"מזל, את עושה ולידציה לג'ייסון, לא לערכים. תגידי, אחרי העברת הערכים לבסיס הנתונים, האם את בודקת שהנתון נכנס בצורה טובה?"
"לא, למה מה יכול להשתבש?"
"והנה זה השתבש."

"ואתה, ג'ייסון, לפני שאתה שולח את הנתונים לשרת, אתה בודק שהכל לפי הדרישות?"
"שמע אחי, הסרבר מוודא".
"זה בזבוז זמן וגם שם עלולים לטעות".
"נכון, הם כל הזמן טועים".
"לא, אתה צדיק" זעקה מזל.
השתקתי אותם.

"אני אסביר מה קרה," אמרתי. "אחד מהפרמטרים הוא האם המוצר נמצא בסל כשרוכשים אותו. הערכים אמורים להיות בינרים, 1 או 0. בגרסה האחרונה, יש שינוי אחד. כשהמוצר אינו בסל, במקום אפס לא נכתב כלום.
אז הפרסר במקום להתעלם ולהמשיך הלאה, הוא פשוט מכניס לאותו פרמטר את הערך הבא. כלומר אם הפרמטר היה &=cart& והפרמטר הבא הוא pname=shoe101, בפועל יהיה ניסיון להכניס לתוך הטבלה ערך shoe101 לעמודה cart. וא זה כאילו cart=shoe101&."
וסשה המשיך "אבל cart מוגדר בדטה בייס כעמודה בינארית ו-shoe101 זה טקסט, לעולם זה לא יצליח…"
"כל הכבוד, איינשטיין," אמרתי לו. "זו בדיוק הבעיה. בסיס הנתונים לא מכניס את הרשומה, לא יוצאת הזמנה, אבל הלקוח מחוייב. היה כדאי לשים לב ללוג של בסיס הנתונים לפעמים"

כולם מחאו לי כפיים. בעיקר שני.
"תמיד ידעתי שתצליח," אמרה וחיבקה אותי.
כמעט התבלבלתי, אבל רק לרגע.
"לא ממש," אמרתי לה.
"מה?" היא שאלה וכולם השתתקו.
"את הבאת אותי כי אני לא ממש מתפקד. אבל פתאום התחלתי להתקדם. את נבהלת ושכרת בריונים שיכו אותי."
"לעולם לא תוכיח את זה. ולמה בכלל שאעשה את זה?"
"כי את סוכנת של אמזון כמובן, וקיבלת פקודה לפגוע בחברה הזו. לגבי המכות אני לא יכול להוכיח, אבל אני ראיתי בלינקדאין שיש לך עבר כמתכנתת. ביררתי ואפילו כאן התחלת לעבוד בצוות של מזל. רק לך יש הסיסמה של מזל לגיט עוד מהזמן שעבדת שם. את נכנסת ושינית את הקוד. במקרה שהמוצר אינו בסל, במקום 0 החלפת ל-"". בדקתי בגיט, זה היה ביום שמזל בכלל לא הייתה בעבודה. למעשה היא הייתה בחו"ל".
שני איבדה את יכולת הדיבור, ונראתה חיוורת באופן מסוכן, כמו כלב שרץ אחרי חתול והחתול לפתע מסתובב, ואז הכלב קופא מפחד.

כשהתחילו הצרחות, הלכתי בשקט לחדרה של שני, לקחתי את הויסקי שנשאר ויצאתי לרחוב.

אין תגובות:

הוסף רשומת תגובה

רשומות פופולריות