Hossein Ansari
Hossein Ansari
خواندن ۱۴ دقیقه·۷ ماه پیش

کار تیمی در مهندسی نرم‌افزار - بخش دوم


ادامه از بخش اول: کار تیمی در مهندسی نرم‌افزار - ویرگول (virgool.io)

«تیم»

حالا راه‌حل مصالحه بین «ارزیابی عمل‌کرد» و «معنادار کردن» کارکنان چیست؟ چگونه تیمی داشته باشیم که اعضای خوش‌حال و بهروزی داشته باشند و در عین حال «دستاوردهای تیمی»شان هم قابل توجه باشد؟

من این مساله را در سه سطح می‌توانم در نظر بگیرم:

۱- ویژگی‌های فردی اعضای تیم ۲- ویژگی‌های جمعی یک تیم به عنوان یک موجودیت مستقل ۳- پویایی رابطه بین اعضای تیم

در نظر من این‌ها پایه‌های یک هرم‌اند. زیرساخت هر تیم موثر چابکی را «شخصیت تک‌تک اعضا» تشکیل می‌دهند. اگر اعضای خوبی داشته باشیم می‌توانیم به مولفه‌های داشتن یک تیم موثر فکر کنیم. و در نهایت تلاش کنیم که یک رابطه پویا و تعالی‌بخش بین اعضای تیم تشکیل دهیم.

بعد ازین نوبت به طراحی یک سری فرایندهای اثربخش داخلی می‌رسیم، چگونه از تفکر طراحی برای حل مساله استفاده کنیم، اصول چابکی را در فرایند توسعه نرم‌افزار دخیل کنیم و در نهایت موجب معرکه‌ شدن همه شویم.

اما در ابتدا به قسمت اول و ویژگی‌های فردی «یک بازیکن تیمی ایده‌آل» بپردازیم:

ویژگی‌های فردی اعضای تیم و «بازیکن تیمی ایده‌آل»:

چارچوب این قسمت را از کتاب پاتریک لنچیونی با همین نام گرفتم.

مولفه «فروتنی» یا Humble:

مهم‌ترین مولفه یک بازیکن تیمی «فروتنی» است که کمی درباره‌ش صحبت کردیم. این مولفه ازین جهت مهم است که به سختی قابل آموزش است. بیش‌تر یک مولفه شخصیتی است. بنابراین در هنگام استخدام باید مواظب این مولفه باشید. البته که بایستی در فرهنگ سازمانی روی این مسئله کار کنید. بخش بزرگی از آن هم توسط «بنیانگذاران» شکل می‌گیرد. اما بعد از آن هم باید در داخل سازمان ازش نگهبانی شود و در هنگام استخدام و ترفیع و اخراج همیشه بهش توجه جدی شود. خصوصن در هنگام طراحی «نردبان شغلی» بایستی یک مولفه اساسی باشد. یعنی هر کسی نردبان را نگاه می‌کند بایستی متوجه ارزش «فروتنی» در این نردبان باشد. کلن نردبان بایستی بازتاب‌دهنده نظام ارزشی سازمان باشد.

باری درباره «فروتنی» به قدر کافی صحبت کردیم. دو مولفه دیگر این چارچوب این‌ها هستند:

مولفه «ولع» یا Hunger:

به سادگی اینکه افراد میل به این داشته باشند که کارها را با کیفیت و کمیت بیش‌تری از آنچه در تعریف وظیفه آمده است انجام دهند. میل به انجام به‌تر و بیش‌تر کارها!

این ویژگی خاصی است و به راحتی ممکن است با «اضافه کاری»‌ اشتباه شود. کارمندانی تشویق شوند که ساعت کاری زیادی دارند و مدام «اضافه کاری» می‌ایستند. البته من کلن سیستم «انگشت زنی» و «محاسبه دقیق ساعت کاری» و «اضافه کار» را چندان کارا نمی‌دانم. اما فارغ ازین فرایند، قرار نیست «ساعات کاری زیاد» هم ارزش اساسی باشد. یعنی اگر کسی فقط همان ساعات کاری معمول ۴۰ ساعت در هفته را حضور داشت، امکان رشد در نردبان شغلی را از دست بدهد.

