מדריך

מודרניזציה של תוכנה ישנה בלי שכתוב מאפס

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

Have a nice dayHave a nice day12 דק' קריאה
מודרניזציה של תוכנה ישנה בלי שכתוב מאפס

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

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

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

למה השכתוב מאפס כל כך מפתה — וכל כך מסוכן

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

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

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

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

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

מה ״מורשת״ באמת אומר (זה לא קשור לגיל)

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

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

אבחנו לפני שאתם נוגעים בכל דבר

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

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

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

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

גישת ה-Strangler: החליפו אותה חלק אחד בכל פעם

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

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

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

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

איך הקצב באמת נראה

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

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

לפעמים אתם בכלל לא צריכים להחליף אותה

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

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

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

מתי שכתוב מלא הוא באמת הבחירה הנכונה

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

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

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

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

החלק שאיש לא מזכיר: זה בעיקר על אנשים

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

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

יש לכם מערכת שכולם כל הזמן מאיימים להחליף?

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

ראו איך אנחנו ניגשים לתוכנה בהתאמה אישית

שאלות נפוצות

האם זול יותר לשכתב תוכנה ישנה או לבצע לה מודרניזציה?
מודרניזציה הדרגתית כמעט תמיד זולה יותר בפועל, כי שכתוב מלא נוטה לחרוג קשות — הוא חייב לבנות מחדש שנים של לוגיקה עסקית לא מתועדת לפני שהוא מספק ערך כלשהו. החלפת המערכת חלק אחר חלק, או פשוט חיבורה ורענונה, נותנת לכם תוצאות בשבועות ומאפשרת לכם להפסיק להוציא כסף ברגע שהכאב נעלם. שכתוב מנצח בעלות רק כשהיסוד כל כך שבור שתיקונו היה עולה יותר מהתחלה מאפס.
מהי גישת ה-Strangler במילים פשוטות?
זו דרך להחליף מערכת ישנה בהדרגה במקום בבת אחת. אתם בונים גרסה מודרנית של חלק כואב אחד, מנתבים אליו רק את העבודה הזו, ומשאירים את כל השאר רץ על המערכת הישנה. כשהחלק הזה יציב, אתם עוברים לבא. עם הזמן המערכת הישנה עושה פחות ופחות, עד שהיא ריקה ואתם יכולים לכבות אותה — בלי שום יום השקה יחיד מפחיד לאורך הדרך.
האם אנחנו יכולים להמשיך להפעיל את העסק בזמן המודרניזציה?
כן — זו כל הנקודה בביצוע הדרגתי. מכיוון שאתם מחליפים חלק קטן אחד בכל פעם ושומרים את המערכת הישנה חיה מתחת, התפעול הרגיל ממשיך לאורך כל הדרך. כל שינוי קטן מספיק כדי לבחון אותו בשימוש אמיתי, ובמידת הצורך, לבטל אותו. אתם לעולם לא מגיעים לרגע שבו העסק תלוי במעבר לא בדוק של הכול-או-כלום.
איך אנחנו יודעים אילו חלקים לבצע מודרניזציה קודם?
דברו עם האנשים שמשתמשים במערכת כל יום וחפשו את הדרכים העוקפות שלהם — הגיליונות הפרטיים, ההעתק-הדבק הידני, ה״את החלק הזה אני פשוט עושה ביד.״ כל דרך עוקפת מסמנת פער אמיתי ויקר. דרגו אותן לפי תדירות הנשיכה, וראש הרשימה הזו הוא היכן שמתחילים. בדרך כלל אלה חופן נקודות ספציפיות, לא כל המערכת.
מתי שכתוב מלא הוא באמת הבחירה הנכונה?
כשהטכנולוגיה הבסיסית מתה או לא נתמכת, כשהעסק השתנה כל כך שהמודל הישן כבר לא מתאים בכלל, או כשהמערכת כל כך מסובכת ששינויים קטנים אפילו שוברים דברים לא קשורים — מה שאומר גם שאין תפרים נקיים להחליפה חלק אחר חלק. כששניים או שלושה מאלה נכונים יחד, בנייה מחדש זהירה והדרגתית הופכת לבחירה הבטוחה יותר. גם אז, אתם שומרים את המערכת הישנה פועלת ומעבירים משתמשים בקבוצות קטנות, לעולם לא בקפיצה אחת גדולה.
Have a nice day
Have a nice day
המערכת

‏Have a nice day הוא סטודיו תוכנה שעוזר לעסקים קטנים ובינוניים לעבור לדיגיטל — אוטומציה, בינה מלאכותית ותוכנה בהתאמה אישית שעובדת בשגרת היום-יום, לא רק על שקפים.

שירותים רלוונטיים