DCSIMG
תשעה עקרונות לארכיטקטורה טובה יותר - הבלוג הפתוח למנהל הפיתוח

הבלוג הפתוח למנהל הפיתוח

מנהל פיתוח תוכנה? זה המקום שלך ללמוד וללמד

על הבלוג

נתקלת פעם באתגרים כמנהל פיתוח? התמודדת עם ניהול אנשים? טיפלת בפרויקטים מורכבים בתחום פיתוח התוכנה? עמדת (פחות או יותר) בלו"ז מאתגר על מנת להביא מערכת לייצור? נדרשת לבחור ארכיטקטורה, כלי פיתוח ו/או סביבת פיתוח? התנסית בהטמעה של מתודולגיות פיתוח מתקדמות כגון Agile ו -SCRUM? התלבטת היכן למקם את צוותי הבדיקות? עמדת באתגרים של התאמת כיוון לאור שינוי בהיבטים העסקיים? אם ענית על אחת מהשאלות הללו בחיוב, ואתה משמש בתפקיד בכיר בעולם פיתוח התוכנה, יש סיכוי טוב שהבלוג הזה יעניין אותך. אנחנו נקדיש זמן ומחשבה לדון בסוגיות אלו ואחרות על בסיס הנסיון האישי שלי, שלכם ושל עמיתינו למקצוע. למה הבלוג הפתוח? כי נסיון של אדם לא מספיק כדי ללמוד ממנו, לכן גם אתם מוזמנים לתרום אם בצורה של תגובות לפוסטים ואם ע"י פוסטים אורחים. מה לגבי ההמשך? כולי תקווה כי בעתיד ניתן יהיה לארוז את תכני הבלוג ותכנים נוספים בתצורה מובנית יותר בצורה של ספר. Follow MosheKaplan on Twitter

תשעה עקרונות לארכיטקטורה טובה יותר

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

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

אז אחרי האזהרות, הגיע הזמן לצלול פנימה

מה הקשר בין תורת האילוצים לארכיטקטורת מערכות תוכנה?
על פי תורת האילוצים מעטפת הביצועים של מערכת נקבעת  על ידיד סט של אילוצים שחוסם אותה לבצע את הדברים טוב יותר. אבל, לא כל האילוצים שווים, ובכל נקודת זמן רק אחד מהאילוצים באמת אפקטיבי וחוסם את המערכת מלהשיג את היעדים שלה. לדוגמה, אם אנשי המכירות שלכם לא יכולים למכור את המערכת לארגונים עם מעל 20,000 משתמשים בגלל בעיית ביצועים במערכת, תצטרכו לטפל בסוגיה זו. בהנחה שלאחר השיפור קיבולת המערכת תעלה ל - 40,000 משתמשים,  יתכן שתגלו שארגונים עם מעל ל - 25,000 משתמשים נדרשים לתמיכה ברגולציה ייחודית. כמובן שבמצב זה תדרשו לתמוך ברגולציה הנ"ל, וכל תוספת נוספת לקיבולת המשתמשים למערכת לא תהיה אפקטיבית ולא תגרום לעליה במכירות.
לכן תכנון הארכיטקטורה שלכם צריך להבנות על האילוצים שלכם. בשלב הראשון המטרה תהיה להביא מוצר עובד לשוק באמצעים מוגבלים על מנת שהוא יעמוד בדרישות ה - POC (רמז, מומלץ להגדיר מה הן מראש). אם ה - POC לא דורש תמיכה מיידית במספר משתמשים גבוה, התמקדות בנושא בתחילת הפיתוח, עשויה לפגוע בהסרת האילוץ הראשון בחיי החברה: עמידה ב - POC וביצוע ולידציה עסקית למוצר.

