دلایل شکست پروژه های نرم افزاری

تا مدت های طولانی ،‌ همیشه فکر می کردم که دلیل شکست یک پروژه به مسایل فنی مربوط می شود اما در چند سال اخیر تجربه ای کاملا متفاوت داشتم .سال هاست که پروژه های مختلفی تولید می شن و الان که شما دارید این متن رو می خونید در یک شرکتی ، یکی از آن پروژه ها در حال نابود شدن است .فرض کنید شما فرصت می کنید تا دلایل شکست آن را کالبد شکافی کنید ( درسته که این مسئله خارج از حیطه کاری ماست ولی خارج از توانایی ما نیست ) . چیزی که متوجه خواهید شد، این است که پروژه بدون نیاز به هیچ فناوری و تکنولوژی جدیدی، درحال نابود شدن است، بدون حتی یک مشکل فنی .خیلی از ما ( توسعه دهندگان نرم افزار ) در پروژه هایی بودیم و هستیم که یا شکست خورده اند یا محکوم به شکست هستند و با افرادی کار کردیم که با وجود اینکه ، حتی استفاده ی درست از IDE را بلد نیستند در موارد فنی اظهار نظر می کنند یا افرادی که مانند طبل تو خالی هستند و فقط ادعا می کنند که خیلی آدم های فنی هستند ولی در عمل هیچ کاری ازشون بر نمیاد و عمیقا هم می دانند که هیچی نیستند .توسعه نرم افزار یکی از پیچیده ترین و در عین حال جذاب ترین کارهای ممکن است نه بخاطر اینکه فریم ورک های زیادی هستند که به شما کمک می کنند بلکه بخاطر رفتارهای انسانی که در این صنعت وجود دارد .در اینجا به برخی از این رفتارها که منجر به شکست پروژه ها می شوند اشاره می کنم :توهم تکنولوژی برتربرخی افراد تصور می کنند که اگر در یک پروژه از تکنولوژی های به اصطلاح جدیدتری استفاده کنند پروژه شکست نخواهد خورد این افراد به بیماری High-Tech illusion دچار هستند .اعتقاد راسخه بعضی از افراد که با تکنولوژی های جدید سر و کار دارند ( کدوم یکی از ما نداریم ) از اینجا نشآت میگیرد که آن ها خود را جزیی از دنیای high-tech می دانند . اما بین خودمون باشد آن ها معمولا جزیی از این دنیا نیستند . کسانی که این تکنولوژی ها و فریم ورک ها را می سازند متعلق به دنیای high-tech هستند بقیه ی ما فقط از کار آن ها استفاده می کنیم . ما از تکنولوژی های جدید استفاده می کنیم تا محصولاتمان را بسازیم .علت اصلی این مسئله که ما بر روی موارد تکنیکال بیشتر از موارد انسانی کار تمرکز می کنیم این نیست که آن ها حیاتی تر هستند بلکه به این خاطر است که پرداختن به این مسائل راحت تر است .ایجاد یک پروژه با Spring boot یا NodeJS به مراتب راحت تر از بررسی این مسئله است که چرا همکار شما امروز ناراحت به محل کار آمده . ارتباطات انسانی ، کاری بسیار پیچیده است و در یک پروژه ، مهم تر از این که شما از چه تکنولوژی استفاده می کنید این است که شما به روابط بین افراد چقدر توجه می کنید .وقت برای فکر کردن نیست ، فقط انجام بدهاگر شما مسئول انجام یک کار باشید چقدر زمان صرف مطالعه راه حل های جدید و تحلیل مشکل می کنید ؟خیلی از مدیران، وقت زیادی صرف انجام کارها می کنند و فرصت کافی ندارند تا از خودشان بپرسند آیا این کار اصلا باید انجام شود یا نه و تنها بهانه شان کمبود زمان است . گویی هیچ وقت زمان کافی نیست . غافل از اینکه کیفیت را فدای زمان می کنند . و مهمتر از آن افرادی که در صنعت نرم افزار کار می کنند احساسات و اعتماد به نفس شان در گرو کیفیت محصولی است که تولید می کنندکار هوشمندانه در مقابل کار سختبا وجود صحبت هایی که در مورد کار هوشمندانه می شود ، در دنیای واقعیه ی مدیریت ، باب است که از افراد بیشتر و سخت تر کار بکش ، حتی به قیمت زندگی شخصی شان .مدیران همیشه مزیت های اضافه کار را در بوق و کرنا می کنند و اینکه یک نفر چه کارهای خارق العاده ای می تواند در آن زمان انجام دهد. اینگونه افراد سعی می کنند تا به زور، کار بیشتر از اعضای تیم بکشند از نظر این مدیران برنده کسی است که کار بیشتری را با پرداخت هزینه کمتر بدست آورد به همین خاطر ممکن است بر خلاف میل تان ، شما را برای کار تا دیر وقت نگه دارند و یا اضافه کارتان را در آخر ماه تایید نکنند . ابتدا یک تخمین از شما میگیرند و بعد مرتب در گوشتان می خوانند که چقدر تاریخ تحویل مهم است تا از شما بیشتر کار بکشند حتی اگر هیچ وقت از چیزی که شما توسعه دادید استفاده نکنند . شما را در مضیقه ی تاریخی که تخمین زده اید قرار می دهند تا از زندگیتان بزنید و کار را انجام دهید اما نمی دانند که وقتی شما از محل کار دور می شوید کارهای دیگه ای برای انجام دادن دارید. خانواده ی شما منتظرتان است ، باید کلاس زبان بروید، نیاز به مسافرت دارید و … اگر شما به عنوان مدیر ، فکر می کنید که اعضای تیم به چنین چیزهایی فکر نمی کنند ، تا تولید موفق یک پروژه نرم افزاری خیلی فاصله دارید .آن ها می دانند که کارهای مهمتری به جز انجام کار احمقانه شما هم هست و زمانیکه به این نقطه برسند همه چیز تمام می شوداضافه کار زاده ی ذهن ساده ی مدیر استبهره وری در اضافه کار زاده ذهن ساده ی مدیر است که همیشه با کسر کار همراه است وقتی که شما یک نفر را تا دیر وقت نگه می دارید شخص برای رسیدن به زندگی شخصی خود مجبور می شود تا فردا دیر به محل کار بیاید که اختلاف این هزینه ممکن است در کوتاه مدت به نفع شما باشد اما در بلند مدت یقینا نخواهد بود . هیچکس هفته ای ۴۰ ساعت بیشتر نمی تواند کار کند یا بهتر است بگوییم خلاقانه نمی تواند کار کند به کار گیری افراد بیشتر از این فقط باعث می شود افراد سریع تر کار کنند نه بهتر و در راستای سریع تر کار کردن آن ها باید کیفیت محصول را قربانی کنند . هر کسی هم که غیر از این باشد معتاد به کار استاز دست دادن یک فرد خوب مهم نیستافراد بخاطر علاقه شدید که به کار دارند ممکن است وقت و بی وقت کار کنند ، جمعه ها ، ۲ نصفه شب . این افراد را تحت فشار قرار دهید تا در یک زمان کوتاه نتیجه خوبی بگیرید اما زمانیکه این ایده ، که آن ها چیزهای مهمتری را در زندگی برای یک چیز کم اهمیت تر ( کار احمقانه شما ‌) قربانی کرده اند و شما ارزش کار آن ها را درک نکرده اید برایشان هضم شود ، باعث می شود که ناخواسته به دنبال انتقام باشند . این افراد به سراغ مدیر نمی روند تا همه چیز را شرح دهند تا در آینده تغییری ایجاد کنند آن ها خیلی شیک استعفا می دهند .اعتیاد به کار یه نوع مریضی است اما نه مثل اعتیاد به الکل مانند تب که همه افراد با درجه متفاوت به آن مبتلا هستند با این تفاوت که درمان ندارد اما راه حل ساده تر آن ، مدیریت است . اگر شما به این افراد فشار بیارید مهم نیست چقدر به آن ها نیاز دارید ، بالاخره از دستشان خواهید داد. در واقع ، شما گاهی اوقات باید از کار کردن زیاد این افراد جلوگیری کنیدقربانی کردن کیفیت محصولاگر شما ذره ای از مدیریت سر رشته داشته باشید حتما می دانید که در نرم افزار، افراد برای طراحی و تولید یک برنامه ، کارشان به دعوا هم می کشد در نتیجه احساسات در کار، درگیر است . پس برای چندمین بار از خودتان این سوال را بپرسید که این همه احساسات از کجا می آید ؟ در محیط کار خطرناک ترین احساس ، تهدید اعتماد به نفس است . ما به عنوان برنامه نویس اعتماد به نفس خود را به کیفیت محصول ربط می دهیم . یعنی مهم است محصولی که تولید می کنیم به بهترین نحو طراحی شود و فقط در اینصورت است که از کار لذت می بریم . مطمئنا برای شما هم پیش آمده چند بار یک کد قدیمی را بازنویسی کردید برای چی اینکار را انجام دادید. بنابراین هر قدمی که شما به عنوان مدیر بر میدارید تا کیفیت محصول را به خطر بیاندازید به هر دلیلی ( مثلا زمان ) ، یعنی احساسات اعضای تیم را به خطر انداخته اید .پرواز از تعالیدفعه بعد که کسی در مورد بهبود توسعه صحبت می کنه خوب گوش کنید که آیا در مورد جذب/رفتن نیروها در شرکت هم صحبتی می شود یا نه .معمولا شرکت ها برای افزایش کارایی دست به کارهایی مانندفشار به افراد برای کار در ساعات بیشترقربانی کردن کیفیتمی زنند . البته مدیران اینگونه فکر نمی کنند آن ها تصور می کنند که چالش جدیدی در تیم می آورند تا باعث رشد افراد شوند . اما افراد باتجربه می دانند که اینگونه نیست و منابع کافی برای انجام این کار را ندارند . اعضای تیم هیچ حق انتخابی برای اضافه کردن یک فرد جدید یا تغییر عملکرد سیستم ندارند . تنها چیزی که می توانند قربانی کنند ، کیفیت است . برخی از مدیران در جواب ممکن است بگویند که بازار به اینهمه کیفیت اهمیت نمی دهد.تولید یک محصول نرم افزاری نیاز به بینش و شجاعت در تغییر نگرش دارد . تنها مدیرانی که این مهم را دارند موفق خواهند شد .