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

اغلب شرکتهایی که به این مشکل برخورد میکنند یکی از این سه راه را در پیش میگیرند:
- برخی ریشه مشکل را در اهمالکاری تیم تولید و توسعه میدانند، بنابراین به روشهای مختلفی به تیم توسعه فشار وارد میکنند تا عقبماندگی زمانی محصول جبران شود. برخی شرکتها نیز که در پروژههای قبلی تجربه عقب ماندن از زمانبندی را داشتهاند از ابتدای پروژه فشار بر تیم توسعه را آغاز میکنند تا در مراحل بعدی و یا پایانی پروژه جلوی اتلاف زمان را بگیرند؛ کار کردن تحت فشار عصبی و اضافهکاریهای بسیار زیاد از مشخصات این راه حل است.
- در صورت وجود پشتیبانی مالی، برخی دیگر به دنبال افزایش افراد تیم به منظور بالا بردن ظرفیت انجام وظایف هستند و این تصور را دارند که با افزایش تعداد افراد تیم ظرفیت تولید بیشتر میشود؛ با این حال ظرفیت تولید تیم تغییر زیادی نمیکند و در عوض هزینهها بیشتر و بیشتر میشود!
- در این میان برخی از شرکتها هم فکر میکنند که مشکل از خود زمانبندی و محاسبه میزان سرعت تیم و حجم کارها است و برای رفع این مشکل راه حلهای مختلفی را امتحان میکنند (فرآیند سعی و خطا)، مثلا زمان پایان پروژه یا زمان تحویل محصول را بیشتر در نظر میگیرند و پیدرپی تحویل محصول به مشتری را به تعویق میاندازند به امید اینکه عاقبت توسعه محصول به پایان برسد! یا ترکیبی از راه حلهای گفته شده را در پیش میگیرند؛ با این حال مشکل همچنان تغییر زیادی نمیکند.
در ادامه مهمترین عوامل تاثیرگذار بر روی زمانبندی پروژههای توسعه نرمافزار و محصولات نرمافزاری را تشریح میکنم. هر یک از این عوامل خود میتواند زیر مجموعهای از دیگر عوامل را نیز شامل شود که سعی میکنم برخی از مهمترین آنها را بیان کنم.
1- عدم درک صحیح از مشکل
عدم درک صحیح از مشکل یا نیاز بازار و مشتری موجب طراحی راه حل و در نتیجه محصول اشتباه میشود که منتج به دوباره کاری و یا چند باره کاری میشود که در زمانبندی و Road Map برنامهریزی نشده است. حتی میتواند زیرساخت نرمافزار و Platform آنرا دچار تغییرات نماید و تیم را با محدودیت زمانی مواجه نماید. این مشکل بسیار آزاردهنده خواهد بود و موجب اتلاف زمان بسیار زیاد و در پارهای موارد حتی شکست خواهد شد.
2- عدم برنامهریزی صحیح
یکی از مشکلات برخی از پروژهها و محصولات عدم برنامهریزی صحیح است. با توجه به این مسئله که برنامهریزی خود یک تخصص است و بسیاری از پارامترها باید در آن لحاظ گردد، برخی شرکتها و سازمانها این امر مهم را سهل و آسان میپندارند و زمان بسیار کمی را برای تهیه آن صرف میکنند و بسیاری از مسائل تکنیکی و مدیریتی را در آن لحاظ نمیکنند. به همین دلیل زمانبندی حاصل شده از این کار بسیار ضعیف و شکننده میباشد و با چالشهای بسیاری مواجه خواهد شد.
یکی از نکاتی که معمولا در برنامهریزیها کمتر به آن توجه میشود نیازمندیهای غیرکارکردی یا Non functional Requirements NFR است. اینها نیازمندیهایی هستند که بر روی کیفیت پروژه و محصول و رضایت مشتریان و ذینفعان تاثیر مستنقم دارند. امنیت، کارایی، پایداری، قابلیت استفاده و … برخی از نیازمندیهای غیرکارکردی میباشند. (Non Functional Requirements در Wikipedia – برای مطالعه بیشتر)
در بسیاری از محصولات و پروژهها، تیم وظایف مربوط به این نیازمندیها را در Backlog و RoadMap ذکر نمیکنند و در برنامهریزی در نظر نمیگیرند. در برخی موارد دیده شده که حتی پیشبینی درستی نیز برای رفع مشکلات ناشی از این موارد ندارند. این مسئله موجب میشود که تیمها تنها زمانی که با مشکلات ناشی از آن برخورد میکنند به حل مشکل بپردازند. در این صورت زمان بسیار زیادی صرف کارها و نیازمندیهایی شده که در برنامه زمانبندی لحاظ نشده بودند.
3- عدم محاسبه ریسکها
بیتوجهی به ریسکهای تاثیرگذار بر روی پروژه و محصول یکی دیگر از عوامل چالشآفرین در پروژهها و محصولات نرمافزاری میباشد و معمولا موجب به وجود آمدن انحرافات بسیار زیاد در زمانبندی میشود. درباره مدیریت ریسک قبلا در چند پست مطالبی را منتشر کرده بودم که در ادامه میبینید.
فواید مدیریت ریسک – بخش اول
فواید مدیریت ریسک – بخش دوم
فواید مدیریت ریسک – بخش سوم
چند نکته در رابطه با مدیریت ریسک محصول
در صورت محاسبه و مدیریت ریسک های شناخته شده، گاهی اوقات ریسک های ناخواسته و غیر قابل پیشبینی در فرآیند توسعه محصول اتفاق میافتند که زمان را دچار چالش میکنند.
4- عوامل محیطی
برخی از محصولات به گونهای هستند که با توجه به بازار رقابتی آنها، امکان به وجود آمدن تغییر در نیازمندیها و یا تغییر اولویتهای آنها وجود دارد. از همین جهت این محصولات در طول فرآیند توسعه ممکن است بارها دچار تغییرات شوند که در نهایت موجب تغییر در زمانبندی نیز میگردد.
5- عدم مدیریت صحیح منابع انسانی
یکی دیگر از عوامل تاثیرگذار در انحراف از زمانبندی عدم مدیریت صحیح منابع انسانی است. جذب افراد کم تجربه یا فاقد صلاحیت لازم، استفاده از افراد در بیش از یک پروژه و محصول که میتواند موجب سردرگمی و اتلاف زمان گردد، عدم ارائه آموزش مناسب به افراد و تیمها، برخی از مسائل تاثیرگذار در این حوزه هستند که میتواند بر روی زمان پروژه و محصول تاثیر منفی بر جای بگذارد.
6- فرهنگ سازمانی ضعیف
بررسی تاثیر فرهنگ سازمانی بر روی سازمان های پروژه محور و یا محصول محور نیاز به یک پست مفصل دارد ولی با توجه به این نکته که به نظر من فرهنگ سازمانی هر شرکت و سازمان ستون رشد آن میباشد مشخص است که با وجود یک فرهنگ سازمانی ضعیف، تمام ساختار سازمان تحت تاثیر قرار خواهد گرفت. بنابراین حتی در صورتی که تیم از افراد فنی بسیار قوی تشکیل شده باشد فرهنگ سازمانی ضعیف موجب بوجود آمدن مشکلات بسیار زیاد خواهد شد و تاثیر آن در نهایت بر روی محصولات و پروژههای سازمان بازتاب خواهد یافت.
7- عدم بکارگیری صحیح متدهای توسعه
یکی دیگر از مسائل تاثیرگذار بر روی زمان و ایجاد انحرافات زمانبندی عدم بکارگیری صحیح متدهای توسعه نرمافزار است. این مسئله در بسیاری از شرکتها و سازمانها دیده میشود. در برخی موارد هم این مسئله آنقدر بزرگ است که از متد یا روش اجرایی فقط یک نام باقی مانده است. شرکتهای زیادی را میشناسم که اسکرام را پیادهسازی کردهاند ولی در پیادهسازی آن اصول اجایل نقض شده است!
این مسئله موجب میشود که فرآیندهای توسعه به درستی اجرا نشوند و مشکلات زیادی را ایجاد نمایند و در نهایت با تاثیرگذاری بر روی زمانبندی موجب ایجاد خسارت گردند. برخی از جزئیات مربوط به این مسئله به صورت زیر است:
عدم توجه به فرآیند تست نرمافزار و رفت و برگشت زیاد بین مرحله تست و توسعه
عدم استفاده از روشهای تست اتوماتیک
عدم مستندسازی صحیح نیازمندیها و توسعه استوریها
زمانبندی اشتباه وظایف و استوریها
عدم استفاده از توصیهها و Best Practice های متدهای مورد استفاده
و …
8- پیچیدگی محصول
گاهی اوقات محصول در حال توسعه دارای پیچیدگی بسیار زیاد است و این مسئله موجب میشود که انحراف زمانبندی در محصول افزایش یابد. به طور مثال تصور کنید که برای انجام یک کار و برآورده کردن یک نیازمندی در یک محصول نیاز است تا ارتباطات مختلفی بین محصولات مختلف سازمان برقرار شود و فرآیند پیچیدهای برای این کار طی گردد. در این صورت برای پیادهسازی این قابلیت باید تغییرات مختلفی در چند محصول به وجود آورد. افزایش چنین پیچیدگیهایی میتواند تخمین زمان مورد نیاز برای پیادهسازی را مشکل نماید و تعدد چنین Feature هایی در محصول باعث بالا رفتن انحراف از زمانبندی میشوند.
مسائلی که در این پست مطرح شد برخی از عوامل ریشهای انحراف از زمانبندی بودند. مطمئنا جزئیات مسائل مطرح شده و تاثیر آنها در انحراف از زمانبندی بسیار بیشتر از این است که در یک پست بگنجد. با این حال سعی میکنم در آینده برخی از مسائل جزئیتر را نیز مطرح کنم و درباره آنها بیشتر بنویسم.
0 پیام