ובכל זאת?
העולם העסקי והטכנולוגי מאיצים כל הזמן. אם בעבר התרגלנו שזמן החדירה של טכנולוגיה לשוק ארך מספר עשרות שנים (לטלפון לקח כ - 100 שנה לחדור לכל בית בארה"ב), הרי זמן זה מתקצר כל הזמן (לסלולארי זה לקח 20 שנה ולאינטרנט 10 שנים) ומגיע למספרים מאתגרים בשנים האחרונות (שנתיים לפייסבוק ו - 20 מליון משתמשים ל - Google Plus בשבועיים). משמעות תהליכים אלו היא שאנחנו צריכים להתמודד עם הצורך להגיע לשוק מהר יותר, לתקן ולחזור שוב. יתכן שהימור רחוק מדי, יתברר כהימור על טכנולוגיה ו/או פלטפורמה שלא יהיו רלוונטיים יותר בעת ההגעה לשוק.

כמה טיפים מרכזים לארכיטקטורה בריאה יותר:

טיפ 1: שמרו על פשטות
מחבר הנסיך הקטן Antoine de Saint-Exupery ניסח את זה בצורה הטובה ביותר: "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away". לכן אם לוקח לכם יותר מחמש דקות להסביר את הארכיטקטורה שאפיינתם, אז כנראה שאתם צריכים לקחת אותה לסיבוב נוסף על שולחן השרטוטים. רק אחרי שתורידו את כל ההכנות למזגן, תוכלו להרגיש שהוצאתם מתחת לידיכם עבודה מושלמת.

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

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

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

טיפ 3: אולי אתם לא באמת צריכים בסיס נתונים
אחת הטכנולוגיות האהובות ע"י מהנדסי תוכנה היא ORM: Object-relational mapping. טכנולוגיה זו מאפשרת למפות ישירות ובאופן אוטומטי בין מבנה הנתונים בזיכרון (Classes) לבין הדיסק (בד"כ בסיס הנתונים). היכולת כמעט באופן אוטומטי לבצע Persistency לדיסק מאפשרת לחסוך זמן רב בפיתוח ולעיתים אף להפטר מהנטל של ה - DBA. כפי שהבנתם בפסקה הקודמת, הכיוון הזה עלול להיות מסוכן, כיוון שמבנה הטבלאות שלכם בבסיס הנתונים יהיה דומה באופן מחשיד למבנה המחלקות שלכם, וזה כאמור לא בהכרח רעיון חיובי.
אבל, אם המטרה שלכם היא אך ורק לשמור את המידע בדיסק ולשלוף אותו באותה צורה הרי ORM יהיה פתרון מצוין. מצד שני במקרה שכזה שימוש בבסיס נתונים לא יהיה בריא. איך יוצאים מהפלונטר? הבשורה החיובית היא שיתכן שאתם כלל לא צריכים את בסיס הנתונים. במקרה כזה הפתרון הנכון ביותר יהיה לבצע Serialize למידע והפיכתו לקובץ בפורמט JSON לדוגמה ושמירתו על הדיסק. מכיוון ששמירה על הדיסק ישירות היא לא בהכרח סימפטית, פתרון שמירת מידע ממשפחת ה - NoSQL יבוא לעזרתכם. מוצרים אלו שומרים את הנתונים לפי מבנה של Key/Value Store, כאשר ה - Key במקרה זה יכול להיות המפתח המזהה של רשומת המידע, והערך יהיה ה - Serialization של הנתונים.

טיפ 4: בחרו טכנולוגיה
הטכנולוגיה המתאימה ביותר לפיתוח היא הטכנולוגיה שאתם מכירים טוב ושקבוצת הפיתוח שלכם מרגישה איתה בנוח (כמובן בתנאי שאתם לא הולכים לפתח את הפייסבוק החדש ב - PowerBuilder). כל עוד הטכנולוגיה היא סבירה ונמצאת בשימוש ע"י קבוצות מקבילות (בארץ ו/או בחו"ל), סביר מאוד שתצליחו לעמוד ביעדי הפיתוח. בעתיד כאשר תזהו צורך להתייעל בעלויות רישוי התוכנה ו/או להפחית את מספר השרתים תוכלו להתמקד באותם רכיבים במערכת שאחראים למרב העלות (בדיוק על פי עקרונות תורת האילוצים). סביר להניח, שבמקרים כאלו תגלו שאחוז קטן מאוד משורות הקוד אחראי לרב הוצאות המערכת. טיפול נקודתי בקוד זה יאפשר לכם לעשות קפיצת מדרגה. מניסיון העבר, במרב המקרים מדובר על שינוי של פחות מאחוז מקוד המערכת שעשוי לגרום לירידה של למעלה מ - 90% מהעלויות וזמן הריצה.

