יום שבת, 23 ביוני 2012

אילו בעלי תפקידים יש בחברה ומה עושה כל אחד?

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

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

האיזור שיהיה קרוב ביותר אליכם בארגון


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



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

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

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

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

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

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

Product Manager - PM : מנהל המוצר, כשמו כן הוא, מנהל את המוצר. ובפירוט, הוא בעצם הזרוע המקשרת בארגון בין קב' הפיתוח שאחראית על פיתוח המוצר לבין קב' ה Sales וה Marketing שאחראיות על שיווק ומכירת המוצר. מנהל המוצר צריך להיות תמיד קשוב לצוותי המכירות והשיווק כדי לדעת מהם אילו דרישות מצד לקוחות קיימים או פוטנציאליים - הן הקריטיות ביותר (דרישות לשינויים במוצר כן..?). הוא צריך לנתח כל דרישה ולהבין עד כמה היא תשפיע על המכירות או המוניטין של המוצר. עם הרשימה הזו הוא מגיע אל מנהל ה R&D ומבקש לקבל הערכה עבור כל אחת מהמשימות, כמה זמן יידרש לביצועה. כמובן שמנהל ה R&D בתורו ישאל את מנהל קבוצת התוכנה שישאל את ראשי הצוותים שישאלו את המתכנתים. בסופו של דבר תורכב רשימה של דרישות לפי סדרי עדיפויות הידועה גם בשם Backlog שלפיה יעבדו הצוותים בזמן הקרוב (יכול להיות רבעון ויכול להיות שנה).

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

לארכיטקט יש בדרך כלל הבנה עמוקה מאוד של המוצר, הוא מכיר את כל החלקים השונים במוצר ואיך כל חלק מתקשר עם חלק אחר. כשהוא מנתח דרישה חדשה הוא בודק איזה חלקים במוצר יושפעו בישירות או בעקיפין כתוצאה ממנה. מה השינוי שדרוש בכל חלק, כיצד החלקים השונים יעבדו יחד על מנת שהדרישה תתקיים במוצר (נמשיך את הדוגמה של פייסבוק, איך קוד של אייפון\אנדרויד שאחראי על העלאת תמונה יתקשר עם השרת שצריך לשמור אותה אצלו). הדרך לעשות זאת בדרך כלל היא לכתוב מסמך design, שהוא מסמך word סטנדרטי, שמתאר ב high-level כיצד ניתן לעשות זאת. המתכנת שיקבל את המשימה של כתיבת הקוד, יוכל לעיין במסמך ולהבין מה בדיוק עליו לעשות.

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

Chief Technology Officer - CTO: זהו התפקיד בעל הדרגה הבכירה ביותר מבין אלו שתיארתי כאן אבל הוא לא בהכרח מנהל אף אחד מבעלי התפקידים האחרים שראינו. ה CTO כפוף בדרך כלל למנכ"ל החברה ותפקידו העיקרי הוא לנתח ולהבין את "התמונה הגדולה" ואת עתידה של החברה מבחינת טכנולוגית בטווח הארוך, כלומר כמה שנים קדימה. לCTO יש  רקע טכנולוגי חזק מאוד בתחום הטכנולוגי שבו נמצאת החברה. הוא הולך לכנסים, יוצר קשרים בתעשייה עם חברות שעושות מוצרים מקבילים או משלימים ודואג שמבחינה טכנולוגית החברה תישאר רלבנטית ותצמח ככל שניתן בראייה לטווח הארוך. ה CTO בהחלט נמצא בקשר עם מנהל ה R&D כאשר יש לו רעיונות חדשים להטמיע במוצר והוא רוצה לקבל חוות דעת מעשית בנוגע לכך.


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