האצת אספקת תוכנה באמצעות Golden Paths ו-Policy as Code
By Mirko Peters ·
ברוכים השבים לעוד העמקה במציאות של הנדסת תוכנה מודרנית. אם האזנתם לפודקאסט שלנו, אתם יודעים שאנחנו מדברים לעתים קרובות על ה-f…
Automatically translated with AI from the original post. Read the English original

ברוכים השבים להצלילה נוספת לעומק המציאות של הנדסת תוכנה מודרנית. אם האזנתם לפודקאסט שלנו, אתם יודעים שאנחנו דנים לא מעט בחיכוך שמפתחים חווים מדי יום. בפוסט הבלוג הזה אנחנו מרחיבים שיחה חשובה מהפרק האחרון שלנו. נבחן מדוע אספקת תוכנה מודרנית מרגישה לעיתים כבדה ומסובכת יותר משצריך, והחשוב מכך, איך ארגוני הנדסה פורצי דרך פותרים את המשבר הזה באמצעות Golden Paths וממשל אוטומטי. אם עוד לא האזנתם, כדאי להאזין לפרק המכונן ב-The DevOps Tax: Why Your Platform is Failing כדי לקבל את הפירוט המלא.
כשארגונים עוברים לראשונה לארכיטקטורות ענן מודרניות, הם מאמצים לעיתים קרובות מודל DevOps טהור ומלא אופטימיות. ההבטחה הייתה פשוטה ומהפכנית: לתת לצוותים קטנים ורב-תחומיים את האחריות על התוכנה מהרעיון ועד הייצור. הסיסמה "אתם בונים, אתם מפעילים" נועדה לבטל העברות בין ארגונים, להאיץ קצב שחרורים וליצור רמות גבוהות מאוד של אחריותיות. אולם ככל שחברות גדלות ומערכות הענן מתבגרות, מס שקט וממאיר מתחיל לכרסם במהירות ההנדסה. אנחנו מכנים את התופעה הזאת "מס ה-DevOps", והוא מייצג את הדליפה העצומה של פרודוקטיביות שמתרחשת כאשר מהנדסי תוכנה מיומנים מבלים את ימיהם בהתמודדות עם תשתיות במקום בבניית פיצ'רים עסקיים.
מבוא למס ה-DevOps ולעומס הקוגניטיבי בהנדסה
כדי להבין באמת מדוע צינורות אספקה מאטים בסביבות ארגוניות, עלינו קודם כול לבדוק מה צורך את זמנם ואת תשומת הלב של המפתחים. הנדסת תוכנה מודרנית כבר אינה רק כתיבת לוגיקה עסקית, תכנון מודלים יחסיים או יצירת ממשקי משתמש מרשימים. כיום מצופה מהמפתחים להבין מערך עצום של מושגים במערכות מבוזרות. עליהם להגדיר קונטיינרים, לשלוט בתזמור Kubernetes, לנהל רשתות ענן, ליישם בקרת גישה מבוססת תפקידים (RBAC), להקים תשתיות ענן באמצעות קוד, להגדיר צינורות מורכבים של אינטגרציה רציפה ופריסה רציפה, להקים מערכי תצפיתיות, לבצע מעקב מבוזר, להבטיח עמידה בדרישות אבטחה, לייעל עלויות ענן ולתכנן התאוששות מאסון.
אף אחת מהמשימות התשתיתיות האלה אינה מתורגמת ישירות לערך עבור הלקוח. משתמש אינו נכנס ליישום ומשבח את הארגון על הגדרות ה-Custom Resource Definitions של Kubernetes שלו. ובכל זאת, העבודה התפעולית הזאת צורכת חלק מדהים מהקיבולת ההנדסית. מחקרים ותצפיות בענף מצביעים על כך שעד שבעים וארבעה אחוזים מקיבולת המפתחים עלולים להיבלע בעבודה תשתיתית חוזרת ומייגעת (toil). כך נוצר משבר עומס קוגניטיבי חמור. מפתחים נדרשים להחזיק בראשם עשרות מושגי תשתית שונים עוד לפני שהם יכולים לפרוס מיקרו-שירות בסיסי. ההחלפה המתמדת של הקשר מובילה ישירות לשחיקה של המפתחים, ללוחות זמנים לא יציבים בשחרורים ובסופו של דבר להחזר הרבה יותר נמוך על ההשקעה בהנדסה.
מדוע DevOps מסורתי מתפרק בקנה מידה ארגוני
מדוע מודל שעבד כל כך טוב בסטארטאפ של עשרה אנשים נכשל באופן קטastrophic כשהוא הוחל על ארגון של אלף עובדים? התשובה טמונה בטבען המצטבר של הבחירה ובהתפשטות הארגונית. בצוות קטן, כולם חולקים את אותו מודל מנטלי של המערכת. החלטות תשתית מתקבלות במשותף, התיעוד משותף באופן אורגני דרך שיחות, ולולאות המשוב הדוקות מאוד.
עם זאת, בקנה מידה ארגוני, צוותים אוטונומיים מתחילים באופן טבעי להתפצל לכיוונים שונים. ללא מסגרות בקרה מרכזיות ופלטפורמות פנימיות סטנדרטיות, צוות A מאמץ פלטפורמת CI/CD אחת, בעוד שצוות B בוחר בפלטפורמה אחרת. צוות C מיישם ניטור באמצעות Prometheus ו-Grafana, וצוות D משתמש בכלי observability מבוסס SaaS שונה לגמרי. כל צוות מקבל החלטות שנראות הגיוניות ויעילות כשמסתכלים עליהן בנפרד. יחד עם זאת, הן יוצרות מבוך של מורכבות ארגונית. התיעוד מתפצל בין וויקיים שונים, הידע המקצועי נשאר כלוא בראשיהם של מהנדסים בכירים, והכשרת עובדים חדשים נמשכת חודשים במקום ימים. הארגונים מפסיקים לבנות תוכנה, ובמקום זאת הם מוצאים את עצמם מנהלים כאוס תפעולי.
הבנת המנגנונים של Golden Paths
כדי להציל צוותי הנדסה מהביצה הזו של מורכבות, ארגוני טכנולוגיה מתקדמים פונים ל-Platform Engineering, ובפרט לרעיון של Golden Paths. Golden Path הוא תהליך עבודה מובנה, מוכן מראש וסטנדרטי, שמלווה מפתחים בתרחישי ההנדסה הנפוצים ביותר, מהרגע היצירה ועד לייצור. במקום לאלץ כל צוות לתכנן מאפס את צינורות הפריסה, כלי סריקת האבטחה ותצורות הלוגים שלו, Golden Path מספק מסלול אחד, מאומת בשטח ומאוצר בקפידה.
והעיקר: Golden Path מתוכנן היטב פותר כשמונים אחוז מתרחישי הפריסה הנפוצים כבר מהקופסה. כשמפתח רוצה להקים שירות חדש, אין צורך להגדיר ידנית כללי רשת, ניהול סודות או אסטרטגיות פריסה. הוא נכנס לפורטל המפתחים הפנימי, בוחר בתבנית השירות הסטנדרטית, והפלטפורמה מקימה הכול אוטומטית לפי השיטות המומלצות של הארגון. המפתחים צריכים רק להתאים את קוד הלוגיקה העסקית של האפליקציה. אם מתעורר מקרה חריג שנמצא מחוץ לשמונים האחוזים הסטנדרטיים, המערכת לא קורסת. במקום זאת, היא מפעילה תהליך עבודה משותף עם צוות הפלטפורמה. הגישה הזו שומרת על האוטונומיה של המפתחים, מבטלת עבודה חוזרת ומייגעת, ומפחיתה בצורה דרמטית את מספר מושגי התשתית הנדרשים כדי לשחרר תוכנה.
שינוי הממשל באמצעות Infrastructure as Code ו-Policy as Code
אוטומציה של תהליכי עבודה היא רק חצי מהקרב. הארגונים חייבים גם לשמור על תקני אבטחה, ציות וארכיטקטורה הדוקים, מבלי לחנוק את קצב העבודה. באופן היסטורי, הממשל נשען על סקירות ידניות, שערי אבטחה ותהליכי אישור ארוכים שמנוהלים בגיליונות אלקטרוניים, במסמכי PDF או בתורי קריאות שירות. המנגנונים הידניים האלה יוצרים צווארי בקבוק עצומים, שבהם הקוד ממתין לבדיקה אנושית, וזה מכרסם לחלוטין בגמישות שהמחשוב בענן היה אמור לספק.
Platform Engineering פותר את הבעיה הזו על ידי הזזת הממשל שמאלה, באמצעות Infrastructure as Code (IaC) ו-Policy as Code. Infrastructure as Code הופך את ניהול התשתית מלחיצה ידנית בפורטל לתוכנה שנשלטת בגרסאות וניתנת לבדיקה. כל שינוי בטופולוגיית הרשת, באשכולות המחשוב או בדליי האחסון נרשם במאגרי git, עובר סקירת עמיתים ומופעל דרך צינורות אוטומטיים. כך מובטחת יכולת שחזור מלאה ושמירה על שביל ביקורת נקי ומדויק.
Policy as Code לוקח את השינוי הזה צעד נוסף. במקום להסתיר כללי ציות במסמכים סטטיים שמפתחים כמעט לא קוראים, מדיניות האבטחה והציות נכתבת כקוד הניתן להרצה, באמצעות מסגרות כמו OPA או כלי אימות דומים. הארגונים יכולים לאכוף באופן אוטומטי דרישות הצפנה במנוחה, כללי חלוקה מחמירים לרשתות, מדיניות גיבוי חובה וסטנדרטים לתיוג משאבים. כשמפתחים מגישים את ה-Infrastructure as Code שלהם, מנועי מדיניות אוטומטיים בודקים את התצורה מול מסגרת הבקרה הזו באופן מיידי. הציות מפסיק להיות סקירה ידנית כואבת שנעשית בדיעבד, והופך לרשת ביטחון אוטומטית ובלתי מורגשת.
האצת האספקה והשבת הפרודוקטיביות למפתחים
ההתכנסות של Platform Engineering, נתיבי Golden Paths מוגדרים מראש, Infrastructure as Code ו-Policy as Code מייצגת בגרות של ממש בתהליכי פיתוח התוכנה המודרניים. כשמרכזים את מומחיות התשתיות בצוות מוצר פלטפורמה ייעודי, ניתן לשחרר את מפתחי המוצר מהמשקל הכבד של ה-DevOps Tax. במקום לבזבז ימים על הגדרת מניפסטים של Kubernetes או להיאבק בהרשאות רשת בענן, המפתחים יכולים להתמקד לגמרי בפתרון בעיות עסקיות ובאספקת תכונות שמשמחות את הלקוחות.
כשהממשל מוטמע ישירות בתהליכי העבודה האוטומטיים, לצוותי האבטחה יש ביטחון חסר precedent שקווי הבסיס של הציות נשמרים בכל מאגר, בלי שהם צריכים לשמש כשומרי סף. התוצאה היא סביבה שבה התוכנה זורמת בחלקות מהקומיט ועד הייצור, שביעות הרצון של המפתחים מזנקת, זמני ההטמעה מתקצרים באופן דרמטי, והארגונים סוף־סוף יכולים להגדיל את יכולת ההנדסה שלהם בצורה אפקטיבית.
כדי להעמיק בנושאים האלה ולשמוע דוגמאות מהחיים האמיתיים על האופן שבו platform engineering משנה את הדינמיקה הארגונית, כדאי מאוד להאזין לדיון המלא בפודקאסט. אפשר להאזין לפרק ישירות ולקרוא את הערות ההפקה המלאות בכתובת The DevOps Tax: Why Your Platform is Failing. אימצו את כוחן של פלטפורמות, פנו מקום לרעש המנטלי, והתחילו להאיץ את צינור האספקה שלכם כבר היום!