مهندسی نرم‌افزار در گوگل؛ فصل پنجم: چگونه یک تیم را راهبری کنیم؟

در این مقاله خلاصه‌ای از فصل پنج کتاب «مهندسی نرم‌افزار در گوگل» را مرور می‌کنیم. فصل «چگونه یک تیم را راهبری کنیم»، در مواردی به بخش‌های قبلی ارجاع داده شده، در این خلاصه سعی کردم موارد مهم این کتاب را بیان کنم. این خلاصه در به سه بخش زیر تقسیم می‌شود. ۱- تفاوت‌ها و مسئولیت‌های مدیر تیم و راهبر فنی تیم۲- ضد الگوها (الگوهای نامناسب) در مدیریت تیم۳- الگوهای مثبت در مدیریت تیمهیچ تیمی بدون یک راهبر نمی‌تواند عملکرد خوبی داشته باشد، که تولید نرم‌افزار و مهندسی هم یک کار تیمی هست از این قاعده مستثنی نیست. به طور کلی دو نقش مدیریتی در تیم‌ها نظر گرفته می‌شود، مدیر (Manager) تیم، که رهبری افراد تیم را بر عهده دارد و راهبر فنی (Tech Lead) تیم که مسئولیت فنی تیم را برعهده دارد. هرچند این دو نقش از نظر مهارت‌های برنامه‌ریزی (Planning) شباهت‌های زیادی دارند، اما مهارت‌های مدیریتی متفاوتی نیاز دارند. مدیر مهندسی (Engineering Manager): در خیلی از شرکت‌ها از افرادی که دانش نرم‌افزاری ندارند یا دانش کمی دارند برای عنوان مدیریت انسانی (Human management) تیم استفاده می‌شود، اما در گوگل معمولاً مدیران انسانی تیم‌ها افرادی هستند که در گذشته تجربه‌ی کار نرم‌افزاری داشته‌اند. به طور کلی یک مدیر مهندسی مسئولیت نظارت، مدیریت عملکرد و کارآیی تیم و خوشحالی اعضای تیم (شامل راهبر فنی) را دارد. همیشه نیازهای افراد تیم با نیازهای محصول در یک راستا نیستند، مدیر تیم مسئولیت مدیریت این تضادها را هم برعهده دارد. راهبر فنی تیم (Tech Lead): مسئولیت جنبه‌های فنی تیم مانند تصمیم‌های فنی، معماری، اولویت‌ها، سرعت تیم و مدیریت پروژه‌ها را برعهده دارد. (در تیم‌های بزرگ‌تر مدیر پروژه (Program manager) می‌تواند وجود داشته باشد و در این زمینه به راهبر فنی تیم کمک کند). راهبر فنی تیم با مدیر مهندسی تیم باید با همکاری بالایی با یکدیگر کار کنند. راهبرهای فنی، معمولاً در گذشته به صورت فردی در تیم همکاری می‌کردند و یکی از چالش‌های راهبر فنی انتخاب بین این که خودش کاری را با سرعت بالا انجام دهد یا این کار را به افراد تیم واگذار کند هرچند سرعت انجام آن پایین‌تر باشد. معمولاً انتخاب دوم انتخاب درست‌تری خواهد بود. مدیر و راهبر فنی تیم (Tech Lead Manager):در تیم‌های کوچک معمولاً یک نفر مسئولیت مدیریت انسانی تیم و راهبری فنی تیم را برعهده دارد. در گوگل در تیم‌هایی که به بلوغ رسیده‌اند برای این دو نقش دو فرد متفاوت مشخص می‌شود. این دو نقش نقش‌هایی تخصصی هستند که به طور همزمان انجام دادن آن‌ها چالش‌های زیادی از جمله برقرار تعادل بین کار فردی، واگذاری کار به افراد و مدیریت انسانی تیم خواهد داشت. خیلی از افراد تمایلی به مدیر شدن در یک تیم را ندارند که این دلایل متفاوتی می‌تواند داشته باشد. یکی از چالش‌هایی که برای مدیران تیم‌ها وجود دارد، مشاهده‌ی خروجی کار است. کسی که بیشتر زمان کاری خود را به کد زدن می‌گذرانده وقتی به عنوان یک مدیر فعالیت خود را شروع می‌کند، با وجود این که روز شلوغی داشته، پایان روز خروجی قابل لمسی (مثل کد) برای کار خود نمی‌بیند. محاسبه میزان کار مدیریتی انجام شده خیلی سخت‌تر از محاسبه‌ی تعداد خط کد یا تعداد فیچر پیاده‌سازی شده است. میزان خروجی کار یک مدیر، با سرعت و کیفیت کارهای کل تیم بهتر است سنجیده شود، همچنین این مورد هم باید در نظر گرفته شود که خیلی از کارهای مدیریتی اثری بلندمدت دارد و در کوتاه‌مدت قابل مشاهده نخواهد بود. اصل پیتر: کارمندان در مسیر پیشرفت، تمایل دارند ارتقا پیدا کنند، در مسیر این ارتقا به موقعیتی می‌رسند که در آن کفایت لازم را ندارند. خیلی از افراد به خاطر مشاهده‌ی افراد توانمندی که پس از ارتقا به مدیریت یک تیم کیفیت کار مناسبی نداشته‌اند از مدیر شدن خوددادری می‌کنند. در شرکت گوگل برای جلوگیری از این مشکل، افراد در صورتی که در یک بازه‌ی زمانی مشخصی فراتر از انتظار موقعیت خود فعالیت کنند ارتقا پیدا می‌کنند. به عنوان راهبر یک تیم مهم‌ترین کاری که باید انجام شود، خدمت کردن یا به عبارتی مهیا کردن شرایط مناسب برای تیم است. ایجاد فضای اعتماد و احترام، برداشتن موانع، کمک کردن به اعضای تیم برای رسیدن به اجماع در تصمیم‌گیری‌ها، یا حتی مهمان کردن تیمی که بیشتر از انتظار کار کرده از کارهایی است که از مدیر تیم انتظار می‌رود به موقع انجام دهد. در این مسیر، مدیر تیم برای برداشتن موانع سر راه تیم لازم است کارهای گل را انجام دهد و از انجام این کارها هراسی نداشته باشد. مدیران سنتی، دغدغه‌ی چگونگی انجام کار را داشتند در حالی که مدیران خوب دغدفعه‌ی انجام شدن کارها را دارند و برای این کار به تیم برای انتخاب مسیر انجام آن اعتماد می‌کنند. شکست به عنوان یک انتخابشکست می‌تواند به عنوان یک فرصت برای یادگیری در نظر گرفته شود (در مقابل این که شکست عامل سرزنش افراد باشد). در مواردی که شکست خوردن در یک کار، اثرات جانبی کمی داشته باشد و همچنین شکست خیلی سریع مشخص شود، پذیرفتن ریسک این شکست می‌تواند برای افراد آموزنده باشد. در مواردی که ریسک شکست کم ارزیابی شود (هرچند ارزیابی ریسک کار سختی می‌تواند باشد)، بهتر است این فرصت به افراد تیم داده شود. ضد الگوها در مدیریت تیم:۱- استخدام افراد با کیفیت کم: برخی مدیران، با این تفکر که در صورت استخدام افراد با کیفیت و هوش بالا، ممکن است جایگاه خود را از دست بدهند، افرادی با کفایت پایین‌تری را استخدام می‌کنند. در حالی که افراد باکفایت هم به تیم برای پیشرفت کمک می‌کنند هم فرصت را برای مدیران فراهم می‌کنند که بتوانند کارها را به آن‌ها بسپارند و خودشان پیشرفت کنند. ۲- چشم‌پوشی از افراد کم‌کار (عملکرد ضعیف): ادامه دادن همکاری با افرادی که در تیم عملکرد ضعیفی دارند، هم باعث می‌شود شما فرصت جذب افراد با عملکرد بالا را از دست بدهید هم باعث می‌شود زمان اعضای تیم و شما صرف جبران اشتباهات یا کمک به آن فرد شود. در مواجهه با افراد با عملکرد ضعیف باید همچنان با اعتماد، احترام و تواضع رفتار شود، همیشه در این مواقع لازم است به طور موقت این افراد به صورت ریز مدیریت شوند. باید انتظار از فرد به صورت هدف‌های کاملاً مشخص و واضح در یک بازه‌ی زمانی مشخص (مثلاً دو ماه) تعیین شود. بهتر است این هدف‌ها به صورت کوچک، قابل اندازه‌گیری و مرحله به مرحله مشخص شود و هفته به هفته پیشرفت در این مسیر مشاهده شود. ۳- چشم‌پوشی از مشکلات انسانی۴- دوست بودن با تمام افراد: لازم نیست با همه‌ی افراد تیم دوست نزدیک بود تا بتوان تیم را راهبری کرد، همچنان که مدیر یک فرد بودن باعث از بین رفتن دوستی بین افراد نشود. این که روابط دوستانه از روابط کاری به طور جدا در نظر گرفته شوند اهمیت بالایی دارند. ۵- پایین آوردن حد انتظار در استخدام: در مواردی با توجه به افراد متقاضی کار ممکن است استانداردها را برای جذب افراد پایین بیاورید، برای مثال اگر ۴۰ متقاضی وجود دارد و شما به ۵ نفر نیاز دارید، در نهایت ۵ نفر اول این ۴۰ متقاضی حتی اگر پایین‌تر از استانداردهای شما هستند جذب کنید. هزینه‌ی جذب افراد با کیفیت مناسب، در مقایسه با هزینه‌ای که با جذب افراد پایین‌تر از استاندارد باید بپردازید به مراتب کم‌تر خواهد بود. هزینه‌ی پایین آمدن سرعت و کیفیت تیم، زمانی که برا یک فرد صرف می‌شود، هزینه‌ و استرس لازم برای پایان همکاری برای یک فرد، این موارد قابل چشم‌پوشی نخواهد بود. الگوهای مثبت: ۱- تواضع؛ نگاه بالا به پایین نداشتن: (شاید ترجمه‌ی مناسبی برای Losing the ego نباشه ولی مفهوم یکسانی رو می‌رسونه) این که نگاه بالا به پایین نداشتن و تواضع داشتن با داشتن اعتماد به نفس تناقضی ندارد. خیلی از افراد وقتی به عنوان راهبر یک تیم فعالیت می‌کنند، فکر می‌کنند که باید پاسخ تمامی سؤالات را به درستی بدانند در حالی که این لازم نیست. این رفتار باعث می‌شود این که افراد تیم از راهبر تیم کمتر سؤال بپرسند و نقد سازنده کمتری در تیم صورت گیرد. یکی دیگر از نکات مهم در این بخش، عذرخواهی کردن در صورت بروز اشتباه است. عذرخواهی کردن در صورت بروز اشتباه باعث افزایش اعتماد، احترام و تواضع در تیم می‌شود. ۲- حفظ آرامش و تمرکزتیم در شرایط مختلف (جلسات، اتفاقات و غیره)، به صورت آگاهانه و ناخودآگاه، به رفتار و واکنش‌های مدیر توجه می‌کند، این که مدیر تیم در شرایط مختلف آرامش خود را حفظ کند و با تمرکز به کار ادامه دهد اهمیت بالایی دارد. ۳- حذف موانع: موانع تکنیکال یا سازمانی یا می‌توانند مانع پیشرفت تیم یا پیشرفت پروژه‌ها شوند، موانعی که احتمالاً رفع آن‌ها برای اعضای تیم ممکن نباشد یا کند انجام شود. مدیر تیم باید در رفع این موانع به تیم کند، خیلی از مواقع رجوع به فرد درست برای رفع مانع کاری است که مدیر می‌تواند به راحتی به تیم کمک کند. ۴- معلم بودنخیلی وقت‌ها مدیرها نقش منتور یا معلم بودن خود را فراموش می‌کنند. فرآیند‌ها، تکنولوژی‌ها و مواردی از این دست باید با توضیح کافی و مناسب به اعضای تیم آموزش داده شود. ۵- مشخص کردن اهداف واضح: برای این که تیم در یک مسیر حرکت کند و هر فردی تیم را به یک سمت نکشد، لازم است افراد تیم و خود تیم هدف مشخصی داشته باشد تا زمان از اعضای تیم هدر نرود. ۶- راست‌گو بودن: این به این معنی نیست که شما به تیم خود دروغ می‌گویید، ممکن است زمان‌ها یا صحبت‌هایی باشد که نخواهید به اعضای تیم بگویید بهتر است در این موارد رک و راست برخورد کنید و بگویید به دلایلی بیشتر نمی‌توانم توضیح دهم. این بهتر از دروغ گفتن یا نگفتن حقیقت است. یکی از موارد رک و راست بودن در دادن بازخورد به افراد است، بعضاً افراد برای دادن بازخورد و نقد به اعضای تیم آن‌ را در چندین لایه مخفی کرده و غیرمستقیم حرف را می‌زنند، این باعث می‌شود بازخورد به درستی منتقل نشود. البته بازخورد همچنان باید با احترام داده شود. برای مثال در دادن بازخورد این که کد تمیزی توسط فرد زده نمی‌شود اگر به این صورت بیان شود باعث می‌شود فرد پیام بازخورد را به درستی دریافت نکند.«تو یکی از بهترین اعضای تیم و یکی از باهوش‌ترین مهندسان نرم‌افزاری هستی که می‌شناسم، خوبه این هم در نظر بگیری که کدهایی که می‌زنی پیچیده هستند و خیلی قابل فهمیدن نیستند. امام همچنان تو یکی از بهترین نیروها هستی و در مسیر پیشرفت قرار داری» ۷- نگاه کردن خوشحالی اعضای تیم:بهترین راهبران تیم‌هایی، همیشه روانشناس‌های آماتوری هم به شمار می‌روند چرا که همواره حواسشان به حال تیم و موارد خوشحال‌کننده و ناراحت‌کننده تیم است. یکی از راه‌های بررسی خوشحالی اعضای تیم پرسیدن این سؤال است که «به چه چیزی نیازی داری؟» چند نکته‌ی دیگر هم در این کتاب آورده شده که من سعی می‌کنم به صورت خلاصه به آن‌ها اشاره کنم.- واگذار کردن کارها به اعضای تیم در عین دست به کد بودن و فاصله نگرفتن از کار. - همواره دنبال افرادی که بتوانند جایگزین مدیر باشند باش- محافظت کردن تیم از بی‌نظمی‌های خارج از تیم. - بازخورد مثبت واضح به تیم دادن در مواردی که تیم به خوبی کاری را انجام داده- و مورد آخر، این که در مواردی که یکی از اعضای تیم درخواستی دارد برای مثال می‌خواد از یک کتابخانه یا تکنولوژی جدید استفاده کند، در صورتی که ریسک کمی دارد و امکان بازگشتن سریع به مسیر اصلی در صورت اشتباه بودن تصمیم وجود دارد این فرصت را به اعضای تیم بدهیم.