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

03 شهریور 1400, خواندن در 10 دقیقه

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

بله، این بدترین سوال است. مقاله را کنار نگذارید چون سوالی که باید بپرسید در پایان گفته شده است. این سوال چه ایرادی دارد؟ آیا مدیران نباید بدانند که کارها چه زمانی به پایان می‌رسد؟ اگر این سوال را نپرسند، چگونه می‌توانند متوجه آن شوند؟

خودتان را یک توسعه‌دهنده تصور کنید که در زمینه فریمورک‌های Agile مشغول به کار است. واحد کاری شما استوری است. این سوال بدون هیچ بهانه‌ای بد است. دیروز یک استوری را بر عهده گرفتید و حالا امروز مدیر از شما می‌پرسد که این کار چه زمانی تکمیل می‌شود؟ می‌دانید که هنوز کدهایی را باید بنویسید. می‌دانید که این کد باید با User API در تماس باشد و شما مستنداتی را در این زمینه دارید اما هرگز از آن‌ها استفاده نکرده‌اید. می‌دانید که باب مشغول بازنویسی بعضی از سیستم‌های پیکربندی در استوری خودش است و شما باید این مورد را در سیستم خود ادغام کنید. به تازگی متوجه شدید که محیط آزمون با مشکلاتی روبرو شده است و جین، ارزیاب کیفیت عالی شماست و قصد دارد تا بفهمد آیا دلیل شکست‌های تصاوفی آزمون‌های API همین است یا خیر. برای اینکه کارهای خود را کاملاً به پایان برسانید، باید سندی (توسعه‌دهنده ارشد تیم) را بفرستید تا Pull request شما را ارزیابی کند. در نظر داشته باشید که سر سندی به شدت شلوغ است.

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

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

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

پاسخ صادقانه به سوال «کار شما کی تمام می‌شود؟»، همان «پیچیده است» می‌باشد.

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

بدست آوردن تخمین و چیزی که واقعاً باید بپرسید

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

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

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

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

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

بله، سوال همین است. سوال ساده بوده و توسعه‌دهنده به راحتی و با خوشحالی به شما جواب می‌دهد.

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

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

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

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

اولین استراتژی (برآورد نسبی، شکست‌ها و غیره) اطلاعات زیادی را در رابطه با پروژه به شما خواهد داد. مورد دوم (چه کارهایی برای انجام دادن باقی مانده است؟) اطلاعات دقیقی و ارزشمندی را به شما می‌دهد. این مورد هنگام کار کردن یک تیم بر روی ویژگی‌های جدید و یا نزدیک شدن به مهلت‌های زمانی بسیار کاربردی است. با ترکیب کردن این دو می‌توانید به دو ابزاری برسید که به راحتی می‌توان آن‌ها را جایگزین «چه زمانی کارها تمام می‌شود؟» کرد.

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

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

منبع

 

 

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
علیرضا داداشی @Pemi.razmi
دنبال کردن

گفتگو‌ برنامه نویسان

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