החברה שלי פריה מנהלת את סידור המשמרות במחלקה רפואית בת 34 מיטות ובמשך שנתיים התמודדה עם בקשות להחלפת משמרות דרך הודעת קבוצה שאף אחד לא קורא לפי הסדר. היא רצתה משהו שאחיות יוכלו לפתוח בטלפון בזמן הפסקה, לפרסם משמרת שצריך לכסות, ושמישהו יתפוס אותה לפני שהאחות האחראית תצטרך לסדר מחדש את הלוח ידנית. בניתי את זה במשך שלושה שבועות של ערבים. זהו התיעוד של היום שבו זה באמת עלה לאוויר — פרסום, דומיין מותאם אישית, אחיות אמיתיות, משמרות אמיתיות — כי הפער בין "זה עובד בבדיקות" לבין "זה עובד ב-7 בבוקר כשבמחלקה חסרות שתי אחיות" התברר כמין לקח בפני עצמו.
6:58 בבוקר — פרסום
קבעתי את יעד הפריסה לדומיין האישי של פריה כבר בלילה הקודם, אז החלק הזה היה אנטי-קליימקטי: לחיצה על פרסום, וצפייה ברשומת האימות של הבנייה עוברת את הבדיקות שלה:
- נתיבים נפתרים כראוי
- נקודת הקצה לתפיסת משמרות מחזירה תגובה אמיתית במקום סטאב
- ה-hook של התראות ה-SMS מוגדר בפועל במקום במצב יבש (dry-run)
הכל ירוק. שלחתי לפריה את הקישור ב-6:58 בבוקר כי ידעתי שהיא בדיוק תיכנס למשמרת שלה, ורציתי שהיא תראה את זה חי לפני תחילת היום, לא אחריו.
7:15 בבוקר — המשתמשת האמיתית הראשונה עושה משהו שלא בדקתי
פריה פרסמה משמרת פתוחה לאותו ערב תוך עשרים דקות, מהר יותר משציפיתי, כך שאפילו לא סיימתי את הקפה שלי לפני שהתקבלה נקודת נתונים אמיתית ראשונה. אז אחות בשם דניז תפסה אותה, ביטלה את התפיסה ארבע דקות אחר כך, ותפסה אותה מחדש. אין לי מושג למה — אולי היא בדקה את היומן שלה באמצע התהליך וגילתה שיש לה תור לרופא שיניים. האפליקציה טיפלה בזה בסדר. מה שלא בדקתי היה שלושה אנשים שמנסים לתפוס את אותה משמרת באותו חלון של עשר שניות, כי בשלושה שבועות של בדיקות עצמאיות התרחיש הזה מעולם לא עלה לי בראש. הוא גם לא עלה לי בראש עכשיו. הוא עלה למציאות כחמש שעות אחר כך.
9:40 בבוקר — שקט, ואני נלחץ מהשקט
כלום לא קרה במשך שעתיים וחצי. אין תפיסות, אין פרסומים, אין שגיאות ביומנים. בכל זאת בדקתי את לוח הבקרה ארבע פעמים, הרגל שכנראה כדאי לי לשבור — בנייה שלא נמצאת בשימוש אינה שבורה, היא פשוט עדיין לא בשימוש, ואלה בעיות שונות עם פתרונות שונים. הכרחתי את עצמי לסגור את הכרטיסייה וללכת לעבוד באמת.
11:52 בבוקר — הבאג
נקודת הקצה לתפיסה קיבלה את כל שלוש הבקשות, כי כתבתי את הלוגיקה של "סמן כתפוס" כבדיקת עדכון-אם-פתוח פשוטה בלי נעילה, ותחת בדיקה רגילה עם משתמש יחיד תנאי המרוץ הזה פשוט אף פעם אין לו מקום לקרות. תחת שלוש הקשות בו-זמניות משלושה טלפונים שונים, יש לו הרבה מקום. שלוש האחיות קיבלו הודעת אישור SMS שהן כיסו את המשמרת. דניז הייתה אחת מהן, בפעם השנייה באותו יום, והפעם היא הייתה עצבנית.
אני רוצה להיות כן לגבי איך גיליתי את זה — לא תפסתי את זה מהניטור. פריה שלחה לי הודעה על כך, עם אימוג'י צחוק, אם כי אני לא חושב שהתכוונה לזה מילולית, כי זו הייתה, למעשה, בעיה עבור אחר הצהריים שלה:
האפליקציה אומרת שלושה אנשים קיבלו את אותה משמרת חחח
12:10 בצהריים — לצ'אט הבנייה
תיארתי את הבאג בשפה פשוטה: כמה אנשים יכולים לתפוס משמרת אחת אם הם לוחצים בערך באותו זמן, ורק תפיסה אחת אמורה להתקבל. לא ניסיתי לכתוב את התיקון בעצמי קודם, בין השאר כי הייתי בטלפון שלי בחניון ובין השאר כי לתאר את הכשל בדיוק בדרך כלל מהיר יותר מלאבחן אותו בדיוק. הסוכן עקב אחרי הבעיה עד לנעילת שורה חסרה בטבלת התפיסה, והציע לעבור לעדכון תנאי אטומי — התפיסה מצליחה רק אם הסטטוס של המשמרת עדיין "פתוח", והפעולה עצמה קובעת מי מנצח במקום בדיקה-ואז-כתיבה שמאפשרת לשלוש בקשות לראות "פתוח" בו-זמנית. זה הבאג האמיתי במשפט אחד, וזה הסוג של דבר שברור ברגע שאומרים אותו ובלתי נראה עד שמשהו כופה אותו לתשומת לב.
12:34 בצהריים — התיקון יוצא, ואני משאיר את פריה לחכות
התיקון היה קטן. עדיין לא דחפתי אותו ישירות לדומיין החי בזמן משמרת פעילה — הרצתי אותו קודם מול גרסת תצוגה מקדימה וביקשתי מהעמיתה של פריה, אחות אחראית שלא הייתה במשמרת, לנסות את אותו תרגיל של שלוש הקשות בו-זמנית משלוש כרטיסיות דפדפן. זה החזיק מעמד. תפיסה אחת עברה, שתיים קיבלו הודעה "המשמרת הזו זה עתה נתפסה על ידי מישהו אחר" במקום אישור שגוי. דחפתי את זה לחי ב-12:34, כארבעים ושתיים דקות אחרי שהבאג קרה, מה שהרגיש איטי ברגע ומהיר בדיעבד.
14:00 עד 18:00 — החלק המשעמם והטוב
- 11 משמרות נוספות פורסמו
- 9 נתפסו בצורה נקייה
- 2 פגו ללא תפיסה וחזרו ללוח שפריה עדיין מנהלת ידנית — וזה בסדר, הכלי לא צריך לפתור הכל ביום הראשון, הוא צריך לפתור את הדבר הספציפי שהיה שבור
- 0 תפיסות כפולות נוספות
צפיתי במספרים במקום לדמיין תוצאות, פעילות שונה ומרגיעה בהרבה.
מה הייתי עושה אחרת
שני דברים.
- הייתי מתאר את תרחיש התפיסה המקבילה בהנחיית הבנייה המקורית במקום לגלות אותו בשידור חי — "כמה משתמשים, אותה פעולה, אותו רגע" הוא משפט, לא דרישה קשה, ופשוט לא חשבתי לכלול אותו כי הבדיקות שלי הן מטבען עוקבות; אני לוחץ תמיד רק על כפתור אחד בכל פעם.
- השקעתי יותר מדי בניסוח הודעות ה-SMS בשבוע השני — שלושה שכתובים נפרדים לטקסט אישור שאף אחד לא התלונן עליו — והשקעתי פחות מדי בדיוק בסוג הזה של תרחיש קצה של מקביליות שמחלקה מלאה באחיות בהפסקה, כולן בוהות בטלפונים שלהן באותו רגע, הייתה תמיד עתידה להיתקל בו ביום הראשון.
בהשקה הבאה, אני מבלה פחות זמן בליטוש טקסט שאף אחד לא ילך לבקר אותו ויותר זמן בשאלת "מה קורה אם חמישה אנשים עושים את זה בבת אחת", כי לכל דבר עם יותר ממשתמש אמיתי אחד, בסופו של דבר, מישהו יעשה בדיוק את זה.