טיפ 5: התכוננו ל - Scale Out
מערכות התוכנה המודרניות חייבות לתמוך בריבוי משתמשים וריבוי תהליכים. למעשה גם השרת הפשוט ביותר שתקנו היום מכיל בתוכו מספר מעבדים (הקרויים בשם העממי Cores). לכן אם הארכיטקטורה שלכם בנויה על תהליכים שרצים לאורך זמן ארוך בצורה טורית ואי אפשר למקבל אותם, אתם צריכים לבחון ולראות האם אפשר לשנות את התהליך. זאת מכיוון שאורך זמן הריצה של התהליכים יהיה על פי רב ביחס ישר למספר המשתמשים וגודל המידע שמאוחסן במערכת. לכן ככל שהמידע והשימוש במערכת יגדל, התוצאה תהיה התמשכות התהליכים, אי הבאת נתונים בזמן ו/או פגיעה בתהליכים אחרים.

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

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

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

טיפ 8: הפרידו בין Offline ו - Online
אחד המאפיינים החשובים במערכות כיום הינו הצורך לתת זמינות של כמעט 100% לרכיבים שאוספים מידע מהמשתמשים או מגישים אותו (לדוגמה הגשת פרסומות או הצגת עמוד השער באתר חדשות גדול, או ביצוע פעולת החיוב בכרטיס האשראי), לבין תהליכים שאפשר להתפשר על זמינותם (לדוגמה קליטת פרסומות חדשות למערכת, עדכון ידיעות או בדיקת הונאות במקרה של סכומים קטנים). במקרים כאלו רצוי מאוד להפריד את המערכת לשני חלקים:

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

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

טיפ 9: רכשו חיסון כנגד וירוס ה - NIH
מחלת ה - Not Invented Here (או בעברית "המצאת הגלגל מחדש") היא אחת מהמחלות הקשות ביותר שחברת תוכנה יכולה לחלות בה. אם אתם לא מסוגלים להשתמש במוצרי מדף קיימים או בקוד שמצאתם באינטרנט אלא חייבים לשנות הכול ולפתח הכול מאפס, יש סיכוי טוב שתתקשו להגיע ליעד. התסמונת הזאת קטלנית במיוחד במקרים שבהם אנחנו מתעקשים לפתח Cache או בסיסי נתונים ייעודיים. רכיבים אלו הינם רכיבים רגישים מאוד, והיכולת שלנו לייצר אי אחידות במידע או נעילות במקומות לא רצויים יכולה לגרום נזק גדול יותר למערכת מאשר אי השימוש בהם (אלא אם אתם פייסבוק ומחזיקים אלפי שרתי MySQL וצריכים פתרון NoSQL). לכן המלצתי, אם אתם צריכים לעשות שימוש ב - Cache ואחסון מידע, השתמשו בהם כשצריך ועל בסיס מוצרי מדף (לשם הבהרה, גם קוד פתוח זה מוצר מדף).

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

מסכימים? לא מסכימים? יש לכם טיפ מנצח? אשמח אם תשתפו את כולנו

נהנית מהפוסט? רישום לבלוג הפתוח למנהל הפיתוח יבטיח לכם עדכונים חדשים ישירות לדוא"ל!

ממשיכים לפתח,
משה קפלן Follow MosheKaplan on Twitter

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

תוכן התגובה

