Tuesday, April 18, 2017

שתיים ועוד שלוש הן חמש

Two plus three is five

Source: Every conversation between a parent an a child in four conversations (link in the text)
- אני יכול את זה?
- לא? 
- אולי לא הסברתי את עצמי היטב, ביקשתי כי אני רוצה את זה. 
- למעשה, הבנתי.
- אולי אינך שומע אותי היטב, אני רוצה את זה.
הקטע הזה ממשיך עוד קצת (והרבה יותר מוצלח בלי התרגום החובבני שלי) ואפשר לקרוא את כולו כאן (ומשם גם התמונה בראש. לאחרונה אני נזכר בטקסט הזה לא מעט. 
ואיך כל זה קשור לתוכנה? זה לא סוד שיש לפעמים פערים בתקשורת בין מהנדסים לבין האנשים שמנהלים את הצד העסקי של הדברים - אנשי מכירות, מנהלי מוצר וכדומה. הפערים הללו מתבטאים לרוב בדרישות מורכבות, לוחות זמנים בלתי אפשריים או סתם בקשות חסרות פשר. בערך כמו שקורה למומחה הקווים האדומים (וכן, גם בסרטון הזה אני נזכר לא מעט, באותו הקשר). 
בעבודה, יש לנו פרוייקט חדש. יש לו תאריך סיום שלא אנחנו קובעים, קצת כמו שתעשיית המשחקים לא קובעת מתי בדיוק תגיע עונת החגים. הפרוייקט היה צריך להתחיל לפני הרבה זמן אבל בגלל עומס של דברים דחופים לא פחות, לא באמת התחיל לזוז עד לפני חודשיים-שלושה. במהלך הזמן הזה, הקדשנו המון זמן לישיבות אינסופיות בהן מנהלי המוצר ניסו להבין איך אנחנו יכולים גם לא לאחר בשנה וגם להכניס פנימה את כל התוכן שאנחנו רוצים. תוכניות נכתבו, שעות הושקעו בהערכת מאמצים, מדי פעם נערכו כמה חשבונות בסגנון "אם נשים עשרים אנשים על הפרוייקט, נסיים אותו בתוך תשעה חודשים" (מה שהזכיר לי את הבדיחה על מנהלי פרוייקטים והריונות), מה שהוביל לכל מיני משחקים בהם עובדים חדשים הופיעו יש מאין, משל היינו בתרגיל צבאי ומנהל הפרוייקט הוא השליש שמשלים את מצבת הלוחמים במטה קסם, תוך התעלמות מוחלטת מכך שלוקח לנו לפחות שלושה חודשים לאייש משרה.
בקיצור, למישהו היה כיף, והמישהו הזה לא היה אני. אבל, סוף כל סוף, נגמרו הקשקושים ואפשר לומר שאפשר להתרכז בעבודה ולא בתכנונה. ואז, במסגרת אחת מישיבות העדכון, מנהלת המוצר הודיעה על שינוי כיוון - אחד הספיחים לפרוייקט הזה הוא שיתוף פעולה בינינו לבין חברה אחרת, ושיתוף הפעולה הזה אמור להכניס לא מעט כסף לכל הגורמים המעורבים. כל התוכניות שנעשו עד כה הניחו שאנחנו יכולים לסמוך על כך שסיימנו את עיקר הפרוייקט הראשי ולהשתמש במה שנבנה שם, מה שמיקם את הספיח במרחק יפה על לוח השנה. ובכן, שינוי הכיוון היה כזה - הנהלה החליטו שאנחנו רוצים את הספיח מוקדם ככל שאפשר. רגע, מה? זה אומר שכל העבודה שצריך לעשות לפרוייקט הראשי ונדרשת כדי לתמוך בספיח צריכה להיעשות קודם. כלומר, כל מה שחסכנו הוא חודשיים או שלושה. תגובת מנהלת  המוצר הייתה פשוטה, ומרגיזה להחריד - "זה לא מספיק טוב, אני צריכה תוכנית שתאפשר לנו להעלות את זה לאוויר בתוך חודשיים מהיום". אוקי, אנחנו מכירים את המשחק. בטווח של חודשיים לא רלוונטי לדבר על תוספת משאבים, ואם התאריך נעול, כל מה שנשאר לדבר עליו הוא על התוכן. אבל גם על התוכן אי אפשר לוותר, כי את כל הוויתורים כבר עשינו כשהגדרנו את הפרוייקט הראשי. בכל זאת, בדקנו - "האם את מוכנה לוותר על א'?" "לא". כך גם לב' וג'. בקיצור - איך שלא מסובבים את זה, הבקשה היא לדחוף תשעה חודשים קלנדריים (לא חודשי אדם) לתוך שלושה. התגובה לכל הסבר שמצביע על הפער הזה הייתה "אז תעשו משהו מהיר ומלוכלך" (עד לנקודה בה אחד המפתחים הסביר שאנחנו אמנם יכולים לכתוב את הקוד מלוכלך יותר, אבל יותר מלוכלך ממה שכבר מתוכנן לא יהיה מהיר יותר).
אני יצאתי מתוסכל מאוד מהישיבה הזו, מקטר ביני לבין עצמי שזה לא משנה אם סופרים שתיים ועוד שלוש או שלוש ועוד שתיים, ואפילו לא שתיים ועוד שתיים ועוד אחת - התוצאה תמיד נשארת חמש ולעולם לא תהיה ארבע.

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

-------------------------------------------------------------------------------------
Child: Can I have this?
Me: No.
Child: Ah, perhaps I’ve miscommunicated. I’m asking for it because I want it.
Me: I understood that, actually.
Child: I think maybe you’re not hearing me. I’d like it because I want it.

This quote is from a longer text that goes on (and gets funnier), which you can read here. Lately, I'm reminded quite often of this text. 
And what does it have to do with software, you wonder? Well, it's no secret that there are sometimes gaps between engineers and business people - salespersons, project managers etc. . Those gaps often manifest as complex requirements, impossible timelines of simply senseless requests, as is happening to this poor red lines expert (yes, I'm reminded of this video as well, in the same context). 
We have a new project at work. It has a deadline that we do not set, in the same manner that the gaming industry cannot move holiday season just because the game is a bit more complex to build. Worse - this project should have started quite a while ago, but a load of other urgent tasks didn't actually begin to move until about three months ago. So, what's the first thing to do when you start a project late? Naturally, begin with a month-long estimations and planning phase. Ok, I'm being a bit over-sarcastic here, as the planning was quite important for us to know what we actually need to do, and start having a discussion about what must be released in the first deadline of the project and what can wait a bit, so there was value to it, but it was just so annoying to go through.  During those endless meetings, the product management goal was to understand how can we get all of the content that we need and not miss our scheduled release date in a year or so.at certain times there were some calculations such as "if we'd put 20 people on the project, we could be done in 9 months". This reminded me the joke about project managers and child bearing and then I was reminded of some war-games where dead or injured soldiers are magically replaced by other troops when the discussion started guessing that we could assume we'd recruit three new employees within the next couple of months, ignoring the history (in which finding a suitable candidate usually takes us between 3 and 6 months during which the effectiveness of the employees interviewing drops sharply).
So, to state it simply - someone was having fun, and that someone wasn't me. But, finally, we got to the point where we can shift our time and focus from talking to doing. great. Then, during one of the update meetings the project manager announced a change of direction: One of the side tracks to this project was another sub-project that depended on many of the capabilities in the main project. This  sub project is a collaboration between us and another company, and should produce a nice revenue to all involved parties. So, instead of waiting until the main project is done, now we want to have the sub-project done as quickly as can be, so all of the work that had to be done in the main project and supports the sub project now have to be done separately and all that we would save is probably two or three calendar months. The product manager's response was simple and frustrating: "This isn't good enough, I need a plan that will enable us to go live with this in a couple of months". OK, we know this game - it's the triangle of resources\time\content.  Since it's a schedule of 2 months, adding people is not really an option, and the time is set, so it must be content. However, we already cut content to a minimum when defining the main project. Still, we asked "Are you willing to give up on A?" the answer was "no, we must have A", and the same went for B and C. In short, we were asked to find a way to cram some 9 calendar months into 3. Doesn't really matter how you do the math, it does not work. Any attempt to explain this was met with the response "just do something quick and dirty". This phrase came up so many times in the conversation that one of the developers reacted with "we can do it as dirty as they want it to be, but at the point we are, dirtier won't be quicker".
Personally, I got out of this meeting feeling very frustrated and ranting to myself that two and three is five, as is three and two, and even two and two and one - it does not matter how you count it, it won't stop being five.

But, later that day something interesting happened. After we were done ranting and got used to the fact that this new requirement is the reality - we need to do something in three months, what can we suggest?  - we came up with a solution: it solves only part of the problem, and it depends in our partner's capabilities and goodwill, but we can do it in a single month. We have something management can work with.
This made me think - It's really easy  to rant about how management knows nothing, It's easy to be annoyed with impossible schedules. But the whole purpose of a delivery team is to find solutions to problems. Those won't always be perfect or complete (or on schedule), but they are still good solutions. Sometimes, that little annoying brat who says "I want it!" and won't take no for an answer is what needed to nudge the team to find a solution.

Also, on another note - you people who preach #NoEstimates , how do you cope with projects of this size that have a deadline and you need to know whether or not you should recruit more people? If there's something these last months convinced me it's that I really don't enjoy estimating stuff. I would love to hear of another way of dealing with this problem. 

No comments:

Post a Comment