מה הקטע של… סקראם? (ת'כלס)

בוודאי שמעתם לא מעט דיבורים על סקראם (Scrum).

  • אם עוד לא התנסתם בסקראם – ייתכן מאוד והדיבורים הללו נשמעים לא-ברורים או מופרכים.
  • אם כבר התנסתם בסקראם – ייתכן ויש פער בין הדיבורים למה שאתם מכירים בפועל.

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

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

רקע
סקראם היא מתודולוגית פיתוח תוכנה המיישמת עקרונות של ייצור רזה (Lean) בעולם התוכנה (מה שנקרא אג'ייל Agile).
אם השמות מבלבלים, אתם יכולים להניח כרגע ש Agile = Lean = Scrum.

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

מתודולוגית סקראם עוסקת ב:

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

סקראם! (בספורט)

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

  • סקראם או שיטות אג'יליות אחרות (XP, Kanban)
  • כל השאר, שנקרא לו בפשט(נ)ות "מפל המים" (Waterfall).

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

במודל מפל המים מניחים שהתוכנה דומה לבניית מבנה מגורים:
  1. יש מגבלות קשיחות על סדר הפעולות (אי אפשר לבנות את הגג לפני היסודות).
  2. טעויות הן יקרות מאוד לתיקון ("העמוד הזה צריך להיות פה?!") אך תכנון מדוקדק ובקרה בביצוע יכולים לצמצמם אותן.
  3. יש חזרה רבה על פעולות ("40 דלתות, 600 חלונות, 40000 מרצפות") – כך שריכוז פעולות מייעל את הביצוע.
במפל המים קודם אוספים דרישות עבור כל המוצר, אח"כ מבצעים תכנון כללי ("ארכיטקטורה") של כל המוצר, אח"כ תכנון פרטני ("Design") של כל חלקי המוצר, אח"כ כותבים את הקוד, מבצעים אינטגרציה, בודקים היטב את כל המערכת, מבצעים תיקונים ומשחררים.
מתודולוגיות גמישות (כלומר Agile / Lean / Scrum) מניחות שבניית תוכנה היא דומה יותר לעיצוב חנות כלבו:
  1. אין לרוב מגבלות קשיחות על סדר הפעולות (אפשר לסדר את מחלקת כלי הבית לפני או אחרי מחלקת ההנעלה).
  2. יש מגוון רחב מאוד של פריטים ("פיצ'רים") – אדם אחד יתקשה לשלוט בכל הפרטים.
  3. תכנון מפורט ונוקשה מראש עלול להחטיא את המטרה. כדאי להתחיל בהדרגה, ללמוד מטעויות ולשפר את ארגון החנות עם הזמן.
  4. ריכוז פעולות יכול לייעל את העבודה, אך בצורה מוגבלת.
כמובן שהנחות אלו, שרבים יסכימו שהן מתארות את עולם התוכנה בצורה טובה יותר, מובילות למסקנות שונות לחלוטין.
כשמישהו בעל ניסיון ב"צורת עבודה רגילה" (קרי "מפל המים") נחשף לסקראם לראשונה, הוא לרוב נוטה לחפש ישר את הסדר המוכר.
אם נדמה לכם שסקראם היא "רק עבודה במחזורים קצרים + שמות תפקידים קצת שונים" – אזי אתם בחברה טובה: רוב האנשים שנחשפים לסקראם לראשונה לא מבינים את מהות הגישה השונה. זה לוקח זמן.
מה המשמעות של סקראם בפועל?
במבט של מי שרגיל ל"מפל המים", ניתן לומר שההבדלים העיקריים בדרך העבודה הסקראמית הם:

  • בסקראם אכן עובדים במחזורים (נקראים ״ספרינטים״) קצרים: שבועיים עד חמישה, כאשר בכל מחזור יש עוד טיפה פונקציונליות עובדת: "הוספת מדף מתנות במחלקת מתוקים" או "שיפור התצוגה של נעלי טיפוס הרים", בהקבלה למטפורת ההכלבו.
    במפל המים המשימות כנראה היו "מדפים (כל הכלבו)", "תאורה (כל הכלבו)" או "תצוגות מבצע (כל הכלבו)". אם הערכות הזמנים היו שגויות, היה יכול להגמר הזמן המתוכנן לביצוע הפרוייקט מבלי שיש מוצרים על המדפים.
  • בניגוד למפל המים בו יש מסמכים מפורטים כמו MRD, PRD ו Functional Spec, בסקראם מחליפים את המסמכים ברשימות מתומצתות (״backlog״) והרבה פגישות / עבודה פנים מול פנים של האנשים המעורבים. התקשורת היא ישירה, תדירה ודינמית – ולא באמצעות ניירת.
    סקראם מגדיר מספר גדול  של ישיבות שיש לקיים, כגון "Daily Stand-up", "Sprint Planning", יש גם "Sprint Sprint Demo", "Retrospective" ועוד.
  • בסקראם יש דגש על השגת יעילות (effectiveness): "כמה פ׳יצרים מועילים נוספו למערכת בפרק-זמן נתון?".
    הדרך היעילה ביותר להשיג זאת היא להפעיל שיטות לזיהוי פ׳יצרים שלא באמת זקוקים להם – ולבטלם. בסה״כ המפתחים יכתבו פחות שורות קוד, אך הם יכתבו יותר שורות קוד שלקוחות באמת משתמשים בהן.
  • סקראם מסירה סמכויות ואחריויות מהמנהלים ומטילה אותם על אנשי הצוות. אין ראש צוות שמרכז את העבודה, המעקב אחריה וההתחייבות ללקוחות. הצוות מנהל את אלה בעזרת תהליך מובנה שאמור לאפשר לצוות לעשות זאת ללא ״דמות מרכזית שלוקחת את הדברים לידיים״
  • הצוותים בסקראם הם "צוותי פ'יצר" בניגוד ל"צוותי רכיב" של מפל-המים.
    במפל המים היו צוותים כגון "צוות בסיס נתונים", "צוות UI" וצוות "לוגיקה" – צוותים הממופים לרכיבי המערכת. אם צוות ה"UI" קורס מעומס – הצוותים האחרים לא מסוגלים לעזור לו – יש להם את ההתמחויות והאחריות שלהם.
  • בסקראם כל צוות אמור להיות מסוגל לבצע "כל משימה". בצוות יש כישורים כגון בסיס נתונים, UI ולוגיקה, QA, תיעוד – כל מה שצריך על מנת לסיים משימה "מקצה לקצה".
    הנוהג הוא להימנע מלקרוא לצוות על שם רכיב במערכת ("צוות DB"), אלא להשתמש בשנות ניטרליים כמו צוותים "1,2,3" או צוותים "אדום, כחול, וירוק".
  • בסוף כל ספרינט, יש פגישה יזומה של "הפקת לקחים" על מנת לאפשר שיפורים בתהליך, שללא תשומת הלב הנוספת, לא היו מתקיימים.
אג'ייל היא לא רק סט של חוקים, כי אם פילוסופיה. פילוסופיה שניתן לקחת מחוץ לעולם התוכנה (משם היא בעצם הגיעה). הנה דוגמאות:
  • דרך חשיבה / עבודה בולטת בסקראם היא Prioritization and Time Boxing. כל פעילות (ישיבה, workshop, משימה) יש לתחום בזמן ולהתחיל מהנושא החשוב ביותר לנושא החשוב פחות. כשהזמן ייגמר, יהיו לנו כמה נושאים חשובים – שסיימנו, וכמה נושאים פחות חשובים – שכנראה נוותר עליהם. זאת במקום הרבה נושאים לא גמורים או השקעת זמן בלתי-נשלטת.
  • בניגוד לשיטת מפל המים, בה משתדלים מאוד לכתוב קוד "פעם אחת, ולא לגעת בו יותר", כשכותבים קוד בסקראם כותבים בדיוק את מה שצריך ולא טיפה יותר. סביר למדי שנחזור לקוד הזה ונבצע בו שינויים / תוספות עוד כמה פעמים. בדיקות-יחידה ו CI הם הכלים שמאפשרים לגישה כזו להיות אפשרית.
הפילוסופיה של מפל המים ("כותבים קוד פעם אחת ולא נוגעים בו יותר") היא גם הגיונית, ושימושית במקרים מסוימים גם בעת עבודה בסקראם. אני בטוח שיישום מפל המים היה שיפור משמעותי על חוסר-השיטה שקדם לה.

הנה סרטון מצחיק (אבל נכון) המסביר מהו תפקידו של ה Scrum Master

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

לסקראם יש גם כמה בעיות:

  • שוק גדול של הסמכות ויועצים – שיש להם אינטרס קודם ל"מתודולוגיית הסקראם" מאשר להצלחת הארגון שלכם.
  • כמה אלמנטים (כמו "צוות שמנהל את עצמו), פשוט לא עובדים היטב / קשים מאוד ליישום. סקראם איננה קהילה דינמית ובמשך השנים אני רואה מעט הצעות חדשות מהותית להתמודדות עם הבעיות. בעוד סקראם חרתה על דגלה את עקרונות ה"למידה ושיפור תמידי", קהילת הסקראם היא דיי מקובעת ושינויים ו"גמישות" באימוץ הסקראם הם לרוב לא-באים-בחשבון. אירוני משהו.
  • סקראם מכילה חוקים רבים, אך משאירה גם שאלות מהותיות פתוחות: כיצד מפתחים אמורים להתמודד עם בעיות שנובעות מ"צוותי פי'צר" או "עבודה ביחידות קטנות". מתודולוגיות אחרות, בעיקר Extreme Programming ו Lean Startup מכסות רבים מהחורים שלא נפתרו ע"י סקראם – ונפוץ למדי למצוא שילוב שלהן בתוך הסקראם.
    "חסידי הסקראם" נוהגים לדקלם ש "Scrum is a Framework" ועל הארגון להשלים בעצמו את החסר. עדיף היה לו היו מספקים פתרונות (אפילו בדמות XP ו LS).
  • סקראם מתאים לאופי מסויים של אנשים. מקובל מאוד לאמץ סקראם במלואו, הכל או לא-כלום. הגדרות תפקיד כגון "סקראם מאסטר" או "Product Owner" הן מוגדרות היטב ואין כמעט דיון על "וריאציות אפשריות" שלהן. ארגון שגייס אנשים ע"פ פרופיל X – יתקשה לרוב לומר לאנשים יום בהיר אחד "עכשיו עושים סקראם, אתם צריכים להיות Y". כשהוא אומר להם את זה (ראיתי את זה קורה) – יש טלטלה ארגונית גדולה.
אמרנו כבר שאם ניישם סקראם, לא נכון לצפות שהתוצאה תהיה "כמו בספרים".
שאלת השאלות היא אם כן:

האם "סקראם ממוצע" עדיף על "מפל-המים ממוצע"?

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

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

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

בואו נביט בחלון החיפוש של כרום גרסה 22. מוצר בן 4 שנים שנמצא בפיתוח אינטנסיבי:

האם זה לא היישום הפשוט ביותר? זה שמתאים לספרינט ראשון של מימוש הפ'יצר?

לא. אפשר להוריד את האינדקס ("1 מתוך 11"). אפשר גם לוותר על הרקע האדום, שמוצג במידה והחיפוש לא מצא כלום. שניהם לא הכרחיים על מנת לסגור את פונקציונליות החיפוש הבסיסית ביותר.
שני אלו יכולים להכלל בדרישה מאוחרת יותר, שתקרה ספרינט מאוחר יותר, גרסה מאוחרת יותר, או אפילו לעולם-לא.
אם הצוות חושש שגם זה יותר מדי- אפשר לחפור ולצמצם עוד: ויתור על הפינות מעוגלות ב UI, לכתוב קוד נאיבי שלא יעיל  מבחינת ביצועים, לוותר על הכפתורים (למעלה / למטה) ולבצע חיפוש עבור ערך ראשון בלבד. כל אלו אולי חשובים ללקוח, אך ניתן לעשות אותם בספרינט הבא. זכרו: מה שאתם רוצים הוא To Nibble [זהירות! וידאו].

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

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

עלינו לקבל בקשות שמנהל המוצר ביקש ולהשתדל לעשות את המינימום שעליו סוכם. אם זה לא יהיה מספיק – אין מה לדאוג: מנהל המוצר יבין זו במהרה (יש תצוגת-יכולות כל כמה שבועות) ויגדיר PBI נוסף להשלמת הפערים.

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

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

שיהיה בהצלחה!

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

[ב] תודה לאנונימי על החידוד.

http://en.wikipedia.org/wiki/Lean_Startup

4 כללים למדידת פשטות של תוכנה

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

אחת ההגדרות שאני אוהב היא של בחור בשם J.B. Rainsberger, הגדרה של ״מבנה פשוט של תוכנה״.

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

ע״פ ריינסברגר (עוד), ישנם ארבעה אלמנטים (עם סדר עדיפויות ברור) המובילים לתוכנה פשוטה:

  1. כל הבדיקות עוברות. 
  2. צמצום כפילויות קוד. 
  3. הקוד מתאר כוונה (clarity). 
  4. צמצום  מספר האלמנטים בקוד למינימום האפשרי  אלמנטים שאינם משרתים את מטרות 1-3.

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

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

הנה דוגמה של קוד \"ללא כפילויות\" שהפריע לי והפכתי לכפול:

אני מסכים, זה לא קוד \"מושלם\", וספריית templating הייתה יכולה להפוך אותו ליפה יותר, אך זו דוגמה אמיתית מהחיים.

הנה הקוד לאחר השינוי:

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

קוד המתאר כוונה
אם מזקקים את הכלל של \"כתיבת קוד המתאר כוונה\", לרוב עיקר העבודה היא מסביב לשמות: שמות של פונקציות או משתנים, או שמות חדשים הנוספים ע\"י פעולות \"extract method\" או \"introduce variable\".

ישנן 4 \"דרגות\" של שם:

  1. שם סתמי
  2. שם נכון
  3. שם מדויק
  4. שם בעל משמעות (\"meaningful\").
עצלנות ולחץ גורמים לנו להיצמד לתחתית הסקאלה (1,2), בעוד הקפדה ומקצועיות דוחפים אותנו לראש הסקאלה (3,4).
מאוד נהניתי, כשקראתי את ריינסברגר, כשהוא מתאר בדיוק רב הרגל שגם אני רכשתי: כאשר אני רואה קוד כפול אני מבצע extract method לשורות הכפולות, גם מבלי להבין לעומק מה המשמעות שלהן. פעולה טכנית גרידא.
אני נותן לפונקציה שנוצרה את השם \"foo\". מבלי לחשוב. תוך כדי עבודה אני מבין מה הפונקציה עושה ומשנה את שמה. לאחר 10 דקות עבודה ייתכן והשם שונה כבר שלוש או ארבע פעמים, אך אני מרגיש בבירור שאלו עליות דרגה ברמה של השם. לעתים פשוט צריך לנסות איזה שם ו\"לחיות\" איתו כמה דקות על מנת למצוא שם מוצלח יותר.
צמצום אלמנטים שאינם משרתים את מטרות 1-3. 
למי שנתקל ברעיונות אג\'יליים – אני מניח שעקרון זה הוא מובן מאליו: Eliminate Waste. עדכון המטרה בעיקרון זה היא להימנע ממרכיבים בקוד שלא משרתים את הפונקציונליות, לא מונעים קוד-כפול ולא מסבירים את התנהגות המערכת, כל מיני \"הכנות למזגן\"[ג].

מי שעובד ב (Test Driven Development (TDD נהנה באופן מובנה מעקרון 1 (\"כל הבדיקות עוברות\") ועקרון 4 (\"צמצום אלמנטים לא-חיוניים\"). זו הדרך המהירה ליצירת קוד פשוט, שגם יישאר פשוט לאורך זמן.
מכאן נותרו רק 2 פעולות לשים לב אליהן:
צמצום כפילויות קוד [ב] ו כתיבת קוד המתאר כוונה / קוד ברור. המשיכו לעשות את אלו בצורה תמידית – והמבנה של הקוד שלכם, או ה \"design\" של הקוד שלכם – יהיה פשוט. זו הדרך היעילה ביותר שאני מכיר.
זה אולי נשמע קצת פשוט מדי: אולי ציפיתם לשימוש במחשבון של Cyclomatic complexity וטכניקות של ספירת Weighted Micro Function Points (ממש כמו ספירת קלוריות). 
צר לי לאכזב אתכם: כמה אנשים טובים השקיעו שנים ביצירת מודלים מתמטיים לתיאור סיבוכיות של תוכנה – אך בפועל כמה עקרונות פשוטים הם אלו שיגרמו לקוד שלכם להיות פשוט יותר, וקל יותר לתחזוקה.

שיהיה בהצלחה!

—-

[א] יש המשתמשים במילה Design על מנת לתאר מצב של תוכנה חיה, ולא רק את התוכניות. לדוגמה: \"Refactoring: Improving the Design of Existing Code\". אם הרעיון הזה ברור לכם – הרגישו חופשיים להשתמש במילה design ולא ב structure.

[ב] אזהרה!: יש המבלבלים בין צמצום כפילות קוד בתוך המערכת, לבין שימוש-חוזר בקוד (code re-usability) או \"צמצום כפילות קוד בעולם האנושי\". בעוד ביטול כפילות-קוד בתוך הקוד שאתם כתבתם הוא כמעט-תמיד דבר טוב, שימוש חוזר בקוד (\"חיצוני\") הוא נושא מורכב עם הרבה ייתרונות וחסרונות. אני מתכנן לעסוק בנושא זה לעומק בפוסט נפרד.

[ג] המטאפורה הזו מטעה! מזגן הוא דבר מוכר שאנו יודעים לצפות לו ולבנות לו הכנה טובה. רוב ה\"הכנות למזגן\" בתוכנה הם ניחושים בעלטה אודות משהו לא-ידוע. בהתאמה: מנסיוני, רובן מתגלות כלא-יעילות או חסרות שימוש.

קאנבאן (Kanban) – תהליך שמתנהל מעצמו

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


"מדוע אנו זקוקים ל*עוד* מתודולוגיה? עדיין לא השתלטנו על סקראם!"

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

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

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

מקורות
המילה קאנבאן היא מילה יפנית שמשמעה ״כרטיס חזותי״. היא משמשת בטויוטה (החברה שהמציאה את האג׳ייל[ב]) לתאר תהליך ניהול המלאי מופלא שקורה מעצמו. את התהליך של טויוטה כותבים בעזרת k קטנה (kanban) בעוד את תהליך התוכנה שמבוסס עליו כותבים בעזרת K גדולה (Kanban).תהליך ניהול המלאי שהיה מקובל במערב נראה בערך כך:

  1. החברה מגדירה ומאיישת תפקיד בשם ״מנהלי מלאי״.
  2. כשהמלאי מגיע לרמה הנמוכה ("מלאי מינימום") מנהל המלאי מבצע הזמנה על מנת למלא את המלאי לרמה הגבוהה (מה שנקרא בטעות "מלאי אופטימום"[ג]). 
  3. "מלאי האופטימום" היא תחזית סטטיסטית, של מנהלי המלאי, על הביקוש העתידי לחלק. 
  4. מנהלי המלאי הם בעלי הבנה קטנה בייצור. ה"חלקים" ומבחינתם אלו יכולים להיות מנועי בואינג 747 או עגבניות. Same Same. 
  5. חלק גדול מהעבודה של מנהלי המלאי מושקע בזיהוי הפריטים והזמנת החלק הנכון. לכל חלק יהיה שם, מספר קטלוגי פנימי, מספר קטלוגי יצרן, פרטים לזיהוי היצרן, תמונות שיסייעו (למנהלי המלאי – האנשים במפעל כבר יודעים) לזהות את החלקים וכו'. אופרציה שלמה. הזמנות מלאי לרוב נעשות באצוות (batch) על מנת "לקבל מחיר טוב יותר ולחסוך כסף במחלקת המלאי".

הגישה המערבית לייעול התהליך היה רכישת תוכנה יקרה עם מיליון אפשרויות (ניהול מלאי הוא עסק מסובך) שתסייע למנהלי המלאי לעבוד מהר יותר ("Send an order by one-click").
גישת ה LEAN, שצמחה מיפן, הייתה לשלוח את כל מנהלי המלאי להיות עובדי ייצור – ולבטל כמעט כליל את תפקיד ניהול המלאי.

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

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

קאנבאן (kanban), שהחל כתהליך של טויוטה, הפך עם השנים לתהליך עולמי:

  • כשאתם מזמינים קפה בסטארבקס – ההזמנה נרשמת על הספל (החד פעמי) ומועברת למטבח. כשיחזור הספל לקופה – ידעו למי לתת אותו. בקשות מיוחדות – פשוט כותבים על הספל.
  • הגן הקיסרי בטוקיו נדרש להגביל את מספר המבקרים בו. הוא מחזיק מספר מתאים של tokens שכל אורח מקבל בכניסה ומוסר ביציאה. התנאי לכניסה לגן היא הימצאותו של token פנוי – אחרת יש להמתין בתור. בקרת עומס שמתרחשת מעצמה.
קאנבאן. מקור:  http://mylesbraithwaite.com/journal/2011/03/new-starbucks-coffee-cup-design/
בטויוטה, קאנבאן משמש לא רק מול ספקים חיצוניים – אלא גם בין צוותים. מי שמרכיב מכוניות זקוק לעוד דלתות – מעביר ארגז ריק כדי לסמן לצוות לפניו שהוא זקוק לדלתות. צוות הדלתות מעביר ארגז ריק של מנגנוני-חלון לצוות שלפניו – וחוזר חלילה. באופן זה העבודה מבוצעת ב"משיכה" (pull) והצורך מהלקוח (הזמנת מכוניות) הוא שמכתיב את הקצב לכל הארגון – ללא "צורך בניהול קצב הייצור".

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

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

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

  • גרמו לתהליך להיות נראה (visible) ע"י פרסום גלוי של מידע-מפתח[ד].
  • הגבילו את מספר הפריטים שבעבודה (Work In Progress = WIP)
  • הגדירו מדדי הצלחה ופרסמו אותם.
  • שפרו, באופן עקבי, את התהליך.

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

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

אם ראיתם פעם את רשימת המטלות של ארגון סאפורט (כלומר Product Backlog), אתם בוודאי יודעים שיכולים להיות עשרות קייסים בטיפולו של כל צוות. אי-ניהול ה Sprint Backlog יכול ליצור מצב לא יעיל בו אנשי-הצוות במקביל על הכל (חוק התיכנותיקה: "ל Context Switch תמיד יש מחיר"). באירגון סאפורט קשה מאוד "להתחיל קייס ולסיים" – מכיוון שיש תלויות חיצוניות.
לשם כך מגדירים בקאנבאן מגבלה בשם Work In Progress. המגבלה מחייבת את הצוות, מצד אחד, לא לעבוד במקביל על יותר ממספר פריטים (כל צוות קובע עם הזמן את ה WIP שלו). מצד שני היא מחייבת את הצוות "לסיים" נושאים ויהי-מה, אחרת כל ה slots של ה WIP יתמלאו – והצוות לא יוכל להמשיך לעבוד.

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

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

למרות שקאנבאן נתפרה לצוות ללא Deliverables – גם צוותי פיתוח יכולים לעשות קאנבאן והיטב. באופן אישי אני מעדיף  לעשות "קאנבאן עם ספרינטים". לקחת את קאנבאן כפי שהוא, ללא תפקידים מיוחדים (Scrum Master) או טקסים (Stand-Up Sit-Down meeting ואחרים), אבל עדיין עם תצוגת התקדמות יזומה בצורת ספרינט רביו: "מה עשינו בשבועיים-שלושה האחרונים".

שיהיה בהצלחה!

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

[ג] רכישה של חלקים שיושבים במחסן במשך זמן ללא שימוש = מינוס בבנק וריביות. הרבה רכיבים כאלו זה בהחלט לא "אופטימום".

[ד] ברוח ה Waterfall האהוב, הצעד הראשון של ארגונים רבים במימוש Scrum או Kanban הוא השגת תוכנה (יקרה) שתעזור לנהל את התהליך בצורה Efficient (= מהירה לכאורה). ניהול הסטטוס של הצוות בתוך תוכנה, כך שצריך לגשת למחשב וללחוץ כמה קליקים על מנת לראות נתון כלשהו, היא הדרך ליצור חוסר-נראות. האאא הרגלים רעים…

כיצד ייתכן?!

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


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

כיצד ייתכן, אם כן, שהאייפוד הראשון תמך רק ב 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.


מה בעצם חשוב ב SCRUM? – אג'ייל על חודם של שני אנשים

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


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

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

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

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

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

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

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

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

דוגמה טובה יכולה להיות מחלקת Security / Performance/ QA שעדיין לא עברה לסקראם. המוצר זקוק לשירותיה על מנת להיות משוחרר, אולם ע"פ לוחות הזמנים שלהם הוקצו מראש שני שבועות בסוף השנה לבצע עבורכם את השירות. לא… אי אפשר להזיז – לוח הזמנים דחוס וקבוע מראש.
איך נשחרר יותר מוקדם? איך נתקדם מספרינט לספרינט ללא פידבק על מצב ההתקדמות? … איך? אולי כדאי לעשות קצת פחות סקראם ולהסתדר איתם?

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

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

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

בשלב הראשון הייתי קצת מאוכזב: הרבה מהתנהגויות ה Agile להן הייתי רגיל לא התקיימו בפועל: לא Visibility, לא Team Empowerment ולא חתירה בלתי-נלאית להפחתת ה waste.

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

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

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

אני רוצה להבהיר: באמת ובתמים ניסיתי להתמודד עם האילוץ הזה ולחיות איתו בשלום. ניסיתי גם לדחות אותו – אך ללא הצלחה. התוצאה הייתה דיי מגעילה ושני המפתחים (אנשים נבונים ודעתניים) התקילו אותי בשאלות קשות על מודל הנתונים שיצרתי – ולא היו לי תשובות ראויות.

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

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

חוויה שנייה שהשפיעה עלי היא פרויקט סקראםכאילו אחר שהשתתפתי בו. החזות הייתה חזות סקראם מצוחצחת: burndown charts, סקראם-מאסטרים בולטים, ישיבות daily כל יום ו Retrospectives הלוך-והשוב.
התבוננות פנימה גילתה אלמנטים רבים למדי של "מפל מיים" מסוגנן": תכנון של חודשים מראש והצמדות לתוכניות "ויהי-מה". בניית תשתיות מורכבות ולא נחוצות. נתק בוטה מהלקוחות או אנשים שיכולים לתת פידבק משמעותי על המוצר ועוד.
להריץ פרויקט סקראםכאילו זה כמו לצבוע רכב מזהם בירוק ולטעון שהוא ידידותי לסביבה [1]. ציני משהו.

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

אומרים שקבלת החלטה אנושית מתבצעת באחת משני אופנים:

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

לדוגמה, האם תושב שדרות יצביע למפלגת מרץ הסמולנית[2] שמציעים לעזור לו בקשיי יומו? או לש"ס/ליכוד כמו "שכולם פה מצביעים. ככה זה בשדרות." ? מרץ יכולה להקים ולנהל מתנ"סים עד אולימפיאדת קנזס-סיטי ב 2058. כל עוד ההגדרה העצמית החזקה היא "תושב שדרות", היא לא תזכה לתוספת קולות משמעותית עקב פעילותה.

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

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

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

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

לא… לא מדובר בהעצמת הצוות גם לא באומץ. לא ישיבות סטאנד-אפ (הבנתם כבר את דעתי עליהן…) ולא נראות (Visibility).

כל אלה טובים ומועילים – אך הם יכולים להיות רק סיבוב שיפורים שני ושלישי. להלן העקרונות המינימליים שיתנו את מירב הערך מסקראם:

  • בניית Backlog תוספתי וממוקד ערך. סיפורים המתארים שכבה אחר שכבה של יכולות המערכת – כאשר כל שכבה מוסיפה משהו שלקוח יהיה מוכן לשלם עליו משהו.
  • עבודה באיטרציות – בהן יש דמו / בדיקה של התוצאה כל פרק זמן קצר.
  • המנעות מ over engineering בפיתוח.

הרציונאל הוא כזה: העיקרון המרכזי ב Lean הוא צמצום הבזבוז ("eliminate waste"). ניסיוני הראה שהחלק הגדול משמעותית של ה waste בתוכנה הוא overproduction – פיצ'רים מגניבים, יפים וטובים – שהלקוח יכול להסתדר בלעדיהם. התבוננו כיצד נראו האתרים המובילים המוכרים לנו בשנת ההשקה שלהם. האם אתם חותרים לאותו מגע מוקדם עם הלקוח גם במחיר מוצר כ"כ מינמליסטי?
אם אתם אומרים "במקרה שלנו אנחנו חייבים מוצר מלוטש" – רוב הסיכויים ש(גם) אתם מטעים את עצמכם.

אני משתמש באייפון שלי ב iTunesU החדש. הייתי רוצה חיפוש טוב יותר, לפלטר החוצה תכני וידאו (אני שומע אודיו בזמן נהיגה  – לראות וידאו בזמן נהיגה זה אפילו יותר מדי בשבילי). הייתי רוצה לראות את שמות הקטעים המלאים: במסך האייפון יש מקום ל …The future of ואז שלוש נקודות. אני מוריד פרקים שאין לי מושג במה הם עוסקים. הייתי רוצה שהתוכנה תתנהג אותו הדבר בחנות וב Palyer – יש אפשרויות ניווט שונות לגמרי. הייתי רוצה אפשרות למחוק פרק אחרי ששמעתי אותו – זה בלתי אפשרי. בחיפוש בחנות אני יכול להתבונן רק ב 100 פריטים בכל קטגוריה וזהו – הייתי רוצה להמשיך ולהתבונן גם מעבר. ועוד ועוד.

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

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

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

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

סיכום
זה מה שאתם צריכים: שני אנשים שיבינו אג'ייל טוב והם יכולים לספק את התמורה הגבוהה ביותר מאג'ייל – בהשקעה קטנה יחסית. המבנה הזה יכול לעבוד עם ראשי צוותים וללא SCRUM Masters, ללא burndown charts, ללא planning של הצוות ועוד.

אתם זקוקים רק לשני אנשים שיהיו במשחק האג'ייל:

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

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

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

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

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

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

אני משאיר את האזכור הזה כנקודת הערכה לאותם אנשים שציינו זאת – אולי אתם תבינו איך זה אמור לעבוד.

בהצלחה!

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

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

[3] למרות שמדדים "מדידים ואובייקטיביים" הם ערך אג'ילי וניהולי ממדרגה ראשונה – רק לעיתים מעטות נתקלתי בפרוייקטים שהיו להם מדדים שכאלה.