רן בר-זיק כתב/ה:

פוסט נפלא, נהניתי מאד מאד לקרוא. תודה!

# August 1, 2011 10:37 AM

Moshe Kaplan כתב/ה:

תודה רן!

ממשיכים לפתח,

משה קפלן

# August 1, 2011 10:47 AM

Rotem Bloom כתב/ה:

משה,

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

היה אחלה של סמינר נהנתי מאוד גם להכיר אותך וגם להשתתף.

רותם

# August 3, 2011 2:46 PM

Moshe Kaplan כתב/ה:

שלום רותם,

תודה, ושמחתי להפגש.

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

ממשיכים לפתח,

משה קפלן

# August 3, 2011 5:57 PM

יקיר כתב/ה:

שלום משה,

אני קורא את הבלוג שלך באופן קבוע.

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

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

תמשיך לכתוב!

יקיר

# August 6, 2011 11:25 PM

Moshe Kaplan כתב/ה:

שלום יקיר,

קודם כל תודה!

שווה להקדיש לנושא ניהול פגישות פוסט שלם.

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

ככל שהצוות מפורק/צעיר/מבורבר דמות ראש הצוות הנדרשת היא חזקה יותר ולכן הישיבות צריך מנהל חזק יותר (שיהיה על פי רב ראש הצוות).

ככל שהצוות מגובש/בוגר/הולך לכיוון הנכון ניתן לתת לצוות לנהל את הדיון לבד.

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

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

ממשיכים לפתח,

משה קפלן

# August 6, 2011 11:53 PM

ליאור שיאון כתב/ה:

רן,

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

# August 8, 2011 12:45 PM

Moshe Kaplan כתב/ה:

הי ליאור,

תודה!

אני מניח שהפנית את השאלה לרן בר-זיק. נכון?

ממשיכים לפתח,

משה קפלן

# August 8, 2011 1:25 PM

צבי פאר כתב/ה:

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

כמה נחוץ ברגעים כאילו להתחבר בפשטות ללוג מפורט שמראה בסופו Disk is full  או משהו כזה וכמה מסובך ברגעים כאילו לנסות להתחבר עם debugger  עם כל הלחץ .

לוג צריך להיות מפורט כמה שיותר ,

לדוגמא good practice  זה בכל switch  אם לא משתמשים ב default  לזרוק exception  אם הקוד מגיע ל default  בexception  מאוד רצוי לציין את הערך שבגללו הexception  נזרק .

להודעה כמו:

Failed to connect to web server

רצוי להוסיף את ה url  את ה credentials   של בקשת הפניה את הexception  שקיבלנו האם זה בעיית הרשאות ,time out  

ניתן ברוב בשפות היום לכתוב בפשטות פונקציות util  ששופכות תוכן של object  . ככה שזה לא הרבה עבודה לפרט .

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

כתבת פעם אחת fail to connect to ….  לא צריך עכשיו כל ניסיון נוסף של חיבור לפמפם את הfailed to connect

חשוב שהיה אפשר לפתוח את הלוג גם עם notepad  .

חישבו על Monitoring  על אפשרות לפתוח מסך ניהולי \ דיבאגבילי שמראה את הסטאטוס של המערכת

כמה משתמשים מחוברים עכשיו , כמה exceptions  לוגים קרו .

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

תכננו את כל הטיפול בexceptions  שכל exception  במערכת נתפס ומטופל.

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

הכלים יתריעו על עומס רשת אבל לא על סיבה לוגית למה כפתור שהיה צריך להיות מאופשר באתר חסום .

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

לפי דעתי נושא הlogging  וה monitoring  איננו מתחיל בgood practice  של הcoding   אלא הרבה לפני בשלב הdesign  של המערכת .  

# August 8, 2011 7:22 PM

Moshe Kaplan כתב/ה:

שלום צביקה,

אתה צודק מאוד, וזאת הערה חשובה (ההערה הבאה בוודאי תהיה על נושא אבטחת מידע :-).

