כשאין זמן לאלגנטיות
כשאין זמן לאלגנטיות
יש רגעים במערכת חיה שבהם השאלה אינה “מה הפתרון הנכון ביותר?” אלא “מה הדבר שיעבוד עכשיו, בלי לשבור הכול?”
הרגעים האלה אינם נדירים. הם קורים בזמן תקלה, בזמן עומס, בזמן שינוי. ובדיוק שם - אלגנטיות הופכת למותרות.
האשליה: תמיד יש זמן לעשות את זה “יפה”
בהנדסה אנחנו מתחנכים לשאול:
- האם זה נקי?
- האם זה נכון ארכיטקטונית?
- האם זה scalable?
- האם זה future-proof?
אבל במציאות של מערכת רצה, לא תמיד יש זמן לשאול את כל השאלות האלה.
לפעמים:
- משתמשים נפגעים עכשיו
- מערכת מדממת עכשיו
- וההחלטה צריכה להתקבל לפני שיש ודאות
במצבים כאלה, חיפוש אחרי פתרון “יפה” הוא לעיתים הדרך הבטוחה לאיחור.
Trade-offs בזמן אמת
כשאין זמן, הבחירה האמיתית היא בין רע לגרוע - לא בין טוב למושלם.
לדוגמה:
- פתרון פשוט שמייצר חוב ידוע מול פתרון מורכב שעלול להיכשל
- שינוי נקודתי שמפר כלל פנימי מול שינוי רחב שמסכן יציבות
- עקיפה זמנית של מנגנון מול שכתוב שייקח שבועות
אלה לא בחירות נוחות. אבל הן בלתי נמנעות.
הטעות היא לחשוב שאפשר להימנע מהן.
למה פתרונות “מכוערים” שורדים
פתרונות שנראים מכוערים על הנייר שורדים בפרודקשן מסיבה אחת פשוטה:
הם מתיישרים עם המציאות.
הם:
- מצמצמים שטח נזק
- דורשים מעט תיאום
- ועובדים עם מה שיש - לא עם מה שהיינו רוצים שיהיה
לא כי הם אידיאליים, אלא כי הם אפשריים.
חוב טכני מודע מול חוב מקרי
יש הבדל קריטי בין שני סוגי חוב:
חוב טכני מקרי נוצר כשעושים משהו מהר בלי להבין את המחיר. בלי לדעת מה נשבר, ובלי לדעת איך חוזרים אחורה.
חוב טכני מודע נוצר כשעושים פשרה בכוונה. עם הבנה ברורה:
- מה המחיר
- איפה הוא נמצא
- ומתי נצטרך לשלם אותו
בזמן לחץ, המטרה אינה להימנע מחוב - אלא לבחור את החוב הנכון.
השורה התחתונה
במערכת חיה, אלגנטיות אינה תמיד מעלה.
לפעמים, ההנדסה היציבה ביותר היא לדעת מתי לוותר עליה - ולבחור פתרון שעובד, גם אם לא נעים להסתכל עליו.
לא כי זה מה שרצינו לבנות, אלא כי זה מה שהמציאות מאפשרת עכשיו.
מבט קדימה
בפוסט הבא נעסוק בשאלה:
איך עושים Refactoring כשאי אפשר ללחוץ על Pause.