سرمایه ای مهم | تخمین زمان در توسعه نرم افزار

زمان قطعا مهم ترین سرمایه ای است که همه ی ما به صورت یکسان از آن بهره مند هستیم و می توانیم آن را مدیریت کنیم هرچند که مدیریت این سرمایه با ارزش چندان ساده نیست و می تواند به راحتی از دستمان برود و هرگز توان بازگرداندن آن را نخواهیم داشت.مشکل کجاست ؟در طول 7 سال تجربه حرفه ای خودم در زمینه های مختلف نرم افزاری بارها از من درخواست شده که زمان مورد نیاز برای انجام کاری را اعلام کنم و به نوعی آن را تخمین بزنم ، قطعا پیش بینی زمان انجام یک تسک به مراتب راحت تر از تخمین زمان انجام کل یک پروژه است و از طرفی وقتی شما زمان انجام یک پروژه را پیش بینی میکنید مسئولیت سنگینی در قبال انجام آن پروژه در زمان مشخص شده داریدحالا مشکل اینجاست که خیلی از برنامه نویس ها و مدیران پروژه تخمین زمان را جدی نمی گیرند و پیش بینی زمانی را بصورت ذهنی و کاملا سطحی انجام می دهند و اکثرا در مراحل پایانی پروژه به مشکلات جدی میخورند.اما یک سوال ! آیا واقعا می توان زمان دقیقی برای انجام یک پروژه اعلام کرد ؟ باید بگم که در اکثر موارد خیر!! اما با رعایت یک سری اصول می توان زمان مناسب تری اعلام کرد و در یک بازه زمانی مناسب پروژه را با موفقیت به اتمام رساند. این مشکلاتی که گفتم تماما مشکلاتی هستند که خود من مدتی به عنوان یک برنامه نویس ، مدتی به عنوان یک فریلنسر و حالا نیز به عنوان مدیر فنی یک تیم نرم افزاری با آن ها درگیر هستم و تصمیم گرفتم به صورت جدی تری این موضوع را بررسی کنم تا به نتیجه مناسبی برسم ، چیزی که در ادامه می خوانید برخی از تجربیات و مطالعات بنده در رابطه با تخمین زمان انجام یک پروژه نرم افزاری می باشد.نتیجه یک نظرسنجی وقتی در حال تکمیل کردن اطلاعاتم در این زمینه بودم نظرسنجی در لینکدین پست کردم و نظر همکارانم رو در مورد نحوه تخمین زمان انجام پروژه پرسیدم:نظر سنجی لینکدین همینطور که می بینید 50 درصد دوستان و همچنین خودم تخمین زمان را به صورت ذهنی و با توجه به تجربه پروژه های گذشته انجام میدیم ، 24 درصد با حساب و بررسی دقیق این کار را انجام می دهند ، 11 درصد به بودجه ای که کارفرما برای پروژه درنظر گرفته و همچنین صبری که برای پایان پروژه دارد دقت می کنند و در نهایت 15 درصد دوستان برای انجام کل پروژه زمان نمی دهند و اینکار را ترجیحا برای قسمتی یا فازی از پروژه می کننداما سوال مهمی که اینجا پیش می آید این است که کدام دسته از دوستان در نهایت تخمین درست و دقیق تری نسبت به بقیه افراد دارند؟ دوستانی که حساب شده اینکار را می کنند ؟ یا کسانی که از روی تجربه زمان مورد نیاز را حدس می زنند؟بیایید تخمین زمان را در 5 قدم انجام بدیم:قدم اول: آماده سازیدر قدم اول ما باید اطلاعات کلی و توضیحاتی را از کارفرما یا شخص تصمیم گیرنده دریافت کنیم و بدانیم که میخواهیم روی چه چیزی کار کنیم و کلیات پروژه برای ما روشن شود. در نتیجه می توانیم بگوییم با 3 نوع پروژه طرف هستیم:پروژه ای که قبلا انجام داده ایم: اگر مشابه این پروژه را قبلا انجام داده باشیم کارمان خیلی آسان تر است و می توانیم با بررسی پروژه قبل ببینیم که در نهایت چه مقدار زمان صرف انجام پروژه مشابه کرده ایم، برای مثال فرض کنید شما بارها تجربه توسعه یک وبسایت فروشگاهی را داشته ای قطعا اگر پروژه جدید نیز یک وبسایت فروشگاهی معمولی باشد تخمین زمان آسان استپروژه ای که قسمتی از آن را قبلا انجام داده ایم: گاهی اوقات پروژه مورد نظر با مواردی که قبلا انجام داده اید کمی تا قسمتی متفاوت است، فرض کنید این پروژه یک وبسایت فروشگاهی است اما دارای قسمت های خاص می باشد که تاکنون تجربه ساخت آن را نداشته اید ، حال باید چه کرد؟؟پروژه ای جدید: چالش اصلی زمانی است که ما با یک پروژه کاملا جدید که تاکنون تجربه ساخت مشابه آن را به هیچ عنوان نداشته ایم طرف هستیم. در اینجا دیگر تجربه شما کمک چندانی نخواهد کرد...قدم دوم: بازه ی زمانی بدهیدبسیاری از کارفرما ها از همان اول کار زمان می خواهند، اول از همه باید آن ها را قانع کنید که نمی توان با یک بررسی کلی زمان دقیق انجام کامل پروژه را داد. اما شما می توانید با توجه به تجربه خودتون و دید کلی که به پروژه دارید زمانی حدودی و به صورت بازه ای بدهید.مثلا فرض کنید با توجه به تجربه ای که دارید فکر می کنید انجام پروژه ای همراه با یک تیم 5 نفره 3 ماه زمان می برد ، در قدم اول می توانید بازه ای بین 3 تا 4 ماه را اعلام کنید و حتما بگویید که این زمان حساب شده نیست و در قدم های بعدی دقیق تر خواهد شدطبق تحقیقی که می کردم بعضی از افراد از روش دوبل کردن استفاده می کنند، به این صورت که حداقل زمان مورد نیاز را حساب می کنند و دو برابر آن را اعلام می کنند یعنی مثلا نویسنده بلاگی هستند و نوشتن پست خاصی طبق تجربه آن ها 3 ساعت زمان می برد اما زمان مورد نیاز خودشان را در قدم اول 6 ساعت اعلام می کنند. این هم روشی هست اما من خودم ازش استفاده نمی کنم در بسیاری از موارد کارفرما سعی می کند شما را تحت فشار قرار دهد و بگوید که زمانی که گفتید زیاد است و باید آن را کمتر کنید. اگر سریع جا بزنید و حرف او را قبول کنید ممکن است خود کارفرما به تجربه شما شک کند و از طرفی هم اگر بدون منطق به تخمین زمان خود پافشاری کنید ممکن است در مواردی حتی پروژه را از دست بدهید. بهترین کار این است که دلایل منطقی خودتان را بازگو کنید و تاکید کنید که سعی خودتان را خواهید کرد که در زمان کمتری کار انجام شود و بگویید که در صورت تحت فشار قرار گرفتن ممکن است از کیفیت کار کاسته شود و شما دوست دارید کار با کیفیت انجام شود و این موضوع را هم خاطر نشان کنید که در صورت زودتر انجام شدن پروژه شما هم سود خواهید کرد و این یک رابطه برد-برد است.قدم سوم: فاز بندی کنید"بهترین روش حل کردن یک مسئله تقسیم کردن آن به مسائل کوچکتر است."وقتی یک پروژه آن قدر کوچک نیست که بخواهیم تمام آن را بررسی کنیم باید آن را به قسمت های کوچک تقسیم یا به اصطلاح فاز بندی کنیم. خود من این کار را تقریبا برای تمام پروژه ها انجام میدم مهمترین موضوع این هست که وقتی پروژه را به فازهای کوچک تقسیم می کنید باید در انتهای هر فاز قابل ارائه باشند و قسمتی از کاری که از شما خواسته شده انجام شود مثلا اگر شما در حال ساخت یک نرم افزار موبایل هستید که قرار هست مشکل خاصی را حل کند در هر فاز بتواند قسمتی از آن مشکل کلی را حل کند و به صورت جداگانه کارایی داشته باشد. اگر مثلا در انتهای فاز اول تنها تعدادی اسکرین شات از نرم افزار داشته باشید که به کارفرما ارائه دهید قطعا ارزشی زیادی نخواهد داشت.بعد از تقسیم کردن کل پروژه به فازهای کوچک حالا باید برای فاز اول زمان بدهید در اینجا بهترین روشی که می توانید زمان مورد نیاز را بدست بیاورید صحبت کردن با یک یا چند نفر (یا تمام اعضای تیم) هست، حتی اگر این افراد تجربه کافی برای ارائه پیشنهاد یا کمک کردن شما نداشته باشند همین کار می تواند برای شما نوعی بلند بلند فکر کردن باشد که خود من از این روش خیلی کمک می گیرمقدم چهارم: زمان اضافی برای مخرب های زمان در نظر بگیریدحالا فرض کنید با تمام کارهایی که انجام دادیم توانستیم زمان مناسبی برای پروژه تخمین بزنیم حالا باید نکته مهمی را در نظر بگیرید و آن هم توجه به مخرب های زمان است. مخرب های زمان می تواند هرچیزی که وقت شما یا تیم شما را بگیرد باشد، فرض کنید به انجام دادن کاری مثل تماشای چندین ویدیو در یوتیوب به صورت روزانه عادت دارید و این عادت روزانه از شما 2 ساعت زمان مفید می گیرد یا اینکه برنامه نویس هستید و ممکن است در طول پروژه به باگ های عجیبی برخورد کنید که وقت شما را حسابی بگیرد یا فرض کنید شما با یک تیم کار می کنید و هنگام پروژه یکی از اعضای تیم که کار دیگر اعضا به او وابسته است دچار کسالتی می شود که کار کل تیم را متوقف یا با کندی مواجه می کند و هزاران اتفاق ناخواسته ای که می تواند برای شما بیافتد. این نکته را در نظر بگیرید که نمی توانید به کارفرما بگویید که مثلا من وسط پروژه سرما خوردم و 1 هفته تاخیر توی پروژه ایجاد شد یا من هر روز 3 ساعت سریال نگاه می کنم بین کارهام که در نهایت باعث ایجاد تاخیر شد. اگر مثلا شما پروژه ای را 1 ماه کار در نظر گرفته اید نمی توانید بر این اساس زمان بدهید که مثلا 25 روز ماه را روزی 8 ساعت کار خواهید کرد چون هر اتفاقی ممکن است بیافتد و باعث تاخیر در انجام کارها شود پس حتما یک زمان مناسب و اضافه هم برای مخرب های زمان در نظر بگیرید.قدم پنجم: با استراتژی خودتان جلو بروید و زمان را نهایی کنیدهرکسی یا هر تیمی روش خودش را برای مدیریت پروژه دارد برخی افراد به روش های سنتی کار می کنند برخی به قوانین و اصول اجایل پایبند هستند و از روش های اسکرام برای مدیریت تیم و پروژشون استفاده می کنند.اگر از اصول و استراتژی خاصی استفاده می کنید در نهایت برای اعلام کردن زمان نهایی خودتون حتما استراتژی و متدی که استفاده می کنید را در نظر بگیرید ، بیشتر مطالعه و تحقیق کنید و در هر پروژه استراتژی خود را تکمیل تر نماییدپس از پایان پروژه تخمین زمانی خود را بررسی کنیدهمه ی ما اشتباه می کنیم و این موضوع هیچ ایرادی ندارد ممکن است حتی من در انتخاب موضوع برای این مقاله اشتباه کرده باشم یا حتی تجربه کافی برای نوشتنش را نداشته باشم اما برای من مهم انجام کار و خروجی نهایی است ولی قطعا نباید اشتباهات خودمان را مجددا تکرار کنیم، باید در پایان هرکاری از اشتباهاتی که انجام دادیم درس بگیریم و بهترین کار برای انجام آن یادداشت برداری همه چیزهایی که مشاهده می کنیم.سعی کنید تخمین زمانی که برای هر پروژه انجام دادید را دقیق بررسی کنید خود من برای هر پروژه در تلگرام یک کانال شخصی می سازم و تمام اشتباهات و موفقیت ها و کارهای درست و غلطی که انجام می دهم را در قالب عکس ، متن ، ویدیو یا فایل صوتی ذخیره می کنم تا در پایان پروژه یک جمع بندی داشته باشمبه قول استیو جابز:در نهایت ممنون بابت زمانی که برای مطالعه این متن گذاشتید، چیزی که خواندید تجربه های شخصی و مطالعات بنده بود که می تواند کاملا اشتباه و غلط باشد..اما امیدوارم اثری مثبت هرچند ناچیز گذاشته باشم.