המחיר הגדול של תיקון קטן. על פרדוקס הערימה, ומה הקשר לתיקון חצות.

"אל תדאגי, זה תיקון מה זה קטן. לא יותר מכמה שורות קוד ואני מסדר את זה".
"זה רק שינוי קוסמטי, הוא לא משנה שום דבר בהתנהגות של המערכת".
"אני נוגעת רק באזור מאוד ספציפי של הקוד, אז אין צורך להריץ את כל הבדיקות שוב".
אני מניח שלכולנו יצא לשמוע את המשפטים האלה על גירסאותיהם השונות יותר מפעם אחת. פתגמים אלו ודומיהם נאמרים על בסיס יומיומי בארגונים שונים, עם הסברים משונים ועל ידי מפתחים שנונים. אבל כולם חולקים דבר אחד משותף, והוא שמהר מאוד הם מתבררים כשטות מוחלטת.
תמיד, אבל תמיד, התיקונים הקטנים והפשוטים האלה נראים לנו "פיס-אוף-קייק". משהו שאפשר לסיים ממש, אבל ממש מהר. ותמיד, אבל תמיד, הם מסתבכים ולוקחים הרבה יותר זמן ומאמץ ממה שחשבנו. אבל מה שמפתיע זה שאנחנו לא לומדים את הלקח, ונופלים במלכודת הזו שוב ושוב.
תמיד יש תירוצים מצויינים למה רק הפעם אפשר קצת לעגל פינות, לא ממש לבדוק את כל ההשלכות של השינוי, ובכלל "מה כבר יכול להשתבש". אבל מהר מאוד זה הופך להיות "אויש, מה עדיין לא השתבש". אני בטוח שכולם מכירים את הסרטונים האלה ביו-טיוב שמראים איזה שיפוצניק אומלל שמנסה לתקן פינה של חלון וחצי בית מתמוטט עליו (ומי שלא מכיר, אפשר לחפש: bad day at work לדוגמא). אז זו בדיוק ההרגשה כשה"תיקון הקטן" מתגלה כלא קטן בעליל.
זה כמובן קורה לאט לאט. בהתחלה מגלים שהשינוי שביצענו בפונקציה X דורש שינוי גם בפונקציה Y, אבל זה באמת בקטנה. ואז פתאום משהו במודול השני לא מתקמפל. אבל ברגע שמתקנים את השגיאה והכל מתקמפל, לפתע המערכת מסרבת להתאתחל. וכך העסק הולך ומסתבך. וככל שכמות השינויים הולכת וגדלה, כך מתגבר המאבק הפנימי בתוך נפשו פנימה של המפתח. מצד אחד עולה המחשבה האומללה על "אוף, איזה באסה!" ו "איזה בלאגן עשיתי שוב, וזה רק הולך ומחמיר". אך מצד שני ישנה האופטימיות המטופשת הזו, שבסדר אבל הנה עכשיו כל מה שצריך זה רק עוד תיקון אחד והנה הכל… מתרסק לגמרי.
כמובן שבשלב מסוים כבר עוברים את נקודת האל-חזור וגם כשכבר עושים רול-בק לכל השינויים, התוכנה כבר מסרבת לעבוד, וצריך לקרוא לעזרה את התותחים הכבדים שיבואו לעזור להציל את מה שאפשר.
וכך נולד לו ה"תיקון חצות" ההיי-טקי. מי שקצת מתמצא בסידור התפילות היהודי, יודע שישנה תפילה שנקראת "תיקון חצות". תפילה הנאמרת על חורבן בית המקדש בבכי ובדמעות בחצות הליל. אז גם לנו יש תיקון חצות משלנו. זה קורה שנשארים עד אמצע הלילה (כן, לפעמים גם יותר מזה) ובדמעות מבכים את החורבן שעשינו בקוד, ומתקנים. מתקנים ובוכים.
אבל מה שבאמת מדהים בכל הסיפור הזה, שלא רק המפתחים נופלים בפח הזה, אלא גם מנהלי הפיתוח. מאוכלוסיית המפתחים הייתי אומר שזו ההתנהגות הצפויה ואולי אף הרצויה. הרי הם מעולם לא התבגרו, והם תמיד שמחים לשנות את הקוד.
אבל המנהלים? הרי הם אמורים להיות המבוגר האחראי כאן, לא? הרי הם אלו שהמציאו את הפרוסס והפרוצדורות והתהליכים ושאר מרעין בישין שנועדו למנוע כל שינוי במערכת. אז איך זה קורה להם?
אז זהו. התיקון המתגלגל הזה הוא התגשמות מופלאה פרדוקס הערימה, הקובע שגרגר חול אחד או שניים אינם נחשבים ערימה. כמו כן הוספת גרגר חול אחד למצבור גרגרי חול שאינם ערימה, לא הופכת אותם לערימה. ומכאן באינדוקציה פשוטה וקלילה קל מאוד להגיע למסקנה שכל כמות של גרגירי חול היא לא ערימה. כל מה שנותר לעשות הוא להחליף את המילים "גרגר חול" ו "ערימה" ב "עוד תיקון קטן" ו "בלאגן אחד גדול" בהתאמה, והנה לכם התשובה.
כבר כתבתי באחד הפוסטים הישנים שאחד הכלים הבסיסיים ביותר של מנהל מוצלח הוא השמירה על עמימות קונסטרוקטיבית, כלפי ההנהלה הבכירה אבל גם כלפי העובדים, העיקר לשמור על שקט תעשייתי ושכולם יהיו מרוצים, ובעיקר שהמנהל יוכל ללכת הביתה מוקדם. אלא ששמירה על עמימות עלולה להפוך לחרב פיפיות בידי המנהל. גם העובדים יכולים לייצר עמימות אל מול המנהל, ולהסביר בשלל תירוצים (ראו תחילת הפוסט) עד כמה השינוי חסר סיכון, כאשר יותר נכון להגדיר אותו כחסר סיכוי. רק שבמקרה הנ"ל העמימות היא דיסטרוקטיבית. וכך המנהלים התמימים נופלים בפח שהם עצמם טמנו ומאשרים את התיקון הקטנטן שחיש מהר הופך לערימת תיקונים אינסופית והשאר היסטוריה, או יותר נכון – היסטריה.
אז לסיכום, מהנדס יקר, מנהלת חביבה – דעו שכל שינוי, קטן ככל שיהיה תמיד מסתיים בכך שצריך לעשות רק עוד שינוי קטן אחד וזהו.
אה, ולמי שעדיין לא הבין את הכותרת של הפוסט, אפשר לקרוא על "הכל בגלל מסמר קטן"…
והמהנדס החכם אומר: מעולם לא עבדו רבים כל כך, הרבה כל כך, לתקן באג קטן כל כך
מתחת לקו: עוד הערה קטנה, לבעלי השכלת תורנית יותר, כבר אמרו חכמינו: "כל המְשָנֵה, ידו על התחתונה"
הי אודי
קראתי את כל הפוסטים שלך מספר פעמים (ואת חלקם יותר) ואני ממתין לבאים 🙂
בהשוואה לחברות שאני מכיר התאורים מקבילים לחלוטין.
תודה!!
אהבתיאהבתי