למה הפרמטר הכי חשוב הוא זה שאין לך גישה אליו
למה הפרמטר הכי חשוב הוא זה שאין לך גישה אליו
כשמתכננים מערכת, נוח להתמקד במה שנמצא בידיים שלנו: קוד, קונפיגורציה, פרמטרים, knobs, timeouts.
אבל בפועל, הפרמטר הכי חשוב במערכת הוא דווקא זה שאין לנו דרך לשלוט בו.
הגבול האמיתי נמצא מחוץ לקוד.
מערכת לא רצה בוואקום
היא חיה בתוך מציאות.
היא תלויה ב:
- רשת שלא תמיד יציבה
- לקוחות שמתנהגים בצורה לא צפויה
- תשתית שמשתנה עם עומס, זמן ומיקום
- רכיבים חיצוניים שאינם בשליטתנו
אפשר לכתוב קוד מושלם - ועדיין לקבל התנהגות מפתיעה.
לא בגלל טעות לוגית, אלא בגלל מפגש עם העולם האמיתי.
למה פיתוח ופרודקשן מרגישים כמו עולמות שונים
זו הסיבה שמערכות “נראות טוב” בפיתוח, אבל מתנהגות אחרת לגמרי בפרודקשן.
בסביבה סגורה:
- אין latency אמיתי
- אין עומסי קצה
- אין לקוחות שמנסים הכול בבת אחת
בפרודקשן: הקוד פוגש רשת, זמן, ותזמון.
ושם מתגלים הגבולות האמיתיים.
מה הפרמטרים הבלתי נגישים באמת קובעים
הפרמטרים שאין לך גישה אליהם הם אלה שמכתיבים:
- כמה בקשות יגיעו יחד
- מתי תיווצר השהיה
- ואיך תיראה התנהגות חריגה
אי אפשר לכוונן אותם. אפשר רק להתחשב בהם.
וכאן הרבה מערכות נכשלות: הן מתוכננות כאילו הכול נשלט, וכשהשליטה נעלמת - הן נשברות.
תכנון בוגר מתחיל מהכרה בחוסר שליטה
לא לנסות “לנצח” את המציאות, אלא לעבוד איתה.
זה אומר:
- להניח שהרשת תהיה איטית לפעמים
- להניח שלקוחות יפתיעו
- להניח שתשתית תתנהג אחרת בעומס
- ולהניח שלא כל כשל ניתן לחיזוי מראש
המערכת לא צריכה להיות מושלמת. היא צריכה להיות סובלנית.
המשל
אפשר לכוון מנוע בצורה מושלמת. אבל אי אפשר לשלוט בכביש, במזג האוויר, או בנהגים אחרים.
רכב טוב לא מתוכנן לנסיעה אידיאלית - אלא לנסיעה בעולם אמיתי.
הפרמטר הכי חשוב הוא זה שאין לך דרך לשלוט בו. כי הוא זה שיקבע איך המערכת תתנהג כשדברים לא מסתדרים.
השורה התחתונה
מערכות יציבות לא נמדדות לפי כמה שליטה יש להן - אלא לפי איך הן מתפקדות כשהשליטה נגמרת.