اما «ولع» یعنی اینکه آدم‌ها میل به اتمام خوب و با کیفیت کار داشته باشند. اگر در شرایط رساندن کار در ضرب‌الاجلی هستیم به خودشان «فشار» بیاورند و از دیگر زمینه‌های کاری بزنند. مثلن برای مدتی در سر کار تفریح نداشته باشند، مطالعه کاری و زمان گذاشتن برای رشد انفرادی را کنار بگذارند. جلسه‌های طولانی را کم‌تر کنند و با تمرکز تمام به «رساندن با کیفیت کار» فکر کنند. حالا بخشی از افراد هم احتمالن می‌توانند «زمان بیش‌تری» را هم بگذارند.

اگر هم در شرایط «ضرب الاجل» نیستیم «ولع» به این معنا هم هست که همان کاری را که داریم را با همه‌ی حدود و صغورش با کیفیت انجام دهیم. «گوشت» و «استخوان» را با هم بخواهیم. هم «مستندسازی» خوبی داشته باشیم، هم «تست‌نویسی خودکار» خوبی داشته باشیم. هم «تست انسانی و دستی» را خودمان در حد خودمان انجام دهیم. هم از هم‌کاران داخلی و بیرون تیمی «پیگیری» داشته باشیم. هم «صورت‌جلسه‌ها» را بنویسیم.

کارها معمولن چند دسته دارند. یکی اینکه کار مستقیمن در حوزه مسئولیت من است و آن را هم بلدم. که خب انجامش می‌دهم. اما بسیاری از کارها است که یا «کمی» با حوزه مستقیم مسئولیت من فاصله دارد، یا اینکه «کمی» با حوزه توان‌مندی من فاصله دارد. «ولع» یعنی من انگیزه داشته باشم که این «فاصله‌»ها را با اشتیاق طی کنم و کارها را به سرانجام برسانم.

من روی کلمه «فاصله‌ی کم» تاکید می‌کنم. اینجور نباشد که من نابخردانه کار بزرگ‌تر از توان‌مندی و مسئولیتم به عهده بگیرم و تهش کار را خراب کنم و یا با کیفیت خیلی کمی به انجام برسانم. درک این «مناسب بودن» هم بخش مهمی از کار است و البته نقش «مدیر تیم» درین میانه برجسته است. من این‌جا یاد آن دعای معروف آرامش می‌افتم که از «شریعتی» نقل میشه :)

«پروردگارا،

آرامشی ده تا بپذیرم آن‌چه را که نمی‌توانم تغییر دهم،

شهامتی ده تا تغییر دهم آن‌چه را که می‌توانم،

و خردی ده تا یکی را از دیگری تشخیص دهم»

یک «خطر» دیگر در فهم «ولع» فارغ از «پرکاری بیهوده» مساله «اتمام تعداد زیادی تسک در زمان کوتاه» است. بعضی وقت‌ها در سازمان‌ها فردی تشویق می‌شود که سرعت خیلی زیادی در اتمام تسک‌ها دارد. البته که چیز خوبی است. منتها به دو شرط: یکی فدا نکردن کیفیت و دوراندیشی است. دومی توان‌مندی استمرار سرعت در بلند مدت است. سازمان‌ها در عمده دوران زندگی‌شان درگیر «دوی ماراتون» هستند نه «دوی سرعتی صد متر».

بعضی وقت‌ها برنامه‌نویس‌ها یادشان می‌رود که بسیاری از تصمیمات آن‌ها و کدهای متعاقب‌شان قرار است سال‌های سال در پروژه باقی بمانند و به همان شکل اولیه ازشان استفاده شود. خیلی از تصمیمات و کدها بازنویسی نمی‌شوند. و خب اگر کدی قرار است پنج سال در بخش عمیقی از برنامه استفاده شود خردمندانه است اگر پنج ساعت برای معماری‌ش فکر کنیم. اصلن عامدانه پیاده‌سازی را پنج روز عقب بیندازیم و برای جنبه‌های مختلفش با کمک همه‌ی تیم سناریو پردازی کنیم و با حداکثر دانش تیمی برویم و پیاده‌سازی‌ش کنیم.

