7 פרומפטים בפנים📅 3 בדצמבר 2024 · סשן שלישי בערב👤 עינת לבי-כהן

מכסחת הבאגים: איך לבנות אוטומציה שלא נופלת - בדיקות, Error Handlers, ולוג לשחזור

מתוך "מכסחת הבאגים" עם עינת לבי-כהן · אוטוטיוזדיי · 3.12.2024
🔒 המלאה למנויים

💜 רוצים לשתף? שתפו

ההודעה נשלחת מוכנה, עם תמונה וקישור לסשן.

לאינסטגרם / סטורי - העתיקו ושתפו

הבנייה היא 20% מהזמן ועובדת ב-80% מהמקרים - כל השאר הוא בדיקות, טיפול בשגיאות ותחזוקה. עינת לבי-כהן, מכסחת הבאגים, לימדה בדיוק את ה-80% הזה: מאיפה באמת נולדים באגים (לחץ זמן, הנחות שגויות על פורמט תאריך, מערכות צד ג' שמשתנות), איך בודקים מקצה-לקצה לפני מסירה, איך עוטפים מודולים ב-Error Handlers שהסנריו לא ייפול, ואיך בונים לוג שמריץ מחדש כל מה שנכשל בלחיצת כפתור. 7 הפרומפטים למטה הופכים אתכם מבנאים שמפחדים ממסירה לבנאים ששולטים בפרודקשן.

מירי
🕰️ הערת הכתבת

הערת הכתבת: הסשן הזה (3.12.2024) הוא Make ספציפי, אבל אל תתנו לזה לבלבל - זה אחד הסשנים הכי חשובים בסדרה, והוא לא מזדקן. מה שעינת לימדה - לבדוק לפני שמוסרים, לטפל בשגיאות מראש, לתעד כדי לשחזר, ולתת ללקוח שקיפות - זו דיסציפלינת production אמיתית, והיא נכונה בכל כלי ובכל שפת קוד. והכלל פשוט: בנייה זה לא גמור, טסט זה לא גמור - בודקים לפני שמוסרים. גם היום, כשבונים עם קוד וסוכני AI, אותם עקרונות בדיוק מפרידים בין משהו שעובד בהדגמה למשהו ששורד בפרודקשן. הפרומפט הפתוח למטה בונה לכם צ'קליסט בדיקות מקצה-לקצה לאוטומציה אמיתית לפני מסירה.

🎁פרומפט פתוח, בחינם - צ'קליסט בדיקות מקצה-לקצה לפני מסירה:
prompt-00 · בונוס נצחי🔓 פתוח לך

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

מירי
עינת אמרה משפט שאני רוצה לתלות על הקיר - הבנייה היא 20% מהזמן, כל השאר בדיקות ותחזוקה. כולנו מכירים את זה: אוטומציה שעבדה מצוין בהדגמה ונפלה בשקט באמצע הלילה, ואף אחד לא שם לב עד שלקוח התקשר. עינת נתנה את כל הכלים לא לתת לזה לקרות: לבדוק את מה שהכי מסוכן, לעטוף בשגיאות, ולתעד לשחזור. זה סשן לבנאים שרוצים לישון בשקט. בואו.

המסע: 7 תחנות

כל תחנה = מה קרה בסשן + הפרומפט שאורז את זה בשבילכם

1🎓 למידה

מפת המקורות לבאגים בעסק שלי

עינת פתחה ממה שכולם חווים ואף אחד לא ממפה: מאיפה נולדים באגים. היא פרשה את המקורות עם דוגמאות שכואבות בדיוק כי הן אמיתיות. לחץ זמן ('תעלה מהר, צריך למחר') שגורם לדילוג על בדיקות - פיצול סנריו לארבעה ושכחת תנאי, ופתאום נשלחו מיילים על חשבוניות ישנות ללקוחות. לחץ כסף - צמצום ההצעה עד שלא נשאר זמן לבדיקות (וכאן התובנה: הבנייה היא 20% מהזמן, השאר בדיקות ותחזוקה). הנחות שגויות - פורמט תאריך ישראלי מול אמריקאי, מע"מ קבוע בקוד שמייצר חשבוניות שגויות, טופס בלי קידומת 972 ללקוח בחו"ל. וגם: ריבוי שינויים קטנים 'בלי לבדוק', ומערכות צד ג' שמשתנות מעצמן (פייסבוק משנה אותנטיקציה). עינת לימדה שבאג הוא כמעט אף פעם לא מזל רע - הוא מקור מוכר שאפשר לצפות מראש.

השתמשו בפרומפט הבא בשביל להבין מאיפה באמת נולדות התקלות באוטומציות לפני שהן קורות:
prompt-01 · למידה🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
2🩺 אבחון

אבחון: איפה אני חשוף לבאג שיוצא החוצה ללקוח

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

השתמשו בפרומפט הבא בשביל לזהות את הנקודות הקריטיות שטעות בהן פוגעת ישירות בלקוח או בלקוחות הקצה שלו:
prompt-02 · אבחון🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
3⚙️ יישום

צ'קליסט בדיקות מקצה-לקצה מבוסס אפיון

עינת עברה לפרקטיקה: תהליך בדיקות שיטתי בשני שלבים. שלב א' - בדיקות מיקרו תוך כדי פיתוח: בודקים כל רכיב בנפרד (כל סנריו, כל אינטגרציה), לא מחכים לבדוק הכל יחד בסוף. שלב ב' - בדיקות מקצה-לקצה: משכפלים את מסמך האפיון לגרסת בדיקות ועוברים מסלול-מסלול. ועינת נתנה את הזהב המעשי - מה לבדוק בכל נקודה: קלט (להזין במכוון תווים מיוחדים, שמות עם גרשיים וסוגריים, עברית וערבית מעורבות, פורמטים שונים של טלפון), חישוב (אם יש תנאי עם כמה מצבים - לבדוק את כולם, כי היה מקרה של 9 מצבים ש-8 עבדו והתשיעי לא), ופלט (לא 'נכתב משהו' אלא להיכנס ולוודא שמה שהיה אמור להיכתב באמת נכתב). ובדיקות מיוחדות - תאריכים, מע"מ, שמות קבצים בעברית, עומסים מול API limit. והטיפ הכי חד: בדיקה על ידי מי שלא פיתח - או אם זה אתה, אחרי הפסקה ושינוי state of mind.

השתמשו בפרומפט הבא בשביל לעבור מסלול-מסלול על האוטומציה ולתפוס שדות, חישובים, פלט וקלט מיוחד לפני מסירה ללקוח:
prompt-03 · יישום🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
4⚙️ יישום

דפוסי עבודה מובנים ב-Make לצמצום באגים

פה עינת עברה ממניעה בדיעבד למניעה מראש: לבנות נקי מלכתחילה. שלושה דפוסים. עבודה מודולרית - כל פעולה כיחידה עם שמות משמעותיים, notes, וסטנדרטים אחידים (שקל לתחזק ולהביא אנשים). Set/Get variables כדי לא לשכפל לוגיקה - וכאן עינת לימדה נקודה שתופסת אנשים: ב-Make ה-scope לוקאלי לכל ענף ראוטר, אז כשמפצלים בתנאי (מצאתי subscriber קיים מול יצרתי חדש), בכל ענף עושים Set לאותו שם משתנה, ואחרי האיחוד עושים Get פעם אחת ומפעילים את הלוגיקה המשותפת פעם אחת - במקום לשכפל אותה בכל ענף. ו-Set הוא גם כלי דיבאג מצוין (שותלים ראוטר עם Set כדי לראות נוסחאות בעיניים לפני שדוחפים אותן). ומודול Create JSON לפני קריאות HTTP - במקום JSON ידני שנשבר על גרשיים וסלאשים, Create JSON מטפל אוטומטית באסקייפינג. נקי מראש = פחות באגים אחר כך.

השתמשו בפרומפט הבא בשביל לבנות סנאריו נקי שקל לתחזק, עם Set/Get, Create JSON ומודולריות:
prompt-04 · יישום🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
5⚙️ יישום

Error Handlers: שהסנאריו לא ייפול לעולם

וכאן עינת נכנסה ללב: Error Handlers, שהסנריו לא ייפול גם כשמודול נכשל. Break - מנסה שוב אחרי X זמן ומספר ניסיונות, מתאים לתקלות שרת ו-Rate Limit, ועינת נתנה אזהרה מבריקה: בריצה כמותית אל תיתן לכולם אותו interval, כי כולם יחזרו יחד ויתקעו שוב - מוסיפים רכיב רנדומלי, ועדיף גדילה מעריכית (1 ל-2 ל-4). Resume - כשמודול נכשל (מודול טלפון שנופל על קלט לא תקין), מזריקים ערך חלופי וממשיכים קדימה, ואז בודקים ב-IF ומחליטים - התראה ללקוח, לוג, או כלום - בלי להפיל את הסנריו. Router על Error Handler - הכי עוצמתי: לפי סוג השגיאה פעולות שונות. ועינת הוסיפה תובנה בוגרת: לא תמיד רוצים שהסנריו לא ייפול - אם אין דרך 'להחזיר מים לצינור' (הרשמה לוובינר עם תאריך שגוי), עדיף שייפול עד שמתקנים, כדי שלידים לא יירשמו לוובינר הלא נכון. לדעת מתי לתפוס שגיאה ומתי לתת לה להפיל - זו בגרות הנדסית.

השתמשו בפרומפט הבא בשביל לעטוף מודולים רגישים ב-Break/Resume/Router כדי לשרוד תקלות שרת, Rate Limit וקלט שבור:
prompt-05 · יישום🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
6🛠️ כלי

בניית לוג לשחזור ריצות בלחיצת כפתור

עינת נתנה כלי שמפריד בין 'תקלה = אסון' ל'תקלה = לחיצת כפתור': לוג שמריץ מחדש ריצות שנכשלו. שני סנריוס. הראשון - האוטומציה עם לוג מובנה: בתחילת הריצה כותבים שורת לוג (Sheets/Airtable) עם datetime, status שמוגדר מראש כ-'error' (מניחים כשל עד שמוכח אחרת!), Execution URL, ה-JSON המלא שהגיע, ושם הסנריו; לאורך הפלואו מעדכנים error_type בכל מודול קריטי; ורק בסוף, כשהכל הצליח, מעדכנים ל-'success'. השני - מנוע הרצה חוזרת: שולף מהלוג את כל השורות עם error, עושה קריאת HTTP חוזרת ל-Webhook המקורי עם ה-JSON השמור, ומסמן 'נשלח לריצה חוזרת' (כדי לא להיכנס ללופ). ועינת נתנה טיפ ביצועים קריטי: לשים את ה-Sheet של הלוג על חשבון נפרד - כי Rate Limit נספר פר-חשבון, וכך הלוגים לא יפילו את שאר האוטומציות. במקום לתקן 200 ריצות ידנית - מתקנים את הבאג, לוחצים כפתור, והכל רץ מחדש.

השתמשו בפרומפט הבא בשביל לתעד כל ריצה קריטית ולהריץ מחדש את כל מה שנכשל אחרי תיקון תקלה — במקום ידנית אחד-אחד:
prompt-06 · כלי🔒 למנויים

ההמשך המלא של הפרומפט שמור לחברי אוטוטיוזדיי פלוס יחד עם ההקלטה והתמלול המלאים של הסשן
שורות ההמשך כוללות את כל ההנחיות המדויקות והדוגמאות שהוצגו בשידור החי מול הקהילה
7⚙️ יישום

רידנדנסי: חיווי הצלחה שקוף ללקוח הקצה

ואת הסשן עינת סגרה במשהו שרוב האנשים לא חושבים עליו - חיווי הצלחה שקוף ללקוח: רידנדנסי, או Observability בשפת התוכנה. הבעיה - משתמש ממלא טופס שמטריג שלושה תהליכים נפרדים (חשבונית, רישום, וואטסאפ), ורואה רק 'תודה על השליחה' בלי מושג מה קרה בפועל. עינת בנתה את הדפוס: בכל ענף שמבצע פעולה קריטית שותלים Set variable שמחזיר true אם הפעולה הצליחה לפי הקריטריון הנכון שלה (חשבונית - קוד 200 ולינק, וואטסאפ - נמסר), ובסוף מרכזים הכל להודעת סיכום עם סימני וי ואיקס לכל תהליך שנשלחת ללקוח. ועינת הוסיפה עיקרון זהב לתחזוקה: בכל מקום שכותבים בו מידע, לכתוב גם את ה-Execution URL של הריצה שיצרה את הרשומה - 'משיכת החוט' אחורה - כדי שכשמתקנים באג יודעים מיד מאיזו ריצה זה הגיע, וחוסכים שעות של reverse engineering. שקיפות היא לא רק כלפי הלקוח - היא מתנה לעצמך העתידי.

השתמשו בפרומפט הבא בשביל לתת למשתמש שלחץ 'שלח' ודאות שכל התהליכים הנסתרים מאחורי הקלעים באמת הצליחו:
prompt-07 · יישום🔒 למנויים

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

🎯 מה עושים עם זה עכשיו?

אל תסגרו את הטאב עם "מעניין". ככה זה הופך לתוצאה:
1
בחרו תחנה אחת ותריצו אותה היוםלא את הכל - אחת. עשר דקות של יישום שוות יותר מסימנייה.
2
קחו את הפרומפט המלא והתאימו לעסק שלכםהפרומפטים כתובים מוכנים להדבקה - ה-AI שלכם עושה את השאר.
3
ספרו בדיון מה יצא לכםהתוצאות של הקהילה הן חלק מהסשן. גם השאלות.

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

הצטרפו לאוטוטיוזדיי+· 49 ש״ח בחודשעוד לא בשלים? בואו ללייב הבא בחינם ←

רוצים לעבוד על התמלול הנקי?

העתיקו אותו ותעבדו איתו איך שנוח לכם.

🔒 התמלול המלא שמור לחברי אוטוטיוזדיי+. עם המנוי אתם מעתיקים אותו בקליק ועובדים איתו איך שנוח לכם.

לפתוח את התמלול · 49 ש״ח בחודש

שאלות ששאלתם (וה-AI ישאל גם)

מאיפה נולדים באגים באוטומציות?

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

מה בודקים קודם?

לפי נזק: כל מה שיוצא החוצה ללקוחות הקצה (כסף, חיובים, מיילים, הודעות) - כי אלה טעויות שאי אפשר לבטל. אחר כך דוחות שמשמשים לקבלת החלטות, ואז מקרי קצה. מתעדפים בדיקות לפי הסיכון.

מה ההבדל בין Break ל-Resume ב-Make?

Break מנסה שוב אחרי כשל (טוב לתקלות שרת ו-Rate Limit - עם interval רנדומלי כדי שכולם לא יחזרו יחד). Resume מזריק ערך חלופי וממשיך קדימה בלי להפיל את הסנריו, ואז מחליטים מה לעשות עם הכשל.

איך מריצים מחדש ריצות שנכשלו?

בונים לוג: כל ריצה נכתבת עם status=error בהתחלה (מניחים כשל), ומתעדכן ל-success רק בסוף. סנריו נפרד שולף את כל השורות עם error ומריץ אותן מחדש דרך ה-Webhook - במקום לתקן ידנית אחת-אחת.

💬 הדיון על הסשן

שאלות, תובנות, מה יישמנו - השרשור של הקהילה.

עוד אין תגובות - תהיו הראשונים לפתוח את הדיון 👇