התשובה הקצרה
שלוש האפשרויות אינן על אותו רצף. Repair מטפל בסימפטום, Refactor משנה מימוש בלי לשנות התנהגות, ו-Rebuild משנה את המודל שמתחתיו. ההחלטה נקבעת לפי שאלה אחת: האם הבעיה נמצאת באיך שהדברים מומשו, או במה שהוגדר מלכתחילה.
אם מודל הנתונים תקין והכאב הוא באוטומציות מסובכות ובהרשאות מסועפות - זה Refactor. אם אותו אובייקט משמש שלושה תהליכים סותרים ואי אפשר לדווח עליו - זה שורש, ואז Rebuild נכנס לדיון.
ארבעה מבחני הכרעה
| מבחן | מצביע על Refactor | מצביע על Rebuild |
|---|---|---|
| מודל הנתונים | תקין, סובל מעודף שדות | אובייקטים שמשרתים כוונות סותרות |
| מקור הכאב | ביצועים, כפילות אוטומציות | אי-אפשרות לדווח או להרחיב |
| היקף המשתמשים המושפעים | חלקי, ניתן לבידוד | רוחבי בכל התהליכים |
| עלות הבדיקה החוזרת | ניתן לבדוק אזור בודד | כל שינוי דורש רגרסיה מלאה |
שלוש שורות שמצביעות לאותו כיוון מספיקות להכרעה. פיצול בין השורות אומר בדרך כלל שהבעיה מקומית יותר ממה שהיא מרגישה.
מדוע Rebuild יקר מהאומדן
האומדן הרגיל סופר את הבנייה מחדש. הוא כמעט תמיד מדלג על ארבעה סעיפים: מיגרציית הנתונים ההיסטוריים על כל החריגים שנצברו בהם, בנייה מחדש של האינטגרציות שכל אחת מהן מוסכמת עם צד שלישי, תקופת הרצה מקבילה שבה שתי המערכות חיות, והדרכה מלאה מחדש לכלל המשתמשים.
בפועל, ארבעת אלה מהווים לרוב יותר ממחצית העלות. ארגון ששוקל Rebuild ולא תמחר אותם משווה בין תפוח לחצי תפוז.
המסלול המעשי: החלפה הדרגתית
גם כשההכרעה היא Rebuild, ביצוע כפרויקט "עצור והחלף" הוא הסיכון עצמו. המסלול שעובד הוא החלפה תחום אחר תחום:
- בונים את המודל החדש לצד הישן - אובייקטים חדשים, בלי לגעת בקיים.
- מעבירים תהליך אחד שלם - עם משתמשיו, נתוניו והדוחות שלו.
- מכבים את המקבילה הישנה - זהו הצעד שרוב הארגונים דוחים, וזה מה שהופך את הפרויקט לכפול.
- חוזרים עד שהישן ריק.
הצעד השלישי הוא המבחן. מערכת שבה גם הישן וגם החדש חיים במקביל שנה שלמה עלתה בעלות ולא ירדה בחוב.
מה שחייב להשתנות בכל מקרה
שני המסלולים נכשלים אם מנגנון השינוי נשאר כפי שהיה. ממשל מינימלי - מי מאשר שינוי במודל, איזו בדיקה חובה לפני העלאה, ומי הבעלים של כל תחום - הוא התנאי שמונע חזרה לאותה נקודה. תעדוף החוב עצמו מפורט בתעדוף חוב טכני, והסימנים המקדימים ב8 סימנים לשדרוג.
סיכום
הבחירה אינה בין "לתקן" ל"להתחיל מחדש" אלא בין תיקון מימוש לתיקון הגדרה. ברוב המקרים שנראים כמו Rebuild מסתתר מודל נתונים תקין שנקבר תחת עשור של אוטומציות - ואת זה מנקים בגלים, לא במחיקה.