این مساله را بسیاری از مهندسان نرم‌افزار مهاجرت کرده باهاش مواجه می‌شوند. معمولن حجم کاری که در شرکت‌های آلمانی پیش روی هر مهندسی قرار دارد خیلی کم‌تر و ساده‌تر از وضعیت‌شان در ایران است. و با این حال خیلی وقت‌ها هم کیفیت پروژه بیش‌تر از تجربیات ایران است.

باری، فکر می‌کنم برای یک مرور کوتاه درباره «ولع» به قدر کافی صحبت کردیم. حالا به مولفه آخر و سوم بپردازیم:

مولفه «هوش‌مند»ی یا Smart:

هوشمندی یک بازیکن تیمی ایده‌آل چیز ساده‌ای است. تا حدی با مفهوم «هوش هیجانی» قرابت دارد و اما کمی ساده‌تر و البته فراتر از آن است.

بازیکن تیمی ایده‌آل دارای هوش هیجانی هست. حواسش به پویایی پیچیده‌ی رابطه‌ها در گروه است. بلد است که چگونه با دیگران به طور موثر تعامل کند. و در نهایت بصیرت خوبی درباره برداشت بقیه از حرف‌ها و کارهایش در تیم دارد.

یک بازیکن هوشمند درک خوب و واقعی از رفتار انسانی دارد. می‌داند که تیم‌ها در وضعیت‌های احساسی گوناگونی قرار می‌گیرند و هر اقدامی مناسب هر وضعیتی نیست. مثلن وقتی سرویس نرم‌افزاری پایین است دنبال افزایش هیجان نیست، دنبال پست مرترم هم نیست! بلکه سعی می‌کند خونسردی خودش را حفظ کند و با هم‌کاری جمعی اول از همه در یک شرایط آرام سرویس را به وضعیت عملیاتی برگرداند.

همین‌طور اگر قصد دارد انتقاد بزرگی را راجع به وضعیت تیم بیان کند منتظر یک وضعیت آرام و باثبات باقی می‌ماند. نه اینکه در میانه‌ی ورود یک نیروی جدید به تیم و در اولین جلسه روزانه‌ یک بحث بزرگ و سخت کاری را باز کند.

در ضمن سبک کاری اصلی بازیکن هوشمند استفاده از تاثیر مثبت/ Infuence‌ بجای تلاش مدام برای استفاده از اختیارات / Authority است. و در نهایت همان‌گونه که در بخش فروتنی هم خاطرنشان کردیم تمرکز اصلی بازیکن تیمی ایده‌آل بر همکاری تیمی است و می‌داند که موفقیت جمعی مهم‌تر از تشویق فردی است.

ویژگی‌های یک تیم به عنوان یک موجودیت مستقل

خب بیایید امیدوار باشیم که جمعی را دور هم داریم که «بازیکن تیمی ایده‌آل» به شمار می‌روند. حالا اگر بخواهیم یک تیم را به عنوان یک شخصیت مستقل نگاه کنیم، چه ویژگی‌هایی تضمین کننده موثر بودن تیم خواهند بود؟ شرکت گوگل در یک پروژه بسیار بزرگ و بعد از سال‌ها تحقیق، به ۵ عامل رسید که این‌ها بودند:

۱- امنیت خاطر روانی - psychological safety: اعضای تیم در هنگام انجام ریسک احساس امنیت می‌کنند و خودشان در مقابل بقیه اعضای تیم آسیب‌پذیر کرده‌اند. «امنیت خاطر» یکی از بنیادی‌ترین مولفه‌های یک تیم موثر است. تیمی که از توان همه‌ی اعضایش برای نتیجه گرفتن بهره می‌گیرد. تیمی که «برداشتن ریسک» را تشویق می‌کند. تیمی که «اشتباه کردن» را جزو جدایی ناپذیری از کار می‌داند. تیمی که افراد بعد از انجام «اشتباه» دنبال «مقصر فردی» نمی‌گردند. بلکه به دنبال پیدا کردن راه‌حل در فرایند‌ها و محصول‌شان هستند. تیمی که جوان‌ٰترین و کم‌سابقه‌ترین فرد تیم هم حق اظهار نظر درباره همه‌ی وظایف تیم را دارد. و البته بقیه هم حق دارند که اشتباهات بزرگ و کوچک‌ش را به او متذکر شوند. این «امنیت خاطر» ارتباط تنگاتنگی با مفهوم «اعتماد متقابل» اعضای تیم به هم دارد. کلن زیربنای هر کار تیمی فداکاری کردن و ریسک کردن بر سر «اعتماد‌» است. که خب درباره‌ش به قدر کافی صحبت کردیم.

