ארכיטקטורה: Quality Attributes (חלק א' – מבוא)

יום אחד בעבודה, ראש הקבוצה שלנו החליט שזמן רב מדי לא הייתה ישיבת קבוצה. הוא ריכז ספונטנית את כל חברי הקבוצה, בעמידה, באחד החדרים ומסר כמה עדכונים בנושאים שונים. אחד מהם היה מינויי לארכיטקט "effective immediately".לא הייתי מוכן, לא ציפיתי, ולאחר התרגשות קצרה הדבר הראשון שעשיתי הוא "לפנק" את עצמי ב 3 ספרים מאמזון על ארכיטקטורת תוכנה. כלומר – רציתי לדעת "מה עושים ארכיטקטים?".

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

"באמת ארכיטקטורה זה כ"כ משעמם?" – היה קול אחד שניקר בראשי.
אולי אני לא מבין שומדבר ("you know nothing Jon Snow") – היה קול ספקני שני.

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

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

אחד הכלים הללו נקרא מאפייני איכות (Quality Attributes) – ועליו נדבר בפוסט זה.

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

מה מאפייני-איכות הם לא?

הנה screenshot ממצגת שראיתי, אשר ניסתה להסביר "מהם מאפייני איכות":


המטפורה הזו היא שטותית!

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

לא קיים מוצר ללא מאפייני איכות. לכל היותר קיים מוצר שמאפייני האיכות שלו נקבעו בצורה לא-מודעת.

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

אנסה להסביר מהם מאפייני איכות בעזרת דוגמה: חי-הסוללה של מחשב נייד (Laptop).
על מנת להגיע לחיי סוללה גבוהים של מחשב נייד מנהל המוצר יכול לדרוש "סוללה חזקה במיוחד" שזה סוג של "פ'יצר" – אך זה לא יספיק. על מנת שהמכשיר יחזיק זמן רב ללא טעינה יש להשתמש ברכיבים (מעבד, דיסק) שצורכים מעט חשמל ולעתים קרובות יש תוכנה תומכת (כגון כיבוי משדר ה wi-fi או אפילו מחברי ה USB לאחר זמן ללא שימוש).

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

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

אנו רואים ש"חיי סוללה ארוכים", עבור מחשב נייד, זו איכות רוחבית של המוצר. "מאפיין איכות" (Quality Attribute), בשפה שלנו.

הנה דוגמה לבחירה בין מאפייני איכות שונים:

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

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

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

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

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

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

מצד שני יבואו המפתחים עם שאלות:
אתה רוצה להשקיע 5 ימי פיתוח בהגנה בפני Directory Traversal[ב]? זו כמובן שאלה לא הוגנת – שרוב אנשי המוצר פשוט לא מסוגלים לענות עליה.
"כמה יהיה 'ציון האבטחה' של המערכת שלנו עם ובלי Directory Traversal?" היא שאלת הנגד המעשית של איש המוצר – שהמפתחים מצידם לא יהיו מסוגלים לספק לה תשובה.

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

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

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

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

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

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

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

חילקתי פוסט זה (שהתארך) ל-2 חלקים.
בחלק השני נעסוק בדרך השימוש של מאפייני האיכות בפועל.

בהצלחה!

—-

[א] ישנם מספר גופים שמגדירים הגדרות לגבי ארכיטקטורה והנדסת תוכנה בכלל. SEI (Software Engineering Institute) היא דוגמה לגוף שכזה. לגופים אלו לרוב יש השפעה רבה על ארגוני-ענק ועל האקדמיה, אך נראה שהשפעתם על כלל התעשייה – מעטה.

[ב] סוג של פגיעות מערכת, בהיבט האבטחה.

כיצד ייתכן?!

שייך לסדרה: אג'ייל – מתודולוגיות פיתוח רזות


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

כיצד ייתכן, אם כן, שהאייפוד הראשון תמך רק ב MacOS עם חיבור Firewire?
ושהוא היה כ"כ לא אמין עד שכ 20% המכשירים התקלקלו בטווח שימוש סביר?

כיצד ייתכן שרק ב iOS 4 (אמצע 2010) האייפון קיבל תיקיות לארגון האפליקציות? האם אתם מדמיינים אתכם מפתחים מערכת הפעלה ללא תיקיות?

“If Apple can launch a smartphone without Find or Cut-and-Paste, what can you cut out of your product requirements?” – Sramana Mitra

כך נראה Youtube בשנת 2005. לא, זו לא תקלה – כך באמת הוא נראה.
מקור: http://www.telegraph.co.uk/technology/6125914/How-20-popular-websites-looked-when-they-launched.html

כיצד ייתכן שרק ב 2012 (כלומר החודש) פייסבוק אפשרה לערוך תגובות (קודם הייתה רק כתיבה או מחיקה)? האם סט פעולות ה CRUD הוא לא סט היכולות הבסיסי ביותר הקיים? האם אתם מתכננים אפליקציה ללא יכולת בסיסית זו?

כיצד ייתכן שרק בסוף 2010 Gmail שחררה את הפ'יצר הבא: Context Sensitive Help. עד אותו רגע ה Help תמיד נפתח בדף הראשי, ללא קשר. האם אתם מדמיינים את עצמכם משחררים תיעוד של מוצר שלא מקושר לתוכן?

העיצוב של וויקיפדיה בשנת 2001.
מקור: http://www.telegraph.co.uk/technology/6125914/How-20-popular-websites-looked-when-they-launched.html

אפרופו תיקיות, Gmail אפשרה לארגן הודעות מייל בתיקיות רק ב 2009, שנתיים אחרי ששוחררה לקהל הרחב. אני מופתע כי אני עבדתי על כמה מוצרים שלא הסכמנו לשחרר לפני שהיו תיקיות, תוויות ועוד כמה התחכמויות שהסתבכו וביטלנו ברגע האחרון. כיצד ייתכן שגוגל הצליחה עם Gmail ללא תכונה שאצל כ"כ הרבה מנהלי מוצר / פיתוח יהיה ב "Must-Must Have"?

כיצד ייתכן שהארכיטקטורה של גרופון הייתה דף בבלוג WordPress ציבורי, עם Widget של ThePoint שכולל מקטע AppleScript ששולח קופונים ב PDF? איזה מתכנת היה מוכן לשחרר דבר שכזה? שלא לדבר על איזה ארכיטקט היה מאשר את זה…

כך נראה טוויטר בשנת 2006. האם הייתם משחררים אתר שנראה כך?
מקור: http://www.telegraph.co.uk/technology/6125914/How-20-popular-websites-looked-when-they-launched.html

הנה סיפור מעניין של עוד חברה מוכרת: דרופבוקס. תחילה הם בנו סרטון דמו (ללא מוצר אמיתי מאחוריו) והפיצו אותו. אח"כ הם התחילו שרשור ש Digg שדן במוצר (ייתכן ותדרשו ל login דרך FB לראות את התוכן). היו כאלף תגובות מהן למדו החבר'ה של דרופוקס מה הם בעצם רוצים לבנות.

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

מנכ"ל דרופבוס מדבר על הקמת החברה.
מקור (שווה קריאה): http://www.slideshare.net/gueste94e4c/dropbox-startup-lessons-learned-3836587?from=ss_embed
The lesson of the MVP is that any additional work beyond what was required to start learning is waste, no matter how important it might have seemed at the time.


סיבוכיות: מקבלים את זה בחינם

אני רוצה לדבר על פשטות. פשטות של ארכיטקטורה ומוצר.כמה פשוט וקל לדבר על פשטות:

  • "בואו נעשה את זה פשוט"
  • Keep It Simple, Stupid
  • Less is More
כמה קל!!
אבל מה היא פשטות, ואיך משיגים אותה?
מה שמעון פרס היה אומר?
פשטות דומה ל"שלום עולמי" – אי אפשר להתנגד אליה.האם אתם יכולים לדמיין מישהו מציע בישיבה: "יש לי רעיון – למה שלא נעשה את זה מסובך יותר"? "אני רוצה שהצוות שלי יקח על עצמו משימה לסבך את הקוד"? או סתם "גרום לזה להיות מסובך, טמבל"?

הקונצנזוס החיובי לגבי פשטות – הוא אוניברסלי.

כמו "שלום עולמי", לאף אחד אין באמת מושג אין משיגים אותה.
ובכן, לכל נהג מונית יש בערך 4 דרכים להשיג שלום עולמי "תיק-תק" – אבל הבודדים שכן מנסים להשיג שלום עולמי, מגלים שאין תורה ברורה איך עושים את זה.
…מתי אמרתם שיוצא הספר "World Peace for Dummies"?
ג'ונגל הסיבוכיות
למי שכתב אפליקציית "Hello World" בחייו ברור שזו אפליקציה פשוטה.
מוסיפים לה עוד פונקציה, ועוד פונקציה – והיא עדיין פשוטה. לאחר שאנו יודעים שיש לנו בסיס פשוט, ורצון כן ואמיתי לפשטות (אולי אפילו יש איזה שלט ענק במסדרון שאומר "!Simplicity" – לוודא שלא נאבד את הדרך) – אנו מתקדמים בקצב. פעם הבאה שנרים את הראש, נשים לב שאנחנו בתוך ג'ונגל סבוך – ג'ונגל הסיבוכיות.
עיקרון #1: התבונה היא לא בייצור פשטות, התבונה היא ביציאה מסיבוכיות ברגע שהגענו אליה.
אם אתם מפתחים מערכות תוכנה גדולות מכמה שנות-אדם של פיתוח, כנראה שהסיבוכיות היא בלתי נמנעת. במקום לכעוס / להתאכזב "כיצד הגענו למערכת סבוכה שכזו?" ולהתחיל לאבד תקווה, לחפש מקום עבודה חדש, או להחליט שהכל בגלל "מישהו אחר בצוות" – כדאי לחשוב ולבדוק: "מה, אם היינו מסירים או משנים אותו, היה עושה את המערכת לפשוטה יותר?".
פה יש נקודה שקצת קשה למפתחים, אך יותר קלה למי שנמצא בדרגות גבוהות יותר: הדבר שאתם רוצים לשנות יכול להיות דרישות, עיצוב גרפי, צורת התקנה וכו'. אל תגבילו את הבדיקה רק לקוד שלכם ומה שאתם יכולים לעשות מבלי לערב אף-אחד מחוץ לפיתוח.
אפשר וצריך לאתגר את מנהל המוצר, המעצב הגרפי, או ארכיטקט ה Solution: "הדבר הזה מסבך אותנו, בוא נבדוק ביחד את המשמעות של שינוי". תופתעו – אבל ניתן לשנות הרבה דברים. פעמים רבות ה"החלטה" או ה"דרישה" לעשות משהו מסוים היא שרירותית למדי או לא מגובה בעובדות חזקות, ובדיקה פשוטה יכולה לפתוח לכם אפיקי פעולה שלא הייתם מדמיינים אפילו.
יצא לי באופן אישי להיות מעורב במחיקה של סט יכולות שלם מ Component Model באחת המערכות, לאחר שנוצרה קואליציה דיי גדולה של מפתחים, מתעדים טכניים ואנשי UX שהיא סיבכה להם את החיים. יצא לנו גם להעביר שירות (service) מרכזי ועתיק יומין משרת אחד לשרת אחר – ולצמצם הרבה תקשורת וסנכרון מיותרים. הדברים הללו פישטו את המערכת והסירו נתח משמעותי מהסיבוך [א].

עיקרון #2: החכמה היא להאריך את הדרך אל הג'ונגל, עד כדי כך שאולי אפילו לא להגיע אליו…

אמנם טענתי שלא ניתן להימנע מג'ונגל הסיבוכיות, אבל בהחלט ניתן להגיע אליו הרבה יותר לאט. להימנע ממנו לא הצלחתי, אולי לכם יהיה מזל.
אני רוצה להדגיש כמה עקרונות שיעזרו לכם להאריך את הדרך. מדובר במודעות לכשלי-חשיבה הנפוצים בגופי פיתוח.
"אנחנו מקבלים את זה בחינם", או חוסר ההבחנה בין ממשק public ל published.
נאמר שהיה לכם צורך לבצע חיפוש על שני סוגי אובייקטים במערכת. בגלל שמספר המקרים גדול מ – 1, כתבתם קוד כללי שמבצע חיפוש על n אובייקטים במערכת – הנדסת תוכנה טובה. השלב הבא הוא לומר לכולם (תיעוד, תהליכים או סתם המלצה – תלוי בארגון): יש לנו חיפוש – תשתמשו בו.
אפילו יותר גרוע: תחשפו UI, WebService או Public API שלקוחות יוכלו להשתמש בו: הרי הקוד שם – וכך אתם יכולים בעלות נמוכה להשיג תועלת גבוהה – כלכלה פשוטה, "מקבלים את זה בחינם".
אז זהו – שלא.
משחק שח מנצחים כשמכוונים למטרה – המלך של היריב, לא ע"י אכילת עוד ועוד חיילים. גם ארכיטקטורה של מערכת בונים ע"י כוונה למטרה מסוימת, לא ע"י צבירת נקודות בהוספת עוד ועוד יכולות למערכת.
שאלות הרות גורל (לנושא הפשטות) הן:
  • האם החיפוש של האובייקטים מחזק את מטרות המערכת וייעודה לטווח הארוך? אני מתנצל על הניסוח המתנשא, אך האם חיפוש הוא חלק עקרוני שסביר שהיה מתפתח בכל מקרה? האם הוא סותר עיקרון כלשהו אחר, לדוגמה Real-time או ביזור? אם לא – ייתכן וזה פתרון זמני, שרירותי, שלא תרצו לקבע.
  • האם החיפוש נכון לכל סוגי האובייקטים? האם יש אובייקטים רגישים (מבחינת אבטחה או הכמסה), שמשתנים בתדירות גבוהה, שמשמשים כ Cache או כצעד חישובי?
  • האם אתם רואים צורך לחיפוש "מעבר לפינה"? יש לכם תכניות ממשיות להשתמש בו במקומות אחרים? אולי זהו צורך מאוד נקודתי.
  • האם ברור לכם איך החיפוש צריך להתבצע? אולי זוהי תכונה חדשה ולא בוגרת שכדאי ש"תבשלו בצד" עד שתיצרו בה עוד תלויות.
יש הרבה סיפוק בלספק פיצ'ר חדש.
אבל, אם אתם רוצים מערכת פשוטה שיהיה קל לתחזק לאורך שנים – נסו לצמצם את השימוש בתכונה החדשה למינימום ההכרחי. נסו להיות "קמצנים" ו"שמרנים" בפונקציות של המערכת. האם יש לכם כבר תהליך מסודר בארגון של "מחיקת דרישות"? – מעבר על הדרישות לפני הספרינט – וניסיון לצמצם אותן?תמיד תוכלו להרחיב את המערכת בעוד פונקציונליות, אך ההיפך הוא קשה יותר: Public APIs, ממש כמו יהלומים – הם Forever.

"ריבית דריבית"

אם תכפילו 1.2 חמש פעמים תקבלו יותר מ 2. משהו כמו 2 וחצי. החצי הוא ה"ריבית דריבית".
אם תוסיפו פיצ'ר של חיפוש, ועליו יכולת Customization ועליה יכולת X ועליה יכולת Y – הפיצ'ר הבא (נקרא לו "Z"), יהיה יקר יותר מאשר המקרה בו הייתם נמנעים מלהוסיף את יכולות X ו Y. לעיתים – ההבדל בסיבוכיות המערכת הוא משמעותי למדי.
זכרו את הכלל הבא: העלות של יכולת חדשה n היא זמן הפיתוח של n + זמן התחזוקה של n + זמן גבוה יותר לפיתוח יכולת n+1 וזמן תחזוקה גבוה יותר ליכולת n+1. רקורסיבית (lim: n–>m).
עקרון שהתייחסתי אליו גם בפוסט על היעילות האמיתית שב SCRUM: הדרך הטובה ביותר לפריון גבוה יותר בפיתוח הוא לייצר פחות פ'יצרים – וכמעט תמיד יש מה להוריד. YFAGNI[ב]!

עקרון #3: פשטות לא תוצאה של מתכנן גאון – היא תוצאה של עבודה קשה.

הייתה לי פעם שיחה עם איש UX שאני מאוד מעריך. מדוע ה UI של המערכות שלנו הוא לא "כזה מגניב" – למרות שאנו באמת מנסים ומשקיעים.
"למה שיצא לנו UX מגניב?" – הוא שאל בתמימות.
"כי אתה ממש תותח…?!" – עניתי.
"האא… זה לא עובד ככה…" הוא החל להסביר. הוא הסביר שלא ניתן לקלוע ל UX מצוין בפעם ראשונה, אפילו איש UX מוצלח. הדרך להגיע לשם היא ע"י השקעה באיטרציות:

  1. תכנון ה UX
  2. בדיקת שימושיות (על משתמשים אמיתיים)
  3. הפקת לקחים – ותכנון שיפורים
  4. וחוזר חלילה
רק לאחר איטרציה ועוד איטרציה ועוד איטרציה – ה UX מתחיל להיות באמת אפקטיבי, "זורם", ומהנה. (רעיונות דומים אגב מתכנסים היום תחת התחום שנקרא כיום "LEAN UX", למשל לעשות usability tests מאוד קטנים, אבל כל ספרינט).פשטות בתוכנה – היא דומה. אם ניתן למתכנן הגאון עוד שבוע בחדר המובדד – התוצאה לא תהיה משמעותית. אם נקצה 10% מכל כח הפיתוח כל ספרינט ל Reafactoring ושיפור קוד – התוצאה תהיה משמעותית יותר. האם אין דרכי קיצור? האם אין את המתכנן הגאון שייצור את הפשטות במחי מכחול ב Visio? האם אין את המדינאי שיביא שלום עולמי לו רק יתנו לו איזו שנה אחת בשלטון?

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

—–

[א] הערה טכנית: כמובן ש Unit Tests ואוטומציית רגרסיה היא גיבוי רב-עצמה לביצוע שינויים כאלו בפועל.[ב] ! You Ain't Gonna Need It

פוסט ראשון (הקדמה)

שלום!

שמי ליאור בר-און, ארכיטקט ראשי (Chief Architect) בחברת Next-Insurance. בסופו של יום, אני דיי Hands-On וכותב גם לא מעט קוד.
בעבר הייתי Chief Architect בחברת גטט (לשעבר GetTaxi), תפקיד שהתחיל בבניה של חלקים קריטיים במערכת, ובהמשך הפך לתפקיד יותר \"אדמינסטרטיבי\" (ואז – עזבתי).
תוכנה, ותעשיית התוכנה הם התחומים שמעסיקים אותי גם בצד הטכנולוגי, אך גם בצד העסקי והארגוני – שלא פחות מורכב ולא פחות חשוב (ויש כאלו שיאמרו שאפילו יותר).

יצא לי להתנסות בזוויות שונות ומשונות של עולם פיתוח התוכנה:

  • פיתחתי תוכנה באופן עצמאי לעסקים קטנים, עבדתי בחברת ענק גלובלית (SAP) לאורך שנים, ועכשיו אני עובד בעיקר בסטארט-אפים קטנים.
  • פיתחתי בעולמות טכנולוגיים שונים: Windows Kernel (בחוסר הבנה של העולם), ב .NET, בג\'אווה, בג\'אווהסקריפט, ברובי, וב Go.
  • פיתחתי בצד השרת ובצד הלקוח (Web Client, Desktop and Mobile).
  • עסקתי ב Waterfall אימתני (פרויקט של 3 שנים), ב XP (עם Pair Programming) ועשיתי TDD (לפי הספר). המודל הכי משמעותי, והמועדף עלי ביותר להתמקד בו – הוא Lean Startup.
  • יצא לי להצליח ולהיכשל, יצא לי לעשות בעצמי ולהשפיע על אחרים שיעשו.

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

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

אנא הרגישו חופשי לכתוב לי ל baronlior[at]gmail[dot]com או דרך פרופיל הלינקאין – בכל נושא. אני מקבל בקשות התייעצות שונות, שאני שמח לענות עליהן. בתחילה הרגשתי מאוד מחוייב לתת תשובה יוצאת דופן (מה שקצת הלחיץ אותי) – אבל לאחרונה החלטתי שאתן את הכי טוב שיש לי באותו הרגע, גם אם זה לא ממש המון – ואני חושב שזה גורם לי לתת יותר.
אני לא כ\"כ פשוט לשיתופי-פעולה, וייעוץ (אני עובד במשרה מלאה מאוד – ולא כיועץ), אנא סלחו לי על איחור שהוא לעתים מחריד במענה למיילים, קורה גם שאני עונה לאחר כמה שבועות 😱.

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