הטמעת Split.io: דגלי תכונה ובדיקות A/B עם אנליטיקה

השחרור מתעכב, והחזרה אחורה אורכת שעות — ההפצה הופכת לקריסת לילה. אנו מגדירים Feature Flags של Split.io מקצה לקצה: תרשימי דגלים, מדיניות גישה ונוהלי הפצה. זמן החזרה אחורה מתקצר משעות לדקות, והצוות משחרר שינויים בלי לעצור את המוצר.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

Feature Flags של Split.io: היכן נשבר מחזור השחרור

מחזור השחרור נשבר לרוב לא בשלב הבנייה ולא בבדיקות, אלא ברגע שבו פונקציונליות חדשה עולה לפרודקשן כולה — בחבילה אחת. אין מתג בתוך הקוד: כדי לכבות בלוק בעייתי, נדרשת בנייה חדשה, הרצה חוזרת של בדיקות ואישור פריסה. בזמן שזה קורה, חלק מהמשתמשים רואים שגיאה, והצוות לא יכול להפריד בין התנהגות שבורה לזו שעובדת.

חזרה לאחור של שחרור בסכמה כזו נמשכת שעות. כל אירוע הופך לבחירה: לסבול ירידה בביצועים עד הפריסה הבאה או להחזיר לאחור את כל החבילה יחד עם שינויים שכבר עובדים ומביאים תוצאה. המסלול השני יקר יותר — הוא מאפס לא רק את השבור אלא גם את המועיל, והשחזור דורש מעבר מלא חוזר של המחזור.

נקודת הכשל כאן אינה בצד השרת ולא בבנייה, אלא בהיעדר פריסה מנוהלת. Feature Flags של Split.io משנים את הסכמה עצמה: הקוד עולה לפרודקשן כבוי, ומופעל בנפרד — עבור נתח הקהל הנדרש, קבוצת משתמשים או מקטע מסוים. הכיבוי אורך שניות ואינו דורש בנייה חדשה, ולכן הגבול בין «עובד» ל«לא עובד» מפסיק להיות תלוי בשחרור.

אותו מנגנון סוגר לא רק מצבי חירום: הפעלה הדרגתית לפי אחוז תעבורה, פילוח קהל לבדיקות A/B והשוואת מדדים בין וריאנטים עוברים דרך אותו מעגל. נסביר איך זה נסגר בפועל ומה צריך להגדיר מראש בסימון אירועים כדי שהתוצאות יהיו מהימנות.

מה משנה הפעלה מנוהלת של פונקציונליות במחזור השחרור

הפעלה מנוהלת של פונקציונליות מפרידה בין שני אירועים שבדרך כלל מאוחדים לאחד: העלאת הקוד והופעת התנהגות חדשה אצל המשתמש. הקוד עובר לסביבת העבודה, אבל ענף הלוגיקה החדש סגור על ידי מתג — הכלל נשמר בקונפיגורציה של השירות ומשתנה בצד Split.io בלי בנייה מחדש ובלי שחרור חוזר.

לאחר מכן פועלת פריסה מדורגת: נתח הקהל גדל בצעדים — אחוזים בודדים, אחר כך רבע, ואז כל התעבורה — ובכל שלב רואים מה קורה למדדים. פילוח משתמשים מתבצע לא רק לפי נתח, אלא גם לפי מאפיינים: מסלול, אזור, תפקיד בחשבון, גרסת לקוח. אם הלוגיקה החדשה נחלשת בשגיאות או בהמרה, מכבים אותה עבור קבוצה אחת בלי לפגוע בשאר.

זמן ההתאוששות יורד משעות לדקות: חזרה לאחור בחירום היא החלפת כלל, לא שחרור חדש עם הרצת בדיקות והמתנה לחלון פריסה. כיבוי פונקציונליות ללא שחרור מסיר את המתח העיקרי — החלטה שבעבר חיכתה לחלון הקרוב מתקבלת ממש ברגע האירוע.

עבור מחזור השחרור משתנה מחיר הטעות. סיכון השחרור מפסיק להיות הימור על כל התעבורה: השערה כושלת עולה בכמה אחוזי קהל ונסגרת בהחלפה אחת. במקביל, בדיקות A/B מספקות הבדל מדיד בין וריאנטים, ולכן השאלה «לפרוס או לא» נפתרת לפי נתונים, לא לפי דעה.

