הנדסה לאחור של מערכת קיימת – מה עושים כשהקוד עובד אבל אף אחד לא באמת מבין אותו
הנדסה לאחור של מערכת קיימת בלי תיעוד מתחילה בבניית שליטה ובטיחות סביב המערכת, לפני שנוגעים בקוד עצמו, כדי שתוכלו לשנות אותו בלי לשבור את הייצור ולדעת אם הצלחתם.
בקצרה
לא מתחילים מקריאת הקוד אלא מבניית שכבת הגנה שמאפשרת לגעת במערכת בלי לסכן את הייצור.רשת ביטחוןרשת הביטחון היא היכולת להריץ את המערכת בסביבה נפרדת על העתק נתונים ולהשוות את הפלט אחד־לאחד לפלט הייצור על אותו קלט.מהחוץ פנימהמיפוי מהחוץ פנימה פירושו להתחיל מכל מה שנכנס אל המערכת וכל מה שיוצא ממנה, כי זו רשימה סופית וקצרה בהרבה מכמות הקוד.כללים שאינם כתובים בשום מקוםהקושי האמיתי הוא לא בפרטים הטכניים אלא בהחלטה לגבי אותם כללים שלא מתועדים בשום מקום, ולכל אחד מהם חייבים להחליט אם הוא דרישה מחויבת מציאות או תקלה שהארגון התרגל לחיות איתה – וההכרעה הזו שייכת לעסק.
סדר העבודה, ולמה הסדר עצמו הוא העיקר
| שלב |
מה עושים |
למה זה לפני הבא |
| 1. רשת ביטחון |
בונים סביבה נפרדת, טוענים אליה העתק נתונים, ומוודאים שניתן להשוות את הפלט שם לפלט הייצור על אותו קלט. |
בלי רשת ביטחון כל שינוי במערכת הוא הימור, כי אין דרך סדורה לדעת שמשהו נשבר, וזה גם השלב שנותן תחושת ביטחון ראשונית ומהירה ביותר. |
| 2. מיפוי מהחוץ |
מכינים רשימה מלאה של כל קלט וכל פלט: מסכים, קבצים, ממשקים, דוחות, הודעות, משימות מתוזמנות – כל נקודת כניסה ויציאה. |
הרשימה הזו מתארת את ההתנהגות שחייבת להישמר והיא בקנה מידה קצרה בהרבה מגודל הקוד. |
| 3. איתור הכללים |
עוברים מהפלט לאחור: לכל פלט מבררים מאיפה הגיע כל שדה, איזה נתון הזין אותו ובאילו תנאים הוא משתנה. |
בשלב הזה קוראים קוד, אבל רק כדי לענות על שאלות מדויקות, לא בקריאה חופשית; קריאה חופשית של קוד הופכת לעבודה שלא נגמרת. |
| 4. הכרעה עסקית |
לכל כלל מפתיע שמתגלה לאורך הדרך מחליטים אם הוא דרישה שחייבים לשמר או תקלה שהסתגלנו אליה וצריך לתקן. |
זוהי ההחלטה היחידה שלא ניתן לקבל בלי מעורבות העסק, והיא זו שמגדירה את היקף העבודה והיכן להשקיע מאמץ. |
| 5. החלפה חלקית |
מחליפים בכל פעם חלק אחד מהמנגנון, מריצים את הישן והחדש במקביל עד שהפלטים זהים, ורק אז מכבים את הרכיב הישן. |
כך הופכים את השינוי לבטוח וצפוי; שכתוב מלא דורש לדעת מראש בדיוק את מה שחסר – ולכן הוא מסוכן יותר. |
סדר הפעולות הוא לב העניין: כמעט כל כישלון בתהליך השתלטות על מערכת מקורו בהיפוך שני השלבים הראשונים – מתחילים לקרוא קוד, אחרי שבועיים נוצרה הבנה חלקית, מבצעים שינוי ראשון בלי רשת ביטחון, והמערכת נשברת במקום שאף אחד לא קישר לאותו שינוי.
הכללים שאינם כתובים
החלק המורכב באמת בפרויקט הוא זיהוי וניהול הכללים הלא מתועדים, והוא אינו אתגר טכני אלא ניהולי־עסקי.
במערכת שרצה שנים מצטברים כללים שאין להם מקור ברור: חישוב שמעוגל דווקא בצורה מסוימת, מקרה קצה שטופל פעם אחת לבקשת לקוח, שדה שנחשב ריק רק אם הוא ריק בצורה אחת ולא אחרת, או התנהגות שנוצרה מבאג והעסק כבר ביסס סביבה נהלים.
הקושי אינו באיתור הכללים אלא בהכרעה לגביהם, כי מיפוי לאחור מהפלט מוצא אותם.דרישה או תקלהלכל כלל צריך להחליט אם הוא דרישה שחייבים לשמר או תקלה שנכנסה לחיים השוטפים, וזוהי החלטה עסקית טהורה: שימור אוטומטי של הכול משמר טעויות, ותיקון אוטומטי של הכול שובר תהליכים שעובדים – שתי הגישות נראות זהירות ושתיהן שגויות.
איך לנהל את זה בפועל.מייצרים רשימה אחת, גלויה, שבה כל כלל מפתיע נרשם כשורה עם שלוש עמודות: מה הוא עושה בפועל, מי נפגע אם הוא ישתנה, ומה ההכרעה לגביו. הרשימה הזו היא התוצר האמיתי של העבודה, ולעיתים היא חשובה יותר מהקוד עצמו, כי זה התיעוד שלא היה קיים.
למה שכתוב מלא נכשל
שכתוב מלא של מערכת נשמע כמו פתרון נקי: הקוד ישן, אז כותבים אותו מחדש כמו שצריך, אבל הכשל טמון בעצם ההיגיון הזה.
שכתוב מלא דורש לדעת מראש את כל הכללים וההתנהגויות, וזוהי בדיוק הידיעה שחסרה; בפועל הגרסה החדשה מגיעה מהר לאזור שמונים אחוז מההתנהגות, ואז נתקעת בעשרים האחוזים שמורכבים מכללים שלא הופיעו בשום רשימה, בזמן שהמערכת הישנה ממשיכה לרוץ ועכשיו מתחזקים שתי מערכות שלשתיהן מגיעות בקשות שינוי.
החלפה חלקית מפזרת את הסיכון: בכל פעם מוציאים חלק אחד, מריצים אותו מקבילית לישן ומוכיחים התאמה לפני שמכבים, כך שהמהלך אולי נראה איטי יותר על הנייר – אבל הוא גם מגיע לסיום, וזה ההבדל שמכריע.
שלושה מדדים לשליטה
תחושה של «אנחנו מבינים את המערכת» אינה מדד ניהולי, ולכן צריך להחליף אותה במדדים ברורים שכן אפשר לבדוק.
- אפשר להקים את המערכת מאפסבסביבה חדשה, לפי מסמך מסודר, בלי להסתמך על אדם אחד שזוכר הכול; אם צריך אדם מסוים כדי שהמערכת תקום – אין שליטה אמיתית.
- אפשר לשחרר שינוי קטן ולדעת שלא נשבר כלום.רשת הביטחון מהשלב הראשון נועדה בדיוק לזה: לאפשר שחרור שינוי קטן תוך בדיקה שיטתית שלא נגרם נזק.
- אין אדם שבלעדיו אי אפשר לשחרר גרסה.כל עוד יש אדם יחיד שבלעדיו אי אפשר לשחרר גרסה, קיים סיכון שידע קריטי נמצא רק אצלו ואף אחד לא כתב אותו.
שלושת המדדים האלה גם מגדירים מתי אפשר לעצור: היעד אינו קוד מושלם אלא יכולת לשנות אותו בבטחה, ומשם מתקדמים בקצב שמתאים לעסק. קשור: סקירת ארכיטקטורה, למה ארכיטקט.
מצב שכיח: מעבירים פיתוח לספק אחר
כשמעבירים פיתוח לספק אחר עושים למעשה אותה עבודה בדיוק, אבל תחת לחץ זמן ועם צד שאין לו אינטרס אמיתי לעזור מעבר למה שהתחייב, ולכן חשוב להגדיר מה חייבים להספיק.לפניסיום הקשר חייבים להשיג שלושה דברים, לפי סדר עדיפויות ברור.
- העתק מלא של כל מה שדרוש להקמהצריך העתק מלא של כל מה שנדרש להקמת המערכת, ובדיקה מעשית שההקמה עובדת אצלכם בפועל ולא רק שהקבצים הועברו; קובץ שהתקבל אינו מערכת שעלתה.
- הרשאות וחשבונות בשמכם.יש להעביר אליכם הרשאות וחשבונות בשמכם לכל השירותים הרלוונטיים – ענן, מאגר, חתימות, שירותים חיצוניים – וזה בדרך כלל החלק שתופס הכי הרבה זמן ואנשים נוטים לדחות אותו לסוף.
- שעה אחת עם מי שכתב את זה,מוקלטת, ובה שואלים שאלה אחת פשוטה: «מה שבור ואנחנו לא יודעים?»; התשובה לשאלה הזו שווה יותר מכל מסמך מסירה רשמי.
איך אני עובד על זה
עיסוק בתחום מאז 2004, עבודה על מערכות AI מאז 2023, ופרויקטים ללקוחות בארבע עשרה מדינות – חלק משמעותי מכל זה היה בדיוק אותו מצב: מערכת שרצה, בלי תיעוד, והאדם שהכיר אותה לעומק כבר לא נמצא.
סקירה כזו מייצרת רשת ביטחון עובדת, מסמך רשמי של כל הקלט והפלט, רשימת כללים לא כתובים עם הכרעה מפורשת לכל כלל, סדר עדיפויות להחלפה חלקית לפי סיכון, ושלושת המדדים למעלה מוגדרים כמצב התחלה ומצב יעד; מה שהיא לא מייצרת הוא המלצה לשכתוב מלא לפני ששלושת השלבים הראשונים בוצעו.
SLAtech LTD