چگونه باید یک تیم از برنامه‌نویسان را مدیریت کرد؟ بخش اول

این نوشته برداشتی آزاد از فصل پنجم کتاب چگونگی مهندسی نرم‌افزار در گوگل است.اعتماد، احترام و افتادگی ارزش‌های مهم گوگل به شمار می‌رود که تاکید بسیاری در این فصل بر آنان شده است.مقدمهیک تیم برنامه‌نویسی از جهاتی به یک کشتی شباهت دارد. در یک کشتی باید ناخدایی باشه که کشتی را در جهت درست به سوی مقصد هدایت کند وگرنه امواج دریا کشتی را به هر طرف منحرف می‌کنند و احتمالا کشتی هرگز به مقصد نخواهد رسید. یک تیم نرم‌افزار هم نیاز به مدیریت دارد. وگرنه یا وقت با ارزش اعضای تیم به هدر می‌رود، یا از آن بدتر این وقت را صرف نوشتن کدهایی می‌کنند که برای سازمان ارزشی ندارد.انواع مدیر در گوگلدر گوگل دو نقش برای رهبری تیم تعریف شده است.· مدیر که وظیفه مدیریت انسان‌ها را بر عهده دارد.· راهبر فنی که وظیفه مدیریت تکنولوژی را بر عهده دارد.اگرچه وظایف این دو نقش با یکدیگر شباهت‌هایی دارد ولی با توجه به حجم کار بهتر است که دو شخص متفاوت این دو نقش را بر عهده بگیرند.مدیر تیمدر گوگل مدیرها اغلب برنامه‌نویس‌هایی هستند که تجربه مدیریت داشته‌اند. یا اینکه به صورت خاص آموزش‌هایی دیده‌اند که آن‌ها را برای ایفای این نقش آماده کرده است. یک مدیر مسئولیت کارایی و خوشحالی تک-تک اعضای تیمش (از جمله راهبر فنی) را بر عهده دارد. همچنین باید مراقب باشد کاری که تیمش انجام میدهد، در راستای رفع نیازهای سازمان باشد. گاهی ممکن است که نیازهای سازمان و نیازهای افراد تیم با همدیگر در تضاد قرار بگیرد، این موضوع مدیر تیم را در شرایط سختی قرار میدهد.راهبر فنیراهبر فنی باید به مدیر گزارش بدهد او مسئولیت بُعد فنی محصول از جمله انتخاب تکنولوژی، معماری، تشخیص اولویت‌ها و ... را برعهده دارد.راهبر فنی معمولا خودش هم در توسعه محصول مشارکت می‌کند (کد می‌زند) این موضوع باعث می‌شود که اغلب بین اینکه یک کار را خودش به سرعت انجام دهد یا به یکی از اعضای تیم واگذار کند، مردد شود. توجه کنید که در اکثر مواقع سپردن کارها به سایر اعضای تیم کار صحیح‌تری است چون باعث رشد توانایی تیم خواهد شد.مدیر و راهبر فنیایفای همزمان نقش راهبری فنی و مدیریت تیم توسط یک نفر بدون این‌که فرد خسته شود در تیم‌های بزرگ غیر ممکن است. بخاطر همین تیم‌های بزرگ یک مدیر و یک راهبر فنی دارند ولی در تیم‌های کوچک ممکن است راهبر فنی و مدیر تیم یک نفر باشد. با توجه به دشواری ایفای همزمان این دو نقش حتما فرد مورد نظر نیاز به یک مربی دارد که بتواند در مواقع لزوم او را راهنمایی کند.چرا اغلب برنامه‌نویس‌ها از مدیر شدن می‌ترسندیکی از دلایل اصلی که بیان می‌کنند این است که بعد از مدیر شدن احتمالا فرصت خیلی کمتری برای کد زدن، خواهند داشت. این مسئله درسته ولی این موضوع را در نظر داشته باشید که هرچقدر هم برنامه‌نویس خوبی باشید حجم کدی که می‌توانید تولید کنید، محدود خواهد بود. حالا تصور کنید که یک تیم از برنامه‌نویس‌های خوب چه حجمی از کد را می‌توانند تحت رهبری و نظارت شما توسعه دهند!برنامه‌نویس‌ها معمولا سنجه‌های کمی بسیاری خوبی برای اندازه‌گیری کارایی و حجم کار انجام شده خود دارند. مثلا یک برنامه‌نویس بعد از یک روز پرکار با یک نگاه متوجه می‌شود که 4 ایشو را بسته است و 4 تا فیچر جدید را پیاده‌سازی کرده است. در مقابل یک مدیر وقتی به یک روز پر کار خود نگاه میکند احتمالا تنها تعداد زیادی جلسه‌ی به ظاهر بی‌فایده را مشاهده می‌کند. برای حل این تعارض باید توجه داشته باشید که جنس کار برنامه‌نویس و مدیر کاملا متفاوت است و نمی‌توان کارایی یک مدیر را نیز با همان سنجه‌های مربوط به برنامه‌نویس (تعداد ایشو بسته شده و ...) سنجید.دلیل دیگر این است که بسیاری از ما در گذشته مدیرهای بی‌کفایتی داشته‌ایم و دوست نداریم مشابه آن‌ها باشیم. این‌که چرا بسیاری از ما مدیران ناکارآمدی را تجربه کرده‌ایم به دلیل قانون پتراست. این قانون بیان می‌کند که در یک ساختار سلسله مراتبی کارکنان تا آنجا که موفقیت‌آمیز عمل کنند، ارتقا می‌یابند و فقط هنگام رسیدن به «مرز بی‌کفایتی» متوقف می‌شوند و در همان سمت باقی می‌مانند. نتیجه‌ی این امر آن است که غالباً در سازمان‌ها با مدیرانی روبرو هستیم که شایستگی جایگاه خود را ندارند. برای جلوگیری از این مشکل در گوگل، هر فرد باید قبل از ترفیع مدتی وظایف موقعیت شغلی بالاتر را انجام دهد و بالاتر از انتظار عمل کند تا بتواند ترفیع بگیرد.مدیر خدمتکار تیم استیکی از بهترین پندهایی که می‌توان به فردی که به تازگی مدیر شده داد، این است که "مدیریت نکند". معمولا کسانی که به تازگی مدیر می‌شوند احساس می‌کنند که حتما باید به صورت فعال اعضای تیمشان را "مدیریت کنند" از نشانه‌های این مشکل می‌توان به موارد زیر اشاره کرد:· مدیریت ذره‌بینی (micro-managment)· عدم توجه به کاهش کارایی· استخدام افراد ضعیفراه حل درمان این مشکل این است که مدیر خودش را خدمتگزار تیم ببیند. مدیر باید سعی کند که تمام موانع را از پیش روی تیم بردارد تا تیم بتواند وظایف خود را به بهترین شکل ممکن انجام دهد. مدیر باید سعی کند که فرهنگ اعتماد، احترام و افتادگی را در بین اعضای تیم گسترش دهد.اگر یک مدیر نشان بدهد که به اعضای تیمش اعتماد دارد. افراد تیم احساس وظیفه می‌کنند که طوری رفتار کنند که لیاقت اعتمادی که بهشان شده را داشته باشند. در مقابل اگر تعامل مدیر با اعضای تیم مانند والدین با فرزندان باشد، به مرور اعضای تیم هم یاد میگرند که مثل بچه‌ها رفتار کنند!توجه داشته باشید که برای مدیر "کارهایی که انجام میشه" باید مهم باشه نه "چگونگی انجام کارها"، مدیر باید به تیمش اعتماد داشته باشه که میتوانند کارها رو به بهترین نحو ممکن انجام بدهند.ضد پترن‌های مدیریتمنظور کارهایی است که یک مدیر نباید انجام بدهد و اگر چنین رفتاری از یک مدیر سر بزند مدیر خوبی نخواهد بود.استخدام افراد ضعیفمدیران ضعیف سعی می‌کنند کسانی را استخدام کنند که تهدیدی برای جایگاه آن‌ها در سازمان نباشند. این کار مشکلات و دشواری‌های زیادی برای آنان ایجاد می‌کند چون یک فرد ضعیف همواره نیازمند کسی است که وظایفش را به او یادآوری کند. بعد از مدتی چنین تیمی توانایی تصمیم‌گیری بدون حضور مدیر را از دست می‌دهد. اگر مدیر به مرخصی برود یا به هر دلیلی دیگر نباشد کارایی تیم بشدت افت میکند.یک مدیر باید سعی کند افرادی را استخدام کند که از خودش باهوش‌تر باشند. این افراد تصمیمات مدیر را بدون چون و چرا قبول نمی‌کنند ولی مطمئن باشید که اغلب عملکردی فراتر از انتظار شما خواهند داشت. چنین افرادی را نباید تهدیدی برای جایگاه خودتان ببینید این افراد کسانی هستند که می‌توانید برخی از وظایف خودتان را بر عهده آن‌ها بگذارید و یک تیم دیگر را توسط آن‌ها مدیریت کنید.عدم توجه به افت کاراییخیلی وقتها دیده شده که تیم‌های خیلی خوب نرم‌افزاری بخاطر این‌که یک یا دو نفر از اعضا کارایی مناسبی نداشتند، ناموفق بوده‌اند. کلا یکی از سخت‌ترین کارهایی که یک مدیر باید انجام بدهد، نحوه برخورد با کسانی است که کارایی پایینی دارند. گاهی وقت‌ها افت کارایی بخاطر این است که شخص مورد نظر به اندازه کافی سخت کار نمی‌کنند یا ساعت کاری کمی دارد ولی مشکل اصلی وقتی هست که شخص توانایی انجام کاری که به او محول شده است را ندارد.در این زمینه باید به نکات زیر توجه کنید:1. به دلیل پیچیدگی نحوه برخورد با کسانی که کارایی کمی دارند گاهی اوقات مدیران این برخورد را به تاخیر می‌اندازند و امیدوار هستند که مشکل موقتی بوده و با گذشت زمان خود به خود حل شود. این رفتار بسیار اشتباه بوده و باید در اولین فرصت مشکلات مربوط به افت کارایی مورد بررسی قرار گرفته و حتی در صورت نیاز به رده‌های بالاتر مدیریت منتقل شود.2. همچنین همانطور که شما به عنوان مدیر تیم متوجه شدید که یک نفر کارایی پایینی نسبت به بقیه دارد. سایر اعضای تیم هم متوجه این موضوع هستند. چون در واقع اون‌ها هستند که باید جور کم کاری فرد مورد نظر را بکشند.3. بررسی سریع مشکل افت کارایی این خوبی را دارد که میتوانیم به شخص مورد نظر کمک کنیم که مشکل را حل کند ولی اگر مواجهه با افت کارایی را به تاخیر بیاندازید آنقدر روابط این افراد با سایر اعضای تیم بد شده و آنقدر شما رو عصبی میکنه که دیگر نمیتوانید کمکش کنید.چه جوری به یک فرد کم کارایی کمک میکنید که مشکلش رو حل کنه؟برای این منظور لازم است به مدت محدود (مثلا 1 ماه) این افراد رو مدیریت ذره‌بینی (micro-manage) کنید. به این ترتیب که در یک بازه زمانی مشخص، اهداف مشخصی برای آن‌ها تعیین کنید و انتظار داشته باشید این افراد به اهداف مشخص شده برسند. اهداف باید کوچک، مرحله به مرحله و قابل اندازه‌گیری باشند، به این ترتیب فرصت‌های زیادی برای موفقیت‌های کوچیک برای فرد ایجاد خواهد شد که باعث افزایش انگیزه او خواهد بود. با فرد مورد نظر جلسات هفتگی تنظیم کنید و میزان پیشرفت اهداف را در این جلسات بررسی کنید. یکی از فواید این روش آن است که اگر بهبودی در کارایی فرد ایجاد نشود در همان مراحل اولیه برای شما و خود شخص واضح می‌شود و معمولا خود فرد از ادامه فرآیند انصراف داده و تیم را ترک می‌کند. در بسیاری از موارد هم طی کردن این دوره باعث حل مشکل فرد و افزایش کارایی او خواهد شد.عدم توجه به مشکلات شخصی افراد تیمهمانطور که قبلا هم اشاره شد توجه به سطح شادی اعضای تیم، نیاز‌های سازمان و مسائل مربوط به تکنولوژی اهم وظایف یک مدیر را تشکیل می‌دهند. مدیران چون معمولا پیشینه برنامه‌نویسی و تکنیکال دارند در زمینه تکنولوژی مشکلی ندارند ولی در زمینه توجه به نیازهای انسانی اعضای تیم ممکن است دچار خطاهای فاحشی بشوند. این مسئله را می‌توان با یک مثال ساده توضیح داد.کارمندی که به تازگی فرزندش به دنیا آمده را در نظر بگیرید. این فرد علاقه‌مند است زمان بیشتری را با‌ خانواده‌اش بگذراند. او اطمینان دارد که کار کردن از خانه باعث افت کاراییش نخواهد شد. حالا اگر مدیرش اجازه کار از خانه را به او ندهد، اعتمادش به مدیر از بین خواهد رفت. در این شرایط یک مدیر خوب در مرحله اول باید با این فرد همدردی کند و حتی الامکان به او اجازه دهد که در صورت عدم افت کارایی مدتی را از خانه به کارش ادامه دهد. حتی اگر شرایط به گونه‌ای است که به هیچ عنوان امکان دورکاری کامل فراهم نیست باید حداقل یه این کارمند اجازه داده شود که چند روز در هفته از خانه کار کند.دوست بودن با همهمعمولا وقتی که یک نفر از داخل تیم مدیر می‌شود، تلاش می‌کند که رابطه دوستی خود را با همکارهای قبلیش حفظ کند و یا حتی این رابطه را گسترش دهد. در این مواقع باید این موضوع را بپذیرید که وقتی وضعیت شغلی یک شخص به شما بستگی دارد، احتمال دارد او یک رابطه دوستی تصنعی را در روابط متقابلش با شما به نمایش بگذارد.به یاد داشته باشید که یک مدیر خوب لزومی ندارد که دوست صمیمی اعضای تیمش باشد همچنین یک مدیر مستحکم می‌تواند دوستی‌های قدیمیش با اعضای تیم را حفظ کند.یکی از بهترین راه‌هایی که می‌تواند باعث نزدیکی مدیر و افراد تیم شود بدون اینکه آن‌ها را معذب کند این است که با هم ناهار بخورید.کاهش استانداردهای استخدامگاهی ممکن است که بخاطر شرایطی مجبور باشید که به سرعت افراد زیادی را استخدام کنید. این موضوع معمولا باعث میشود که استانداردهای استخدام کاهش یافته و تعدادی افراد نه چندان قوی به تیم اضافه شود. چنین افرادی در ادامه مشکلات و هزینه‌های زیادی برای سازمان ایجاد خواهند کرد توصیه می‌شود که هیچ‌گاه چنین‌کاری نکنید.تعامل بچه‌گانه با اعضای تیمبهترین راهی که میتواند بی‌اعتمادی شما را به افراد تیم نشان دهد، این است که مانند بچه‌ها با آن‌ها رفتار کنید. در این صورت تعجب نکنید اگر افراد تیم رفتارهای بچه‌گانه انجام دادند. از نظر روانشناسی بسیازی از مردم همونطور که باهاشون تعامل بشه، عمل خواهند کرد. اگر استانداردهای استخدام را در نظر گرفته و افراد مناسبی استخدام کرده باشید. باید به آن‌ها اعتماد کنید و مطمئن باشید که معمولا همیشه فراتر از انتظار شما عمل خواهند کرد.