۲- قابلیت اتکا - Dependability: اعضای تیم «شخصیت قهرمانی» دارند و کارها در موعد مقرر به سرانجام می‌رسانند و استانداردهای بالایی برای کارشان معین می‌کنند. شاید به دست آوردن «امنیت خاطر روانی» در تیم سخت باشد. اما از آن سخت‌تر تیمی است که فقط و فقط به امنیت خاطر روانی فکر می‌کند. اینقدر امنیت خاطر زیاد است که کسی نگران نتیجه نیست. این‌جاست که این «شخصیت قهرمانی» عنصر مهمی است. آدم‌ها درین تیم‌ها میل به عمل- Bias To Action دارند، حواس‌شان هست که نتیجه خیلی مهم است و برای نتیجه خوب باید فداکاری کنند، احتمالن تعارضات زیادی را ایجاد و حل کنند، از هم مطالبه مسئولیت کنند و کارها را در موعد مقرر و با استاندارد بالا تحویل می‌دهند. بله، اعضای تیم حق اشتباه کردن دارند، اما «اشتباه تکراری» چندان قابل قبول شمرده نمی‌شود، و اگر یک نفر مدام در حال اشتباه کردن است احتمالن مشکل‌ش «عدم شایستگی» کافی است نه «نبودن امنیت خاطر روانی».

پرانتز: یک نکته کوچک درباره نقش مدیر تیم هم درین مورد بگویم. و منظورم دقیقن جنبه Manager تیم است. نه Coach, Mentor, Leader. در نهایت مهم‌ترین وظیفه مدیر تیم این است که یک «تیم کارا و خوشحال» بسازد. یعنی هم تیم به نتایج مورد نظر برسد. و هم با حال خوب به این نتایج برسد. هر کدام ازین جنبه‌ها اگر مختل بشود دیگر نمی‌شود روی تیم حساب کرد. بله، من معتقدم که مهم‌ترین سبک رهبری و شاید تنها سبک درست Servant Leadership است. منتها این راه‌بری باید در خدمت «همه» باشد. یعنی هم اعضای تیم، هم ذی‌نفعان تیم (مثل سهامداران) و مهم‌تر از همه «مشتریان تیم». و «بُرد» باید برای همه باشد. درین مسیر مدیر تیم حتمن باید مربی خوبی باشد. یعنی جهت درست را شناسایی کند، به اعضا نشان بدهد و در مواقع شکست و اشتباه هم حمایت‌شان بکند. منتها اگر لازم است بازیکنان تیم را تعویض کند، یا حتا اخراج کند. به طور خلاصه در عین اینکه بکوشد که تا حد ممکن مستقیما از Authority ش استفاده نکند، اما اگر زمانش رسید اصلن از استفاده از ابزار قدرت خجالت نکشد و با اعتماد به نفس ازش استفاده کند. این ابزار خصوصن در ایجاد یک «شخصیت قهرمانی» چیز مهمی است. تیم خوب حتمن به Fast Fail اعتقاد دارد. منتها به Succes Faster اعتقاد بیش‌تری دارد و از باختن بدش می‌آید و بهش برمی‌خورد. و مدیر نقش کلیدی درین قضیه دارد.