מצבי פריסה של Feature Flags Split.io: השוואת גישות

מצב הפריסה קובע מי ומתי מקבל התנהגות חדשה וכמה מהר אפשר לכבות אותה. כללים בקוד, קונפיגורציות סביבה וענפי שחרור פותרים את המשימה בלי שירותים חיצוניים, אבל לכל אפשרות יש סוג כשל משלה — מבנייה מחדש מלאה ועד ענפים שהתפצלו. דגלים מנוהלים מעבירים את ההחלטה מהקוד לקונפיגורציה: חזרה לאחור הופכת להחלפה, לא להוצאת גרסה חדשה.

הבחירה תלויה במה שיקר יותר בתחזוקה: מהירות החזרה לאחור, יכולת ביקורת של שינויים או נפח העבודה הידנית.

אפשרות מתי מתאימה מגבלות
תנאים בקוד פריסה חד-פעמית, מעט דגלים, שינויים נדירים להחלפה נדרשת בנייה; ענפי לוגיקה שמיצו את עצמם מצטברים, וכיסוי הבדיקות מתפזר
קונפיגורציות סביבה הבדלים בין סביבות בדיקה, סט פרמטרים יציב הערך משתנה רק יחד עם פריסת הסביבה; אין כללים לפי מקטעים ונתח תעבורה
ענפי שחרור בידוד שינוי גדול בזמן ההכנה ענפים ארוכי-חיים מתפצלים, המיזוג יוצר קונפליקטים, וחזרה לאחור היא בנייה הפוכה
דגלים מנוהלים עם שרת כללים פריסה מדורגת לפי מקטעים ונתחים, חזרה לאחור מיידית, ביקורת שינויים נדרש שרת כללים וספריות לקוח; חובה בעלים ותקופת חיים לכל דגל

שרת כללים כמו Split.io מחזיר את ערך הדגל עם מטמון מקומי: כאשר השירות אינו זמין, האפליקציה ממשיכה לעבוד עם סט הכללים האחרון הידוע. המגבלה כאן אחת והיא ארגונית — בלי מרשם דגלים וניקוי קבוע של תנאים שמיצו את עצמם, סכמה כזו הופכת בעצמה למקור של קשרים נסתרים בין צוותים.

שלבי יישום: מביקורת מחזור השחרור ועד מסירה

סדר העבודה בנוי כך שהשחרורים לא ייעצרו, והצוות יקבל מערכת עובדת, לא אוסף הוראות. כל שלב מסתיים בארטיפקט שאפשר לבדוק לפני המעבר לשלב הבא.

  1. ביקורת מחזור השחרור: בודקים את תדירות הפריסות, אורך הענפים, היכן מצטברים אישורים ואילו שירותים נפרסים יחד. בפלט — מפת צווארי בקבוק ורשימת נקודות שבהן נדרש מתג כיבוי מהיר ללא בנייה מחדש.
  2. תכנון מודל הדגלים: סוגים (שחרור, תפעול, ניסוי), כללי שמות, תקופת חיים ובעלים לכל אחד. המודל נבנה כך שדגל לא ישרוד מעבר למשימה שלשמה נוצר.
  3. הגדרת כללים והרשאות: מקטעים וטירגוט, תפקידים בפאנל Split.io, יומן שינויים, חיבור למערכות אנליטיקה ולצינור הבנייה. הרשאות מחולקות לפי עקרון המינימום הנדרש.
  4. בדיקה בסביבת בדיקות: מריצים הפעלה על נתח קטן, חזרה לאחור, קונפליקט בין שני דגלים ואי-זמינות של שירות הדגלים עצמו. מגדירים מטמון וערכי ברירת מחדל כדי שכשל לא יחסום את האפליקציה.
  5. פריסה מנוהלת: השחרור הראשון עובר לקבוצת פיילוט, לאחר מכן הנתח גדל לפי מדדים והתראות. רק אחרי כן מפעילים בדיקת A/B עם חיבור לאנליטיקה.
  6. מסירה לצוות: תיעוד, נוהל להסרת דגל לאחר פריסה, סשן עם המהנדסים והתמיכה. בהמשך הדגלים מנוהלים על ידי הצוות שלכם, בלי מעורבות שלנו.