הנושא של Monitoring ובניית מערכת חיסונית הוא קריטי למערכת ונדון בו בקרוב במסגרת continuous deployment.

המלצה נוספת, אם יש לכם נטייה לפוצץ את הלוגים, עשו טובה לעצמכם ושימרו אותם בצד בקבצי טקסט ונתחו אותם באמצעות MapReduce (עוד קללה ממשפחת ה - NoSQL).

ממשיכים לפתח,

משה קפלן

# August 8, 2011 10:51 PM

איתי כתב/ה:

משה, תודה רבה, כתוב מעולה כרגיל.

עצה אחת נוספת כדי להגיע לעשר:

REUSE STUFF

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

התירוץ של "נעשה שני webServices מעל IIS, ואת הקליינט ב  C#, ונפנה ל SQL המרכזי בשיטות המקובלות בדיוק כמו שעשינו ב X, Y, ו Z" עובד תמיד. ואולי הוא לא סתם תירוץ אלא אמת, שהרי אין חכם כבעל נסיון, לא?

איתי

# August 25, 2011 1:33 PM

Moshe Kaplan כתב/ה:

שלום איתי,

אתה בהחלט צודק וזה בהחלט מתקשר לטיפים #1 ו - #4 (שמירה על פשטות ובחירת הטכנולוגיה).

ממשיכים לפתח,

משה קפלן

# August 25, 2011 2:06 PM

יוני כתב/ה:

יופי של פוסט! אחד הטובים שלך עד כה ללא ספק.

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

-יוני

# August 26, 2011 5:03 PM

Moshe Kaplan כתב/ה:

תודה יוני!

בהצלחה, ו... ממשיכים לפתח :-)

משה קפלן

# August 26, 2011 6:03 PM

איתי כתב/ה:

הבלוג שלך מאוד חביב עלי, וגם בפוסט הזה יש פנינים.

יש לי הערה אחת:

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

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

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

# August 29, 2011 1:43 PM

Moshe Kaplan כתב/ה:

הי איתי,

קודם כל תודה!

קודם כל גילוי נאות: אני לא מקבל תשלום ממיקרוסופט, ואני כותב ועושה CR בלמעלה מ - 10 שפות שונות (רובן לא מבית מיקרוסופט).

אני מאוד ממליץ לגדל את היכולות של שליטה במספר שפות ולהתאים את המענה שלכם לצורך (רציתי לתת דוגמה שאם אתה מתכנת JavaScript רצוי שתלמד שפה אחרת לפיתוח השרת, אבל אז נזכרתי ב - Node.js :-).

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

לגבי ה - 1% הנוספים שיהיו אחראים ל - 99% מהפעולות במערכת שלכם בכל מקרה תצטרכו לבצע לקוד הנ"ל Refactor יותר מפעם אחת, ובמסגרתו תוכלו להעביר אותו לשפה היעילה ביותר והמתאימה ביותר מבחינת עלויות תוכנה, תפעול, שרתים ואנרגיה.

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

ממשיכים לפתח,

משה קפלן

# August 29, 2011 2:37 PM

איתי כתב/ה:

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

אפשר לפתח פה דיון ארוך, אבל אפשר גם להסכים שלא להסכים... :)

# August 29, 2011 5:54 PM

Moshe Kaplan כתב/ה:

איתי,

הסכמנו :-), יש יותר משמץ של אמת בדבריך,

ממשיכים לפתח,

משה קפלן

# August 29, 2011 6:09 PM

הבלוג הפתוח למנהל הפיתוח כתב/ה:

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

# August 31, 2011 11:54 PM

???????? ?????????? ?????????????? ??????????: 6 ?????????????? ???????????? | Newsgeek כתב/ה:

Pingback from  ???????? ?????????? ?????????????? ??????????: 6 ?????????????? ???????????? | Newsgeek

# September 19, 2011 2:57 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 1 and type the answer here:


Enter the numbers above: