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

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

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

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

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

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

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

  • לא לרכוש את השרות כ-SAAS (שימו לב: אני לא מדבר על מחיר). כשספק ענן ציבורי מציע שרות כ-SAAS, אתם יודעים שאותו ספק יהיה קיים ב-3-5 השנים הקרובות ולכן שרותי ענן שונים בתצורת SAAS אין בעיה לשכור אותם, אולם כשחברה בונה לך פתרון ומנגישה לך אותו כ-SAAS, אותה משרד/חברה מכניסה את עצמה למצב של "בת ערובה" אם בהמשך אין הסכמה על מחירים, או אם המשרד/גוף לא מרוצים מהביצועים, לדוגמא.
    אני רוצה לסייג: אם אתם צריכים לרכוש Firewall או כל אפליקציה שכוללת OS לינוקסאי דרך ה-Market של ספק הענן זה בסדר, אבל אם זה משהו שמפותח עבורכם – בקשו שיתקינו את הדברים על התשתית הוירטואלית שלכם, מקומית או בחשבון ענן שלכם.
  • על מה זה רץ? ברוב המקרים כיום הפיתוח של פתרון עבורכם יבוצע תוך שימוש בפלטרפורמה כזו או אחרת. חשוב מאוד לבדוק איזו פלטפורמה ואיזו גירסה, האם יש בה שימוש כיום, האם יש קליפים או עדויות לגבי אותה פלטפורמה? מתי עדכנו אותה לאחרונה? הדבר האחרון שאתם רוצים זה שספק מציע ישתמש במשהו ישן שכבר כמעט מת – בשביל לבנות עבורכם את מה שהנכם מבקשים.
  • חישובי ענן ציבורי. אם השרות שאתם רוצים צריך לרוץ על ספק ענן ציבורי, עדיף שהחברה/גוף המבקש הצעות יבקש הקמה על התשתית בחשבון הענן שלו ועדיף לבדוק היטב מה יש בסעיפי התמיכה. כך לדוגמא, רבים כשעוברים לענן מחפשים לקחת את שרותי התמיכה היקרים ביותר (24/7 פלטינום או כל שם אחר) מבלי להבין שבמקרה ויש תקלה והיא קיימת לא רק בחשבון החברה אלא גם אצל אחרים – לא תקבלו שרות יותר מהיר ותצטרכו לחכות לפתרון התקלה כמו כולם.
  • אם כבר מדברים על חישובי ענן ציבורי: שרותים. ספקי ענן ציבורי מציעים שרותים שונים שהם אבולוציוניים, כלומר – בהתחלה הוצעה שרות בשם X, לאחר זמן מה הוצע שרות Y שהוא בעצם "אבולוציה" של שרות X וכו'. במקרים רבים יש גם הפרשי מחיר ניכרים בין השרותים וגם הבדלי ביצועים רציניים, אך הבעיה היא שמציעים גדולים לא ממש טורחים (לא ממש באשמתם כש-AWS מציעים כמעט כל יום שרותים חדשים) להכיר את השרותים השונים ולכן כדאי לראות מה יש בהצעה ולהחליף בשרותים מודרניים יותר או במקרים מסוימים אם יש את הידע – להקים את הדברים עצמאית בתשתית הענן.
  • גישה לקוד מקור ותיעודו: כיום כשמפתחים לענן ציבורי ומשתמשים בפלטפורמות/ספריות שונות, ברוב המקרים הקוד עצמו פתוח וזמין וכדאי להחיל זאת גם לדברים שמפותחים עבור משרדים/גופים/חברות – המציע הולך לפתח עבורך משהו? דרוש את קוד המקור ותיעוד API ודברים שונים ששונו.
  • אבטחה: תמיד חשוב לזכור – ענן ציבורי נותן אפס אבטחה. אפשר לשכור שרותים שונים ולבצע הגדרות שונות כדי לקבל אבטחה ברמה טובה, אבל זה לא מגיע כברירת מחדל ולא בחינם. כדאי שגוף חיצוני (לא מטעם המציע) יבדוק את המערכת, ואם יש תקציב – לבצע Code Auditing.

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

על שני פרויקטים מוצלחים – ולקחים

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

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

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

  • מיישם הפרויקט – צריך להשתתף בפרויקט עוד בשלבים המוקדמים: במקרים רבים מתבצעת התקשרות עם איש מקצוע להקמת תשתית/פתרון אחרי שנבחרה חומרה שתריץ את הדברים. ההחלטות לגבי החומרה מתקבלות ע"י האיש המקצועי בחברה או שמוגשות המלצות ע"י אנשי השיווק של יצרן החומרה ואז אחד הקודקודים בחברה מחליט אם לרכוש או לא ומה לשנות (פקטור של מחיר וכו'). אני מבין את התהליך, אולם לעיתים יש דברים שניתן לשנות מבלי להרים את תקרת המחיר – שנותנים ביצועים יותר גבוהים או שרידות גבוהה, ולכן כדאי לשכור את האיש מקצוע לפני קבלת ההחלטות לגבי הברזלים.
  • תוכנות בקוד פתוח מסחרי או רגיל: אחת הנקודות שחשוב לתת עליה את הדעת עוד בשלב החישובים הכספיים, היא ההחלטה אם במערכת החדשה יוטמע פתרון מבוסס קוד פתוח חינמי שמורידים מהאינטרנט, או שרוכשים פתרון קוד פתוח עם תמיכה מסחרית מיצרן התוכנה. דוגמאות לכך לא חסר: OpenStack, Ceph, GlusterFS, RHV ועוד ועוד. אפשר כמובן להוריד מהאינטרנט ולהתקין בלי לשלם שקל, אולם מה קורה כאשר המערכת הזו תהיה פרודקשן ויש תקלה באפליקציה המרכזית? במקרים כמו OpenStack או Ceph לדוגמא, כמות האנשים בארץ שיכולים "לחטט" בקוד ולתקן באגים מאוד קטנה וללא תמיכה מסחרית רשמית – מערכת פרודקשן כזו יכולה להיות מושבתת למשך ימים, ולכן אם מדובר במערכת פרודקשן שתיצור הכנסות – מומלץ לבחור בדרך המסחרית. זה יותר יקר מבחינה כספית – אבל זה נותן שקט ומענה לבעיות בטווח הארוך.
  • כמה שפחות תלויות: לא משנה מי הפרילאנסר או החברה שמקימה עבורכם את הפתרון, חשוב לכלול כמות שעות מסויימת שתוקדש לתיעוד והדרכה של הצוות בחברה, ובמיוחד Troubleshooting. אם לדוגמא המערכת מנותקת מהאינטרנט ויש תקלה, הצוות בחברה (בהינתן הידע) יכול לטפל בתקלה הרבה יותר מהר מאשר פתיחת טיקט, המתנה, ולאחר מכן עבודה בשיטה של copy/paste מהטיקט למכונות.
  • חיבור אינטרנט למערכת: לא מעט לקוחות מבקשים להקים מערכת שבמצב פרודקשן תהיה מנותקת לחלוטין מהאינטרנט. זהו דבר מובן ומקובל, אבל עדיין חשוב לבנות חיבור אינטרנט (ישיר או עקיף, ע"י הקמת Proxy או VPN לדוגמא) לעדכונים ותיקונים חשובים. ראיתי לא מעט מקרים בהם אנשים הורידו קבצי RPM וחשבו שהם יוכלו להתקין אותם ישירות בפרודקשן מדיסק און קי, ואז הם ראו דרישה מהמערכת לערימת קבצי RPM נוספים כתלויות. על מנת לאבטח את המערכת, חיבור כזה צריך להיות מופעל ידנית כמובן כך שלא ניתן להיכנס אוטומטית מרחוק.
  • דאגו ל-Gateway: נניח שיש לי 50 שרתים, כולם תחת אותו Class של כתובות (נניח 24/). מטבע הדברים יספיק שרת DNS פנימי פשוט כדי שהמכונות יכולות לשוחח בינן לבין עצמן ואין צורך בשום Gateway, אבל הבעיה מתחילה בכך שאם נניח מכונות 3,8,10,14,30 צריכות עכשיו להתחבר לאינטרנט להוריד דברים מסוימים (ואין Proxy), בלי Gateway זה יהיה בעייתי, ולכן מומלץ שאפילו ה-Switch המקומי ישמש כ-Gateway מקומי.
  • לוח זמנים – בחיים ניתן לשלוט על דברים רבים, אך יש דברים שאין עליהם שליטה. פרויקט אמור להימסר ללקוח בעוד חודשיים אך עדין לא מצאו איש מקצוע בתחום מסוים. יש צורך בהחלפת רכיב מסוים בכל השרתים. יש צורך בשינוי דחוף בארכיטקטורה. הלקוח לא מרוצה מהביצועים – קחו טווח זמן יותר ארוך ממה שאתם חושבים שתצטרכו.

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