סכמות דגלים, מדיניות גישה ונוהלי פריסה

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

  • מפת דגלים לפי שירותים — ייעוד המתג, בעלים, השירותים המושפעים והתלויות ביניהם.
  • מטריצת סביבות — אילו כללים, קהלים וערכים פועלים בפיתוח, בסביבת קדם-פרודקשן ובפרודקשן.
  • מדיניות גישה ותפקידים — מי יוצר דגלים, מי משנה כללי פריסה, מי רואה רק סטטוס; כל הפעולות נרשמות ביומן.
  • נוהל פריסה — הפעלה מדורגת לפי נתח קהל, קריטריונים לעצירת הפריסה וסדר הפעולה של מתג כיבוי בחירום.
  • מחזור חיים של דגל — מיצירה דרך פריסה מלאה ועד הסרה: תקופת חיים, אחראי, סימון «זמני/קבוע».
  • הוראות הסרה וחזרה לאחור — מה נמחק בקוד, בקונפיגורציה ובפלטפורמת ניהול הדגלים עצמה.
  • יומן שינויים — מי, מתי ובאיזו מטרה שינה כללים, ולאיזה תוצאה זה הוביל.
  • תיעוד טכני — תיאור אחיד של סכמת הדגלים, התפקידים והנוהלים במאגר הצוות.

כל ארטיפקט מחובר לשירותים האמיתיים של הלקוח, ולא מולא לפי תבנית, ולכן מתעדכן בהתאם להתפתחות המוצר.

מקרה בוחן: זמן החזרה לאחור הצטמצם משעות לדקות

שירות עם שחרורים תכופים חי עם מאפיין אחד: חזרה לאחור חייבה בנייה מחדש של הארטיפקט, הרצה חוזרת של הצינור ובדיקה ידנית לאחר הפריסה. זמן החזרה למצב תקין נמדד בשעות, ורובו הושקע לא בתיקון עצמו אלא בהליך.

ככל שהשחרורים היו תכופים יותר, כך הטעות עלתה יותר — הצוות החל לאחד שחרורים כדי לעבור פחות פעמים דרך חזרה לאחור, ובמקביל איבד מהירות בבדיקת השערות.

העברנו את ניהול הפונקציונליות החדשה לדגלים ב-Split.io: הפעלה וכיבוי הפכו לפעולת קונפיגורציה, לא בנייה. לכל דגל נוצר מחזור חיים — נוצר יחד עם השינוי, מוצג לנתח קהל, ומוסר לאחר שהמדד התייצב. לדגלים חוברו מדדי מוצר, ולכן ההחלטה «מביאים לכולם או מכבים» מתקבלת לפי מספרים, לא לפי תחושת התורן.

מדדים לפני ואחרי

מדד לפני היישום אחרי
זמן חזרה לאחור שעות של הליכים דקות
תדירות שחרורים 1–2 בשבוע מדי יום, כמה פעמים ביום
חזרה לאחור ללא בנייה מחדש של הארטיפקט בלתי אפשרי מסלול שגרתי
נתח שינויים תחת דגל 0 כל מה שמשנה מסלולים קריטיים

האפקט העיקרי — נעלם סוג שלם של כשלים: «חזרנו לאחור, אבל לא למצב הנכון». בעבר החזרה הובילה לגרסה שכבר הכילה שינויים של אחרים, והתוצאה הייתה תלויה במה שהספיק להיכנס לענף הראשי. עכשיו חזרה לאחור היא כיבוי של דגל מסוים, ושאר השינויים נשארים במקום.

האירוע מאותר לפונקציה אחת, לא לשחרור כולו, ולכן הניתוח אורך דקות ואינו דורש לעצור את הוצאת שאר המשימות.

במה דגלים שונים מענפי שחרור וממתגים ידניים

ענף שחרור עונה על השאלה «מה מוכן ליציאה», דגל — «למי ומתי להציג את זה». הענף חי עד המיזוג, משנה את המערכת כולה ומוחזר לאחור בפריסה חדשה, ואילו כלל הפצה מופעל ל-5% מהקהל ומוסר בלי בנייה והפעלה מחדש.

משתני סביבה ומתגים ידניים בקוד פותרים משימה אחרת: הראשונים מתארים את הסביבה כולה, השניים חיים עד השחרור הבא ולעיתים קרובות אין להם בעלים. אין להם היסטוריית שינויים, פילוח וחזרה לאחור אוטומטית כשגדלות השגיאות.