۳- شفافیت - Clarity: اهداف، برنامه‌ها و نقش‌ها از شفافیت کافی برخوردارند و ابهامی وجود ندارد. در نتیجه همان «تعارضات سازنده» و البته در سایه «مدیریت شایسته» هر وظیفه‌ای یک مسئول مشخص دارد و هر فردی هم مسئولیت مشخص و ترجیحن فقط همین یک مسئولیت را دارد. اعضا هم به این اهداف مورد اجماع تیم کاملن متعهدند. این اهداف کاری فردی و تیمی هم تا حد خوبی هم‌راستا با ماموریت کلی سازمان است. که مدیران ارشد سازمان به شکل مرتب و مداوم و حتا می‌شود گفت به شکل افراطی در حال ترویج و تبلیغ آن هستند. درباره «چشم‌انداز مشترک» من «افراط» در صحبت را به «تفریط» ترجیح می‌دهم. و معمولن سازمان‌ها به «تفریط» می‌افتند. چشم‌انداز مشترک چیزی است که هم برای «شفافیت» مهم است و هم در بخش «معنا» درباره‌ش صحبت کردیم.

گوگل دو عامل «معنا» و «اثرگذاری» را هم در ادامه برمی‌شمرد که ما در بخش‌ ماموریت کمی درباره‌ش صحبت کردیم.

پویایی رابطه بین اعضای یک تیم

خب حالا می‌دانیم مهم‌ترین مولفه‌های یک تیم موثر چه چیزهایی هستند. سوال اصلی این است که نحوه رابطه بین اعضای تیم چگونه باید باشد که بتوانیم یک تیم موثر بسازیم؟ پاسخ این سوال را داخل کتاب «پنج دشمن کار تیمی» می‌جوییم:

پنج دشمن کار تیمی

تیم‌های خوب آن‌هایی هستند که از لحاظ ارزشی هرم زیر را رعایت می‌کنند:

۱- این تیم‌ها توجه اصلی‌شان به «نتایج جمعی» است. درین تیم‌ها ماموریت تیم مسئله کلیدی است و به صورت مدام یادآوری می‌شود. نه این‌که فقط یک بیانیه کاغذی چسبانده به دیوار باشد. درین تیم‌ها «ارزش خلق شده برای مشتری، هم‌کاران، ذی‌نفعان و خود اعضای تیم» ماموریت اصلی برشمرده می‌شود و بالاتر از منفعت‌های شخصی اعضای تیم قرار می‌گیرد. این امر چگونه ممکن است؟ با رعایت اصل بعدی:

۲- درین تیم‌ها همه اعضای تیم خود را «نگاهبان ماموریت کل تیم» می‌دانند. بر خلاف کارگروه‌ها که افراد فقط به رییس کارگروه پاسخ‌گو هستند، در این تیم‌ها همه از هم «مطالبه مسئولیت» می‌کنند و همه به همه پاسخ‌گو هستند. که من را یاد حدیث نبوی «کلکم راع و کلکم مسئول عن رعیته» می‌اندازد. درین تیم «استاندارد کارها» بالا است و «کار ضعیف» از هیچ کسی پذیرفته نمی‌شود. و همه از هم انتظار کارهای با کیفیت بالا دارند. این امر چگونه ممکن است؟ با رعایت اصل بعدی:

۳- درین تیم‌ها «تعهد» بالایی به کارهای توافق شده وجود دارد. هر تسکی به صورت شفاف معین شده است. و مسئول انجام هر کاری هم روشن و مشخص است. ابهامی در زمینه خود وظایف و مسئول آن وظیفه وجود ندارد. «تعهد» درین تیم‌ها به معنای «موافقت همه افراد با همه وظایف» نیست. بلکه به معنای «تعهد به انجام وظایف بعد از اجماع تیم روی آن‌هاست، حتا اگر نظر شخصی من مخالف با نظر تیم باشد در نهایت من به اجماع تیم احترام می‌گذارم و بهش متعهد باقی می‌مانم». این امر چگونه ممکن است؟ با رعایت اصل بعدی:

۴- درین تیم‌ها همه‌روزه «تعارضات سازنده» رخ می‌دهد. تیم از «گفتگوهای سخت» فرار نمی‌کند. بلکه حتا «کاوش‌گر تعارضات» دارند که بحث‌های سخت را به صحنه تیم می‌آورد. اعضای تیم مهارت‌های ارتباطی بالایی دارند و حرف همه درش شنیده می‌شد. افراد هم‌دیگر را قضاوت نمی‌کنند و این‌گونه نیست که فقط بعضی‌ها حق تصمیم‌گیری داشته باشند. بلکه از نیروی تازه‌کار هم انتظار می‌رود مشارکت فعال در تصمیم‌گیری تیم داشته باشد. و نتیجه این می‌شود که این تیم‌ها درگیر «هماهنگی تصنعی» نمی‌شوند. این امر چگونه ممکن است؟ با رعایت اصل بعدی:

۵- درین تیم‌ها «اعتماد» جاری است. اعضا خودشان را نسبت به یک‌دیگر «آسیب‌پذیر» کرده‌اند. هم‌دیگر را به عنوان «انسان جایزالخطا» پذیرفته‌اند. در عین حال نسبت به «ماموریت تیم» حس دلبستگی دارند و تمام تلاش‌شان را می‌کنند که «قابل اطمینان، شریف و سخاوتمند» (‌با تعاریف برنه براون) باقی بمانند. این اعضا بدون شرمندگی از هم کمک می‌خواهند. و درین کمک‌خواهی هم‌دیگر را قضاوت نمی‌کنند. این اصل آخر و بنیادین بود. و جاری کردن‌ش در تیم از همه کارها سخت‌تر است. اما وقتی این اتفاق بیفتد انجام کارهای بالایی خیلی آسان‌تر خواهد بود.

فهمیدن پنج دشمن کار تیمی در ابتدا امر ساده‌ای به شمار می‌رود. اما مهارت پیدا کردن در دیدن این مشکلات در لابلای کارهای روزمره تیم نیاز به مهارت و تمرین زیادی دارد. خود من در جاهای مختلف تلاشم برین بود که این کتاب را به شکل Bible ببینم و هر هفته مقداری از وقتم را برای مرور اتفاقات تیم در همین چارچوب فکری سپری کنم. ببینم کجای کار ما لغزیدیم و دچار dysfunction شدیم. و کجای کار را با مهارت خوبی توانستیم ازین pitfall ها گذر کنیم و یک کار موثر تیمی را به سرانجام برسانیم.

جمع‌بندی

خب مقداری درباره برداشت‌هایم از کار تیمی درست و استاندارد گفتم. در پست بعدی سعی می‌کنم تجربیات واقعی‌م در محل کار را با توجه به این چارچوب‌ها برایتان بازگو کنم. چگونه بعد از اتفاقات و تصمیمات بزرگ می‌نشستیم و عملکرد خود تیم را با توجه به این «ارزش‌ها» و «چارچوب»ها مرور می‌کردیم و از دل این مرور یادگیری داشتیم. و اینگونه تیم‌ها را درگیر یک «چرخه تعالی» می‌کردیم.

همین‌طور درباره «فرایندها» صحبت خواهم کرد. حالا که جمعی از «بازیکنان تیمی ایده‌آل» داریم و تیم «شخصیت قهرمانی» دارد و «رابطه پویا و سالمی» هم بین اعضا برقرار است، چگونه با تعریف فرایندهای درست بر بستر این تیم محصولات خوبی بسازیم و برای همه‌ی مردم خلق ارزش کنیم.

درباره «تفکر طراحی» صحبت می‌کنم که به درستی بتوانیم «ارزش» واقعی را شناسایی کنیم. درباره «چابکی» تیم‌های نرم‌افزاری صحبت می‌کنم که چطور بهینه‌تر بتوانیم «ارزش» را خلق کنیم و همینطور اینکه «هنر بازخورد»‌ حرف می‌زنم و اینکه چگونه باید در سازمان جاری‌ش کرد که «چرخه تعالی»‌ را به چرخش بیاورد.
خدا قوت اگر تا این‌جای نوشته را همراه بودید و فعلن زیاده جسارت است.

📷

کار تیمیبازیکن تیمی ایده‌آلمهندسی نرم افزار
شاید از این پست‌ها خوشتان بیاید