ההבדל ניכר כשצריך להציג שינוי לחלק מהמשתמשים או לכבות אירוע בתוך שניות: כאן נגמרת הגדרת הסביבות ומתחיל ניהול כללי ההפצה ב-Split.io.

הגירת פתרונות קיימים מתבצעת בלי כתיבה מחדש — מפתחות קונפיגורציה עוטפים בספק דגלים עם ממשק קודם ומעבירים כללים אחד-אחד, תוך קביעת תקופת חיים ואחראי לכל אחד.

ספקות טכניים לפני יישום דגלים

ספקות טכניים לפני יישום נוגעים בדרך כלל לא לכלי עצמו, אלא לאופן שבו הוא ישתלב במחזור השחרורים והתפעול. להלן חמש שאלות שמהנדסים שואלים לרוב.

האם העומס על השירות יגדל עם מאות כללים?

כללים מחושבים בזיכרון התהליך, לא בקריאת רשת בכל בקשה: הלקוח מעדכן את הקונפיגורציה מעת לעת ועובד עם עותק מקומי. גדל רק הגודל שלה — לכן תנאים מצטמצמים למקטעים ולקבוצות לשימוש חוזר במקום כפילויות.

איך יודעים שהגיע הזמן להסיר דגל?

לדגל יש בעלים ותקופת חיים: הוא נוצר עבור שינוי מסוים, ולאחר מיזוג הענף מוסר מהקוד ומהפאנל בשינוי אחד. דוח על דגלים לא פעילים מראה מה כבר אינו מנוהל על ידי איש — מחזור החיים לא הופך למזבלה.

מי יכול לשנות דגלים בפרודקשן?

ההרשאות מחולקות לפי תפקידים: צפייה, הכנת שינוי, פרסום לפרודקשן. הפרסום עובר דרך אישור, כל החלפה נרשמת ביומן, ואפשר להחזיר את הקונפיגורציה למצב הקודם.

אפשר ליישם בהדרגה?

כן: מתחילים משירות אחד ודגל אחד — קודם במצב תצפית, בלי השפעה על משתמשים, ואז מפעילים על נתח קטן של תעבורה. השחרורים ממשיכים במקביל כרגיל.

מה עם מערכת השחרורים שכבר עובדת?

בנייה, בדיקות ואספקת ארטיפקטים נשארות כפי שהן: דגלים לא מחליפים את מחזור השחרורים אלא משלימים אותו — הארטיפקט אחד, וההתנהגות מופעלת לפי סביבה או נתח תעבורה. חזרה לאחור אפשרית בלי בנייה חדשה, באמצעות החלפת קונפיגורציה.

נדון במשימה ונחזור עם תוכנית יישום

כדי שההערכה תהיה עניינית ולא לפי העין, נדרש חתך של התשתית הנוכחית. שלחו את מה שכבר מתואר בתוך הצוות — תיעוד פנימי וסכמות יספיקו כדי לחזור עם תוכנית יישום וקריטריוני קבלה.

  • רשימת שירותים וסביבות שהיישום של דגלי פונקציונליות ב-Split.io יגע בהם: אילו סביבות בדיקה קיימות, במה נבדלות הקונפיגורציות שלהן, והיכן אין עדיין אוטומציה.
  • סכמת השחרורים הנוכחית: איך הקוד מגיע למסלול הייצור, מי מאשר את הפריסה, ובאיזה שלב חוזרים לאחור לרוב.
  • דרישות לתפקידים: מי מפעיל ומוריד דגל, מי צופה באנליטיקת ניסויים, ולמי די בהרשאות צפייה בלבד.
  • סכמת אינטגרציות: מאיפה מגיעים נתונים על התנהגות משתמשים ובאיזה פורמט אתם מצפים לקבל דוחות חזרה.
  • קריטריוני קבלה: מה נחשב בעיניכם לתוצאה — נתח מסלולים תחת דגל, זמן חזרה לאחור מלא, מספר שחרורים בלי בנייה מחדש.
  • מגבלות: הרשאות, דרישות אבטחה, נהלים פנימיים לעיבוד נתונים.

בתגובה נחזור עם הערכה, חלוקת העבודה לשלבים וסכמת שחרורים שתתאים לתהליך שלכם. תארו את המשימה — נסביר ממה להתחיל ומה קריטי לבדוק בשלב הראשון.